From dcf9fad0a49aea711071626b169252dce7446e67 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 28 Feb 2025 14:01:20 +0100 Subject: [PATCH 01/31] sub_8061A38 --- asm/code_805D8C8.s | 1014 ------------------------------------------ src/code_805D8C8_1.c | 464 ++++++++++++++++++- 2 files changed, 463 insertions(+), 1015 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 89960c859..2e04f8762 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -5,1020 +5,6 @@ .text - - - - thumb_func_start sub_8061A38 -sub_8061A38: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x130 - adds r5, r0, 0 - lsls r1, 24 - lsrs r6, r1, 24 - add r4, sp, 0xB0 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [r4, 0x4] - movs r1, 0x2 - strh r1, [r4, 0x8] - strh r1, [r4, 0xA] - movs r2, 0x12 - strh r2, [r4, 0xC] - movs r0, 0xE - strh r0, [r4, 0xE] - strh r2, [r4, 0x10] - strh r1, [r4, 0x12] - ldr r0, _08061AA4 - str r0, [r4, 0x14] - movs r0, 0x3 - str r0, [r4, 0x1C] - str r0, [r4, 0x34] - str r0, [r4, 0x4C] - movs r0, 0 - str r0, [sp, 0x114] - mov r8, r0 - ldr r0, _08061AA8 - ldr r1, [r0] - ldrb r0, [r5, 0x4] - lsls r0, 2 - ldr r2, _08061AAC - adds r1, r2 - adds r1, r0 - ldr r1, [r1] - str r1, [sp, 0x110] - ldr r0, [r1, 0x70] - str r0, [sp, 0x11C] - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _08061AA0 - cmp r0, 0x47 - bne _08061AB0 -_08061AA0: - movs r0, 0x1 - b _08061AB2 - .align 2, 0 -_08061AA4: .4byte gUnknown_202F270 -_08061AA8: .4byte gDungeon -_08061AAC: .4byte 0x0001357c -_08061AB0: - movs r0, 0 -_08061AB2: - adds r1, r0, 0 - cmp r1, 0 - beq _08061ACE - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r0, [sp, 0x10] - str r0, [sp, 0x14] - str r0, [sp, 0x18] - movs r1, 0x1 - str r1, [sp, 0x118] - b _08061AFE -_08061ACE: - cmp r6, 0 - beq _08061AE6 - movs r0, 0x4 - str r0, [sp, 0x4] - str r1, [sp, 0x8] - str r1, [sp, 0xC] - str r1, [sp, 0x10] - str r1, [sp, 0x14] - str r1, [sp, 0x18] - movs r2, 0x1 - str r2, [sp, 0x118] - b _08061AFE -_08061AE6: - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0x5 - str r0, [sp, 0x10] - str r6, [sp, 0x14] - str r6, [sp, 0x18] - movs r0, 0x4 - str r0, [sp, 0x118] -_08061AFE: - add r2, sp, 0x5C - movs r0, 0 - strh r0, [r2] - mov r1, sp - adds r1, 0x72 - strh r0, [r1] - ldr r3, _08061BB4 - strh r0, [r3, 0x18] - subs r1, 0x56 - str r1, [sp, 0x12C] - add r2, sp, 0x80 - mov r9, r2 - adds r7, r3, 0 -_08061B18: - movs r0, 0 - mov r10, r0 - movs r1, 0 - str r1, [sp, 0x120] - movs r2, 0 - str r2, [sp, 0x124] - movs r0, 0x1 - str r0, [sp, 0x128] - ldr r4, _08061BB8 - ldr r1, _08061BBC - add r2, sp, 0x118 - ldrb r2, [r2] - strb r2, [r1] - add r0, sp, 0x114 - ldrb r0, [r0] - strb r0, [r1, 0x1] - movs r0, 0xA - strb r0, [r1, 0x2] - mov r2, r10 - strb r2, [r1, 0x3] - add r0, sp, 0xB0 - movs r1, 0x1 - bl sub_803ECB4 - ldr r0, [sp, 0x12C] - ldr r1, [sp, 0x110] - bl sub_8069844 - ldr r1, [sp, 0x114] - lsls r0, r1, 2 - mov r5, sp - adds r5, r0 - adds r5, 0x4 - ldr r0, [r5] - mov r2, r10 - str r2, [sp] - ldr r2, [sp, 0x12C] - add r3, sp, 0x80 - bl CreatePokemonInfoTabScreen - add r0, sp, 0x114 - ldrh r0, [r0] - strh r0, [r7, 0x1E] - add r1, sp, 0x118 - ldrh r1, [r1] - strh r1, [r7, 0x20] - movs r2, 0 - ldrsh r0, [r4, r2] - adds r0, 0xF - lsls r0, 3 - strh r0, [r7, 0xC] - movs r1, 0x2 - ldrsh r0, [r4, r1] - adds r0, 0x1 - lsls r0, 3 - subs r0, 0x2 - strh r0, [r7, 0xE] - mov r2, r10 - strh r2, [r7, 0x14] - strh r2, [r7, 0x4] - movs r0, 0x10 - strh r0, [r7, 0x6] - mov r0, r10 - str r0, [r7] - adds r0, r7, 0 - adds r0, 0x28 - bl sub_801317C - mov r1, r10 - strh r1, [r7, 0x18] - strh r1, [r7, 0x1A] - strh r1, [r7, 0x1C] - ldr r5, [r5] - cmp r5, 0x1 - bne _08061C10 - movs r2, 0 - add r1, sp, 0x8C - b _08061BC8 - .align 2, 0 -_08061BB4: .4byte gUnknown_202EE10 -_08061BB8: .4byte gUnknown_2027370 -_08061BBC: .4byte gUnknown_202F270 -_08061BC0: - adds r1, 0x4 - adds r2, 0x1 - cmp r2, 0x7 - bgt _08061BCE -_08061BC8: - ldr r0, [r1] - cmp r0, 0 - bne _08061BC0 -_08061BCE: - cmp r2, 0 - beq _08061C44 - movs r0, 0x1 - str r0, [sp, 0x124] - strh r2, [r7, 0x1A] - b _08061C38 -_08061BDA: - movs r0, 0x18 - ldrsh r2, [r7, r0] - lsls r1, r2, 2 - add r0, sp, 0x8C - adds r0, r1 - ldr r4, [r0] - mov r8, r2 - bl sub_8083D44 - adds r0, r4, 0 - bl sub_806285C - movs r1, 0 - str r1, [sp, 0x128] - b _080621E4 -_08061BF8: - movs r2, 0x18 - ldrsh r0, [r7, r2] - mov r2, r9 - adds r1, r2, r0 - ldrb r4, [r1] - mov r8, r0 - bl sub_8083D44 - adds r0, r4, 0 - bl sub_806262C - b _08062082 -_08061C10: - cmp r5, 0x4 - bne _08061C48 - movs r1, 0 - add r2, sp, 0x80 - ldrb r0, [r2] - cmp r0, 0 - beq _08061C2E - mov r2, r9 -_08061C20: - adds r1, 0x1 - cmp r1, 0x7 - bgt _08061C2E - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08061C20 -_08061C2E: - cmp r1, 0 - beq _08061C44 - movs r0, 0x1 - str r0, [sp, 0x120] - strh r1, [r7, 0x1A] -_08061C38: - movs r0, 0x8 - strh r0, [r7, 0x1C] - adds r0, r7, 0 - movs r1, 0 - bl sub_80137B0 -_08061C44: - mov r1, r8 - strh r1, [r7, 0x18] -_08061C48: - ldr r0, _08061CF8 - bl AddMenuCursorSprite - movs r0, 0 - ldr r1, _08061CFC - bl sub_8014140 - adds r4, r0, 0 - movs r5, 0 - movs r6, 0 - ldr r2, [sp, 0x120] - cmp r2, 0 - beq _08061C80 - mov r1, r9 - ldrb r0, [r1, 0x8] - cmp r0, 0 - beq _08061C70 - movs r5, 0x1 - bl sub_80623B0 -_08061C70: - add r1, sp, 0x5C - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08061C80 - movs r6, 0x1 - bl sub_8062230 -_08061C80: - ldr r2, [sp, 0x124] - cmp r2, 0 - beq _08061CA6 - mov r1, r9 - ldr r0, [r1, 0x2C] - cmp r0, 0 - beq _08061C94 - movs r5, 0x1 - bl sub_80623B0 -_08061C94: - movs r1, 0x72 - add r1, sp - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08061CA6 - movs r6, 0x1 - bl sub_8062230 -_08061CA6: - movs r0, 0x1C - bl sub_803E46C - ldr r0, _08061D00 - ldrb r0, [r0] - cmp r0, 0x1 - bls _08061D4E - bl sub_80048C8 - lsls r0, 24 - cmp r0, 0 - bne _08061D4E - ldr r0, _08061D04 - ldrh r1, [r0, 0x2] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08061CD6 - ldr r2, _08061CF8 - adds r0, r2, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - beq _08061D08 -_08061CD6: - movs r0, 0 - bl sub_8083CE0 - ldr r2, [sp, 0x114] - adds r2, 0x1 - str r2, [sp, 0x114] - lsls r0, r2, 2 - add r0, sp - adds r0, 0x4 - ldr r0, [r0] - cmp r0, 0 - beq _08061CF0 - b _080621E6 -_08061CF0: - movs r0, 0 - str r0, [sp, 0x114] - b _080621E6 - .align 2, 0 -_08061CF8: .4byte gUnknown_202EE10 -_08061CFC: .4byte gUnknown_8106B8C -_08061D00: .4byte gUnknown_202F270 -_08061D04: .4byte gRealInputs -_08061D08: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08061D1A - adds r0, r2, 0 - adds r0, 0x2C - ldrb r0, [r0] - cmp r0, 0 - beq _08061D4E -_08061D1A: - movs r0, 0 - bl sub_8083CE0 - ldr r1, [sp, 0x114] - subs r1, 0x1 - str r1, [sp, 0x114] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08061D30 - b _080621E6 -_08061D30: - movs r2, 0x5 - str r2, [sp, 0x114] - ldr r0, [sp, 0x18] - cmp r0, 0 - beq _08061D3C - b _080621E6 -_08061D3C: - add r1, sp, 0x18 -_08061D3E: - subs r1, 0x4 - ldr r0, [sp, 0x114] - subs r0, 0x1 - str r0, [sp, 0x114] - ldr r0, [r1] - cmp r0, 0 - beq _08061D3E - b _080621E6 -_08061D4E: - ldr r1, [sp, 0x124] - cmp r1, 0 - bne _08061D56 - b _08061E8A -_08061D56: - cmp r4, 0x2 - bne _08061D98 - cmp r5, 0 - beq _08061D98 - movs r0, 0 - bl sub_8083CE0 - mov r2, r9 - ldr r0, [r2, 0x2C] - cmp r0, 0 - beq _08061D8E - ldr r5, _08061D94 - movs r4, 0x5 -_08061D70: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08061D70 - movs r1, 0x72 - add r1, sp - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08061D8E: - movs r2, 0x7 - mov r8, r2 - b _080621E6 - .align 2, 0 -_08061D94: .4byte gIwramTextFunc1 -_08061D98: - ldr r0, _08061DDC - ldrh r1, [r0, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08061DF0 - movs r0, 0 - bl sub_8083CE0 - ldr r1, _08061DE0 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r0, 0x7 - bne _08061DE8 - mov r1, r9 - ldr r0, [r1, 0x2C] - cmp r0, 0 - bne _08061DBE - b _08061F04 -_08061DBE: - ldr r5, _08061DE4 - movs r4, 0x5 -_08061DC2: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08061DC2 - movs r2, 0x72 - add r2, sp - b _08061EFE - .align 2, 0 -_08061DDC: .4byte gRealInputs -_08061DE0: .4byte gUnknown_202EE10 -_08061DE4: .4byte gIwramTextFunc1 -_08061DE8: - adds r0, r1, 0 - movs r1, 0 - bl sub_80136E0 -_08061DF0: - cmp r4, 0x1 - bne _08061E28 - cmp r6, 0 - beq _08061E28 - movs r2, 0x72 - add r2, sp - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _08061E06 - b _08061F96 -_08061E06: - ldr r5, _08061E24 - movs r4, 0x5 -_08061E0A: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08061E0A - movs r1, 0x72 - add r1, sp - b _08061F90 - .align 2, 0 -_08061E24: .4byte gIwramTextFunc2 -_08061E28: - ldr r0, _08061E74 - ldrh r1, [r0, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08061E36 - b _08061FB0 -_08061E36: - movs r0, 0x1 - bl sub_8083CE0 - ldr r1, _08061E78 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _08061E80 - movs r2, 0x72 - add r2, sp - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _08061E54 - b _08061F96 -_08061E54: - ldr r5, _08061E7C - movs r4, 0x5 -_08061E58: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08061E58 - movs r1, 0x72 - add r1, sp - b _08061F90 - .align 2, 0 -_08061E74: .4byte gRealInputs -_08061E78: .4byte gUnknown_202EE10 -_08061E7C: .4byte gIwramTextFunc2 -_08061E80: - adds r0, r1, 0 - movs r1, 0 - bl sub_8013744 - b _08061FB0 -_08061E8A: - ldr r0, [sp, 0x120] - cmp r0, 0 - bne _08061E92 - b _08061FB0 -_08061E92: - cmp r4, 0x2 - bne _08061EC0 - cmp r5, 0 - beq _08061EC0 - mov r1, r9 - ldrb r0, [r1, 0x8] - cmp r0, 0 - beq _08061F04 - ldr r5, _08061EBC - movs r4, 0x5 -_08061EA6: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08061EA6 - b _08061EFC - .align 2, 0 -_08061EBC: .4byte gIwramTextFunc1 -_08061EC0: - ldr r0, _08061F0C - ldrh r1, [r0, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08061F20 - movs r0, 0x1 - bl sub_8083CE0 - ldr r1, _08061F10 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r0, 0x7 - bne _08061F18 - mov r1, r9 - ldrb r0, [r1, 0x8] - cmp r0, 0 - beq _08061F04 - ldr r5, _08061F14 - movs r4, 0x5 -_08061EE8: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08061EE8 -_08061EFC: - add r2, sp, 0x5C -_08061EFE: - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] -_08061F04: - movs r0, 0x7 - mov r8, r0 - b _080621E6 - .align 2, 0 -_08061F0C: .4byte gRealInputs -_08061F10: .4byte gUnknown_202EE10 -_08061F14: .4byte gIwramTextFunc1 -_08061F18: - adds r0, r1, 0 - movs r1, 0 - bl sub_80136E0 -_08061F20: - cmp r4, 0x1 - bne _08061F50 - cmp r6, 0 - beq _08061F50 - add r2, sp, 0x5C - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _08061F96 - ldr r5, _08061F4C - movs r4, 0x5 -_08061F36: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08061F36 - b _08061F8E - .align 2, 0 -_08061F4C: .4byte gIwramTextFunc2 -_08061F50: - ldr r0, _08061F9C - ldrh r1, [r0, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08061FB0 - movs r0, 0x1 - bl sub_8083CE0 - ldr r1, _08061FA0 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _08061FA8 - add r2, sp, 0x5C - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _08061F96 - ldr r5, _08061FA4 - movs r4, 0x5 -_08061F7A: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x1C - bl sub_803E46C - subs r4, 0x1 - cmp r4, 0 - bge _08061F7A -_08061F8E: - add r1, sp, 0x5C -_08061F90: - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] -_08061F96: - movs r2, 0 - mov r8, r2 - b _080621E6 - .align 2, 0 -_08061F9C: .4byte gRealInputs -_08061FA0: .4byte gUnknown_202EE10 -_08061FA4: .4byte gIwramTextFunc2 -_08061FA8: - adds r0, r1, 0 - movs r1, 0 - bl sub_8013744 -_08061FB0: - bl sub_80048C8 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _08061FBE - b _08061C48 -_08061FBE: - ldr r5, _0806208C - ldrh r1, [r5, 0x2] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08061FDA - ldr r0, [sp, 0x124] - cmp r0, 0 - beq _08061FD2 - b _08061BDA -_08061FD2: - ldr r2, [sp, 0x120] - cmp r2, 0 - beq _08061FDA - b _08061BF8 -_08061FDA: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08061FF0 - ldr r2, _08062090 - adds r0, r2, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - bne _08061FF0 - b _080621CA -_08061FF0: - ldr r0, [sp, 0x124] - cmp r0, 0 - beq _080620BC - movs r1, 0x18 - ldrsh r2, [r7, r1] - lsls r1, r2, 2 - add r0, sp, 0x8C - adds r0, r1 - ldr r6, [r0] - mov r8, r2 - bl sub_8062D68 - ldr r0, _08062094 - str r4, [r0] - bl sub_8083D08 - movs r0, 0xC - movs r1, 0 - bl sub_8044F5C - add r0, sp, 0xB0 - movs r1, 0x16 - bl sub_805FC30 - ldr r4, _08062090 - movs r2, 0x2A - adds r2, r4 - mov r10, r2 -_08062028: - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x1C - bl sub_803E46C - ldrh r1, [r5, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806204C - movs r0, 0x1 - bl sub_8083CE0 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_80136E0 -_0806204C: - ldrh r1, [r5, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08062064 - movs r0, 0x1 - bl sub_8083CE0 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8013744 -_08062064: - ldrh r1, [r5, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08062078 - adds r0, r4, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08062098 -_08062078: - bl sub_8083D08 - adds r0, r6, 0 - bl sub_806285C -_08062082: - movs r0, 0 - str r0, [sp, 0x128] - mov r10, r0 - b _080621E6 - .align 2, 0 -_0806208C: .4byte gRealInputs -_08062090: .4byte gUnknown_202EE10 -_08062094: .4byte gUnknown_202EE6C -_08062098: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080620A8 - mov r1, r10 - ldrb r0, [r1] - cmp r0, 0 - beq _08062028 -_080620A8: - bl sub_8083D30 - b _080621BA -_080620AE: - bl sub_8083D08 - movs r1, 0x18 - ldrsh r0, [r7, r1] - cmp r0, 0 - bne _080621B0 - b _08062198 -_080620BC: - ldr r2, [sp, 0x120] - cmp r2, 0 - bne _080620C4 - b _080621C0 -_080620C4: - movs r0, 0x18 - ldrsh r1, [r7, r0] - mov r2, r9 - adds r0, r2, r1 - ldrb r6, [r0] - mov r8, r1 - bl sub_8062D68 - ldr r0, _08062190 - ldr r1, [sp, 0x124] - str r1, [r0] - bl sub_8083D08 - movs r0, 0x28 - movs r1, 0 - bl sub_8044F5C - movs r0, 0xC - movs r1, 0 - bl sub_8044F5C - ldr r0, [sp, 0x110] - movs r1, 0x1 - bl CheckVariousStatuses2 - lsls r0, 24 - cmp r0, 0 - beq _08062102 - movs r0, 0x28 - bl sub_8044FF0 -_08062102: - add r0, sp, 0xB0 - movs r1, 0x16 - bl sub_805FC30 - ldr r4, _08062194 - movs r2, 0x2A - adds r2, r4 - mov r10, r2 -_08062112: - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x1C - bl sub_803E46C - ldrh r1, [r5, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08062136 - movs r0, 0x1 - bl sub_8083CE0 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_80136E0 -_08062136: - ldrh r1, [r5, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0806214E - movs r0, 0x1 - bl sub_8083CE0 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8013744 -_0806214E: - ldrh r1, [r5, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08062162 - adds r0, r4, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08062174 -_08062162: - movs r1, 0x18 - ldrsh r0, [r4, r1] - bl sub_8044F3C - lsls r0, 24 - cmp r0, 0 - bne _080620AE - bl sub_8083D30 -_08062174: - ldrh r1, [r5, 0x2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08062186 - mov r2, r10 - ldrb r0, [r2] - cmp r0, 0 - beq _08062112 -_08062186: - bl sub_8083D30 - movs r0, 0 - mov r10, r0 - b _080621E6 - .align 2, 0 -_08062190: .4byte gUnknown_202EE6C -_08062194: .4byte gUnknown_202EE10 -_08062198: - ldr r0, _080621AC - bl PlaySoundEffect - ldr r0, [sp, 0x11C] - adds r0, 0x8C - adds r1, r6, 0 - bl ToggleIQSkill - b _080621BA - .align 2, 0 -_080621AC: .4byte 0x00000133 -_080621B0: - adds r0, r6, 0 - bl sub_806262C - movs r1, 0 - str r1, [sp, 0x128] -_080621BA: - movs r2, 0 - mov r10, r2 - b _080621E6 -_080621C0: - bl sub_8083D08 - movs r0, 0x1 - mov r10, r0 - b _080621E6 -_080621CA: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080621DE - adds r0, r2, 0 - adds r0, 0x2A - ldrb r0, [r0] - cmp r0, 0 - bne _080621DE - b _08061C48 -_080621DE: - bl sub_8083D30 - movs r1, 0x1 -_080621E4: - mov r10, r1 -_080621E6: - ldr r2, [sp, 0x128] - cmp r2, 0 - beq _08062204 - ldr r0, [sp, 0x120] - cmp r0, 0 - bne _080621F8 - ldr r1, [sp, 0x124] - cmp r1, 0 - beq _080621FE -_080621F8: - ldr r0, _0806222C - bl AddMenuCursorSprite -_080621FE: - movs r0, 0x1C - bl sub_803E46C -_08062204: - mov r2, r10 - cmp r2, 0 - bne _0806220C - b _08061B18 -_0806220C: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - ldr r0, [sp, 0x110] - bl LoadIQSkills - add sp, 0x130 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806222C: .4byte gUnknown_202EE10 - thumb_func_end sub_8061A38 - thumb_func_start sub_8062230 sub_8062230: push {r4-r6,lr} diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index b0228e120..8438e7dc7 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -108,7 +108,7 @@ void sub_80637E8(ActionContainer *a0); void sub_8063B54(ActionContainer *a0); void sub_8063BB4(ActionContainer *a0); void sub_806752C(ActionContainer *a0); -bool8 sub_8061A38(ActionContainer *a0, bool8 a1); +void sub_8061A38(ActionContainer *a0, bool8 a1); void sub_8063A70(ActionContainer *a0, bool8 a1); void sub_8063CF0(ActionContainer *a0, bool8 a1); void sub_8067768(ActionContainer *a0); @@ -3098,3 +3098,465 @@ void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId) } EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better file and figure out the array count. Apparently it's only written to. + +extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target); +extern u32 sub_8014140(s32 a0, const void *a1); +extern void sub_806285C(s32 a0); +extern void sub_806262C(s32 a0); + +extern const u8 gUnknown_8106B8C[]; + +void sub_8061A38(ActionContainer *a0, bool8 a1) +{ + s32 spArr[6]; + struct unkStruct_808FF20 unkMonStruct; + struct UnkInfoTabStruct unkInfoTabStruct; + const s32 winX = 2; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {winX, 2}, + .width = 18, + .height = 14, + .unk10 = 18, + .unk12 = 2, + .unk14 = &gUnknown_202F270, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + register s32 r8; + Entity *entity; + s32 var_3C; + s32 var_38; + EntityInfo *entityInfo; + + var_3C = 0; + r8 = 0; + entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + entityInfo = GetEntInfo(entity); + + if (IsExperienceLocked(entityInfo->joinedAt.id)) { + spArr[0] = 1; + spArr[1] = 0; + spArr[2] = 0; + spArr[3] = 0; + spArr[4] = 0; + spArr[5] = 0; + var_38 = 1; + } + else if (a1) { + spArr[0] = 4; + spArr[1] = 0; + spArr[2] = 0; + spArr[3] = 0; + spArr[4] = 0; + spArr[5] = 0; + var_38 = 1; + } + else { + spArr[0] = 2; + spArr[1] = 1; + spArr[2] = 3; + spArr[3] = 5; + spArr[4] = 0; + spArr[5] = 0; + var_38 = 4; + } + + unkMonStruct.unk40 = 0; + unkMonStruct.unk56 = 0; + gUnknown_202EE10.menuIndex = 0; + + while (1) { + bool8 loopBreak = FALSE; + s32 var_30 = 0; + s32 var_2C = 0; + s32 var_28 = 1; + UnkTextStruct1 *unkTxtStr1Ptr = &gUnknown_2027370[0]; + + gUnknown_202F270.f0 = var_38; + gUnknown_202F270.f1 = var_3C; + gUnknown_202F270.f2 = 10; + gUnknown_202F270.f3 = 0; + sub_803ECB4(&windows, TRUE); + sub_8069844(&unkMonStruct, entity); + CreatePokemonInfoTabScreen(spArr[var_3C], var_3C, &unkMonStruct, &unkInfoTabStruct, 0); + gUnknown_202EE10.unk1E = var_3C; + gUnknown_202EE10.unk20 = var_38; + gUnknown_202EE10.unkC = (unkTxtStr1Ptr->unk0 + 15) * 8; + gUnknown_202EE10.unkE = ((unkTxtStr1Ptr->unk2 + 1) * 8) - 2; + gUnknown_202EE10.unk14.x = 0; + gUnknown_202EE10.unk4 = 0; + gUnknown_202EE10.firstEntryY = 16; + gUnknown_202EE10.unk0 = 0; + sub_801317C(&gUnknown_202EE10.unk28); + gUnknown_202EE10.menuIndex = 0; + gUnknown_202EE10.unk1A = 0; + gUnknown_202EE10.unk1C = 0; + + if (spArr[var_3C] == 1) { + s32 i; + + for (i = 0; i < 8; i++) { + if (unkInfoTabStruct.unkC[i] == 0) { + break; + } + } + + if (i != 0) { + var_2C = 1; + gUnknown_202EE10.unk1A = i; + gUnknown_202EE10.unk1C = 8; + sub_80137B0(&gUnknown_202EE10, 0); + } + gUnknown_202EE10.menuIndex = r8; + } + else if (spArr[var_3C] == 4) { + s32 i; + + for (i = 0; i < 8; i++) { + if (unkInfoTabStruct.unk0[i] == 0) { + break; + } + } + + if (i != 0) { + var_30 = 1; + gUnknown_202EE10.unk1A = i; + gUnknown_202EE10.unk1C = 8; + sub_80137B0(&gUnknown_202EE10, 0); + } + gUnknown_202EE10.menuIndex = r8; + } + + while (1) { + s32 unkVar; + bool8 r5, r6; + + AddMenuCursorSprite(&gUnknown_202EE10); + unkVar = sub_8014140(0, gUnknown_8106B8C); + r5 = FALSE; + r6 = FALSE; + if (var_30) { + if (unkInfoTabStruct.unk0[8] != 0) { + r5 = TRUE; + sub_80623B0(); + } + if (unkMonStruct.unk40 != 0) { + r6 = TRUE; + sub_8062230(); + } + } + if (var_2C) { + if (unkInfoTabStruct.unkC[8] != 0) { + r5 = TRUE; + sub_80623B0(); + } + if (unkMonStruct.unk56 != 0) { + r6 = TRUE; + sub_8062230(); + } + } + + sub_803E46C(0x1C); + if (gUnknown_202F270.f0 > 1 && !sub_80048C8()) { + if ((gRealInputs.pressed & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { + sub_8083CE0(0); + var_3C++; + if (spArr[var_3C] == 0) { + var_3C = 0; + } + break; + } + if ((gRealInputs.pressed & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { + sub_8083CE0(0); + var_3C--; + if (var_3C == -1) { + var_3C = 5; + while (spArr[var_3C] == 0) { + var_3C--; + } + } + break; + } + } + + if (var_2C) { + if (unkVar == 2 && r5) { + sub_8083CE0(0); + if (unkInfoTabStruct.unkC[8] != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + sub_803E46C(28); + } + unkMonStruct.unk56++; + } + r8 = 7; + break; + } + if (gRealInputs.repeated & DPAD_DOWN) { + sub_8083CE0(0); + if (gUnknown_202EE10.menuIndex == 7) { + if (unkInfoTabStruct.unkC[8] != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + sub_803E46C(28); + } + unkMonStruct.unk56++; + } + r8 = 7; + break; + } + else { + sub_80136E0(&gUnknown_202EE10, 0); + } + } + + if (unkVar == 1 && r6) { + if (unkMonStruct.unk56 != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + sub_803E46C(28); + } + unkMonStruct.unk56--; + } + r8 = 0; + break; + } + if (gRealInputs.repeated & DPAD_UP) { + sub_8083CE0(1); + if (gUnknown_202EE10.menuIndex == 0) { + if (unkMonStruct.unk56 != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + sub_803E46C(28); + } + unkMonStruct.unk56--; + } + r8 = 0; + break; + } + else { + sub_8013744(&gUnknown_202EE10, 0); + } + } + } + else if (var_30) { + if (unkVar == 2 && r5) { + if (unkInfoTabStruct.unk0[8] != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + sub_803E46C(28); + } + unkMonStruct.unk40++; + } + r8 = 7; + break; + } + if (gRealInputs.repeated & DPAD_DOWN) { + sub_8083CE0(1); + if (gUnknown_202EE10.menuIndex == 7) { + if (unkInfoTabStruct.unk0[8] != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + sub_803E46C(28); + } + unkMonStruct.unk40++; + } + r8 = 7; + break; + } + else { + sub_80136E0(&gUnknown_202EE10, 0); + } + } + + if (unkVar == 1 && r6) { + if (unkMonStruct.unk40 != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + sub_803E46C(28); + } + unkMonStruct.unk40--; + } + r8 = 0; + break; + } + if (gRealInputs.repeated & DPAD_UP) { + sub_8083CE0(1); + if (gUnknown_202EE10.menuIndex == 0) { + if (unkMonStruct.unk40 != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + sub_803E46C(28); + } + unkMonStruct.unk40--; + } + r8 = 0; + break; + } + else { + sub_8013744(&gUnknown_202EE10, 0); + } + } + } + + if (sub_80048C8()) + continue; + + if (gRealInputs.pressed & START_BUTTON) { + if (var_2C) { + s32 var = unkInfoTabStruct.unkC[gUnknown_202EE10.menuIndex]; + + r8 = gUnknown_202EE10.menuIndex; + sub_8083D44(); + sub_806285C(var); + var_28 = 0; + loopBreak = FALSE; + break; + } + else if (var_30) { + s32 var = unkInfoTabStruct.unk0[gUnknown_202EE10.menuIndex]; + + r8 = gUnknown_202EE10.menuIndex; + sub_8083D44(); + sub_806262C(var); + var_28 = 0; + loopBreak = FALSE; + break; + } + } + + if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if (var_2C) { + s32 var = unkInfoTabStruct.unkC[gUnknown_202EE10.menuIndex]; + + r8 = gUnknown_202EE10.menuIndex; + sub_8062D68(); + gUnknown_202EE6C = 0; + sub_8083D08(); + sub_8044F5C(0xC, 0); + sub_805FC30(&windows, 0x16); + while (1) { + AddMenuCursorSprite(&gUnknown_202EE10); + sub_803E46C(0x1C); + if (gRealInputs.repeated & DPAD_DOWN) { + sub_8083CE0(1); + sub_80136E0(&gUnknown_202EE10, 1); + } + if (gRealInputs.repeated & DPAD_UP) { + sub_8083CE0(1); + sub_8013744(&gUnknown_202EE10, 1); + } + + if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + sub_8083D08(); + sub_806285C(var); + var_28 = 0; + loopBreak = FALSE; + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + sub_8083D30(); + loopBreak = FALSE; + break; + } + } + } + else if (var_30) { + bool8 aPress = FALSE; + s32 var = unkInfoTabStruct.unk0[gUnknown_202EE10.menuIndex]; + + r8 = gUnknown_202EE10.menuIndex; + sub_8062D68(); + gUnknown_202EE6C = var_2C; + sub_8083D08(); + sub_8044F5C(0x28, 0); + sub_8044F5C(0xC, 0); + if (CheckVariousStatuses2(entity, TRUE)) { + sub_8044FF0(0x28); + } + sub_805FC30(&windows, 0x16); + while (1) { + AddMenuCursorSprite(&gUnknown_202EE10); + sub_803E46C(0x1C); + if (gRealInputs.repeated & DPAD_DOWN) { + sub_8083CE0(1); + sub_80136E0(&gUnknown_202EE10, 1); + } + if (gRealInputs.repeated & DPAD_UP) { + sub_8083CE0(1); + sub_8013744(&gUnknown_202EE10, 1); + } + + if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { + sub_8083D08(); + aPress = TRUE; + break; + } + sub_8083D30(); + } + if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + sub_8083D30(); + loopBreak = FALSE; + aPress = FALSE; + break; + } + } + + if (aPress) { + if (gUnknown_202EE10.menuIndex == 0) { + PlaySoundEffect(0x133); + ToggleIQSkill(&entityInfo->IQSkillMenuFlags, var); + } + else { + sub_806262C(var); + var_28 = 0; + } + loopBreak = FALSE; + break; + } + } + else { + sub_8083D08(); + loopBreak = TRUE; + } + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + sub_8083D30(); + loopBreak = TRUE; + break; + } + } + + if (var_28) { + if (var_30 != 0 || var_2C != 0) { + AddMenuCursorSprite(&gUnknown_202EE10); + } + sub_803E46C(0x1C); + } + + if (loopBreak) { + break; + } + } + + sub_803EAF0(0, NULL); + LoadIQSkills(entity); +} + +// From ee9401e833bc33d3219928392cc4ecdb6ea967bf Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 28 Feb 2025 20:20:00 +0100 Subject: [PATCH 02/31] sub_8062748 --- asm/code_805D8C8.s | 756 ----------------------------------- include/structs/sprite_oam.h | 10 - src/code_805D8C8.c | 10 +- src/code_805D8C8_1.c | 218 +++++++++- src/menu_input.c | 12 +- 5 files changed, 231 insertions(+), 775 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 2e04f8762..706291640 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -5,764 +5,8 @@ .text - thumb_func_start sub_8062230 -sub_8062230: - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x8 - ldr r0, _08062380 - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08062248 - b _08062372 -_08062248: - ldr r0, _08062384 - mov r9, r0 - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - mov r0, sp - ldrh r0, [r0] - ldr r1, _08062388 - ands r1, r0 - ldr r3, _0806238C - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - mov r1, sp - ldrh r1, [r1] - adds r2, r3, 0 - ands r2, r0 - orrs r2, r1 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08062390 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r6, _08062394 - mov r8, r6 - mov r0, r8 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08062398 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _0806239C - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - movs r4, 0x80 - lsls r4, 7 - mov r0, sp - ldrh r1, [r0] - ldr r6, _080623A0 - adds r0, r6, 0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - orrs r4, r0 - ands r3, r1 - orrs r3, r4 - str r3, [sp] - movs r1, 0x80 - lsls r1, 6 - mov r5, sp - ldrh r0, [r5, 0x2] - ldr r2, _080623A4 - ands r2, r0 - orrs r2, r1 - ands r2, r6 - movs r3, 0xFC - lsls r3, 2 - ldrh r1, [r5, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r3 - mov r1, r8 - ands r0, r1 - movs r3, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _080623A8 - ands r0, r4 - orrs r0, r1 - strh r0, [r5, 0x4] - mov r6, r9 - movs r1, 0x2 - ldrsh r0, [r6, r1] - lsls r0, 3 - adds r0, 0x8 - ands r0, r4 - lsls r0, 4 - ldrh r1, [r5, 0x6] - ands r3, r1 - orrs r3, r0 - strh r3, [r5, 0x6] - movs r3, 0 - ldrsh r0, [r6, r3] - lsls r0, 3 - adds r0, 0x40 - ldr r1, _080623AC - ands r0, r1 - movs r1, 0xFE - lsls r1, 8 - ands r2, r1 - orrs r2, r0 - strh r2, [r5, 0x2] - movs r1, 0x80 - lsls r1, 1 - mov r0, sp - movs r2, 0 - movs r3, 0 - bl AddSprite -_08062372: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08062380: .4byte gUnknown_202EDCC -_08062384: .4byte gUnknown_2027370 -_08062388: .4byte 0x0000feff -_0806238C: .4byte 0xffff0000 -_08062390: .4byte 0x0000fdff -_08062394: .4byte 0x0000f3ff -_08062398: .4byte 0x0000efff -_0806239C: .4byte 0x0000dfff -_080623A0: .4byte 0x00003fff -_080623A4: .4byte 0x0000c1ff -_080623A8: .4byte 0x00000fff -_080623AC: .4byte 0x000001ff - thumb_func_end sub_8062230 - thumb_func_start sub_80623B0 -sub_80623B0: - push {r4-r6,lr} - sub sp, 0x8 - ldr r0, _080624D4 - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - bne _080623C2 - b _080624CA -_080623C2: - ldr r6, _080624D8 - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - mov r0, sp - ldrh r0, [r0] - ldr r1, _080624DC - ands r1, r0 - ldr r3, _080624E0 - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - mov r1, sp - ldrh r1, [r1] - adds r2, r3, 0 - ands r2, r0 - orrs r2, r1 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080624E4 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r5, _080624E8 - adds r0, r5, 0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080624EC - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080624F0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - movs r4, 0x80 - lsls r4, 7 - mov r0, sp - ldrh r1, [r0] - ldr r0, _080624F4 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - orrs r4, r0 - ands r3, r1 - orrs r3, r4 - str r3, [sp] - mov r3, sp - movs r2, 0xFC - lsls r2, 2 - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r5 - movs r2, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _080624F8 - ands r0, r4 - orrs r0, r1 - strh r0, [r3, 0x4] - movs r1, 0x2 - ldrsh r0, [r6, r1] - lsls r0, 3 - adds r0, 0x70 - ands r0, r4 - lsls r0, 4 - ldrh r1, [r3, 0x6] - ands r2, r1 - orrs r2, r0 - strh r2, [r3, 0x6] - movs r1, 0 - ldrsh r0, [r6, r1] - lsls r0, 3 - adds r0, 0x40 - ldr r1, _080624FC - ands r0, r1 - strh r0, [r3, 0x2] - subs r1, 0xFF - mov r0, sp - movs r2, 0 - movs r3, 0 - bl AddSprite -_080624CA: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080624D4: .4byte gUnknown_202EDCC -_080624D8: .4byte gUnknown_2027370 -_080624DC: .4byte 0x0000feff -_080624E0: .4byte 0xffff0000 -_080624E4: .4byte 0x0000fdff -_080624E8: .4byte 0x0000f3ff -_080624EC: .4byte 0x0000efff -_080624F0: .4byte 0x0000dfff -_080624F4: .4byte 0x00003fff -_080624F8: .4byte 0x00000fff -_080624FC: .4byte 0x000001ff - thumb_func_end sub_80623B0 - thumb_func_start sub_8062500 -sub_8062500: - push {r4,r5,lr} - ldr r0, _0806257C - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08062574 - ldr r5, _08062580 - ldr r0, _08062584 - ldrh r2, [r0] - ldr r1, _08062588 - ands r1, r2 - ldr r2, _0806258C - ands r1, r2 - ldr r4, _08062590 - ands r1, r4 - ldr r2, _08062594 - ands r1, r2 - ldr r2, _08062598 - ands r1, r2 - movs r3, 0x80 - lsls r3, 7 - ldr r2, _0806259C - ands r1, r2 - orrs r1, r3 - strh r1, [r0] - movs r3, 0xFC - lsls r3, 2 - ldrh r2, [r0, 0x4] - movs r1, 0xFC - lsls r1, 8 - ands r1, r2 - orrs r1, r3 - ands r1, r4 - movs r3, 0xF - movs r2, 0xF0 - lsls r2, 8 - ldr r4, _080625A0 - ands r1, r4 - orrs r1, r2 - strh r1, [r0, 0x4] - movs r2, 0x2 - ldrsh r1, [r5, r2] - lsls r1, 3 - adds r1, 0x60 - ands r1, r4 - lsls r1, 4 - ldrh r2, [r0, 0x6] - ands r3, r2 - orrs r3, r1 - strh r3, [r0, 0x6] - movs r1, 0x70 - strh r1, [r0, 0x2] - adds r1, 0x90 - movs r2, 0 - movs r3, 0 - bl AddSprite -_08062574: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806257C: .4byte gUnknown_202EDCC -_08062580: .4byte gUnknown_2027370 -_08062584: .4byte gUnknown_202F268 -_08062588: .4byte 0x0000feff -_0806258C: .4byte 0x0000fdff -_08062590: .4byte 0x0000f3ff -_08062594: .4byte 0x0000efff -_08062598: .4byte 0x0000dfff -_0806259C: .4byte 0x00003fff -_080625A0: .4byte 0x00000fff - thumb_func_end sub_8062500 - - thumb_func_start sub_80625A4 -sub_80625A4: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - adds r7, r0, 0 - mov r9, r1 - mov r0, sp - bl sub_801317C - movs r4, 0 - cmp r4, r7 - bge _0806261A - subs r0, r7, 0x1 - mov r8, r0 - mov r5, sp -_080625C4: - lsls r0, r4, 2 - add r0, r9 - ldr r0, [r0] - mov r1, sp - bl sub_80639E4 - adds r6, r4, 0x1 - b _080625E8 -_080625D4: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080625E2 - ldrb r0, [r5, 0x2] - cmp r0, 0 - beq _080625E8 -_080625E2: - bl sub_8083D30 - b _08062614 -_080625E8: - cmp r4, r8 - bge _080625F0 - bl sub_8062500 -_080625F0: - mov r0, sp - movs r1, 0 - bl nullsub_34 - movs r0, 0x16 - bl sub_803E46C - ldr r0, _08062628 - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08062610 - ldrb r0, [r5, 0x1] - cmp r0, 0 - beq _080625D4 -_08062610: - bl sub_8083D08 -_08062614: - adds r4, r6, 0 - cmp r4, r7 - blt _080625C4 -_0806261A: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08062628: .4byte gRealInputs - thumb_func_end sub_80625A4 - - thumb_func_start sub_806262C -sub_806262C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x88 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - mov r0, sp - adds r0, 0x70 - str r0, [sp, 0x84] - add r0, sp, 0x10 - mov r8, r0 - movs r0, 0 - mov r9, r0 - add r7, sp, 0x4 - add r6, sp, 0x80 -_08062650: - add r0, sp, 0x4 - bl sub_801317C - mov r0, r8 - bl sub_80140B4 - mov r0, r8 - str r6, [r0, 0x14] - movs r1, 0x1 - add r0, sp, 0x80 - strb r1, [r0] - mov r0, r9 - strb r0, [r6, 0x1] - movs r0, 0x10 - strb r0, [r6, 0x2] - mov r0, r9 - strb r0, [r6, 0x3] - mov r0, r8 - bl sub_803ECB4 - movs r0, 0 - bl sub_80073B8 - mov r0, r10 - bl GetIQSkillName - adds r1, r0, 0 - ldr r0, _080626CC - bl strcpy - ldr r0, _080626D0 - ldr r2, [r0] - mov r0, r9 - str r0, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - mov r0, r10 - bl GetIQSkillDescription - adds r2, r0, 0 - mov r0, r9 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x10 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - mov r0, r10 - bl GetIQSkillDescription - ldr r1, [sp, 0x84] - bl sub_8097DF0 - adds r5, r0, 0 - b _080626EA - .align 2, 0 -_080626CC: .4byte gFormatBuffer_Items -_080626D0: .4byte gUnknown_80FE95C -_080626D4: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080626E2 - ldrb r0, [r7, 0x2] - cmp r0, 0 - beq _080626EA -_080626E2: - movs r4, 0x1 - bl sub_8083D30 - b _08062718 -_080626EA: - cmp r5, 0 - beq _080626F2 - bl sub_8062500 -_080626F2: - add r0, sp, 0x4 - movs r1, 0 - bl nullsub_34 - movs r0, 0x16 - bl sub_803E46C - ldr r0, _0806272C - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08062712 - ldrb r0, [r7, 0x1] - cmp r0, 0 - beq _080626D4 -_08062712: - movs r4, 0 - bl sub_8083D08 -_08062718: - cmp r4, 0 - bne _08062730 - cmp r5, 0 - beq _08062730 - adds r0, r5, 0 - ldr r1, [sp, 0x84] - bl sub_80625A4 - b _08062650 - .align 2, 0 -_0806272C: .4byte gRealInputs -_08062730: - movs r0, 0x4 - movs r1, 0x3E - bl sub_803E708 - add sp, 0x88 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_806262C - - thumb_func_start sub_8062748 -sub_8062748: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x88 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - mov r0, sp - adds r0, 0x70 - str r0, [sp, 0x84] - add r0, sp, 0x10 - mov r8, r0 - movs r0, 0 - mov r9, r0 - add r7, sp, 0x4 - add r6, sp, 0x80 -_0806276C: - add r0, sp, 0x4 - bl sub_801317C - mov r0, r8 - bl sub_80140B4 - mov r0, r8 - str r6, [r0, 0x14] - movs r1, 0x1 - add r0, sp, 0x80 - strb r1, [r0] - mov r0, r9 - strb r0, [r6, 0x1] - movs r0, 0x10 - strb r0, [r6, 0x2] - mov r0, r9 - strb r0, [r6, 0x3] - mov r0, r8 - bl sub_803ECB4 - movs r0, 0 - bl sub_80073B8 - ldr r0, _080627E0 - mov r1, r10 - bl CopyTacticsNameToBuffer - ldr r0, _080627E4 - ldr r2, [r0] - mov r0, r9 - str r0, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - mov r0, r10 - bl GetTacticsDescription - adds r2, r0, 0 - mov r0, r9 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x10 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - mov r0, r10 - bl GetTacticsDescription - ldr r1, [sp, 0x84] - bl sub_8097DF0 - adds r5, r0, 0 - b _080627FE - .align 2, 0 -_080627E0: .4byte gFormatBuffer_Items -_080627E4: .4byte gUnknown_80FE960 -_080627E8: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080627F6 - ldrb r0, [r7, 0x2] - cmp r0, 0 - beq _080627FE -_080627F6: - movs r4, 0x1 - bl sub_8083D30 - b _0806282C -_080627FE: - cmp r5, 0 - beq _08062806 - bl sub_8062500 -_08062806: - add r0, sp, 0x4 - movs r1, 0 - bl nullsub_34 - movs r0, 0x3E - bl sub_803E46C - ldr r0, _08062840 - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08062826 - ldrb r0, [r7, 0x1] - cmp r0, 0 - beq _080627E8 -_08062826: - movs r4, 0 - bl sub_8083D08 -_0806282C: - cmp r4, 0 - bne _08062844 - cmp r5, 0 - beq _08062844 - adds r0, r5, 0 - ldr r1, [sp, 0x84] - bl sub_80625A4 - b _0806276C - .align 2, 0 -_08062840: .4byte gRealInputs -_08062844: - movs r0, 0x4 - movs r1, 0x3E - bl sub_803E708 - add sp, 0x88 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8062748 thumb_func_start sub_806285C sub_806285C: diff --git a/include/structs/sprite_oam.h b/include/structs/sprite_oam.h index b1e1c6e98..84d6e0042 100644 --- a/include/structs/sprite_oam.h +++ b/include/structs/sprite_oam.h @@ -259,16 +259,6 @@ typedef struct SpriteOAM (spritePtr)->attrib2 |= _xSpriteVal; \ } -// Hacky way of matching functions in menu_input.c AddMenuCursorSprite_, sub_801332C sub_8013470 -#define SpriteSetX_MatrixNumSize0(spritePtr, _x) \ -{ \ - u32 _xSpriteVal = _x; \ - _xSpriteVal &= SPRITEOAM_MAX_X; \ - _xSpriteVal <<= SPRITEOAM_SHIFT_X; \ - (spritePtr)->attrib2 &= ~SPRITEOAM_MASK_X; \ - (spritePtr)->attrib2 = _xSpriteVal; \ -} - #define SpriteGetY(spritePtr)(((spritePtr)->unk6 >> SPRITEOAM_SHIFT_WORKING_Y) & SPRITEOAM_MAX_WORKING_Y) #define SpriteGetY_LocalVar(spritePtr, _y) \ diff --git a/src/code_805D8C8.c b/src/code_805D8C8.c index 16fafdc0d..8d7c71136 100644 --- a/src/code_805D8C8.c +++ b/src/code_805D8C8.c @@ -37,7 +37,7 @@ void sub_8068310(s32 size, u16 **param_2) } void sub_8068344(void) -{ +{ if ((gUnknown_202EDCC & 8) != 0) { UnkTextStruct1 *ptr = &gUnknown_2027370[0]; SpriteOAM sprite = {0}; @@ -49,7 +49,7 @@ void sub_8068344(void) SpriteSetBpp(&sprite, 0); SpriteSetShape(&sprite, 1); SpriteSetMatrixNum(&sprite, 16); - SpriteSetSize(&sprite, 0); + SpriteSetSize(&sprite, 0); SpriteSetTileNum(&sprite, 0x3F0); SpriteSetPriority(&sprite, 0); SpriteSetPalNum(&sprite, 15); @@ -59,8 +59,9 @@ void sub_8068344(void) } } +// The same as sub_80623B0 void sub_80684C4(void) -{ +{ if ((gUnknown_202EDCC & 8) != 0) { UnkTextStruct1 *ptr = &gUnknown_2027370[0]; SpriteOAM sprite = {0}; @@ -71,12 +72,13 @@ void sub_80684C4(void) SpriteSetMosaic(&sprite, 0); SpriteSetBpp(&sprite, 0); SpriteSetShape(&sprite, 1); + SpriteSetMatrixNum(&sprite, 0); SpriteSetSize(&sprite, 0); SpriteSetTileNum(&sprite, 0x3F0); SpriteSetPriority(&sprite, 0); SpriteSetPalNum(&sprite, 15); SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x70); - SpriteSetX_MatrixNumSize0(&sprite, (ptr->unk0 * 8) + 0x40); + SpriteSetX(&sprite, (ptr->unk0 * 8) + 0x40); AddSprite(&sprite,0x100,NULL,NULL); } } diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index 8438e7dc7..e3405884b 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -3102,7 +3102,7 @@ EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better fi extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target); extern u32 sub_8014140(s32 a0, const void *a1); extern void sub_806285C(s32 a0); -extern void sub_806262C(s32 a0); +void sub_806262C(u8 iqSkillId); extern const u8 gUnknown_8106B8C[]; @@ -3559,4 +3559,220 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) LoadIQSkills(entity); } +extern s32 gUnknown_202EDCC; + +// The same as sub_8068344 +void sub_8062230(void) +{ + if ((gUnknown_202EDCC & 8) != 0) { + UnkTextStruct1 *txtStrPtr = &gUnknown_2027370[0]; + SpriteOAM sprite = {0}; + + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 0); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 1); + SpriteSetMatrixNum(&sprite, 16); + SpriteSetSize(&sprite, 0); + SpriteSetTileNum(&sprite, 0x3F0); + SpriteSetPriority(&sprite, 0); + SpriteSetPalNum(&sprite, 15); + SpriteSetY(&sprite, (txtStrPtr->unk2 * 8) + 0x8); + SpriteSetX(&sprite, (txtStrPtr->unk0 * 8) + 0x40); + + AddSprite(&sprite, 0x100, NULL, NULL); + } +} + +// The same as sub_80684C4 +void sub_80623B0(void) +{ + if ((gUnknown_202EDCC & 8) != 0) { + UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + SpriteOAM sprite = {0}; + + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 0); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 1); + SpriteSetMatrixNum(&sprite, 0); + SpriteSetSize(&sprite, 0); + SpriteSetTileNum(&sprite, 0x3F0); + SpriteSetPriority(&sprite, 0); + SpriteSetPalNum(&sprite, 15); + SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x70); + SpriteSetX(&sprite, (ptr->unk0 * 8) + 0x40); + AddSprite(&sprite,0x100,NULL,NULL); + } +} + +extern SpriteOAM gUnknown_202F268; + +void sub_8062500(void) +{ + if ((gUnknown_202EDCC & 8) != 0) { + UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + + SpriteSetAffine1(&gUnknown_202F268, 0); + SpriteSetAffine2(&gUnknown_202F268, 0); + SpriteSetObjMode(&gUnknown_202F268, 0); + SpriteSetMosaic(&gUnknown_202F268, 0); + SpriteSetBpp(&gUnknown_202F268, 0); + SpriteSetShape(&gUnknown_202F268, 1); + SpriteSetMatrixNum(&gUnknown_202F268, 0); + SpriteSetSize(&gUnknown_202F268, 0); + SpriteSetTileNum(&gUnknown_202F268, 0x3F0); + SpriteSetPriority(&gUnknown_202F268, 0); + SpriteSetPalNum(&gUnknown_202F268, 15); + SpriteSetY(&gUnknown_202F268, (ptr->unk2 * 8) + 0x60); + SpriteSetX(&gUnknown_202F268, 0x70); + AddSprite(&gUnknown_202F268,0x100,NULL,NULL); + } +} + +void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); + +void sub_80625A4(s32 count, struct subStruct_203B240 **strings) +{ + s32 i; + MenuInputStructSub menuSub; + + sub_801317C(&menuSub); + for (i = 0; i < count; i++) { + sub_80639E4(strings[i], &menuSub); + while (1) { + if (i < count - 1) { + sub_8062500(); + } + nullsub_34(&menuSub, 0); + sub_803E46C(0x16); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + sub_8083D08(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + sub_8083D30(); + break; + } + } + + } +} + +#include "code_8097DD0.h" + +extern const u8 *const gUnknown_80FE95C; +extern const u8 *const gUnknown_80FE960; + +void sub_806262C(u8 iqSkillId) +{ + MenuInputStructSub menuSub; + Windows windows; + WindowHeader header; + struct subStruct_203B240 *result[4]; + + while (1) { + s32 count; + bool8 bPress; + + sub_801317C(&menuSub); + sub_80140B4(&windows); + windows.id[0].unk14 = &header; + header.f0 = 1; + header.f1 = 0; + header.f2 = 16; + header.f3 = 0; + sub_803ECB4(&windows, TRUE); + sub_80073B8(0); + + strcpy(gFormatBuffer_Items[0], GetIQSkillName(iqSkillId)); + PrintFormattedStringOnWindow(16, 0, gUnknown_80FE95C, 0, '\0'); + PrintFormattedStringOnWindow(8, 16, GetIQSkillDescription(iqSkillId), 0, '\0'); + sub_80073E0(0); + count = sub_8097DF0(GetIQSkillDescription(iqSkillId), result); + while (1) { + if (count != 0) { + sub_8062500(); + } + nullsub_34(&menuSub, 0); + sub_803E46C(0x16); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + bPress = FALSE; + sub_8083D08(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + bPress = TRUE; + sub_8083D30(); + break; + } + } + + if (bPress || count == 0) + break; + + sub_80625A4(count, result); + } + + sub_803E708(4, 0x3E); +} + +void sub_8062748(u8 tacticId) +{ + MenuInputStructSub menuSub; + Windows windows; + WindowHeader header; + struct subStruct_203B240 *result[4]; + + while (1) { + s32 count; + bool8 bPress; + + sub_801317C(&menuSub); + sub_80140B4(&windows); + windows.id[0].unk14 = &header; + header.f0 = 1; + header.f1 = 0; + header.f2 = 16; + header.f3 = 0; + sub_803ECB4(&windows, TRUE); + sub_80073B8(0); + + CopyTacticsNameToBuffer(gFormatBuffer_Items[0], tacticId); + PrintFormattedStringOnWindow(16, 0, gUnknown_80FE960, 0, '\0'); + PrintFormattedStringOnWindow(8, 16, GetTacticsDescription(tacticId), 0, '\0'); + sub_80073E0(0); + count = sub_8097DF0(GetTacticsDescription(tacticId), result); + while (1) { + if (count != 0) { + sub_8062500(); + } + nullsub_34(&menuSub, 0); + sub_803E46C(62); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + bPress = FALSE; + sub_8083D08(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + bPress = TRUE; + sub_8083D30(); + break; + } + } + + if (bPress || count == 0) + break; + + sub_80625A4(count, result); + } + + sub_803E708(4, 0x3E); +} + + // diff --git a/src/menu_input.c b/src/menu_input.c index 26eba7212..bb6408f41 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -595,13 +595,14 @@ void AddMenuCursorSprite_(MenuInputStruct *a0, u8 *a1) SpriteSetMosaic(&sp, 0); SpriteSetBpp(&sp, 0); SpriteSetShape(&sp, 0); + SpriteSetMatrixNum(&sp, 0); SpriteSetSize(&sp, 0); SpriteSetTileNum(&sp, 0x3F4); SpriteSetPriority(&sp, 0); SpriteSetPalNum(&sp, 15); SpriteSetUnk6_0(&sp, 0); SpriteSetUnk6_1(&sp, 0); - SpriteSetX_MatrixNumSize0(&sp, a0->unk8.x); + SpriteSetX(&sp, a0->unk8.x); SpriteSetY(&sp, a0->unk8.y + 1); AddSprite(&sp, 0xFF, 0, 0); @@ -629,13 +630,14 @@ static void sub_801332C(DungeonPos *a0) SpriteSetMosaic(&sp, 0); SpriteSetBpp(&sp, 0); SpriteSetShape(&sp, 0); + SpriteSetMatrixNum(&sp, 0); SpriteSetSize(&sp, 0); SpriteSetTileNum(&sp, 0x3F5); SpriteSetPriority(&sp, 0); SpriteSetPalNum(&sp, 15); SpriteSetUnk6_0(&sp, 0); SpriteSetUnk6_1(&sp, 0); - SpriteSetX_MatrixNumSize0(&sp, a0->x); + SpriteSetX(&sp, a0->x); SpriteSetY(&sp, a0->y + 1); AddSprite(&sp, 0xFF, NULL, NULL); @@ -653,13 +655,14 @@ static void sub_8013470(MenuInputStruct *a0) SpriteSetMosaic(&sp, 0); SpriteSetBpp(&sp, 0); SpriteSetShape(&sp, 0); + SpriteSetMatrixNum(&sp, 0); SpriteSetSize(&sp, 0); SpriteSetTileNum(&sp, 0x3F2); SpriteSetPriority(&sp, 0); SpriteSetPalNum(&sp, 15); SpriteSetUnk6_0(&sp, 0); SpriteSetUnk6_1(&sp, 0); - SpriteSetX_MatrixNumSize0(&sp, a0->unkC); + SpriteSetX(&sp, a0->unkC); SpriteSetY(&sp, a0->unkE); AddSprite(&sp, 0xFF, NULL, NULL); @@ -671,13 +674,14 @@ static void sub_8013470(MenuInputStruct *a0) SpriteSetMosaic(&sp, 0); SpriteSetBpp(&sp, 0); SpriteSetShape(&sp, 0); + SpriteSetMatrixNum(&sp, 0); SpriteSetSize(&sp, 0); SpriteSetTileNum(&sp, 0x3F3); SpriteSetPriority(&sp, 0); SpriteSetPalNum(&sp, 15); SpriteSetUnk6_0(&sp, 0); SpriteSetUnk6_1(&sp, 0); - SpriteSetX_MatrixNumSize0(&sp, a0->unkC + 10); + SpriteSetX(&sp, a0->unkC + 10); SpriteSetY(&sp, a0->unkE); AddSprite(&sp, 0xFF, NULL, NULL); From 05a1d0aec80fffc55b861e401b4ef498c3ab0c7d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 28 Feb 2025 21:56:14 +0100 Subject: [PATCH 03/31] Get rid of the fakematch in the Windows struct --- asm/code_805D8C8.s | 534 ------------------------------------- include/structs/str_text.h | 7 +- src/code_805D8C8_1.c | 301 +++++++++++++++++---- src/world_map.c | 13 +- 4 files changed, 257 insertions(+), 598 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 706291640..3f204a5c9 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -5,540 +5,6 @@ .text - - - - thumb_func_start sub_806285C -sub_806285C: - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0xD4 - mov r10, r0 - add r0, sp, 0x10 - mov r8, r0 - add r5, sp, 0x70 - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x74] - add r1, sp, 0x78 - movs r6, 0 - movs r0, 0 - mov r9, r0 - movs r0, 0x2 - strh r0, [r1] - strh r0, [r1, 0x2] - add r1, sp, 0x7C - movs r0, 0x1A - strh r0, [r1] - mov r0, sp - adds r0, 0x7E - movs r1, 0xC - strh r1, [r0] - add r0, sp, 0x80 - strh r1, [r0] - add r0, sp, 0x84 - add r4, sp, 0xD0 - str r4, [r0] - add r0, sp, 0x88 - movs r1, 0x3 - str r1, [r0, 0x4] - add r0, sp, 0xA0 - str r1, [r0, 0x4] - add r0, sp, 0xB8 - str r1, [r0, 0x4] - mov r0, r8 - adds r1, r5, 0 - movs r2, 0x60 - bl memcpy - add r0, sp, 0x4 - bl sub_801317C - movs r0, 0x1 - strb r0, [r4] - strb r6, [r4, 0x1] - movs r0, 0x10 - strb r0, [r4, 0x2] - strb r6, [r4, 0x3] - mov r0, r8 - movs r1, 0x1 - bl sub_803ECB4 - movs r0, 0 - bl sub_80073B8 - mov r0, r10 - bl sub_808E4FC - adds r1, r0, 0 - ldr r0, _0806291C - bl strcpy - ldr r0, _08062920 - ldr r2, [r0] - mov r0, r9 - str r0, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - mov r0, r10 - bl sub_808E51C - adds r2, r0, 0 - mov r0, r9 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x10 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - add r4, sp, 0x4 - b _08062938 - .align 2, 0 -_0806291C: .4byte gFormatBuffer_Items -_08062920: .4byte gUnknown_80FE964 -_08062924: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08062932 - ldrb r0, [r4, 0x2] - cmp r0, 0 - beq _08062938 -_08062932: - bl sub_8083D30 - b _0806295C -_08062938: - add r0, sp, 0x4 - movs r1, 0 - bl nullsub_34 - movs r0, 0x16 - bl sub_803E46C - ldr r0, _08062974 - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08062958 - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08062924 -_08062958: - bl sub_8083D08 -_0806295C: - movs r0, 0x4 - movs r1, 0x3E - bl sub_803E708 - add sp, 0xD4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08062974: .4byte gRealInputs - thumb_func_end sub_806285C - - thumb_func_start DrawFieldGiveItemMenu -DrawFieldGiveItemMenu: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x80 - mov r8, r0 - adds r6, r1, 0 - add r4, sp, 0x1C - ldr r1, _080629AC - adds r0, r4, 0 - movs r2, 0x60 - bl memcpy - movs r0, 0 - str r0, [sp, 0x7C] - mov r1, r8 - cmp r1, 0 - beq _080629A2 - subs r0, 0x1 - str r0, [r1] -_080629A2: - cmp r6, 0x1 - bne _080629BA - add r1, sp, 0x4C - ldr r0, _080629B0 - b _080629C2 - .align 2, 0 -_080629AC: .4byte gUnknown_8106C30 -_080629B0: .4byte gUnknown_8106C00 -_080629B4: - bl sub_8083D08 - b _08062AF4 -_080629BA: - cmp r6, 0x2 - bne _080629CA - add r1, sp, 0x4C - ldr r0, _08062A38 -_080629C2: - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} -_080629CA: - add r0, sp, 0x4 - adds r1, r4, 0 - movs r2, 0 - bl DrawFieldTeamMenu - movs r0, 0x1 - bl sub_80073B8 - ldr r0, _08062A3C - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - movs r1, 0x3 - movs r3, 0x1 - bl PrintStringOnWindow - movs r0, 0x1 - bl sub_80073E0 - ldr r0, _08062A40 - mov r9, r0 - add r7, sp, 0x8 - ldr r1, _08062A44 - mov r10, r1 -_080629FC: - mov r2, r10 - movs r3, 0x18 - ldrsh r0, [r2, r3] - lsls r0, 2 - adds r0, r7, r0 - ldr r5, [r0] - cmp r5, 0 - blt _08062A70 - ldr r0, _08062A48 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08062A4C - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityIsValid - lsls r0, 24 - cmp r0, 0 - beq _08062A5A - cmp r9, r5 - beq _08062A5A - cmp r6, 0x1 - bne _08062A50 - adds r0, r4, 0 - bl sub_8062B74 - b _08062A5A - .align 2, 0 -_08062A38: .4byte gUnknown_8106C18 -_08062A3C: .4byte gWhichTextPtr2 -_08062A40: .4byte 0xfffffc27 -_08062A44: .4byte gUnknown_202EE10 -_08062A48: .4byte gDungeon -_08062A4C: .4byte 0x0001357c -_08062A50: - cmp r6, 0x2 - bne _08062A5A - adds r0, r4, 0 - bl sub_8062CA8 -_08062A5A: - mov r9, r5 - adds r0, r4, 0 - movs r1, 0 - bl sub_806A2BC - adds r0, r4, 0x4 - movs r1, 0 - movs r2, 0x1 - movs r3, 0x1 - bl sub_804A728 -_08062A70: - ldr r5, _08062B40 - adds r0, r5, 0 - bl AddMenuCursorSprite - movs r0, 0x1B - bl sub_803E46C - ldr r4, _08062B44 - ldrh r1, [r4, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08062A98 - movs r0, 0x1 - bl sub_8083CE0 - adds r0, r5, 0 - movs r1, 0x1 - bl sub_80136E0 -_08062A98: - ldrh r1, [r4, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08062AB0 - movs r0, 0x1 - bl sub_8083CE0 - adds r0, r5, 0 - movs r1, 0x1 - bl sub_8013744 -_08062AB0: - ldrh r1, [r4, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08062AC4 - adds r0, r5, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08062AD8 -_08062AC4: - movs r3, 0x18 - ldrsh r0, [r5, r3] - add r1, sp, 0x18 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _08062AD4 - b _080629B4 -_08062AD4: - bl sub_8083D30 -_08062AD8: - ldr r0, _08062B44 - ldrh r1, [r0, 0x2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08062AEC - ldr r5, _08062B48 - ldrb r0, [r5] - cmp r0, 0 - beq _080629FC -_08062AEC: - bl sub_8083D30 - movs r0, 0x1 - str r0, [sp, 0x7C] -_08062AF4: - ldr r4, _08062B40 - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x1B - bl sub_803E46C - bl sub_804AA60 - bl GetLeader - movs r1, 0 - bl sub_806A2BC - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - movs r0, 0x4 - movs r1, 0x3E - bl sub_803E708 - ldr r1, [sp, 0x7C] - cmp r1, 0 - bne _08062B3C - movs r2, 0x18 - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r7, r0 - ldr r5, [r0] - mov r3, r8 - cmp r3, 0 - beq _08062B38 - str r5, [r3] -_08062B38: - cmp r5, 0 - bge _08062B4C -_08062B3C: - movs r0, 0 - b _08062B5A - .align 2, 0 -_08062B40: .4byte gUnknown_202EE10 -_08062B44: .4byte gRealInputs -_08062B48: .4byte gUnknown_202EE3A -_08062B4C: - ldr r0, _08062B6C - ldr r0, [r0] - lsls r1, r5, 2 - ldr r5, _08062B70 - adds r0, r5 - adds r0, r1 - ldr r0, [r0] -_08062B5A: - add sp, 0x80 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08062B6C: .4byte gDungeon -_08062B70: .4byte 0x0001357c - thumb_func_end DrawFieldGiveItemMenu - - thumb_func_start sub_8062B74 -sub_8062B74: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - mov r10, r0 - ldr r0, [r0, 0x70] - mov r9, r0 - movs r0, 0x2 - bl CallPrepareTextbox_8008C54 - movs r0, 0x2 - bl sub_80073B8 - ldr r0, _08062BD0 - mov r1, r10 - movs r2, 0 - bl SubstitutePlaceholderStringTags - ldr r0, _08062BD4 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0xC - movs r1, 0 - movs r3, 0x2 - bl PrintFormattedStringOnWindow - movs r1, 0x10 - mov r8, r1 - mov r0, r9 - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08062BDE - mov r0, r9 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _08062BCA - cmp r0, 0x47 - bne _08062BD8 -_08062BCA: - movs r0, 0x1 - b _08062BDA - .align 2, 0 -_08062BD0: .4byte gFormatBuffer_Monsters -_08062BD4: .4byte gUnknown_80FE978 -_08062BD8: - movs r0, 0 -_08062BDA: - cmp r0, 0 - beq _08062BF4 -_08062BDE: - ldr r2, _08062BF0 - movs r0, 0 - str r0, [sp] - movs r0, 0xC - mov r1, r8 - movs r3, 0x2 - bl PrintFormattedStringOnWindow - b _08062C8A - .align 2, 0 -_08062BF0: .4byte gUnknown_8106C90 -_08062BF4: - movs r7, 0 - movs r4, 0x8C - lsls r4, 1 - add r4, r9 - adds r5, r4, 0 -_08062BFE: - add r0, sp, 0x4 - movs r1, 0 - movs r2, 0xC - bl memset - movs r0, 0x6A - str r0, [sp, 0x8] - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08062C80 - mov r1, r9 - ldrb r0, [r1, 0x7] - cmp r0, 0 - beq _08062C22 - movs r0, 0x2 - b _08062C24 -_08062C22: - movs r0, 0x4 -_08062C24: - str r0, [sp, 0x4] - mov r0, r10 - adds r1, r5, 0 - movs r2, 0x1 - bl CanMonsterUseMove - add r1, sp, 0x4 - movs r2, 0 - lsls r0, 24 - cmp r0, 0 - bne _08062C3C - movs r2, 0x1 -_08062C3C: - strb r2, [r1, 0x8] - ldr r0, _08062CA0 - adds r1, r5, 0 - add r2, sp, 0x4 - bl BufferMoveName - ldrb r1, [r4] - movs r0, 0x2 - ands r0, r1 - movs r6, 0xD - cmp r0, 0 - bne _08062C6C - movs r6, 0x8 - cmp r7, 0 - beq _08062C6C - mov r2, r8 - subs r2, 0x2 - movs r0, 0x7 - str r0, [sp] - movs r0, 0x2 - movs r1, 0xC - movs r3, 0x78 - bl sub_80078A4 -_08062C6C: - movs r0, 0 - str r0, [sp] - adds r0, r6, 0 - mov r1, r8 - ldr r2, _08062CA4 - movs r3, 0x2 - bl PrintFormattedStringOnWindow - movs r0, 0xC - add r8, r0 -_08062C80: - adds r4, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x3 - ble _08062BFE -_08062C8A: - movs r0, 0x2 - bl sub_80073E0 - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08062CA0: .4byte gFormatBuffer_Items -_08062CA4: .4byte gUnknown_8106C98 - thumb_func_end sub_8062B74 - thumb_func_start sub_8062CA8 sub_8062CA8: push {r4-r7,lr} diff --git a/include/structs/str_text.h b/include/structs/str_text.h index 873ee8e15..159a82efb 100644 --- a/include/structs/str_text.h +++ b/include/structs/str_text.h @@ -51,7 +51,8 @@ typedef struct Window const WindowHeader *unk14; } Window; -#define WINDOW_DUMMY (Window) {.type = WINDOW_TYPE_NORMAL, .width = 0} +// All fields are zeroed out except for type which is set to WINDOW_TYPE_NORMAL. +#define WINDOW_DUMMY (Window) {.unk0 = 0, .type = WINDOW_TYPE_NORMAL, .width = 0, .pos = {0, 0}, .height = 0, .unk10 = 0, .unk12 = 0, .unk14 = NULL} #define WINDOW_TYPE_0 0 #define WINDOW_TYPE_WITHOUT_BORDER 1 @@ -64,10 +65,6 @@ typedef struct Window typedef struct Windows { Window id[MAX_WINDOWS]; - // Something ugly, so that sub_805FD74 could match weird compiler memcpy/stack initialization - #ifndef NONMATCHING - u8 fakeMatch[0]; - #endif // NONMATCHING } Windows; #endif // GUARD_STR_TEXT_H diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index e3405884b..f577d2485 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -1678,29 +1678,26 @@ extern const u8 gUnknown_8106B50[]; extern void sub_803ECB4(Windows *a0, u8 a1); static void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); -// Inline needed to (fake?)match. -static inline void sub_805FC30_SetUpTxtStruct(Windows *src) -{ - memset(src, 0, sizeof(*src)); - src->id[0].type = WINDOW_TYPE_NORMAL; - src->id[1].type = WINDOW_TYPE_NORMAL; - src->id[1].pos.x = 0x16; - src->id[1].pos.y = 4; - src->id[1].width = 6; - src->id[1].height = 4; - src->id[1].unk10 = 4; - src->id[2].type = WINDOW_TYPE_NORMAL; - src->id[3].type = WINDOW_TYPE_NORMAL; -} - void sub_805FC30(Windows *a0, s32 a1) { s32 i; - Windows sp; + Windows windows = { + .id = { + [0] = WINDOW_DUMMY, + [1] = { + .type = WINDOW_TYPE_NORMAL, + .pos = {22, 4}, + .width = 6, + .height = 4, + .unk10 = 4, + }, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; - sub_805FC30_SetUpTxtStruct(&sp); - sp.id[0] = a0->id[0]; - sp.id[0].unk0 = 0x80; + windows.id[0] = a0->id[0]; + windows.id[0].unk0 = 0x80; gUnknown_202EE10.menuIndex = 0; gUnknown_202EE10.unk1C = gUnknown_202EE6C; @@ -1716,11 +1713,11 @@ void sub_805FC30(Windows *a0, s32 a1) sub_801317C(&gUnknown_202EE10.unk28); - sp.id[1].pos.x = a1; - sp.id[1].width = 28 - a1; - sp.id[1].height = sp.id[1].unk10 = sub_80095E4(gUnknown_202EE10.unk1C, 0); - sub_803ECB4(&sp, 0); - sub_80137B0(&gUnknown_202EE10, sp.id[1].height * 8); + windows.id[1].pos.x = a1; + windows.id[1].width = 28 - a1; + windows.id[1].height = windows.id[1].unk10 = sub_80095E4(gUnknown_202EE10.unk1C, 0); + sub_803ECB4(&windows, 0); + sub_80137B0(&gUnknown_202EE10, windows.id[1].height * 8); sub_80073B8(1); for (i = 0; i < gUnknown_202EE6C; i++) { @@ -1762,7 +1759,7 @@ bool8 sub_8060860(s32 a0); void sub_8060900(Entity *a0); s32 sub_8060800(WindowHeader *a0, s32 a1); void sub_8060CE8(ActionContainer *a0); -extern Entity *DrawFieldGiveItemMenu(u8 *a0, s32 a1); +Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) { @@ -2010,9 +2007,9 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) break; } else if (a0Info->action.action == 0x36) { - u32 var_38; - if (DrawFieldGiveItemMenu((void*)&var_38, 2) != NULL) { - a0Info->action.actionParameters[1].actionUseIndex = var_38; + s32 teamId; + if (DrawFieldGiveItemMenu(&teamId, 2) != NULL) { + a0Info->action.actionParameters[1].actionUseIndex = teamId; sub_803EAF0(0, 0); r9 = 0; break; @@ -2872,32 +2869,30 @@ void sub_8062D68(void); void sub_8062230(void); void sub_8062748(u8 a0); -static inline void SetTxtStruct(Windows *sp) -{ - memset(sp, 0, sizeof(*sp)); - sp->id[0].type = WINDOW_TYPE_WITH_HEADER; - sp->id[0].pos.x = 2; - sp->id[0].pos.y = 2; - sp->id[0].width = 0x12; - sp->id[0].height = 0xE; - sp->id[0].unk10 = 0x12; - sp->id[0].unk12 = 2; - sp->id[0].unk14 = &gUnknown_202F270; - sp->id[1].type = WINDOW_TYPE_NORMAL; - sp->id[2].type = WINDOW_TYPE_NORMAL; - sp->id[3].type = WINDOW_TYPE_NORMAL; -} - void ShowTacticsMenu(ActionContainer *a0) { - Windows sp; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 14, + .unk10 = 18, + .unk12 = 2, + .unk14 = &gUnknown_202F270, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; EntityInfo *monInfo; u8 tacticIds[NUM_TACTICS]; s32 scrollFirstId; s32 menuIndex; Entity *teamMon; - SetTxtStruct(&sp); teamMon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; monInfo = GetEntInfo(teamMon); menuIndex = 0; @@ -2911,7 +2906,7 @@ void ShowTacticsMenu(ActionContainer *a0) gUnknown_202F270.f1 = 0; gUnknown_202F270.f2 = 10; gUnknown_202F270.f3 = 0; - sub_803ECB4(&sp, 1); + sub_803ECB4(&windows, 1); PrintMonTactics(scrollFirstId, tacticIds, monInfo, 0); for (i = 0; i < 8; i++) { if (tacticIds[i] == TACTIC_UNUSED) @@ -2992,7 +2987,7 @@ void ShowTacticsMenu(ActionContainer *a0) if (CheckVariousStatuses2(teamMon, TRUE)) { sub_8044FF0(0x2F); } - sub_805FC30(&sp, 0x16); + sub_805FC30(&windows, 0x16); while (1) { changed = FALSE; AddMenuCursorSprite(&gUnknown_202EE10); @@ -3101,7 +3096,7 @@ EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better fi extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target); extern u32 sub_8014140(s32 a0, const void *a1); -extern void sub_806285C(s32 a0); +void sub_806285C(s32 a0); void sub_806262C(u8 iqSkillId); extern const u8 gUnknown_8106B8C[]; @@ -3111,12 +3106,11 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 spArr[6]; struct unkStruct_808FF20 unkMonStruct; struct UnkInfoTabStruct unkInfoTabStruct; - const s32 winX = 2; Windows windows = { .id = { [0] = { .type = WINDOW_TYPE_WITH_HEADER, - .pos = {winX, 2}, + .pos = {2, 2}, .width = 18, .height = 14, .unk10 = 18, @@ -3128,7 +3122,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) [3] = WINDOW_DUMMY, } }; - register s32 r8; + s32 r8; Entity *entity; s32 var_3C; s32 var_38; @@ -3664,9 +3658,20 @@ void sub_80625A4(s32 count, struct subStruct_203B240 **strings) } #include "code_8097DD0.h" +#include "move_util.h" +#include "move_util.h" extern const u8 *const gUnknown_80FE95C; extern const u8 *const gUnknown_80FE960; +extern const u8 *const gUnknown_80FE964; +extern const u8 *const gUnknown_80FE978; +extern const u8 gUnknown_8106C90[]; +extern const u8 gUnknown_8106C98[]; +extern const u8 *const gWhichTextPtr2; +extern char* sub_808E4FC(s32 a1); +extern char* sub_808E51C(s32 a1); +extern void sub_8062B74(Entity *entity); +extern void sub_8062CA8(Entity *entity); void sub_806262C(u8 iqSkillId) { @@ -3774,5 +3779,197 @@ void sub_8062748(u8 tacticId) sub_803E708(4, 0x3E); } +void sub_806285C(s32 a0) +{ + const u8 *str; + MenuInputStructSub menuSub; + WindowHeader header; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 26, + .height = 12, + .unk10 = 12, + .unk12 = 0, + .unk14 = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + sub_801317C(&menuSub); + header.f0 = 1; + header.f1 = 0; + header.f2 = 16; + header.f3 = 0; + sub_803ECB4(&windows, TRUE); + sub_80073B8(0); + str = sub_808E4FC(a0); + strcpy(gFormatBuffer_Items[0], str); + PrintFormattedStringOnWindow(16, 0, gUnknown_80FE964, 0, '\0'); + PrintFormattedStringOnWindow(8, 16, sub_808E51C(a0), 0, '\0'); + sub_80073E0(0); + + while (1) { + nullsub_34(&menuSub, 0); + sub_803E46C(22); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + sub_8083D08(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + sub_8083D30(); + break; + } + } + + sub_803E708(4, 0x3E); +} + +extern const Windows gUnknown_8106C30; +extern const Window gUnknown_8106C00; +extern const Window gUnknown_8106C18; + +Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) +{ + struct UnkFieldTeamMenuStruct unkStruct; + Windows windows = gUnknown_8106C30; + bool8 bPress = FALSE; + s32 prevId, currId; + + if (teamId != NULL) { + *teamId = -1; + } + + if (a1 == 1) { + windows.id[2] = gUnknown_8106C00; + } + else if (a1 == 2) { + windows.id[2] = gUnknown_8106C18; + } + + DrawFieldTeamMenu(&unkStruct, &windows, FALSE); + sub_80073B8(1); + PrintStringOnWindow(4, 3, gWhichTextPtr2, 1, '\0'); + sub_80073E0(1); + prevId = -985; // Magic number or does it actually mean anything? + + while (1) { + currId = unkStruct.unk4[gUnknown_202EE10.menuIndex]; + + if (currId >= 0) { + Entity *entity = gDungeon->teamPokemon[currId]; + + if (EntityIsValid(entity) && prevId != currId) { + if (a1 == 1) { + sub_8062B74(entity); + } + else if (a1 == 2) { + sub_8062CA8(entity); + } + } + prevId = currId; + sub_806A2BC(entity, 0); + sub_804A728(&entity->pos, 0, 1, 1); + } + + AddMenuCursorSprite(&gUnknown_202EE10); + sub_803E46C(0x1B); + if (gRealInputs.repeated & DPAD_DOWN) { + sub_8083CE0(1); + sub_80136E0(&gUnknown_202EE10, 1); + } + if (gRealInputs.repeated & DPAD_UP) { + sub_8083CE0(1); + sub_8013744(&gUnknown_202EE10, 1); + } + + if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if (unkStruct.unk14[gUnknown_202EE10.menuIndex] != 0) { + sub_8083D08(); + break; + } + sub_8083D30(); + } + if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + sub_8083D30(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gUnknown_202EE10); + sub_803E46C(0x1B); + sub_804AA60(); + sub_806A2BC(GetLeader(), 0); + sub_803EAF0(0, 0); + sub_803E708(4, 0x3E); + if (bPress) { + return NULL; + } + currId = unkStruct.unk4[gUnknown_202EE10.menuIndex]; + if (teamId != NULL) { + *teamId = currId; + } + if (currId >= 0) { + return gDungeon->teamPokemon[currId]; + } + + return NULL; +} + +void sub_8062B74(Entity *entity) +{ + s32 x, y; + EntityInfo *entInfo = GetEntInfo(entity); + + CallPrepareTextbox_8008C54(2); + sub_80073B8(2); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); + PrintFormattedStringOnWindow(12, 0, gUnknown_80FE978, 2, '\0'); + y = 16; + + if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) { + PrintFormattedStringOnWindow(12, y, gUnknown_8106C90, 2, '\0'); + } + else { + s32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) { + unkStruct_80928C0 movStruct = {0, 106, 0, 0}; + Move *move = &entInfo->moves.moves[i]; + + if (MoveFlagExists(move)) { + if (entInfo->isTeamLeader) { + movStruct.unk0 = 2; + } + else { + movStruct.unk0 = 4; + } + + movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); + BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); + + if (MoveFlagLinkChain(move)) { + x = 13; + } + else { + x = 8; + if (i != 0) { + sub_80078A4(2, 12, y - 2, 120, 7); + } + } + PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0'); + y += 12; + } + } + } + + sub_80073E0(2); +} // diff --git a/src/world_map.c b/src/world_map.c index e6d57a29c..844299fb0 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -54,8 +54,8 @@ static EWRAM_INIT Windows sWorldMapWindows = { .height = 3, .unk10 = 3, }, - [2] = { .type = WINDOW_TYPE_NORMAL,}, - [3] = { .type = WINDOW_TYPE_NORMAL,}, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, } }; @@ -483,19 +483,18 @@ static void AnimateSprites(bool8 a0) static void PrintDungeonName(DungeonLocation *dungLocation) { - const s32 x = 12; Windows windows = { .id = { [0] = { .type = WINDOW_TYPE_NORMAL, - .pos = {x, 2}, + .pos = {12, 2}, .width = 16, .height = 2, .unk10 = 2, }, - [1] = {.type = WINDOW_TYPE_NORMAL}, - [2] = {.type = WINDOW_TYPE_NORMAL}, - [3] = {.type = WINDOW_TYPE_NORMAL}, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, } }; From 168b82cafd43bafb87035d06e3c21d24af0b4999 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 1 Mar 2025 11:18:20 +0100 Subject: [PATCH 04/31] sub_8062D8C --- asm/code_805D8C8.s | 363 ------------------------------------------- src/code_805D8C8_1.c | 143 +++++++++++++++++ 2 files changed, 143 insertions(+), 363 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 3f204a5c9..33b1ec233 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -5,370 +5,7 @@ .text - thumb_func_start sub_8062CA8 -sub_8062CA8: - push {r4-r7,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r5, [r4, 0x70] - movs r0, 0x2 - bl CallPrepareTextbox_8008C54 - movs r0, 0x2 - bl sub_80073B8 - ldr r0, _08062CF8 - adds r1, r4, 0 - movs r2, 0 - bl SubstitutePlaceholderStringTags - ldr r0, _08062CFC - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0xC - movs r1, 0 - movs r3, 0x2 - bl PrintFormattedStringOnWindow - movs r7, 0x8 - movs r6, 0x12 - adds r0, r5, 0 - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08062D08 - adds r0, r5, 0 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _08062CF4 - cmp r0, 0x47 - bne _08062D00 -_08062CF4: - movs r0, 0x1 - b _08062D02 - .align 2, 0 -_08062CF8: .4byte gFormatBuffer_Monsters -_08062CFC: .4byte gUnknown_80FE940 -_08062D00: - movs r0, 0 -_08062D02: - adds r4, r0, 0 - cmp r4, 0 - beq _08062D18 -_08062D08: - ldr r2, _08062D14 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - b _08062D2C - .align 2, 0 -_08062D14: .4byte gUnknown_8106C90 -_08062D18: - adds r2, r5, 0 - adds r2, 0x60 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08062D3C - ldr r2, _08062D38 - str r4, [sp] - adds r0, r7, 0 -_08062D2C: - adds r1, r6, 0 - movs r3, 0x2 - bl PrintFormattedStringOnWindow - b _08062D52 - .align 2, 0 -_08062D38: .4byte gUnknown_8106C9C -_08062D3C: - ldr r0, _08062D60 - adds r1, r2, 0 - bl sub_8045C18 - ldr r2, _08062D64 - str r4, [sp] - adds r0, r7, 0 - adds r1, r6, 0 - movs r3, 0x2 - bl PrintFormattedStringOnWindow -_08062D52: - movs r0, 0x2 - bl sub_80073E0 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08062D60: .4byte gFormatBuffer_Items -_08062D64: .4byte gUnknown_8106C98 - thumb_func_end sub_8062CA8 - thumb_func_start sub_8062D68 -sub_8062D68: - push {lr} - ldr r0, _08062D84 - movs r1, 0 - strh r1, [r0, 0x1E] - strh r1, [r0, 0x20] - strh r1, [r0, 0xC] - strh r1, [r0, 0xE] - strh r1, [r0, 0x14] - adds r0, 0x28 - bl sub_801317C - pop {r0} - bx r0 - .align 2, 0 -_08062D84: .4byte gUnknown_202EE10 - thumb_func_end sub_8062D68 - - thumb_func_start sub_8062D88 -sub_8062D88: - movs r0, 0x1 - bx lr - thumb_func_end sub_8062D88 - - thumb_func_start sub_8062D8C -sub_8062D8C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r10, r0 - ldrb r5, [r0, 0x4] - ldr r0, _08062E24 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08062E28 - adds r0, r2 - adds r0, r1 - ldr r0, [r0] - str r0, [sp, 0x4] - adds r7, r0, 0 -_08062DAE: - movs r0, 0 - mov r9, r0 - movs r6, 0 - movs r4, 0 - adds r2, r7, 0x4 - mov r8, r2 -_08062DBA: - ldr r0, _08062E24 - ldr r0, [r0] - lsls r1, r4, 2 - ldr r2, _08062E28 - adds r0, r2 - adds r0, r1 - ldr r0, [r0] - bl sub_8071A8C - lsls r0, 24 - cmp r0, 0 - beq _08062DDA - cmp r4, r5 - bne _08062DD8 - mov r9, r6 -_08062DD8: - adds r6, 0x1 -_08062DDA: - adds r4, 0x1 - cmp r4, 0x3 - ble _08062DBA - adds r0, r7, 0 - movs r1, 0 - bl sub_806A2BC - mov r0, r8 - movs r1, 0 - movs r2, 0x1 - movs r3, 0x1 - bl sub_804A728 - movs r0, 0x1 - bl sub_8044C10 - str r6, [sp] - adds r0, r7, 0 - movs r1, 0 - movs r2, 0x1 - mov r3, r9 - bl sub_8062F90 - lsls r0, 24 - cmp r0, 0 - beq _08062E10 - b _08062F80 -_08062E10: - bl GetLeaderActionId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x6 - bne _08062E6C - adds r6, r5, 0 - movs r4, 0 - b _08062E2E - .align 2, 0 -_08062E24: .4byte gDungeon -_08062E28: .4byte 0x0001357c -_08062E2C: - adds r4, 0x1 -_08062E2E: - cmp r4, 0x3 - bgt _08062E54 - adds r5, 0x1 - cmp r5, 0x3 - ble _08062E3A - movs r5, 0 -_08062E3A: - ldr r0, _08062E64 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08062E68 - adds r0, r2 - adds r0, r1 - ldr r7, [r0] - adds r0, r7, 0 - bl sub_8071A8C - lsls r0, 24 - cmp r0, 0 - beq _08062E2C -_08062E54: - mov r0, r10 - strb r5, [r0, 0x4] - cmp r6, r5 - beq _08062F32 - movs r0, 0 - bl sub_8083CE0 - b _08062F32 - .align 2, 0 -_08062E64: .4byte gDungeon -_08062E68: .4byte 0x0001357c -_08062E6C: - bl GetLeaderActionId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x7 - bne _08062EC0 - adds r6, r5, 0 - movs r4, 0 - b _08062E80 -_08062E7E: - adds r4, 0x1 -_08062E80: - cmp r4, 0x3 - bgt _08062EA6 - subs r5, 0x1 - cmp r5, 0 - bge _08062E8C - movs r5, 0x3 -_08062E8C: - ldr r0, _08062EB8 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08062EBC - adds r0, r2 - adds r0, r1 - ldr r7, [r0] - adds r0, r7, 0 - bl sub_8071A8C - lsls r0, 24 - cmp r0, 0 - beq _08062E7E -_08062EA6: - mov r0, r10 - strb r5, [r0, 0x4] - cmp r6, r5 - beq _08062F32 - movs r0, 0 - bl sub_8083CE0 - b _08062F32 - .align 2, 0 -_08062EB8: .4byte gDungeon -_08062EBC: .4byte 0x0001357c -_08062EC0: - bl GetLeaderActionId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1D - bne _08062ED6 - bl GetLeaderActionContainer - bl sub_80637E8 - b _08062F32 -_08062ED6: - bl GetLeaderActionId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1E - bne _08062EF6 - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - bl GetLeaderActionContainer - movs r1, 0x1 - bl sub_8063A70 - b _08062F32 -_08062EF6: - bl GetLeaderActionId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x33 - bne _08062F16 - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - bl GetLeaderActionContainer - movs r1, 0 - bl sub_8063A70 - b _08062F32 -_08062F16: - bl GetLeaderActionId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1F - bne _08062F3A - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - bl GetLeaderActionContainer - bl sub_8063B54 -_08062F32: - movs r0, 0x1 - bl sub_8044C10 - b _08062F5E -_08062F3A: - bl GetLeaderActionId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x21 - bne _08062F5E - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - bl GetLeaderActionContainer - movs r1, 0x1 - bl sub_8063CF0 - movs r0, 0x1 - bl sub_8044C10 -_08062F5E: - bl GetLeaderActionId - lsls r0, 16 - cmp r0, 0 - bne _08062F6A - b _08062DAE -_08062F6A: - ldr r0, [sp, 0x4] - movs r1, 0 - bl sub_806A2BC - ldr r0, [sp, 0x4] - adds r0, 0x4 - movs r1, 0 - movs r2, 0x1 - movs r3, 0x1 - bl sub_804A728 -_08062F80: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8062D8C thumb_func_start sub_8062F90 sub_8062F90: diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index f577d2485..42ad2963a 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -3667,11 +3667,13 @@ extern const u8 *const gUnknown_80FE964; extern const u8 *const gUnknown_80FE978; extern const u8 gUnknown_8106C90[]; extern const u8 gUnknown_8106C98[]; +extern const u8 gUnknown_8106C9C[]; extern const u8 *const gWhichTextPtr2; extern char* sub_808E4FC(s32 a1); extern char* sub_808E51C(s32 a1); extern void sub_8062B74(Entity *entity); extern void sub_8062CA8(Entity *entity); +extern void sub_8045C18(u8 *buffer, Item *item); void sub_806262C(u8 iqSkillId) { @@ -3972,4 +3974,145 @@ void sub_8062B74(Entity *entity) sub_80073E0(2); } +void sub_8062CA8(Entity *entity) +{ + s32 x, y; + EntityInfo *entInfo = GetEntInfo(entity); + + CallPrepareTextbox_8008C54(2); + sub_80073B8(2); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); + PrintFormattedStringOnWindow(12, 0, gUnknown_80FE940, 2, '\0'); + x = 8; + y = 18; + + if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) { + PrintFormattedStringOnWindow(8, y, gUnknown_8106C90, 2, '\0'); + } + else { + Item *item = &entInfo->heldItem; + if (!ItemExists(item)) { + PrintFormattedStringOnWindow(x, y, gUnknown_8106C9C, 2, '\0'); + } + else { + sub_8045C18(gFormatBuffer_Items[0], item); + PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0'); + } + } + + sub_80073E0(2); +} + +void sub_8062D68(void) +{ + gUnknown_202EE10.unk1E = 0; + gUnknown_202EE10.unk20 = 0; + gUnknown_202EE10.unkC = 0; + gUnknown_202EE10.unkE = 0; + gUnknown_202EE10.unk14.x = 0; + sub_801317C(&gUnknown_202EE10.unk28); +} + +u32 sub_8062D88(void) +{ + return A_BUTTON; +} + +void sub_8062D8C(ActionContainer *a0) +{ + s32 id = a0->actionParameters[0].actionUseIndex; + Entity *entityOrg = gDungeon->teamPokemon[id]; + Entity *entityNew = entityOrg; + + while (1) { + s32 i, count, countUntilId; + + countUntilId = 0; + count = 0; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (sub_8071A8C(gDungeon->teamPokemon[i])) { + if (i == id) { + countUntilId = count; + } + count++; + } + } + + sub_806A2BC(entityNew, 0); + sub_804A728(&entityNew->pos, 0, 1, 1); + sub_8044C10(1); + if (sub_8062F90(entityNew, 0, 1, countUntilId, count)) { + return; + } + + if (GetLeaderActionId() == 6) { + s32 idBefore = id; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (++id >= MAX_TEAM_MEMBERS) { + id = 0; + } + entityNew = gDungeon->teamPokemon[id]; + if (sub_8071A8C(entityNew)) { + break; + } + } + + a0->actionParameters[0].actionUseIndex = id; + if (idBefore != id) { + sub_8083CE0(0); + } + sub_8044C10(1); + } + // Everything is the same as in the above if except for add/sub difference. + else if (GetLeaderActionId() == 7) { + s32 idBefore = id; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (--id < 0) { + id = MAX_TEAM_MEMBERS - 1; + } + entityNew = gDungeon->teamPokemon[id]; + if (sub_8071A8C(entityNew)) { + break; + } + } + + a0->actionParameters[0].actionUseIndex = id; + if (idBefore != id) { + sub_8083CE0(0); + } + sub_8044C10(1); + } + else if (GetLeaderActionId() == 29) { + sub_80637E8(GetLeaderActionContainer()); + sub_8044C10(1); + } + else if (GetLeaderActionId() == 30) { + sub_803EAF0(0, NULL); + sub_8063A70(GetLeaderActionContainer(), TRUE); + sub_8044C10(1); + } + else if (GetLeaderActionId() == 51) { + sub_803EAF0(0, NULL); + sub_8063A70(GetLeaderActionContainer(), FALSE); + sub_8044C10(1); + } + else if (GetLeaderActionId() == 31) { + sub_803EAF0(0, NULL); + sub_8063B54(GetLeaderActionContainer()); + sub_8044C10(1); + } + else if (GetLeaderActionId() == 33) { + sub_803EAF0(0, NULL); + sub_8063CF0(GetLeaderActionContainer(), TRUE); + sub_8044C10(1); + } + + if (GetLeaderActionId() != 0) + break; + } + + sub_806A2BC(entityOrg, 0); + sub_804A728(&entityOrg->pos, 0, 1, 1); +} + // From dca54337fe339af9165409b68bb2acd8bcd7b94c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 1 Mar 2025 15:31:02 +0100 Subject: [PATCH 05/31] sub_8063578 --- asm/code_805D8C8.s | 875 ------------------------------------------- src/code_805D8C8_1.c | 359 +++++++++++++++++- 2 files changed, 358 insertions(+), 876 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 33b1ec233..df8cb4dc1 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,881 +6,6 @@ .text - - thumb_func_start sub_8062F90 -sub_8062F90: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xE8 - mov r8, r0 - str r3, [sp, 0xDC] - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0xD4] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0xD8] - ldr r0, [r0, 0x70] - mov r9, r0 - bl GetLeader - ldr r0, [r0, 0x70] - str r0, [sp, 0xE4] - add r4, sp, 0x70 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x74] - add r0, sp, 0x78 - movs r6, 0 - movs r1, 0x2 - strh r1, [r0] - strh r1, [r0, 0x2] - add r1, sp, 0x7C - movs r0, 0x12 - strh r0, [r1] - mov r0, sp - adds r0, 0x7E - movs r1, 0x10 - strh r1, [r0] - add r0, sp, 0x80 - strh r1, [r0] - add r5, sp, 0xD0 - str r5, [sp, 0x84] - movs r1, 0x3 - str r1, [sp, 0x8C] - add r0, sp, 0xA0 - str r1, [r0, 0x4] - add r0, sp, 0xB8 - str r1, [r0, 0x4] - add r0, sp, 0x10 - adds r1, r4, 0 - movs r2, 0x60 - bl memcpy - ldr r0, _080630A4 - str r6, [r0] - movs r3, 0 - ldr r7, [sp, 0xE4] - adds r7, 0x44 -_08063008: - lsls r0, r3, 3 - movs r1, 0x8C - lsls r1, 1 - adds r0, r1 - mov r1, r9 - adds r2, r1, r0 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08063032 - ldrb r1, [r2, 0x1] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08063032 - movs r0, 0xFD - ands r0, r1 - strb r0, [r2, 0x1] - ldr r0, _080630A4 - str r3, [r0] -_08063032: - adds r3, 0x1 - cmp r3, 0x3 - ble _08063008 -_08063038: - movs r5, 0 - movs r2, 0 - str r2, [sp, 0xE0] - mov r10, r2 - add r0, sp, 0xD0 - str r0, [sp] - add r1, sp, 0x70 - str r1, [sp, 0x4] - ldr r2, [sp, 0xDC] - str r2, [sp, 0x8] - ldr r0, [sp, 0x108] - str r0, [sp, 0xC] - mov r0, r8 - mov r1, r9 - ldr r2, [sp, 0xD4] - add r3, sp, 0x10 - bl sub_80633E4 -_0806305C: - ldr r0, _080630A8 - add r1, sp, 0x70 - bl AddMenuCursorSprite_ - movs r0, 0x1E - bl sub_803E46C - ldr r2, _080630AC - ldrh r1, [r2, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080630DE - ldrh r0, [r2] - lsrs r0, 8 - movs r1, 0x1 - ands r0, r1 - ldr r1, _080630A8 - movs r2, 0x18 - ldrsh r6, [r1, r2] - cmp r0, 0 - beq _080630BA - movs r0, 0x8C - lsls r0, 1 - add r0, r9 - adds r1, r6, 0 - bl unk_SetMoveToLastInLinkedSequence4 - ldr r1, _080630A4 - str r0, [r1] - cmp r6, r0 - beq _080630B0 - movs r0, 0 - bl sub_8083CE0 - b _080630B4 - .align 2, 0 -_080630A4: .4byte gUnknown_202F2D8 -_080630A8: .4byte gUnknown_202EE10 -_080630AC: .4byte gRealInputs -_080630B0: - bl sub_8083D30 -_080630B4: - movs r0, 0x1 - mov r10, r0 - b _080631F4 -_080630BA: - movs r0, 0x8C - lsls r0, 1 - add r0, r9 - adds r1, r6, 0 - bl unk_FindMoveEnabledForAIAfter4 - adds r1, r0, 0 - ldr r0, _08063118 - bl sub_8013780 - ldr r1, _08063118 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r6, r0 - beq _080630DE - movs r0, 0 - bl sub_8083CE0 -_080630DE: - ldr r2, _0806311C - ldrh r1, [r2, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08063150 - ldrh r0, [r2] - lsrs r0, 8 - movs r1, 0x1 - ands r0, r1 - ldr r4, _08063118 - movs r1, 0x18 - ldrsh r6, [r4, r1] - cmp r0, 0 - beq _0806312E - movs r0, 0x8C - lsls r0, 1 - add r0, r9 - adds r1, r6, 0 - bl unk_SetMoveToFirstInLinkedSequence4 - ldr r1, _08063120 - str r0, [r1] - cmp r6, r0 - beq _08063124 - movs r0, 0 - bl sub_8083CE0 - b _08063128 - .align 2, 0 -_08063118: .4byte gUnknown_202EE10 -_0806311C: .4byte gRealInputs -_08063120: .4byte gUnknown_202F2D8 -_08063124: - bl sub_8083D30 -_08063128: - movs r2, 0x1 - mov r10, r2 - b _080631F4 -_0806312E: - movs r0, 0x8C - lsls r0, 1 - add r0, r9 - adds r1, r6, 0 - bl sub_8092DB8 - adds r1, r0, 0 - adds r0, r4, 0 - bl sub_8013780 - movs r1, 0x18 - ldrsh r0, [r4, r1] - cmp r6, r0 - beq _08063150 - movs r0, 0 - bl sub_8083CE0 -_08063150: - ldr r4, _08063174 - ldrh r1, [r4, 0x4] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08063168 - ldr r6, _08063178 - adds r0, r6, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - beq _0806317C -_08063168: - adds r0, r7, 0 - movs r1, 0x6 - bl SetMonsterActionFields - b _080631F4 - .align 2, 0 -_08063174: .4byte gRealInputs -_08063178: .4byte gUnknown_202EE10 -_0806317C: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _0806318E - adds r0, r6, 0 - adds r0, 0x2C - ldrb r0, [r0] - cmp r0, 0 - beq _08063198 -_0806318E: - adds r0, r7, 0 - movs r1, 0x7 - bl SetMonsterActionFields - b _080631F4 -_08063198: - bl sub_8062D88 - ldrh r1, [r4, 0x2] - ands r0, r1 - cmp r0, 0 - bne _080631AE - adds r0, r6, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _080631C8 -_080631AE: - ldr r2, [sp, 0xD4] - cmp r2, 0 - beq _080631C2 - ldrh r0, [r4] - lsrs r0, 8 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080631C2 - movs r5, 0x3 -_080631C2: - bl sub_8083D08 - b _080631F4 -_080631C8: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0806321C - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _08063214 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080631EC - adds r0, r6, 0 - adds r0, 0x2A - ldrb r0, [r0] - cmp r0, 0 - bne _080631EC - b _0806305C -_080631EC: - bl sub_8083D30 - movs r0, 0x1 - str r0, [sp, 0xE0] -_080631F4: - ldr r4, _08063210 - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x1E - bl sub_803E46C - ldrh r0, [r7] - subs r0, 0x6 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _08063224 - b _080633CC - .align 2, 0 -_08063210: .4byte gUnknown_202EE10 -_08063214: - movs r5, 0x2 - bl sub_8083D44 - b _080631F4 -_0806321C: - movs r5, 0x1 - bl sub_8083D44 - b _080631F4 -_08063224: - mov r1, r10 - cmp r1, 0 - beq _0806322C - b _08063038 -_0806322C: - ldr r2, [sp, 0xE0] - cmp r2, 0 - beq _08063234 - b _080633B6 -_08063234: - ldr r6, _08063270 - movs r1, 0x18 - ldrsh r0, [r4, r1] - str r0, [r6] - cmp r5, 0x1 - bne _08063274 - adds r0, r7, 0 - movs r1, 0x1D - bl SetMonsterActionFields - mov r0, r8 - adds r0, 0x24 - ldrb r1, [r0] - ldr r0, [sp, 0xE4] - adds r0, 0x48 - strb r1, [r0] - ldr r1, [r6] - ldr r0, [sp, 0xE4] - adds r0, 0x50 - strb r1, [r0] - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - movs r0, 0x8 - movs r1, 0x1B - bl sub_803E708 - b _080633B6 - .align 2, 0 -_08063270: .4byte gUnknown_202F2D8 -_08063274: - mov r0, r8 - ldr r1, [sp, 0xD4] - ldr r2, [sp, 0xD8] - bl sub_8063698 - cmp r5, 0x3 - bne _08063298 - movs r0, 0x20 - bl sub_8044FB4 - adds r6, r0, 0 - bl sub_8044F3C - lsls r0, 24 - cmp r0, 0 - bne _080632CC - movs r0, 0x21 - b _080632BC -_08063298: - cmp r5, 0x2 - bne _080632DE - mov r2, r9 - ldrb r0, [r2, 0x7] - cmp r0, 0 - beq _080632BA - movs r0, 0x1E - bl sub_8044FB4 - adds r6, r0, 0 - bl sub_8044F3C - lsls r0, 24 - cmp r0, 0 - bne _080632CC - movs r0, 0x33 - b _080632BC -_080632BA: - movs r0, 0x1F -_080632BC: - bl sub_8044FB4 - adds r6, r0, 0 - bl sub_8044F3C - lsls r0, 24 - cmp r0, 0 - beq _080632DE -_080632CC: - mov r0, r8 - bl GetTeamMemberEntityIndex - adds r2, r0, 0 - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_80637BC - b _080633B6 -_080632DE: - movs r0, 0x2 - bl sub_8009524 - add r0, sp, 0x10 - movs r1, 0x16 - bl sub_805FC30 - ldr r6, _0806337C - ldr r5, _08063380 - movs r0, 0x2A - adds r0, r6 - mov r10, r0 - adds r4, r7, 0 -_080632F8: - adds r0, r6, 0 - bl AddMenuCursorSprite - movs r0, 0x1B - bl sub_803E46C - ldrh r1, [r5, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806331C - movs r0, 0x1 - bl sub_8083CE0 - adds r0, r6, 0 - movs r1, 0x1 - bl sub_80136E0 -_0806331C: - ldrh r1, [r5, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08063334 - movs r0, 0x1 - bl sub_8083CE0 - adds r0, r6, 0 - movs r1, 0x1 - bl sub_8013744 -_08063334: - bl sub_8062D88 - ldrh r1, [r5, 0x2] - ands r1, r0 - cmp r1, 0 - bne _0806334A - adds r0, r6, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08063388 -_0806334A: - movs r1, 0x18 - ldrsh r0, [r6, r1] - bl sub_8044F3C - lsls r0, 24 - cmp r0, 0 - beq _08063384 - mov r0, r8 - bl GetTeamMemberEntityIndex - adds r1, r0, 0 - adds r0, r4, 0 - bl sub_80637A4 - ldrh r0, [r4] - subs r0, 0x14 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _08063376 - bl sub_8083D08 -_08063376: - movs r6, 0 - b _080633A0 - .align 2, 0 -_0806337C: .4byte gUnknown_202EE10 -_08063380: .4byte gRealInputs -_08063384: - bl sub_8083D30 -_08063388: - ldrh r1, [r5, 0x2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0806339A - mov r2, r10 - ldrb r0, [r2] - cmp r0, 0 - beq _080632F8 -_0806339A: - bl sub_8083D30 - movs r6, 0x1 -_080633A0: - ldr r0, _080633E0 - bl AddMenuCursorSprite - movs r0, 0x1B - bl sub_803E46C - cmp r6, 0x1 - bne _080633B2 - b _08063038 -_080633B2: - movs r0, 0 - str r0, [sp, 0xE0] -_080633B6: - movs r0, 0x1 - cmp r0, 0 - beq _080633CC - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - movs r0, 0x8 - movs r1, 0x1E - bl sub_803E708 -_080633CC: - ldr r0, [sp, 0xE0] - add sp, 0xE8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080633E0: .4byte gUnknown_202EE10 - thumb_func_end sub_8062F90 - - thumb_func_start sub_80633E4 -sub_80633E4: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - str r0, [sp, 0x20] - adds r7, r1, 0 - adds r4, r3, 0 - ldr r0, [sp, 0x44] - mov r8, r0 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - add r1, sp, 0x8 - ldr r0, _08063508 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - movs r0, 0 - add r5, sp, 0x50 - ldrb r6, [r5] - mov r5, r8 - strb r6, [r5] - add r6, sp, 0x4C - ldrb r6, [r6] - strb r6, [r5, 0x1] - strb r0, [r5, 0x3] - movs r6, 0 - ldr r5, _0806350C - ldr r0, _08063510 - mov r9, r0 - movs r1, 0x1 - mov r12, r1 - movs r3, 0x8C - lsls r3, 1 - adds r2, r7, r3 - movs r3, 0x3 -_08063432: - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - cmp r0, 0 - beq _0806343E - adds r6, 0x1 -_0806343E: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _08063432 - movs r3, 0x4 - mov r1, r9 - ldr r0, [r1] - movs r1, 0 - strh r0, [r5, 0x18] - strh r6, [r5, 0x1A] - strh r3, [r5, 0x1C] - add r2, sp, 0x4C - ldrh r2, [r2] - strh r2, [r5, 0x1E] - add r3, sp, 0x50 - ldrh r3, [r3] - strh r3, [r5, 0x20] - strh r1, [r5, 0x4] - movs r0, 0x10 - strh r0, [r5, 0x6] - strh r1, [r5, 0x14] - str r1, [r5] - adds r0, r5, 0 - adds r0, 0x28 - bl sub_801317C - movs r0, 0x4 - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - strh r0, [r4, 0x10] - strh r0, [r4, 0xE] - movs r0, 0xD - mov r6, r8 - strb r0, [r6, 0x2] - movs r0, 0x2 - strh r0, [r4, 0x8] - adds r1, r4, 0 - adds r1, 0x18 - adds r0, r4, 0 - adds r0, 0x48 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - adds r1, r4, 0 - adds r1, 0x30 - add r0, sp, 0x8 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - adds r0, r4, 0 - movs r1, 0x1 - bl sub_803ECB4 - adds r0, r5, 0 - movs r1, 0 - bl sub_80137B0 - ldr r1, _08063514 - movs r2, 0 - ldrsh r0, [r1, r2] - adds r0, 0x10 - lsls r0, 3 - strh r0, [r5, 0xC] - movs r3, 0x2 - ldrsh r0, [r1, r3] - adds r0, 0x1 - lsls r0, 3 - subs r0, 0x2 - strh r0, [r5, 0xE] - ldr r0, _08063518 - adds r1, r7, 0 - movs r2, 0 - bl SetMessageArgument_2 - movs r3, 0 - movs r5, 0x1 -_080634DE: - lsls r1, r3, 3 - movs r4, 0x8C - lsls r4, 1 - adds r1, r4 - adds r1, r7, r1 - ldr r6, [sp, 0x48] - adds r4, r6, r3 - movs r0, 0 - strb r0, [r4] - ldrb r1, [r1] - adds r2, r5, 0 - ands r2, r1 - cmp r2, 0 - bne _0806351C - ldr r1, _0806350C - movs r4, 0x18 - ldrsh r0, [r1, r4] - cmp r0, r3 - bne _08063526 - strh r2, [r1, 0x18] - b _08063526 - .align 2, 0 -_08063508: .4byte gUnknown_8106CAC -_0806350C: .4byte gUnknown_202EE10 -_08063510: .4byte gUnknown_202F2D8 -_08063514: .4byte gUnknown_2027370 -_08063518: .4byte gFormatBuffer_Monsters -_0806351C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08063526 - strb r5, [r4] -_08063526: - adds r3, 0x1 - cmp r3, 0x3 - ble _080634DE - movs r5, 0x8C - lsls r5, 1 - adds r2, r7, r5 - mov r6, r10 - str r6, [sp] - ldr r0, [sp, 0x4C] - str r0, [sp, 0x4] - movs r0, 0x4 - ldr r1, [sp, 0x20] - movs r3, 0 - bl sub_8063578 - movs r0, 0x2 - bl sub_80073B8 - ldr r0, _08063574 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - movs r1, 0 - movs r3, 0x2 - bl PrintFormattedStringOnWindow - movs r0, 0x2 - bl sub_80073E0 - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08063574: .4byte gUnknown_80FDFE8 - thumb_func_end sub_80633E4 - - thumb_func_start sub_8063578 -sub_8063578: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - str r0, [sp, 0x10] - str r1, [sp, 0x14] - adds r5, r2, 0 - mov r8, r3 - ldr r0, [sp, 0x40] - ldr r4, [sp, 0x44] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x18] - ldr r0, [r1, 0x70] - str r0, [sp, 0x1C] - mov r0, r8 - bl sub_80073B8 - ldr r0, _080635FC - ldr r1, [sp, 0x14] - movs r2, 0 - bl SubstitutePlaceholderStringTags - lsls r4, 3 - adds r4, 0xA - ldr r0, _08063600 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0 - mov r3, r8 - bl PrintFormattedStringOnWindow - movs r1, 0 - mov r9, r1 - ldr r0, [sp, 0x10] - cmp r9, r0 - bge _08063676 - add r1, sp, 0x4 - mov r10, r1 - adds r7, r5, 0 -_080635D0: - movs r0, 0 - str r0, [sp, 0x4] - movs r0, 0x6A - str r0, [sp, 0x8] - movs r0, 0 - mov r1, r10 - strb r0, [r1, 0x8] - mov r1, sp - ldrb r0, [r1, 0x18] - mov r1, r10 - strb r0, [r1, 0x9] - ldrb r1, [r7] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08063668 - ldr r1, [sp, 0x1C] - ldrb r0, [r1, 0x7] - cmp r0, 0 - beq _08063604 - movs r0, 0x2 - b _08063606 - .align 2, 0 -_080635FC: .4byte gFormatBuffer_Monsters -_08063600: .4byte gUnknown_80FE978 -_08063604: - movs r0, 0x4 -_08063606: - str r0, [sp, 0x4] - ldr r0, [sp, 0x14] - adds r1, r5, 0 - movs r2, 0x1 - bl CanMonsterUseMove - add r1, sp, 0x4 - movs r2, 0 - lsls r0, 24 - cmp r0, 0 - bne _0806361E - movs r2, 0x1 -_0806361E: - strb r2, [r1, 0x8] - ldr r0, _0806368C - adds r1, r5, 0 - add r2, sp, 0x4 - bl BufferMoveName - ldr r0, _08063690 - mov r1, r9 - bl GetMenuEntryYCoord - adds r4, r0, 0 - ldrb r1, [r7] - movs r0, 0x2 - ands r0, r1 - movs r6, 0xD - cmp r0, 0 - bne _08063658 - movs r6, 0x8 - mov r0, r9 - cmp r0, 0 - beq _08063658 - subs r2, r4, 0x2 - movs r0, 0x7 - str r0, [sp] - mov r0, r8 - movs r1, 0xC - movs r3, 0x78 - bl sub_80078A4 -_08063658: - movs r1, 0 - str r1, [sp] - adds r0, r6, 0 - adds r1, r4, 0 - ldr r2, _08063694 - mov r3, r8 - bl PrintFormattedStringOnWindow -_08063668: - adds r7, 0x8 - adds r5, 0x8 - movs r0, 0x1 - add r9, r0 - ldr r1, [sp, 0x10] - cmp r9, r1 - blt _080635D0 -_08063676: - mov r0, r8 - bl sub_80073E0 - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806368C: .4byte gFormatBuffer_Items -_08063690: .4byte gUnknown_202EE10 -_08063694: .4byte gUnknown_8106CC4 - thumb_func_end sub_8063578 - thumb_func_start sub_8063698 sub_8063698: push {r4-r7,lr} diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index 42ad2963a..9cd1975a4 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -116,7 +116,7 @@ void ShowTacticsMenu(ActionContainer *a0); void sub_804A728(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern bool8 sub_8071A8C(Entity *pokemon); extern void sub_80643AC(Entity *pokemon); -extern u8 sub_8062F90(Entity *, u32, u32, u32, u32); +extern bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); extern u8 gUnknown_202EE00; extern Entity *gLeaderPointer; @@ -4115,4 +4115,361 @@ void sub_8062D8C(ActionContainer *a0) sub_804A728(&entityOrg->pos, 0, 1, 1); } +extern s32 gUnknown_202F2D8; +extern s32 sub_8044FB4(u16 param_1); + +void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); +void sub_8063698(Entity *entity, u8 a1, u8 a2); +void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); +void sub_80637A4(ActionContainer *a0, s32 a1); + +bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) +{ + s32 i; + bool8 ret; + EntityInfo *entInfo = GetEntInfo(entity); + bool8 unkBool = TRUE; + EntityInfo *leaderInfo = GetEntInfo(GetLeader()); + WindowHeader header; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .unk14 = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + u8 unk[0x60]; + bool8 r10; + s32 r5; + bool8 bPress; + + gUnknown_202F2D8 = 0; + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + + if (MoveFlagExists(move) && move->moveFlags2 & 2) { + move->moveFlags2 &= ~(2); + gUnknown_202F2D8 = i; + } + } + + while (1) { + r5 = 0; + ret = FALSE; + r10 = FALSE; + sub_80633E4(entity, entInfo, a1, &windows, &header, unk, a3, a4); + while (1) { + AddMenuCursorSprite_(&gUnknown_202EE10, unk); + sub_803E46C(0x1E); + if (gRealInputs.repeated & DPAD_DOWN) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + s32 id = gUnknown_202EE10.menuIndex; + + if (rHeld) { + gUnknown_202F2D8 = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); + if (id != gUnknown_202F2D8) { + sub_8083CE0(0); + } + else { + sub_8083D30(); + } + r10 = TRUE; + break; + } + else { + sub_8013780(&gUnknown_202EE10, unk_FindMoveEnabledForAIAfter4(entInfo->moves.moves, id)); + if (id != gUnknown_202EE10.menuIndex) { + sub_8083CE0(0); + } + } + } + if (gRealInputs.repeated & DPAD_UP) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + s32 id = gUnknown_202EE10.menuIndex; + + if (rHeld) { + gUnknown_202F2D8 = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); + if (id != gUnknown_202F2D8) { + sub_8083CE0(0); + } + else { + sub_8083D30(); + } + r10 = TRUE; + break; + } + else { + sub_8013780(&gUnknown_202EE10, sub_8092DB8(entInfo->moves.moves, id)); + if (id != gUnknown_202EE10.menuIndex) { + sub_8083CE0(0); + } + } + } + + if ((gRealInputs.repeated & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { + SetMonsterActionFields(&leaderInfo->action, 6); + break; + } + if ((gRealInputs.repeated & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { + SetMonsterActionFields(&leaderInfo->action, 7); + break; + } + + if ((gRealInputs.pressed & sub_8062D88()) || gUnknown_202EE10.unk28.a_button) { + if (a1) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + if (rHeld) { + r5 = 3; + } + } + sub_8083D08(); + break; + } + + if (gRealInputs.pressed & START_BUTTON) { + r5 = 1; + sub_8083D44(); + break; + } + if (gRealInputs.pressed & SELECT_BUTTON) { + r5 = 2; + sub_8083D44(); + break; + } + // Fixme: r0/r1 regswap... + { + u32 pressed = B_BUTTON; + pressed &= gRealInputs.pressed; + if ((pressed) || gUnknown_202EE10.unk28.b_button) { + sub_8083D30(); + ret = TRUE; + break; + } + } + } + + AddMenuCursorSprite(&gUnknown_202EE10); + sub_803E46C(0x1E); + if (leaderInfo->action.action == 6 || leaderInfo->action.action == 7) { + unkBool = FALSE; + break; + } + + if (r10) + continue; + if (ret) + break; + + gUnknown_202F2D8 = gUnknown_202EE10.menuIndex; + if (r5 == 1) { + SetMonsterActionFields(&leaderInfo->action, 0x1D); + leaderInfo->action.actionParameters[0].actionUseIndex = entity->unk24; + leaderInfo->action.actionParameters[1].actionUseIndex = gUnknown_202F2D8; + sub_803EAF0(0, NULL); + sub_803E708(8, 0x1B); + ret = FALSE; + break; + } + + sub_8063698(entity, a1, a2); + if (r5 == 3) { + s32 r6 = sub_8044FB4(0x20); + if (!sub_8044F3C(r6)) { + r6 = sub_8044FB4(0x21); + if (sub_8044F3C(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else if (r5 == 2) { + if (entInfo->isTeamLeader) { + s32 r6 = sub_8044FB4(0x1E); + if (!sub_8044F3C(r6)) { + r6 = sub_8044FB4(0x33); + if (sub_8044F3C(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + s32 r6 = sub_8044FB4(0x1F); + if (sub_8044F3C(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + } + + sub_8009524(2); + sub_805FC30(&windows, 0x16); + while (1) { + AddMenuCursorSprite(&gUnknown_202EE10); + sub_803E46C(0x1B); + if (gRealInputs.repeated & DPAD_DOWN) { + sub_8083CE0(1); + sub_80136E0(&gUnknown_202EE10, 1); + } + if (gRealInputs.repeated & DPAD_UP) { + sub_8083CE0(1); + sub_8013744(&gUnknown_202EE10, 1); + } + + if ((gRealInputs.pressed & sub_8062D88()) || gUnknown_202EE10.unk28.a_button) { + if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { + sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); + if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { + sub_8083D08(); + } + bPress = FALSE; + break; + } + sub_8083D30(); + } + if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + sub_8083D30(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gUnknown_202EE10); + sub_803E46C(0x1B); + if (bPress != TRUE) { + ret = 0; + break; + } + } + + if (unkBool) { + sub_803EAF0(0, NULL); + sub_803E708(8, 0x1E); + } + + return ret; +} + +extern const Window gUnknown_8106CAC; +void sub_8063578(s32 a0, Entity *entity, Moves *moves, s32 a3, u8 a4, s32 a5); +extern const u8 *const gUnknown_80FDFE8; + +void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) +{ + s32 i, movesCount; + Window windowNew = gUnknown_8106CAC; + + header->f0 = arg7; + header->f1 = arg6; + header->f3 = 0; + + movesCount = 0; + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + if (MoveFlagExists(move)) { + movesCount++; + } + } + + gUnknown_202EE10.menuIndex = gUnknown_202F2D8; + gUnknown_202EE10.unk1A = movesCount; + gUnknown_202EE10.unk1C = 4; + gUnknown_202EE10.unk1E = arg6; + gUnknown_202EE10.unk20 = arg7; + gUnknown_202EE10.unk4 = 0; + gUnknown_202EE10.firstEntryY = 16; + gUnknown_202EE10.unk14.x = 0; + gUnknown_202EE10.unk0 = 0; + sub_801317C(&gUnknown_202EE10.unk28); + + windows->id[0].height = windows->id[0].unk10 = sub_80095E4(4, 0xC) + 2; + header->f2 = 13; + windows->id[0].pos.x = 2; + windows->id[1] = windows->id[3]; + windows->id[2] = windowNew; + sub_803ECB4(windows, TRUE); + sub_80137B0(&gUnknown_202EE10, 0); + gUnknown_202EE10.unkC = (gUnknown_2027370[0].unk0 + 16) * 8; + gUnknown_202EE10.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + SetMessageArgument_2(gFormatBuffer_Monsters[0], entInfo, 0); + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + + arg5[i] = 0; + if (!MoveFlagExists(move)) { + if (gUnknown_202EE10.menuIndex == i) { + gUnknown_202EE10.menuIndex = 0; + } + } + else if (MoveFlagLinkChain(move)) { + arg5[i] = 1; + } + } + + sub_8063578(4, entity, &entInfo->moves, 0, a2, arg6); + sub_80073B8(2); + PrintFormattedStringOnWindow(4, 0, gUnknown_80FDFE8, 2, '\0'); + sub_80073E0(2); +} + +extern const u8 gUnknown_8106CC4[]; + +void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s32 a5) +{ + s32 i; + EntityInfo *entInfo = GetEntInfo(entity); + + sub_80073B8(windowId); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); + PrintFormattedStringOnWindow((a5 * 8) + 10, 0, gUnknown_80FE978, windowId, '\0'); + for (i = 0; i < count; i++) { + s32 x, y; + unkStruct_80928C0 movStruct = {0, 106, 0, a4}; + Move *move = &moves->moves[i]; + + if (MoveFlagExists(move)) { + if (entInfo->isTeamLeader) { + movStruct.unk0 = 2; + } + else { + movStruct.unk0 = 4; + } + + movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); + BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); + y = GetMenuEntryYCoord(&gUnknown_202EE10, i); + if (MoveFlagLinkChain(move)) { + x = 13; + } + else { + x = 8; + if (i != 0) { + sub_80078A4(windowId, 12, y - 2, 120, 7); + } + } + PrintFormattedStringOnWindow(x, y, gUnknown_8106CC4, windowId, '\0'); + } + } + + sub_80073E0(windowId); +} + + // From ad52ac1b72e8e22f75a2c65f4dc4479143f5fada Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 1 Mar 2025 17:24:31 +0100 Subject: [PATCH 06/31] documentation dungeon menu --- asm/code_8040094.s | 16 +- asm/code_8041AD0.s | 2 +- asm/code_8045A00.s | 6 +- asm/code_8046CE4.s | 4 +- asm/code_805D8C8.s | 266 ++++++------ asm/code_808417C.s | 2 +- include/code_803E46C.h | 2 +- include/constants/dungeon_action.h | 4 +- include/dungeon_map_access.h | 2 +- include/menu_input.h | 4 +- src/code_803D110.c | 2 +- src/code_803E46C.c | 14 +- src/code_803E724.c | 10 +- src/code_8041AD0.c | 12 +- src/code_804267C.c | 12 +- src/code_8042B34.c | 2 +- src/code_8048480.c | 12 +- src/code_805D8C8_1.c | 660 +++++++++++++++-------------- src/code_8066D04.c | 68 +-- src/code_8069E0C.c | 2 +- src/code_806CD90.c | 2 +- src/code_8073CF0.c | 2 +- src/code_8077274_1.c | 10 +- src/code_807CD9C.c | 16 +- src/code_807E5AC.c | 8 +- src/code_8085E98.c | 4 +- src/code_80861A8.c | 4 +- src/code_80869E4.c | 26 +- src/dungeon_action.c | 5 +- src/dungeon_ai_leader.c | 2 +- src/dungeon_cutscenes.c | 152 +++---- src/dungeon_engine.c | 2 +- src/dungeon_map_access.c | 2 +- src/dungeon_message.c | 42 +- src/dungeon_move.c | 4 +- src/dungeon_music.c | 10 +- src/dungeon_util_1.c | 10 +- src/menu_input.c | 4 +- src/move_actions.c | 4 +- src/status.c | 2 +- 40 files changed, 712 insertions(+), 701 deletions(-) diff --git a/asm/code_8040094.s b/asm/code_8040094.s index 48176725e..87d0a7190 100644 --- a/asm/code_8040094.s +++ b/asm/code_8040094.s @@ -1527,7 +1527,7 @@ _08040CEA: bl sub_800EEC8 bl sub_800EF64 movs r0, 0x58 - bl sub_803E46C + bl DungeonRunFrameActions mov r0, sp bl sub_800EA84 adds r4, r0, 0 @@ -1574,7 +1574,7 @@ _08040D68: _08040D6E: bl sub_803EA10 movs r0, 0x26 - bl sub_803E46C + bl DungeonRunFrameActions _08040D78: adds r0, r4, 0 bl sub_800E9A8 @@ -1876,7 +1876,7 @@ _08040FE6: cmp r5, 0x77 bgt _08041022 movs r0, 0x59 - bl sub_803E46C + bl DungeonRunFrameActions ldr r4, [r7, 0x40] ldr r1, [sp, 0x18] cmp r1, 0x9 @@ -2055,7 +2055,7 @@ sub_8041108: bl sub_800EEF8 bl sub_800EF64 movs r0, 0x5A - bl sub_803E46C + bl DungeonRunFrameActions adds r0, r6, 0 bl sub_800E52C adds r1, r7, 0 @@ -2227,7 +2227,7 @@ _0804128C: bl sub_800EBC8 adds r4, r0, 0 movs r0, 0x5B - bl sub_803E46C + bl DungeonRunFrameActions adds r0, r4, 0 adds r1, r6, 0 movs r2, 0x6 @@ -2235,7 +2235,7 @@ _0804128C: b _080412C2 _080412BC: movs r0, 0x28 - bl sub_803E46C + bl DungeonRunFrameActions _080412C2: adds r0, r4, 0 bl sub_800E9A8 @@ -2558,7 +2558,7 @@ sub_8041500: cmp r0, 0 beq _08041518 movs r0, 0x5C - bl sub_803E46C + bl DungeonRunFrameActions movs r0, 0x5D bl sub_8052740 _08041518: @@ -2745,7 +2745,7 @@ _0804166C: .4byte gDungeon _08041670: .4byte 0x000181f2 _08041674: movs r0, 0x42 - bl sub_803E46C + bl DungeonRunFrameActions adds r5, 0x1 _0804167C: cmp r5, 0x63 diff --git a/asm/code_8041AD0.s b/asm/code_8041AD0.s index d45d8b6bd..72277ff9c 100644 --- a/asm/code_8041AD0.s +++ b/asm/code_8041AD0.s @@ -144,7 +144,7 @@ _0804236E: cmp r5, r4 bgt _08042384 movs r0, 0x42 - bl sub_803E46C + bl DungeonRunFrameActions adds r0, r6, 0 bl sub_800E9A8 lsls r0, 24 diff --git a/asm/code_8045A00.s b/asm/code_8045A00.s index 86e17e07e..4c38e4fa3 100644 --- a/asm/code_8045A00.s +++ b/asm/code_8045A00.s @@ -1315,7 +1315,7 @@ _080467BE: movs r2, 0 bl sub_80462AC movs r0, 0x13 - bl sub_803E46C + bl DungeonRunFrameActions ldr r2, [sp, 0x10] adds r2, 0x55 str r2, [sp, 0x10] @@ -1351,7 +1351,7 @@ _08046822: movs r3, 0xFF bl sub_80462AC movs r0, 0x13 - bl sub_803E46C + bl DungeonRunFrameActions add sp, 0x18 pop {r3-r5} mov r8, r3 @@ -1837,7 +1837,7 @@ _08046C06: blt _08046BAA _08046C14: movs r0, 0x13 - bl sub_803E46C + bl DungeonRunFrameActions movs r0, 0xA7 lsls r0, 3 add r0, sp diff --git a/asm/code_8046CE4.s b/asm/code_8046CE4.s index 34c302ab3..6a0fc46dd 100644 --- a/asm/code_8046CE4.s +++ b/asm/code_8046CE4.s @@ -249,7 +249,7 @@ _08047370: cmp r4, 0 beq _0804737A movs r0, 0x12 - bl sub_803E46C + bl DungeonRunFrameActions _0804737A: subs r5, 0x1 cmp r5, 0 @@ -788,7 +788,7 @@ _080477B2: cmp r3, 0 beq _080477BE movs r0, 0x17 - bl sub_803E46C + bl DungeonRunFrameActions _080477BE: ldr r0, [sp, 0x34] add r8, r0 diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index df8cb4dc1..1fa80c864 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -326,7 +326,7 @@ _08063908: movs r1, 0 bl nullsub_34 movs r0, 0x1C - bl sub_803E46C + bl DungeonRunFrameActions bl sub_8062D88 ldr r1, _08063948 ldrh r1, [r1, 0x2] @@ -337,7 +337,7 @@ _08063908: cmp r0, 0 beq _0806394C _0806392C: - bl sub_8083D08 + bl PlayDungeonConfirmationSE movs r7, 0x1 mov r1, r8 cmp r1, 0 @@ -358,7 +358,7 @@ _0806394C: cmp r0, 0 beq _08063962 _0806395A: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r7, 0x1 b _080639AE _08063962: @@ -379,7 +379,7 @@ _08063978: cmp r0, r4 beq _080639AE movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE b _080639AE _08063986: movs r0, 0x10 @@ -403,7 +403,7 @@ _080639A4: cmp r1, r4 beq _080639AE movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE _080639AE: cmp r7, 0x1 beq _080639CA @@ -1086,7 +1086,7 @@ _08063EEC: mov r0, r8 bl AddMenuCursorSprite movs r0, 0x1E - bl sub_803E46C + bl DungeonRunFrameActions mov r0, r10 ldrh r1, [r0, 0x4] movs r0, 0x80 @@ -1108,7 +1108,7 @@ _08063EEC: cmp r4, r0 beq _08063F2A movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE _08063F2A: mov r0, r10 ldrh r1, [r0, 0x4] @@ -1131,7 +1131,7 @@ _08063F2A: cmp r4, r0 beq _08063F5C movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE _08063F5C: bl sub_8062D88 mov r2, r10 @@ -1146,7 +1146,7 @@ _08063F5C: cmp r0, 0 beq _08063F8C _08063F76: - bl sub_8083D08 + bl PlayDungeonConfirmationSE movs r4, 0 b _08063FB2 .align 2, 0 @@ -1171,14 +1171,14 @@ _08063F8C: cmp r0, 0 beq _08063EEC _08063FAC: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r4, 0x1 _08063FB2: ldr r5, _08063FD0 adds r0, r5, 0 bl AddMenuCursorSprite movs r0, 0x1E - bl sub_803E46C + bl DungeonRunFrameActions cmp r4, 0x1 bne _08063FDC movs r0, 0x1 @@ -1189,7 +1189,7 @@ _08063FB2: .align 2, 0 _08063FD0: .4byte gUnknown_202EE10 _08063FD4: - bl sub_8083D44 + bl PlayDungeonStartButtonSE movs r4, 0x2 b _08063FB2 _08063FDC: @@ -1225,17 +1225,17 @@ _0806401C: adds r0, r4, 0 bl AddMenuCursorSprite movs r0, 0x1B - bl sub_803E46C + bl DungeonRunFrameActions ldrh r1, [r6, 0x4] movs r0, 0x80 ands r0, r1 cmp r0, 0 beq _08064040 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r4, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _08064040: ldrh r1, [r6, 0x4] movs r0, 0x40 @@ -1243,10 +1243,10 @@ _08064040: cmp r0, 0 beq _08064058 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r4, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _08064058: bl sub_8062D88 ldrh r1, [r6, 0x2] @@ -1269,7 +1269,7 @@ _0806406E: ldrsh r0, [r4, r2] cmp r0, 0x2 bne _08064090 - bl sub_8083D08 + bl PlayDungeonConfirmationSE b _08064094 .align 2, 0 _0806408C: .4byte gRealInputs @@ -1279,7 +1279,7 @@ _08064094: movs r4, 0 b _080640B2 _08064098: - bl sub_8083D30 + bl PlayDungeonCancelSE _0806409C: ldrh r1, [r6, 0x2] movs r0, 0x2 @@ -1290,14 +1290,14 @@ _0806409C: cmp r0, 0 beq _0806401C _080640AC: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r4, 0x1 _080640B2: ldr r6, _080640E4 adds r0, r6, 0 bl AddMenuCursorSprite movs r0, 0x1B - bl sub_803E46C + bl DungeonRunFrameActions movs r0, 0 movs r1, 0 bl sub_803EAF0 @@ -1758,13 +1758,13 @@ _080643F0: ldr r1, [sp, 0xC4] movs r2, 0x60 bl memcpy - bl sub_8083D44 + bl PlayDungeonStartButtonSE adds r0, r7, 0x4 mov r1, sp mov r2, r10 bl sub_806455C movs r0, 0x2D - bl sub_803E46C + bl DungeonRunFrameActions adds r0, r7, 0 bl sub_80645D4 strh r4, [r5, 0x8] @@ -1776,7 +1776,7 @@ _0806445C: adds r0, r5, 0 bl AddMenuCursorSprite movs r0, 0x2D - bl sub_803E46C + bl DungeonRunFrameActions mov r2, r8 ldrh r1, [r2, 0x4] movs r0, 0x80 @@ -1784,10 +1784,10 @@ _0806445C: cmp r0, 0 beq _08064482 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r5, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _08064482: mov r0, r8 ldrh r1, [r0, 0x4] @@ -1796,10 +1796,10 @@ _08064482: cmp r0, 0 beq _0806449C movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r5, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _0806449C: mov r2, r8 ldrh r1, [r2, 0x2] @@ -1817,7 +1817,7 @@ _080644B2: ldrsh r0, [r5, r1] cmp r0, 0x1 bne _080644D0 - bl sub_8083D08 + bl PlayDungeonConfirmationSE ldr r0, [sp, 0xCC] bl sub_80645F8 movs r4, 0x2 @@ -1842,7 +1842,7 @@ _080644D0: ldrh r1, [r0] adds r0, r4, 0 bl SetMonsterActionFields - bl sub_8083D08 + bl PlayDungeonConfirmationSE strb r6, [r4, 0x4] strh r6, [r4, 0x8] strh r6, [r4, 0xA] @@ -1854,7 +1854,7 @@ _080644D0: .align 2, 0 _08064508: .4byte gUnknown_202EE44 _0806450C: - bl sub_8083D30 + bl PlayDungeonCancelSE _08064510: mov r0, r8 ldrh r1, [r0, 0x2] @@ -1867,13 +1867,13 @@ _08064510: cmp r0, 0 beq _0806445C _08064524: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r4, 0x1 _0806452A: ldr r0, _08064558 bl AddMenuCursorSprite movs r0, 0x2D - bl sub_803E46C + bl DungeonRunFrameActions cmp r4, 0x2 bne _0806453C b _080643F0 @@ -2119,7 +2119,7 @@ _08064724: cmp r0, 0 beq _08064738 _08064732: - bl sub_8083D30 + bl PlayDungeonCancelSE b _080647D8 _08064738: cmp r5, 0 @@ -2130,7 +2130,7 @@ _08064740: movs r1, 0 bl nullsub_34 movs r0, 0x16 - bl sub_803E46C + bl DungeonRunFrameActions ldr r0, _08064788 ldrh r1, [r0, 0x2] movs r0, 0x1 @@ -2141,7 +2141,7 @@ _08064740: cmp r0, 0 beq _08064724 _08064760: - bl sub_8083D08 + bl PlayDungeonConfirmationSE cmp r5, 0 beq _080647D8 movs r4, 0 @@ -2171,7 +2171,7 @@ _0806478C: cmp r0, 0 beq _080647A0 _0806479A: - bl sub_8083D30 + bl PlayDungeonCancelSE b _080647CC _080647A0: cmp r4, r8 @@ -2182,7 +2182,7 @@ _080647A8: movs r1, 0 bl nullsub_34 movs r0, 0x16 - bl sub_803E46C + bl DungeonRunFrameActions ldr r0, _080647D4 ldrh r1, [r0, 0x2] movs r0, 0x1 @@ -2193,7 +2193,7 @@ _080647A8: cmp r0, 0 beq _0806478C _080647C8: - bl sub_8083D08 + bl PlayDungeonConfirmationSE _080647CC: adds r4, r7, 0 cmp r4, r5 @@ -2215,8 +2215,8 @@ _080647D8: bx r0 thumb_func_end sub_80645F8 - thumb_func_start sub_80647F0 -sub_80647F0: + thumb_func_start ShowDungeonStairsMenu +ShowDungeonStairsMenu: push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2285,13 +2285,13 @@ _08064834: ldr r1, [sp, 0xC4] movs r2, 0x60 bl memcpy - bl sub_8083D44 + bl PlayDungeonStartButtonSE adds r0, r7, 0x4 mov r1, sp mov r2, r10 bl sub_80649A0 movs r0, 0x2E - bl sub_803E46C + bl DungeonRunFrameActions adds r0, r7, 0 bl sub_8064A18 strh r4, [r5, 0x8] @@ -2303,7 +2303,7 @@ _080648A0: adds r0, r5, 0 bl AddMenuCursorSprite movs r0, 0x2E - bl sub_803E46C + bl DungeonRunFrameActions mov r2, r8 ldrh r1, [r2, 0x4] movs r0, 0x80 @@ -2311,10 +2311,10 @@ _080648A0: cmp r0, 0 beq _080648C6 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r5, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _080648C6: mov r0, r8 ldrh r1, [r0, 0x4] @@ -2323,10 +2323,10 @@ _080648C6: cmp r0, 0 beq _080648E0 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r5, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _080648E0: mov r2, r8 ldrh r1, [r2, 0x2] @@ -2344,7 +2344,7 @@ _080648F6: ldrsh r0, [r5, r1] cmp r0, 0x1 bne _08064914 - bl sub_8083D08 + bl PlayDungeonConfirmationSE ldr r0, [sp, 0xCC] bl sub_8064A3C movs r4, 0x2 @@ -2369,7 +2369,7 @@ _08064914: ldrh r1, [r0] adds r0, r4, 0 bl SetMonsterActionFields - bl sub_8083D08 + bl PlayDungeonConfirmationSE strb r6, [r4, 0x4] strh r6, [r4, 0x8] strh r6, [r4, 0xA] @@ -2381,7 +2381,7 @@ _08064914: .align 2, 0 _0806494C: .4byte gUnknown_202EE44 _08064950: - bl sub_8083D30 + bl PlayDungeonCancelSE _08064954: mov r0, r8 ldrh r1, [r0, 0x2] @@ -2394,13 +2394,13 @@ _08064954: cmp r0, 0 beq _080648A0 _08064968: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r4, 0x1 _0806496E: ldr r0, _0806499C bl AddMenuCursorSprite movs r0, 0x2E - bl sub_803E46C + bl DungeonRunFrameActions cmp r4, 0x2 bne _08064980 b _08064834 @@ -2419,7 +2419,7 @@ _08064980: .align 2, 0 _08064998: .4byte gUnknown_202EE3A _0806499C: .4byte gUnknown_202EE10 - thumb_func_end sub_80647F0 + thumb_func_end ShowDungeonStairsMenu thumb_func_start sub_80649A0 sub_80649A0: @@ -2611,7 +2611,7 @@ _08064B14: cmp r0, 0 beq _08064B28 _08064B22: - bl sub_8083D30 + bl PlayDungeonCancelSE b _08064BC8 _08064B28: cmp r6, 0 @@ -2622,7 +2622,7 @@ _08064B30: movs r1, 0 bl nullsub_34 movs r0, 0x16 - bl sub_803E46C + bl DungeonRunFrameActions ldr r0, _08064B78 ldrh r1, [r0, 0x2] movs r0, 0x1 @@ -2633,7 +2633,7 @@ _08064B30: cmp r0, 0 beq _08064B14 _08064B50: - bl sub_8083D08 + bl PlayDungeonConfirmationSE cmp r6, 0 beq _08064BC8 movs r4, 0 @@ -2663,7 +2663,7 @@ _08064B7C: cmp r0, 0 beq _08064B90 _08064B8A: - bl sub_8083D30 + bl PlayDungeonCancelSE b _08064BBC _08064B90: cmp r4, r8 @@ -2674,7 +2674,7 @@ _08064B98: movs r1, 0 bl nullsub_34 movs r0, 0x16 - bl sub_803E46C + bl DungeonRunFrameActions ldr r0, _08064BC4 ldrh r1, [r0, 0x2] movs r0, 0x1 @@ -2685,7 +2685,7 @@ _08064B98: cmp r0, 0 beq _08064B7C _08064BB8: - bl sub_8083D08 + bl PlayDungeonConfirmationSE _08064BBC: adds r4, r7, 0 cmp r4, r6 @@ -2707,8 +2707,8 @@ _08064BC8: bx r0 thumb_func_end sub_8064A3C - thumb_func_start sub_8064BE0 -sub_8064BE0: + thumb_func_start ShowDungeonOthersMenu +ShowDungeonOthersMenu: push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2743,17 +2743,17 @@ _08064C1A: adds r0, r6, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions ldrh r1, [r7, 0x4] movs r0, 0x80 ands r0, r1 cmp r0, 0 beq _08064C3E movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r6, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _08064C3E: ldrh r1, [r7, 0x4] movs r0, 0x40 @@ -2761,10 +2761,10 @@ _08064C3E: cmp r0, 0 beq _08064C56 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r6, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _08064C56: ldrh r1, [r7, 0x2] movs r0, 0x1 @@ -2794,7 +2794,7 @@ _08064C6A: cmp r0, 0 bne _08064CA4 _08064C8C: - bl sub_8083D08 + bl PlayDungeonConfirmationSE b _08064CC0 .align 2, 0 _08064C94: .4byte gDungeon @@ -2802,7 +2802,7 @@ _08064C98: .4byte gUnknown_202F2E0 _08064C9C: .4byte gUnknown_202EE10 _08064CA0: .4byte gRealInputs _08064CA4: - bl sub_8083D30 + bl PlayDungeonCancelSE b _08064CC0 _08064CAA: movs r0, 0x2 @@ -2814,14 +2814,14 @@ _08064CAA: cmp r0, 0 beq _08064C1A _08064CBA: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r5, 0x1 _08064CC0: ldr r4, _08064D68 adds r0, r4, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions mov r0, r10 cmp r0, 0 bne _08064C14 @@ -2899,7 +2899,7 @@ _08064D4C: _08064D68: .4byte gUnknown_202EE10 _08064D6C: .4byte gUnknown_202F2E0 _08064D70: .4byte gDungeon - thumb_func_end sub_8064BE0 + thumb_func_end ShowDungeonOthersMenu thumb_func_start sub_8064D74 sub_8064D74: @@ -2918,17 +2918,17 @@ _08064D8A: adds r0, r6, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions ldrh r1, [r7, 0x4] movs r0, 0x80 ands r0, r1 cmp r0, 0 beq _08064DAE movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r6, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _08064DAE: ldrh r1, [r7, 0x4] movs r0, 0x40 @@ -2936,10 +2936,10 @@ _08064DAE: cmp r0, 0 beq _08064DC6 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r6, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _08064DC6: ldrh r1, [r7, 0x2] movs r0, 0x1 @@ -2952,7 +2952,7 @@ _08064DC6: cmp r0, 0 beq _08064DE8 _08064DDA: - bl sub_8083D08 + bl PlayDungeonConfirmationSE b _08064DFE .align 2, 0 _08064DE0: .4byte gUnknown_202EE10 @@ -2967,14 +2967,14 @@ _08064DE8: cmp r0, 0 beq _08064D8A _08064DF8: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r5, 0x1 _08064DFE: ldr r4, _08064E2C adds r0, r4, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions cmp r5, 0 bne _08064E56 ldr r0, _08064E30 @@ -3041,17 +3041,17 @@ _08064E86: adds r0, r4, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions ldrh r1, [r6, 0x4] movs r0, 0x80 ands r0, r1 cmp r0, 0 beq _08064EAA movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r4, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _08064EAA: ldrh r1, [r6, 0x4] movs r0, 0x40 @@ -3059,10 +3059,10 @@ _08064EAA: cmp r0, 0 beq _08064EC2 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r4, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _08064EC2: ldrh r1, [r6, 0x4] movs r0, 0x20 @@ -3070,7 +3070,7 @@ _08064EC2: cmp r0, 0 beq _08064EE4 movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE movs r1, 0x18 ldrsh r0, [r4, r1] bl sub_8065A8C @@ -3084,7 +3084,7 @@ _08064EE4: cmp r0, 0 beq _08064EFC movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE movs r2, 0x18 ldrsh r0, [r4, r2] bl sub_8065B3C @@ -3100,14 +3100,14 @@ _08064EFC: cmp r0, 0 beq _08064F14 _08064F0E: - bl sub_8083D08 + bl PlayDungeonConfirmationSE b _08064F30 _08064F14: movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _08064F24 - bl sub_8083D30 + bl PlayDungeonCancelSE movs r7, 0x1 b _08064F30 _08064F24: @@ -3121,7 +3121,7 @@ _08064F30: ldr r0, _08064F4C bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions cmp r5, 0 bne _08064E7E adds r0, r7, 0 @@ -3155,17 +3155,17 @@ _08064F6E: adds r0, r4, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions ldrh r1, [r6, 0x4] movs r0, 0x80 ands r0, r1 cmp r0, 0 beq _08064F92 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r4, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _08064F92: ldrh r1, [r6, 0x4] movs r0, 0x40 @@ -3173,10 +3173,10 @@ _08064F92: cmp r0, 0 beq _08064FAA movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r4, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _08064FAA: ldrh r1, [r6, 0x4] movs r0, 0x20 @@ -3184,7 +3184,7 @@ _08064FAA: cmp r0, 0 beq _08064FD0 movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE movs r1, 0x18 ldrsh r0, [r4, r1] adds r0, 0x5 @@ -3199,7 +3199,7 @@ _08064FD0: cmp r0, 0 beq _08064FEA movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE movs r2, 0x18 ldrsh r0, [r4, r2] adds r0, 0x5 @@ -3216,14 +3216,14 @@ _08064FEA: cmp r0, 0 beq _08065002 _08064FFC: - bl sub_8083D08 + bl PlayDungeonConfirmationSE b _0806501E _08065002: movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _08065012 - bl sub_8083D30 + bl PlayDungeonCancelSE movs r7, 0x1 b _0806501E _08065012: @@ -3237,7 +3237,7 @@ _0806501E: ldr r0, _0806503C bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions cmp r5, 0 bne _08064F66 adds r0, r7, 0 @@ -3337,17 +3337,17 @@ _080650DC: adds r0, r5, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions ldrh r1, [r6, 0x4] movs r0, 0x80 ands r0, r1 cmp r0, 0 beq _08065100 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r5, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _08065100: ldrh r1, [r6, 0x4] movs r0, 0x40 @@ -3355,10 +3355,10 @@ _08065100: cmp r0, 0 beq _08065118 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r5, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _08065118: ldrh r1, [r6, 0x2] movs r0, 0x1 @@ -3371,7 +3371,7 @@ _08065118: cmp r0, 0 beq _0806513C _0806512C: - bl sub_8083D08 + bl PlayDungeonConfirmationSE b _08065152 .align 2, 0 _08065134: .4byte gUnknown_202EE10 @@ -3386,14 +3386,14 @@ _0806513C: cmp r0, 0 beq _080650DC _0806514C: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r7, 0x1 _08065152: ldr r4, _08065178 adds r0, r4, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions mov r0, r9 cmp r0, 0 bne _080650D6 @@ -3441,7 +3441,7 @@ sub_806519C: bl sub_80319A4 _080651B6: movs r0, 0x47 - bl sub_803E46C + bl DungeonRunFrameActions bl sub_80319F8 cmp r0, 0 beq _080651B6 @@ -4703,17 +4703,17 @@ _08065C0A: adds r0, r5, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions ldrh r1, [r6, 0x4] movs r0, 0x80 ands r0, r1 cmp r0, 0 beq _08065C2E movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r5, 0 movs r1, 0x1 - bl sub_80136E0 + bl MoveMenuCursorDownWrapAround _08065C2E: ldrh r1, [r6, 0x4] movs r0, 0x40 @@ -4721,10 +4721,10 @@ _08065C2E: cmp r0, 0 beq _08065C46 movs r0, 0x1 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r0, r5, 0 movs r1, 0x1 - bl sub_8013744 + bl MoveMenuCursorUpWrapAround _08065C46: ldrh r1, [r6, 0x2] movs r0, 0x1 @@ -4737,7 +4737,7 @@ _08065C46: cmp r0, 0 beq _08065C68 _08065C5A: - bl sub_8083D08 + bl PlayDungeonConfirmationSE b _08065C7E .align 2, 0 _08065C60: .4byte gUnknown_202EE10 @@ -4752,14 +4752,14 @@ _08065C68: cmp r0, 0 beq _08065C0A _08065C78: - bl sub_8083D30 + bl PlayDungeonCancelSE movs r7, 0x1 _08065C7E: ldr r4, _08065C9C adds r0, r4, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions cmp r7, 0 bne _08065CA0 movs r1, 0x18 @@ -5057,7 +5057,7 @@ _08065EF4: adds r0, r5, 0 bl AddMenuCursorSprite movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions ldr r0, _08065F3C ldrh r1, [r0, 0x2] mov r0, r10 @@ -5071,7 +5071,7 @@ _08065EF4: beq _08065F40 _08065F16: movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE adds r6, 0x1 cmp r6, 0x7 bne _08065F64 @@ -5096,7 +5096,7 @@ _08065F40: beq _08065F68 _08065F52: movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE subs r6, 0x1 movs r0, 0x1 negs r0, r0 @@ -5117,7 +5117,7 @@ _08065F68: cmp r0, 0 beq _08065F80 _08065F7A: - bl sub_8083D08 + bl PlayDungeonConfirmationSE b _08065F94 _08065F80: movs r0, 0x2 @@ -5129,10 +5129,10 @@ _08065F80: cmp r0, 0 beq _08065EF4 _08065F90: - bl sub_8083D30 + bl PlayDungeonCancelSE _08065F94: movs r0, 0x24 - bl sub_803E46C + bl DungeonRunFrameActions cmp r7, 0 beq _08065FA0 b _08065E0C @@ -5280,7 +5280,7 @@ _080660BE: ldr r0, _08066130 bl AddMenuCursorSprite movs r0, 0x45 - bl sub_803E46C + bl DungeonRunFrameActions _080660CE: ldr r2, _08066140 ldrb r1, [r2] @@ -5322,7 +5322,7 @@ _080660F8: beq _08066150 _0806611A: movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE movs r0, 0 mov r1, r10 cmp r1, 0 @@ -5356,14 +5356,14 @@ _08066150: cmp r0, 0 beq _08066174 _0806616E: - bl sub_8083D30 + bl PlayDungeonCancelSE b _0806618C _08066174: movs r0, 0xC ands r0, r1 cmp r0, 0 beq _0806608C - bl sub_8083D08 + bl PlayDungeonConfirmationSE movs r2, 0x1 mov r8, r2 _08066184: @@ -5530,7 +5530,7 @@ _080662BC: .4byte gUnknown_202F2FC _080662C0: .4byte gRealInputs _080662C4: movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE movs r0, 0 bl sub_80073B8 movs r0, 0x10 @@ -5564,7 +5564,7 @@ _080662C4: movs r0, 0 bl sub_80073E0 movs r0, 0x45 - bl sub_803E46C + bl DungeonRunFrameActions ldr r5, _08066350 movs r4, 0x5 _08066320: @@ -5572,7 +5572,7 @@ _08066320: movs r0, 0 bl _call_via_r1 movs r0, 0x45 - bl sub_803E46C + bl DungeonRunFrameActions subs r4, 0x1 cmp r4, 0 bge _08066320 @@ -5632,7 +5632,7 @@ _08066398: .4byte gUnknown_202F2FC _0806639C: .4byte gRealInputs _080663A0: movs r0, 0 - bl sub_8083CE0 + bl PlayDungeonCursorSE movs r0, 0 bl sub_80073B8 movs r0, 0x10 @@ -5666,7 +5666,7 @@ _080663A0: movs r0, 0 bl sub_80073E0 movs r0, 0xD - bl sub_803E46C + bl DungeonRunFrameActions ldr r5, _0806642C movs r4, 0x5 _080663FC: @@ -5674,7 +5674,7 @@ _080663FC: movs r0, 0 bl _call_via_r1 movs r0, 0xD - bl sub_803E46C + bl DungeonRunFrameActions subs r4, 0x1 cmp r4, 0 bge _080663FC diff --git a/asm/code_808417C.s b/asm/code_808417C.s index a23fae6b2..296721a32 100644 --- a/asm/code_808417C.s +++ b/asm/code_808417C.s @@ -116,7 +116,7 @@ _080842C4: cmp r0, 0 beq _08084290 _080842DA: - bl sub_8083D08 + bl PlayDungeonConfirmationSE add sp, 0xC4 pop {r3} mov r8, r3 diff --git a/include/code_803E46C.h b/include/code_803E46C.h index 270af6573..9588788e4 100644 --- a/include/code_803E46C.h +++ b/include/code_803E46C.h @@ -1,6 +1,6 @@ #ifndef GUARD_CODE_803E46C_H #define GUARD_CODE_803E46C_H -void sub_803E46C(u32); +void DungeonRunFrameActions(u32); #endif diff --git a/include/constants/dungeon_action.h b/include/constants/dungeon_action.h index 7ffe68b7d..3a6febe5b 100644 --- a/include/constants/dungeon_action.h +++ b/include/constants/dungeon_action.h @@ -8,8 +8,8 @@ enum DungeonAction ACTION_WALK = 0x2, ACTION_UNK5 = 0x5, // Switching between Pokémon in the moves menu. - ACTION_NEXT = 0x6, - ACTION_PREVIOUS = 0x7, + ACTION_MOVES_MENU_NEXT_MON = 0x6, + ACTION_MOVES_MENU_PREV_MON = 0x7, ACTION_PLACE_ITEM = 0x8, // Some actions are different between the leader and AI-controlled Pokémon. ACTION_PICK_UP_PLAYER = 0x9, // Picking up an item underfoot. diff --git a/include/dungeon_map_access.h b/include/dungeon_map_access.h index 71532776d..36fc0440e 100644 --- a/include/dungeon_map_access.h +++ b/include/dungeon_map_access.h @@ -19,7 +19,7 @@ void sub_8049B8C(void); void sub_8049BB0(s32 x, s32 y); void sub_804A1F0(s32 a0, s32 a1); void sub_804A49C(s32 a0, s32 a1); -void sub_804A728(DungeonPos *pos, s32 a1, u8 a2, u8 a3); +void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); void sub_804AA60(void); void sub_804AAAC(void); void sub_804AAD4(void); diff --git a/include/menu_input.h b/include/menu_input.h index 338b6f411..3b28cc41c 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -24,9 +24,9 @@ void AddMenuCursorSprite(MenuInputStruct *param_1); void sub_8013660(MenuInputStruct *param_1); void UpdateMenuCursorSpriteCoords(MenuInputStruct *param_1); void MoveMenuCursorDown(MenuInputStruct *param_1); -void sub_80136E0(MenuInputStruct *param_1, u8 param_2); +void MoveMenuCursorDownWrapAround(MenuInputStruct *param_1, u8 param_2); void MoveMenuCursorUp(MenuInputStruct *param_1); -void sub_8013744(MenuInputStruct *param_1, u8 param_2); +void MoveMenuCursorUpWrapAround(MenuInputStruct *param_1, u8 param_2); void sub_8013780(MenuInputStruct *param_1, s32 param_2); s32 sub_80137A8(MenuInputStruct *param_1); void sub_80137B0(MenuInputStruct *param_1, s32 param_2); diff --git a/src/code_803D110.c b/src/code_803D110.c index 6f40c9e93..8447fb3d1 100644 --- a/src/code_803D110.c +++ b/src/code_803D110.c @@ -317,7 +317,7 @@ void ShowDungeonNameBanner(void) } CloseFile(gDungeonNameBannerFontFile); - sub_803E46C(2); + DungeonRunFrameActions(2); } s32 sub_803DC14(const u8 *dungName, s32 strWidth, s32 a2) diff --git a/src/code_803E46C.c b/src/code_803E46C.c index 2bcefa896..6e3bd9f92 100644 --- a/src/code_803E46C.c +++ b/src/code_803E46C.c @@ -43,7 +43,7 @@ void sub_800F7D0(DungeonPos *); void sub_803E874(s32, s32); void sub_803EAF0(s32, s32); -void sub_803E46C(u32 a0) +void DungeonRunFrameActions(u32 a0) { if (gUnknown_203B40C != 0) sub_803E490(a0); @@ -150,7 +150,7 @@ void sub_803E668(u32 unused) void sub_803E708(s32 a0, u32 a1) { while (a0 != 0) { - sub_803E46C(a1); + DungeonRunFrameActions(a1); a0--; } } @@ -159,7 +159,7 @@ void sub_803E724(s32 r0) { do { - sub_803E46C(r0); + DungeonRunFrameActions(r0); } while (gRealInputs.held & 0xF0); } @@ -190,7 +190,7 @@ void sub_803E748(void) { if(gDungeonBrightness <= 0x1E) gDungeonBrightness++; sub_803E874(1, index2); - sub_803E46C(5); + DungeonRunFrameActions(5); } gUnknown_203B40D = 0; gDungeonBrightness = 0x1F; @@ -206,7 +206,7 @@ void sub_803E7C8(void) gUnknown_203B40D = 1; gDungeonBrightness = 0; - sub_803E46C(5); + DungeonRunFrameActions(5); for(index1 = 0; index1 < 0x2C; index1++) { @@ -221,7 +221,7 @@ void sub_803E7C8(void) gDungeon->unk181e8.unk18217 = index2; } } - sub_803E46C(5); + DungeonRunFrameActions(5); } gUnknown_203B40D = 0; } @@ -234,7 +234,7 @@ void sub_803E830(void) for(index = 0; index < 0x20; index++) { sub_803E874(0, 0); - sub_803E46C(5); + DungeonRunFrameActions(5); if(gDungeonBrightness > 0) gDungeonBrightness--; } diff --git a/src/code_803E724.c b/src/code_803E724.c index 85dcfaddc..d7244585e 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -55,7 +55,7 @@ extern u8 gUnknown_20274A5; extern s32 gUnknown_202EDCC; extern void sub_8040A84(); -extern void sub_8083D44(void); +extern void PlayDungeonStartButtonSE(void); extern void sub_8040A84(void); extern void sub_80400D4(void); extern void sub_8041888(u8 param_1); @@ -320,7 +320,7 @@ void sub_803EAF0(u32 a0, u8 *a1) break; case 8: if (gUnknown_203B40C != 0) { - sub_8083D44(); + PlayDungeonStartButtonSE(); sub_8052210(0); } CreateConfirmNameMenu(2, a1); @@ -328,13 +328,13 @@ void sub_803EAF0(u32 a0, u8 *a1) case 9: if (gUnknown_203B40C != 0) { sub_8052210(0); - sub_8083D44(); + PlayDungeonStartButtonSE(); } ResetUnusedInputStruct(); ShowWindows(&gUnknown_80F63D0, FALSE, TRUE); break; case 10: - sub_8083D44(); + PlayDungeonStartButtonSE(); break; case 150: // Dummy case put here to match, any value >= 150 works break; @@ -394,7 +394,7 @@ void sub_803ED30(s32 a0, Entity *mon, u8 a2, s32 a3) for (i = 0; i < 20; i++) { if (gUnknown_202EDE8.unk0 == 0) break; - sub_803E46C(0x29); + DungeonRunFrameActions(0x29); } var = sub_803EF90(a0, a2); diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index 6e87e719c..44d003ce3 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -86,7 +86,7 @@ s32 sub_80416E0(PixelPos *pos, u32 param_2, bool8 param_3) if (param_3) { counter = 0; while ((counter < 100 && (sub_800E9A8(ret)))) { - sub_803E46C(0x42); + DungeonRunFrameActions(0x42); counter++; } ret = -1; @@ -99,7 +99,7 @@ u32 sub_8041764(unkStruct_80416E0 *param_1, bool8 param_2) sub_800EE5C(param_1->unk0); sub_800EF64(); if(param_2) - sub_803E46C(0x42); + DungeonRunFrameActions(0x42); return sub_800E890(param_1); } @@ -112,11 +112,11 @@ void sub_804178C(u8 param_1) gDungeon->unk181e8.unk18204 = 0; if (sub_800E9FC(param_1) != 0) { while ((counter < 1000 && (sub_800E9FC(param_1) != 0))) { - sub_803E46C(0x4a); + DungeonRunFrameActions(0x4a); counter++; } - sub_803E46C(0x4a); - sub_803E46C(0x4a); + DungeonRunFrameActions(0x4a); + DungeonRunFrameActions(0x4a); } if ((counter == 1000) || (param_1 != 0)) { sub_800DBBC(); @@ -136,7 +136,7 @@ void sub_804178C(u8 param_1) gDungeonBrightness = 0x1f; } sub_803EA10(); - sub_803E46C(0x4a); + DungeonRunFrameActions(0x4a); if(gDungeonBrightness == 0x1f) break; }; gUnknown_2026E4E = 0x808; diff --git a/src/code_804267C.c b/src/code_804267C.c index aa73cb1e6..aa9b45b2d 100644 --- a/src/code_804267C.c +++ b/src/code_804267C.c @@ -60,7 +60,7 @@ void sub_8042390(Entity *entity, Item *item) sub_8005700(asStack_24,&entity->axObj); uVar6 = sub_800E49C(id,&local_14,asStack_24,0,sVar1); for (counter = 0; counter < 1000; counter++) { - sub_803E46C(0x42); + DungeonRunFrameActions(0x42); if (!sub_800E9A8(uVar6)) { break; } @@ -88,7 +88,7 @@ void sub_804245C(Entity *entity, Item *item) sub_8005700(asStack_24,&entity->axObj); uVar6 = sub_800E49C(id,&local_14,asStack_24,1,sVar1); for (counter = 0; counter < 1000; counter++) { - sub_803E46C(0x42); + DungeonRunFrameActions(0x42); if (!sub_800E9A8(uVar6)) { break; } @@ -128,7 +128,7 @@ s32 sub_8042520(Entity *a0) for (i = 0; i < 6; i++) { sub_800E8AC(uVar4, &pos, 0, iVar8, 0); - sub_803E46C(66); + DungeonRunFrameActions(66); pos.x += gAdjacentTileOffsets[dir].x * 4; pos.y += gAdjacentTileOffsets[dir].y * 4; iVar8 = (pos.y - gDungeon->unk181e8.cameraPixelPos.y) / 2; @@ -179,7 +179,7 @@ void sub_80426C8(u32 a0, u32 a1) sub_8042B34(a0, a1, 0x80); while (sub_8042CC0()) - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); sub_8042D7C(); sub_8040238(); @@ -192,7 +192,7 @@ void sub_8042730(Entity *a0, void *unused) sub_806CDD4(a0, 8, 8); for (i = 0; i < 100; i++) { - sub_803E46C(0x51); + DungeonRunFrameActions(0x51); if ((a0->axObj.axdata.sub1.unk10 & 3) != 0 || a0->axObj.unk43_animId2 != 8) break; } @@ -406,7 +406,7 @@ void sub_8042A84(s16 param_1, Entity *entity, u32 param_3) sub_803E708(param_3,0x42); do { if (entity->unk1C.raw > IntToF248_2(199.999).raw) break; - sub_803E46C(0x42); + DungeonRunFrameActions(0x42); entity->unk1C.raw += + r6; r6 += IntToF248_2(1).raw; iVar3 = (entity->pixelPos.y - entity->unk1C.raw) / 256; diff --git a/src/code_8042B34.c b/src/code_8042B34.c index fcee722dd..879cf7917 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -85,7 +85,7 @@ void sub_8042B34(s32 a0, s32 a1, s32 a2) sUnknown_203B414->unk8 = (a1 + 1) * 4; sub_800EE5C(gUnknown_80F6624[a0][0].unk0); sub_800EF64(); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); sUnknown_203B414->unk4 = a2; for (i = 0; i < sUnknown_203B414->unk8; i++) { s32 rnd; diff --git a/src/code_8048480.c b/src/code_8048480.c index 954771ce3..4d23c6d38 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -73,10 +73,10 @@ extern void sub_80637E8(ActionContainer *); extern void sub_8063BB4(ActionContainer *); extern void sub_8063CF0(ActionContainer *, u32); extern void sub_8063A70(ActionContainer *, u32); -extern u8 sub_8062F90(Entity *, u32, u32, u32, u32); +extern u8 ShowDungeonMovesMenu(Entity *, u32, u32, u32, u32); extern void sub_8044DF0(Entity *, u32, u32); extern void sub_803EAF0(u32, u32); -extern void sub_8044C10(bool8); +extern void SetLeaderActionToNothing(bool8); Entity *DrawFieldGiveItemMenu(u32, u32); extern void sub_8044E24(Entity *, u32, u32); extern void sub_804245C(Entity *, Item *); @@ -938,13 +938,13 @@ bool8 sub_8048B9C(Entity *entity, Item *item) else if (entityActionPtr->action == ACTION_UNK20) { sub_803EAF0(0,0); sub_8063BB4(entityActionPtr); - sub_8044C10(TRUE); + SetLeaderActionToNothing(TRUE); ret = TRUE; } else if (entityActionPtr->action == ACTION_UNK21) { sub_803EAF0(0,0); sub_8063CF0(entityActionPtr,0); - sub_8044C10(TRUE); + SetLeaderActionToNothing(TRUE); } else if ((entityActionPtr->action == ACTION_SET_MOVE) || (entityActionPtr->action == ACTION_UNSET_MOVE)) { sub_803EAF0(0,0); @@ -957,7 +957,7 @@ bool8 sub_8048B9C(Entity *entity, Item *item) LOOP_MIDDLE: ClearMonsterActionFields(entityActionPtr); - if (sub_8062F90(entity2,1,0,0,1) != 0) { + if (ShowDungeonMovesMenu(entity2,1,0,0,1) != 0) { if (ret) { ASM_MATCH_TRICK(ret); if (DisplayDungeonYesNoMessage(0,*gUnknown_80FECA0,1) == 1) { @@ -969,7 +969,7 @@ bool8 sub_8048B9C(Entity *entity, Item *item) } else { - sub_8044C10(TRUE); + SetLeaderActionToNothing(TRUE); break; } } diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index 9cd1975a4..d64df7197 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -62,9 +62,9 @@ extern bool8 sub_8048A68(Entity *param_1,Item *item); extern bool8 sub_8048950(Entity *param_1,Item *item); extern bool8 sub_8048B9C(Entity *param_1,Item *item); extern Item *sub_8044D90(Entity *, s32, u32); -extern void sub_8083D44(void); -extern void sub_8083D30(void); -extern void sub_8083D08(void); +extern void PlayDungeonStartButtonSE(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); extern void sub_806A6E8(Entity *); extern bool8 sub_8047084(s32 itemFlag); extern void HandleTrap(Entity *pokemon, DungeonPos *pos, int param_3, char param_4); @@ -73,18 +73,18 @@ bool8 sub_807EF48(void); void sub_806A2BC(Entity *a0, u8 a1); bool8 sub_805E874(void); bool8 sub_80701A4(Entity *a0); -void sub_80647F0(Entity *a0); +void ShowDungeonStairsMenu(Entity *a0); void sub_805E738(Entity *a0); void sub_803E708(s32 a0, s32 a1); void sub_8040A78(void); void sub_805E804(void); -void sub_8064BE0(void); +void ShowDungeonOthersMenu(void); void sub_8075680(u32); void sub_8094C88(void); void sub_8040A84(void); void sub_8047158(void); void sub_806A914(u8 a0, u8 a1, u8 a2); -void sub_8044C10(u8 a0); +void SetLeaderActionToNothing(u8 a0); u16 GetLeaderActionId(void); void sub_80978C8(s16 a0); static void TryCreateModeArrows(Entity *leader); @@ -94,15 +94,15 @@ void sub_803E724(s32 a0); void HandleTalkFieldAction(Entity *); bool8 sub_8044B28(void); bool8 IsNotAttacking(Entity *param_1, bool8 param_2); -void ShowFieldMenu(u8 a0, bool8 a1); +void ShowMainMenu(bool8 fromBPress, bool8 a1); bool8 sub_805EF60(Entity *a0, EntityInfo *a1); s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); -void DrawFieldMenu(u8 a0); -bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1); +void PrintOnMainMenu(bool8 printAll); +bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0); void sub_8060D24(UNUSED ActionContainer *a0); -bool8 sub_8060E38(Entity *a0); +bool8 ShowDungeonTeamMenu(Entity *a0); void sub_8062D8C(ActionContainer *a0); void sub_80637E8(ActionContainer *a0); void sub_8063B54(ActionContainer *a0); @@ -113,10 +113,10 @@ void sub_8063A70(ActionContainer *a0, bool8 a1); void sub_8063CF0(ActionContainer *a0, bool8 a1); void sub_8067768(ActionContainer *a0); void ShowTacticsMenu(ActionContainer *a0); -void sub_804A728(DungeonPos *pos, s32 a1, u8 a2, u8 a3); +void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern bool8 sub_8071A8C(Entity *pokemon); extern void sub_80643AC(Entity *pokemon); -extern bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); +extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); extern u8 gUnknown_202EE00; extern Entity *gLeaderPointer; @@ -172,9 +172,9 @@ void DungeonHandlePlayerInput(void) if (gDungeon->unk1 != 0) { gDungeon->unk1 = 0; if (!ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) { - sub_8044C10(1); + SetLeaderActionToNothing(1); sub_805E804(); - sub_80647F0(GetLeader()); + ShowDungeonStairsMenu(GetLeader()); ResetRepeatTimers(); ResetUnusedInputStruct(); if (GetLeaderActionId() != 0) { @@ -436,7 +436,7 @@ void DungeonHandlePlayerInput(void) SetBGOBJEnableFlags(0x1E); sub_803E708(0xA, 0x2F); while (1) { - sub_803E46C(0x2F); + DungeonRunFrameActions(0x2F); if (gRealInputs.pressed & SELECT_BUTTON) break; if (gRealInputs.pressed & B_BUTTON) @@ -452,8 +452,8 @@ void DungeonHandlePlayerInput(void) gUnknown_202EE00 = 1; sub_8040A84(); SetBGOBJEnableFlags(0); - sub_803E46C(0x2F); - sub_803E46C(0x2F); + DungeonRunFrameActions(0x2F); + DungeonRunFrameActions(0x2F); } if (gDungeon->unk644.unk29 != 0 && !sInDiagonalMode) { @@ -550,7 +550,7 @@ void DungeonHandlePlayerInput(void) } } - sub_803E46C(0xF); + DungeonRunFrameActions(0xF); } if (unkPtr->unk1821A != 0) { @@ -567,16 +567,16 @@ void DungeonHandlePlayerInput(void) gDungeon->unk644.unk29 = 0; if (leaderInfo->action.action != 0) { if (!IsNotAttacking(leader, FALSE)) { - sub_803E46C(0xF); + DungeonRunFrameActions(0xF); } break; } - sub_803E46C(0xF); + DungeonRunFrameActions(0xF); } else { - sub_803E46C(0xF); + DungeonRunFrameActions(0xF); sub_8047158(); - ShowFieldMenu((r6.a0_16 == 0) ? 1 : 0, r6.a0_24); + ShowMainMenu((r6.a0_16 == 0), r6.a0_24); ResetRepeatTimers(); ResetUnusedInputStruct(); sInRotateMode = FALSE; @@ -595,7 +595,7 @@ void DungeonHandlePlayerInput(void) } break; } - sub_803E46C(0xF); + DungeonRunFrameActions(0xF); if (gDungeon->unk4 != 0) break; } @@ -728,7 +728,7 @@ static void TryCreateModeArrows(Entity *leader) if (sInRotateMode && unkPtr->unk1821C != unkPtr->unk1821B) { unkPtr->unk1821C = unkPtr->unk1821B; - sub_804A728(&leader->pos, unkPtr->unk1821B, 0, sInRotateMode); + ChangeDungeonCameraPos(&leader->pos, unkPtr->unk1821B, 0, sInRotateMode); } } @@ -770,7 +770,7 @@ void sub_805E804(void) gDungeon->unk644.unk29 |= gDungeon->unk644.unk28; gDungeon->unk644.unk28 = 0; while (gDungeon->unk644.unk29 != 0 && gRealInputs.held & R_BUTTON) { - sub_803E46C(0x54); + DungeonRunFrameActions(0x54); } } @@ -1087,7 +1087,7 @@ extern void sub_803F508(Entity *); extern void sub_8041AD0(Entity *pokemon); extern void sub_8041AE0(Entity *pokemon); extern void sub_807EC28(bool8); -extern void sub_8083CE0(u8 param_1); +extern void PlayDungeonCursorSE(u8 param_1); extern MenuInputStruct gUnknown_202EE10; @@ -1170,116 +1170,125 @@ static UNUSED EWRAM_DATA u8 sUnused3[4] = {0}; static EWRAM_DATA s32 sTeamMenuChosenId = 0; static UNUSED EWRAM_DATA u8 sUnused4[4] = {0}; -void ShowFieldMenu(u8 a0_, bool8 a1) +enum +{ + MAIN_MENU_MOVES, + MAIN_MENU_ITEMS, + MAIN_MENU_TEAM, + MAIN_MENU_OTHERS, + MAIN_MENU_GROUND, +}; + +void ShowMainMenu(bool8 fromBPress, bool8 a1) { Item *item; s32 r10; - u8 a0 = a0_; // Needed to match. - s32 var_28; + bool8 printAll = fromBPress; + s32 chosenOption; s32 var_24; struct UnkMenuBitsStruct var_30; struct UnkMenuBitsStruct var_34; r10 = gDungeon->unk5C0; - var_28 = 0; + chosenOption = 0; var_24 = (gDungeon->unk5C0 > - 1); gDungeon->unk5C0 = -1; if (r10 >= 0) { - var_28 = r10; + chosenOption = r10; } if (a1) { PlayFanfareSE(0x137, 0x100); } else { - sub_8083D44(); + PlayDungeonStartButtonSE(); } while (1) { if (r10 < 0) { - sub_8044C10(1); + SetLeaderActionToNothing(1); sTeamMenuChosenId = -1; - DrawFieldMenu(a0); + PrintOnMainMenu(printAll); sub_806A2BC(GetLeader(), 0); while (1) { AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1D); + DungeonRunFrameActions(0x1D); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if ((gRealInputs.pressed & A_BUTTON || gUnknown_202EE10.unk28.a_button)) { if (gUnknown_202749A[gUnknown_202EE10.menuIndex + 1] == 7) { - sub_8083D08(); - var_28 = gUnknown_202EE10.menuIndex; + PlayDungeonConfirmationSE(); + chosenOption = gUnknown_202EE10.menuIndex; break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); - var_28 = -1; + PlayDungeonCancelSE(); + chosenOption = -1; break; } } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1D); - a0 = 1; + DungeonRunFrameActions(0x1D); + printAll = TRUE; } - r10 = var_28; - if (var_28 == 1) { + r10 = chosenOption; + if (chosenOption == MAIN_MENU_ITEMS) { u16 action; - sub_8044C10(1); + SetLeaderActionToNothing(1); var_34.a0_8 = 0; var_34.a0_16 = 1; var_34.a0_24 = 0; var_34.a0_32 = 0; - if (sub_805FD74(GetLeader(), &var_34)) { + if (ShowDungeonItemsMenu(GetLeader(), &var_34)) { r10 = -1; } - if (sub_805FD3C(&var_34) && sub_805FD74(GetLeader(), &var_34)) { - sub_8044C10(1); + if (sub_805FD3C(&var_34) && ShowDungeonItemsMenu(GetLeader(), &var_34)) { + SetLeaderActionToNothing(1); } action = GetLeaderActionId(); if (action == 12) { sub_8044D90(GetLeader(), 0, 12)->flags |= ITEM_FLAG_UNPAID; sub_8060D24(GetLeaderActionContainer()); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (action == 53) { item = sub_8044D90(GetLeader(), 0, 13); if (!sub_8048A68(GetLeader(), item)) { - sub_8044C10(1); + SetLeaderActionToNothing(1); } } else if (action == 16) { item = sub_8044D90(GetLeader(), 0, 14); if (!sub_8048950(GetLeader(), item)) { - sub_8044C10(1); + SetLeaderActionToNothing(1); } } else if (action == 44) { item = sub_8044D90(GetLeader(), 0, 15); if (!sub_8048B9C(GetLeader(), item)) { - sub_8044C10(1); + SetLeaderActionToNothing(1); } } else if (action == 60) { HandleSetItemAction(GetLeader(), TRUE); - sub_8044C10(1); + SetLeaderActionToNothing(1); sub_803E708(0x50, 0x4D); sub_8052210(0); break; } else if (action == 61) { HandleUnsetItemAction(GetLeader(), TRUE); - sub_8044C10(1); + SetLeaderActionToNothing(1); sub_803E708(0x50, 0x4D); sub_8052210(0); break; @@ -1288,31 +1297,31 @@ void ShowFieldMenu(u8 a0_, bool8 a1) if (GetLeaderActionId() != 0) break; } - else if (var_28 == 2) { - sub_8044C10(1); - if (sub_8060E38(GetLeader())) { + else if (chosenOption == MAIN_MENU_TEAM) { + SetLeaderActionToNothing(1); + if (ShowDungeonTeamMenu(GetLeader())) { r10 = -1; } if (GetLeaderActionId() == 0x1B) { sub_8061A38(GetLeaderActionContainer(), FALSE); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 0x1C) { sub_806752C(GetLeaderActionContainer()); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 0x34) { sub_8067768(GetLeaderActionContainer()); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 0x1A) { ShowTacticsMenu(GetLeaderActionContainer()); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 0x30) { sub_8061A38(GetLeaderActionContainer(), TRUE); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 0x19) { s32 i, count; @@ -1337,17 +1346,17 @@ void ShowFieldMenu(u8 a0_, bool8 a1) if (GetLeaderActionId() != 0) break; } - else if (var_28 == 0) { - s32 i, r7, r8, r9, r4; - Entity *r6; + else if (chosenOption == MAIN_MENU_MOVES) { + s32 i, currMonId, teamMonsCount, r9; + Entity *currEntity; - r7 = 0; - sub_8044C10(1); + currMonId = 0; + SetLeaderActionToNothing(1); for (i = 0; i < MAX_TEAM_MEMBERS; i++) { Entity *teamMon = gDungeon->teamPokemon[i]; if (EntityIsValid(teamMon)) { if (GetEntInfo(teamMon)->isTeamLeader) { - r7 = i; + currMonId = i; break; } } @@ -1355,78 +1364,78 @@ void ShowFieldMenu(u8 a0_, bool8 a1) while (1) { - sub_8044C10(0); - LOOP_START_NO_CALL: // Actions 6 and 7 don't call sub_8044C10 - r6 = NULL; + SetLeaderActionToNothing(0); + LOOP_START_NO_CALL: // Actions 6 and 7 don't call SetLeaderActionToNothing + currEntity = NULL; r9 = 0; - r8 = 0; + teamMonsCount = 0; for (i = 0; i < MAX_TEAM_MEMBERS; i++) { Entity *teamMon = gDungeon->teamPokemon[i]; if (sub_8071A8C(teamMon)) { - if (i == r7) { - r9 = r8; - r6 = teamMon; + if (i == currMonId) { + r9 = teamMonsCount; + currEntity = teamMon; } - r8++; + teamMonsCount++; } } - if (r6 == NULL) { - r6 = GetLeader(); + if (currEntity == NULL) { + currEntity = GetLeader(); } - sub_806A2BC(r6, 0); - sub_804A728(&r6->pos, 0, 1, 1); - GetLeaderInfo()->action.actionParameters[0].actionUseIndex = r7; - sub_8044C10(0); - if (sub_8062F90(r6, 0, 1, r9, r8)) { + sub_806A2BC(currEntity, 0); + ChangeDungeonCameraPos(&currEntity->pos, 0, 1, 1); + GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; + SetLeaderActionToNothing(FALSE); + if (ShowDungeonMovesMenu(currEntity, 0, 1, r9, teamMonsCount)) { r10 = -1; } - if (GetLeaderActionId() == 6) { - r4 = r7; + if (GetLeaderActionId() == ACTION_MOVES_MENU_NEXT_MON) { + s32 prevMonId = currMonId; for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (++r7 >= MAX_TEAM_MEMBERS) { - r7 = 0; + if (++currMonId >= MAX_TEAM_MEMBERS) { + currMonId = 0; } - r6 = gDungeon->teamPokemon[r7]; - if (sub_8071A8C(r6)) + currEntity = gDungeon->teamPokemon[currMonId]; + if (sub_8071A8C(currEntity)) break; } - GetLeaderInfo()->action.actionParameters[0].actionUseIndex = r7; - if (r4 != r7) { - sub_8083CE0(0); + GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; + if (prevMonId != currMonId) { + PlayDungeonCursorSE(0); } goto LOOP_START_NO_CALL; } - else if (GetLeaderActionId() == 7) { - r4 = r7; + else if (GetLeaderActionId() == ACTION_MOVES_MENU_PREV_MON) { + s32 prevMonId = currMonId; for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (--r7 < 0) { - r7 = MAX_TEAM_MEMBERS - 1; + if (--currMonId < 0) { + currMonId = MAX_TEAM_MEMBERS - 1; } - r6 = gDungeon->teamPokemon[r7]; - if (sub_8071A8C(r6)) + currEntity = gDungeon->teamPokemon[currMonId]; + if (sub_8071A8C(currEntity)) break; } - GetLeaderInfo()->action.actionParameters[0].actionUseIndex = r7; - if (r4 != r7) { - sub_8083CE0(0); + GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; + if (prevMonId != currMonId) { + PlayDungeonCursorSE(0); } goto LOOP_START_NO_CALL; } - else if (GetLeaderActionId() == 0x1D) { + else if (GetLeaderActionId() == ACTION_UNK1D) { sub_80637E8(GetLeaderActionContainer()); } - else if (GetLeaderActionId() == 0x1E || GetLeaderActionId() == 0x33) { + else if (GetLeaderActionId() == ACTION_SET_MOVE || GetLeaderActionId() == ACTION_UNSET_MOVE) { sub_8063A70(GetLeaderActionContainer(), FALSE); } - else if (GetLeaderActionId() == 0x1F) { + else if (GetLeaderActionId() == ACTION_UNK1F) { sub_8063B54(GetLeaderActionContainer()); } - else if (GetLeaderActionId() == 0x20) { + else if (GetLeaderActionId() == ACTION_UNK20) { sub_8063BB4(GetLeaderActionContainer()); } - else if (GetLeaderActionId() == 0x21) { + else if (GetLeaderActionId() == ACTION_UNK21) { sub_8063CF0(GetLeaderActionContainer(), FALSE); } else { @@ -1434,11 +1443,11 @@ void ShowFieldMenu(u8 a0_, bool8 a1) } } sub_806A2BC(GetLeader(), 0); - sub_804A728(&GetLeader()->pos, 0, 1, 1); + ChangeDungeonCameraPos(&GetLeader()->pos, 0, 1, 1); if (GetLeaderActionId() != 0) break; } - else if (var_28 == 4) { + else if (chosenOption == MAIN_MENU_GROUND) { Entity *leader = GetLeader(); const Tile *tile = GetTile(leader->pos.x, leader->pos.y); Entity *tileObject = tile->object; @@ -1446,48 +1455,48 @@ void ShowFieldMenu(u8 a0_, bool8 a1) if (GetEntityType(tileObject) == ENTITY_ITEM) { u16 action; - sub_8044C10(1); + SetLeaderActionToNothing(1); var_30.a0_8 = 0; var_30.a0_16 = 1; var_30.a0_24 = 1; var_30.a0_32 = 1; - if (sub_805FD74(GetLeader(), &var_30)) { + if (ShowDungeonItemsMenu(GetLeader(), &var_30)) { // This actually doesn't do anything, it's just there to make the code match as the compiler does a `lsl r0, r0, #0x10, mov r0, r4` ASM_MATCH_TRICK(leader); } - if (sub_805FD3C(&var_30) && sub_805FD74(GetLeader(), &var_30)) { - sub_8044C10(1); + if (sub_805FD3C(&var_30) && ShowDungeonItemsMenu(GetLeader(), &var_30)) { + SetLeaderActionToNothing(1); } action = GetLeaderActionId(); if (action == 0xC) { sub_8044D90(GetLeader(), 0, 0x10)->flags |= ITEM_FLAG_UNPAID; sub_8060D24(GetLeaderActionContainer()); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (action == 0x35) { item = sub_8044D90(GetLeader(), 0, 0x11); if (!sub_8048A68(GetLeader(), item)) { - sub_8044C10(1); + SetLeaderActionToNothing(1); } } else if (action == 0x10) { item = sub_8044D90(GetLeader(), 0, 0x12); if (!sub_8048950(GetLeader(), item)) { - sub_8044C10(1); + SetLeaderActionToNothing(1); } } else if (action == 0x2C) { item = sub_8044D90(GetLeader(), 0, 0x13); if (!sub_8048B9C(GetLeader(), item)) { - sub_8044C10(1); + SetLeaderActionToNothing(1); } } if (GetLeaderActionId() != 0) break; } else if (GetEntityType(tileObject) == ENTITY_TRAP) { - sub_8044C10(1); + SetLeaderActionToNothing(1); sub_80643AC(GetLeader()); if (GetLeaderActionId() != 0) break; @@ -1496,8 +1505,8 @@ void ShowFieldMenu(u8 a0_, bool8 a1) else { if (tile->terrainType & TERRAIN_TYPE_STAIRS) { - sub_8044C10(1); - sub_80647F0(GetLeader()); + SetLeaderActionToNothing(1); + ShowDungeonStairsMenu(GetLeader()); if (GetLeaderActionId() != 0) break; } @@ -1508,8 +1517,8 @@ void ShowFieldMenu(u8 a0_, bool8 a1) } r10 = -1; } - else if (var_28 == 3) { - sub_8064BE0(); + else if (chosenOption == MAIN_MENU_OTHERS) { + ShowDungeonOthersMenu(); if (gDungeon->unk4) break; if (GetLeaderActionId() != 0) @@ -1517,7 +1526,8 @@ void ShowFieldMenu(u8 a0_, bool8 a1) r10 = -1; } - if (var_28 < 0) + // B button + if (chosenOption < 0) break; if (var_24 == 0) { @@ -1552,7 +1562,7 @@ void GetWeatherName(u8 *dst, u8 weatherId); extern s32 gFormatArgs[]; -void DrawFieldMenu(u8 a0) +void PrintOnMainMenu(bool8 printAll) { s32 i, x, y, yLoop; @@ -1568,7 +1578,7 @@ void DrawFieldMenu(u8 a0) gUnknown_202EE10.unk14.x = 0; sub_801317C(&gUnknown_202EE10.unk28); sub_80137B0(&gUnknown_202EE10, 0x38); - if (a0) { + if (printAll) { sub_803EAF0(7, NULL); } else { @@ -1608,7 +1618,7 @@ void DrawFieldMenu(u8 a0) PrintStringOnWindow(8, y, gFieldMenuGroundPtr, 0, 0); sub_80073E0(0); - if (a0) { + if (printAll) { u32 hours, minutes, seconds; EntityInfo *leaderInfo = GetEntInfo(GetLeader()); const u8 *dungeonName = GetCurrentDungeonName(); @@ -1657,12 +1667,12 @@ bool8 sub_805FBE8(u8 *a0) sub_803EAF0(8, a0); do { - sub_803E46C(0xE); + DungeonRunFrameActions(0xE); DrawDialogueBoxString(); r4 = sub_8016080(); } while (r4 == 0); CleanConfirmNameMenu(); - sub_803E46C(0xE); + DungeonRunFrameActions(0xE); sub_803EAF0(0, NULL); if (r4 == 3 && *a0 != 0) return TRUE; @@ -1676,7 +1686,7 @@ extern s32 gUnknown_202EE6C; extern const u8 gUnknown_8106B50[]; extern void sub_803ECB4(Windows *a0, u8 a1); -static void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); +static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); void sub_805FC30(Windows *a0, s32 a1) { @@ -1761,7 +1771,7 @@ s32 sub_8060800(WindowHeader *a0, s32 a1); void sub_8060CE8(ActionContainer *a0); Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); -bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) +bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) { s32 i, i_r6; s32 r8; @@ -1839,7 +1849,7 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) } } } - CreateFieldItemMenu(r8, a0, var_2C, var_30, &var_FC, &var_3C); + PrintOnDungeonItemsMenu(r8, a0, var_2C, var_30, &var_FC, &var_3C); id = sUnknown_202F248[gUnknown_202EE10.unk1E]; if (id >= MAX_TEAM_MEMBERS) { @@ -1849,15 +1859,15 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) r4 = a0; } sub_806A2BC(r4, 0); - sub_804A728(&r4->pos, 0, 1, 1); + ChangeDungeonCameraPos(&r4->pos, 0, 1, 1); while (1) { AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x14); + DungeonRunFrameActions(0x14); if (!var_30) { if (sUnknown_202F258 > 1) { if ((gRealInputs.pressed & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); if (--r8 < 0) { r8 = sUnknown_202F258 - 1; } @@ -1865,7 +1875,7 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) break; } if ((gRealInputs.pressed & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); if (++r8 == sUnknown_202F258) { r8 = 0; } @@ -1874,12 +1884,12 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) } } if (gRealInputs.repeated & DPAD_DOWN && sub_8060860(r8)) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP && sub_8060860(r8)) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.pressed & SELECT_BUTTON && sUnknown_202F248[r8] <= 1) { s32 r3; @@ -1912,19 +1922,19 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) break; } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - sub_8083D08(); + PlayDungeonConfirmationSE(); sub_8060890(&a0->pos); r9 = 1; break; } if (gRealInputs.pressed & START_BUTTON) { - sub_8083D44(); + PlayDungeonStartButtonSE(); sub_8060890(&a0->pos); r9 = 3; break; } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); r9 = 2; break; } @@ -1936,7 +1946,7 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) } } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x14); + DungeonRunFrameActions(0x14); if (sUnknown_202F248[gUnknown_202EE10.unk1E] <= 1 && !(gTeamInventoryRef->teamItems[0].flags & ITEM_FLAG_EXISTS)) { r9 = 2; } @@ -1970,32 +1980,32 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) sub_805FC30(&var_FC, 0x16); while (1) { AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x14); + DungeonRunFrameActions(0x14); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { - sub_8083D08(); + PlayDungeonConfirmationSE(); sub_8060CE8(&a0Info->action); r9 = 0; break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); r9 = 1; break; } } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x14); + DungeonRunFrameActions(0x14); gDungeon->unk181e8.unk18212 = 0; if (r9 != 1 || var_30 != 0) { if (a0Info->action.action == 0x37 || a0Info->action.action == 0x38 || a0Info->action.action == 0x3E) { @@ -2015,7 +2025,7 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) break; } sub_803EAF0(0, NULL); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else { sub_803EAF0(0, 0); @@ -2036,7 +2046,7 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1) extern const struct Window gUnknown_8106B6C; extern const struct unkStruct_8090F58 gUnknown_8106B60; -static void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *windows, WindowHeader *a5) +static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *windows, WindowHeader *a5) { s32 i, x, y; s32 r10; @@ -2457,7 +2467,7 @@ void sub_8060D24(UNUSED ActionContainer *a0) sub_801B3C0(item); do { - sub_803E46C(0x16); + DungeonRunFrameActions(0x16); } while (sub_801B410() == 0); sub_801B450(); @@ -2505,30 +2515,33 @@ struct UnkFieldTeamMenuStruct u8 unk14[MAX_TEAM_MEMBERS]; }; -void DrawFieldTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *a1, bool8 a2); +void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *a1, bool8 a2); void sub_806145C(struct UnkFieldTeamMenuStruct *a0); void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); extern u8 gUnknown_202EE39; -bool8 sub_8060E38(Entity *a0) +bool8 ShowDungeonTeamMenu(Entity *a0) { s32 i; bool32 r10, ret; - struct UnkFieldTeamMenuStruct sp; - Windows var_84 = {0}; - - var_84.id[0].type = WINDOW_TYPE_WITH_HEADER; - var_84.id[0].pos.x = 2; - var_84.id[0].pos.y = 2; - var_84.id[0].width = 0xE; - var_84.id[0].height = 0x10; - var_84.id[0].unk10 = 0x10; - var_84.id[0].unk14 = &gUnknown_202F270; - var_84.id[1].type = WINDOW_TYPE_NORMAL; - var_84.id[2].type = WINDOW_TYPE_NORMAL; - var_84.id[3].type = WINDOW_TYPE_NORMAL; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 14, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .unk14 = &gUnknown_202F270, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; for (i = 0; i < MAX_TEAM_MEMBERS; i++) { Entity *teamMon = gDungeon->teamPokemon[i]; @@ -2538,8 +2551,8 @@ bool8 sub_8060E38(Entity *a0) } if (!gDungeon->unk644.unk17) { - var_84.id[0].type = WINDOW_TYPE_NORMAL; - var_84.id[0].pos.y++; + windows.id[0].type = WINDOW_TYPE_NORMAL; + windows.id[0].pos.y++; } while (1) { @@ -2547,44 +2560,44 @@ bool8 sub_8060E38(Entity *a0) bool32 r4; ret = FALSE; - DrawFieldTeamMenu(&sp, &var_84, TRUE); + PrintOnDungeonTeamMenu(&sp, &windows, TRUE); r10 = FALSE; while (1) { s32 id = sp.unk4[gUnknown_202EE10.menuIndex]; if (id >= 0) { Entity *teamMon = gDungeon->teamPokemon[id]; sub_806A2BC(teamMon, 0); - sub_804A728(&teamMon->pos, 0, 1, 1); + ChangeDungeonCameraPos(&teamMon->pos, 0, 1, 1); } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1B); + DungeonRunFrameActions(0x1B); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.pressed & START_BUTTON) { if (sp.unk14[gUnknown_202EE10.menuIndex] != 0) { - sub_8083D44(); + PlayDungeonStartButtonSE(); r10 = TRUE; break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { if (sp.unk14[gUnknown_202EE10.menuIndex] != 0) { - sub_8083D08(); + PlayDungeonConfirmationSE(); break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); ret = TRUE; break; } @@ -2594,11 +2607,11 @@ bool8 sub_8060E38(Entity *a0) if (id >= 0) { Entity *teamMon = gDungeon->teamPokemon[id]; sub_806A2BC(teamMon, 0); - sub_804A728(&teamMon->pos, 0, 1, 1); + ChangeDungeonCameraPos(&teamMon->pos, 0, 1, 1); } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1B); + DungeonRunFrameActions(0x1B); sub_804AA60(); if (ret) { break; @@ -2615,35 +2628,35 @@ bool8 sub_8060E38(Entity *a0) break; } - sub_805FC30(&var_84, 0x12); + sub_805FC30(&windows, 0x12); while (1) { AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1B); + DungeonRunFrameActions(0x1B); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { sub_80615B4(&GetEntInfo(a0)->action, &sp); - sub_8083D08(); + PlayDungeonConfirmationSE(); r4 = FALSE; break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); r4 = TRUE; break; } } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1B); + DungeonRunFrameActions(0x1B); if (r4 != TRUE) { ret = FALSE; break; @@ -2675,7 +2688,7 @@ extern const u8 gUnknown_8106BF4[]; extern void sub_8070968(u8 *buffer, EntityInfo *entityInfo, s32 colorNum); -void DrawFieldTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2) +void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2) { s32 r0; DungeonPos pos; @@ -2935,41 +2948,41 @@ void ShowTacticsMenu(ActionContainer *a0) if (scrollFirstId != 0) { sub_8062230(); } - sub_803E46C(0x3D); + DungeonRunFrameActions(0x3D); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); + PlayDungeonCursorSE(1); if (gUnknown_202EE10.menuIndex == 7) { if (tacticIds[8] != TACTIC_UNUSED) { for (i = 0; i < 6; i++) { gIwramTextFunc1(0); - sub_803E46C(0x3D); + DungeonRunFrameActions(0x3D); } scrollFirstId++; } menuIndex = 7; break; } - sub_80136E0(&gUnknown_202EE10, 0); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 0); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); + PlayDungeonCursorSE(1); if (gUnknown_202EE10.menuIndex == 0) { if (scrollFirstId != 0) { for (i = 0; i < 6; i++) { gIwramTextFunc2(0); - sub_803E46C(0x3D); + DungeonRunFrameActions(0x3D); } scrollFirstId--; } menuIndex = 0; break; } - sub_8013744(&gUnknown_202EE10, 0); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 0); } if (gRealInputs.pressed & START_BUTTON) { u32 tacticId = tacticIds[gUnknown_202EE10.menuIndex]; menuIndex = gUnknown_202EE10.menuIndex; - sub_8083D44(); + PlayDungeonStartButtonSE(); sub_8062748(tacticId); loopBreak = FALSE; break; @@ -2980,7 +2993,7 @@ void ShowTacticsMenu(ActionContainer *a0) u32 tacticId = tacticIds[gUnknown_202EE10.menuIndex]; menuIndex = gUnknown_202EE10.menuIndex; sub_8062D68(); - sub_8083D08(); + PlayDungeonConfirmationSE(); gUnknown_202EE6C = 0; sub_8044F5C(0x2F, 0); sub_8044F5C(0xC, 0); @@ -2991,30 +3004,30 @@ void ShowTacticsMenu(ActionContainer *a0) while (1) { changed = FALSE; AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x3D); + DungeonRunFrameActions(0x3D); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { changed = TRUE; break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); changed = FALSE; break; } } if (changed) { - sub_8083D08(); + PlayDungeonConfirmationSE(); if (gUnknown_202EE10.menuIndex == 0) { PlaySoundEffect(0x133); monInfo->tactic = tacticId; @@ -3035,7 +3048,7 @@ void ShowTacticsMenu(ActionContainer *a0) break; } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); loopBreak = TRUE; break; } @@ -3044,7 +3057,7 @@ void ShowTacticsMenu(ActionContainer *a0) if (addCursor) { AddMenuCursorSprite(&gUnknown_202EE10); } - sub_803E46C(0x3D); + DungeonRunFrameActions(0x3D); if (loopBreak) break; } @@ -3256,10 +3269,10 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } } - sub_803E46C(0x1C); + DungeonRunFrameActions(0x1C); if (gUnknown_202F270.f0 > 1 && !sub_80048C8()) { if ((gRealInputs.pressed & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); var_3C++; if (spArr[var_3C] == 0) { var_3C = 0; @@ -3267,7 +3280,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } if ((gRealInputs.pressed & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); var_3C--; if (var_3C == -1) { var_3C = 5; @@ -3281,12 +3294,12 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (var_2C) { if (unkVar == 2 && r5) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); if (unkInfoTabStruct.unkC[8] != 0) { s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc1(0); - sub_803E46C(28); + DungeonRunFrameActions(28); } unkMonStruct.unk56++; } @@ -3294,13 +3307,13 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); if (gUnknown_202EE10.menuIndex == 7) { if (unkInfoTabStruct.unkC[8] != 0) { s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc1(0); - sub_803E46C(28); + DungeonRunFrameActions(28); } unkMonStruct.unk56++; } @@ -3308,7 +3321,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else { - sub_80136E0(&gUnknown_202EE10, 0); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 0); } } @@ -3317,7 +3330,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc2(0); - sub_803E46C(28); + DungeonRunFrameActions(28); } unkMonStruct.unk56--; } @@ -3325,13 +3338,13 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); + PlayDungeonCursorSE(1); if (gUnknown_202EE10.menuIndex == 0) { if (unkMonStruct.unk56 != 0) { s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc2(0); - sub_803E46C(28); + DungeonRunFrameActions(28); } unkMonStruct.unk56--; } @@ -3339,7 +3352,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else { - sub_8013744(&gUnknown_202EE10, 0); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 0); } } } @@ -3349,7 +3362,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc1(0); - sub_803E46C(28); + DungeonRunFrameActions(28); } unkMonStruct.unk40++; } @@ -3357,13 +3370,13 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); + PlayDungeonCursorSE(1); if (gUnknown_202EE10.menuIndex == 7) { if (unkInfoTabStruct.unk0[8] != 0) { s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc1(0); - sub_803E46C(28); + DungeonRunFrameActions(28); } unkMonStruct.unk40++; } @@ -3371,7 +3384,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else { - sub_80136E0(&gUnknown_202EE10, 0); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 0); } } @@ -3380,7 +3393,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc2(0); - sub_803E46C(28); + DungeonRunFrameActions(28); } unkMonStruct.unk40--; } @@ -3388,13 +3401,13 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); + PlayDungeonCursorSE(1); if (gUnknown_202EE10.menuIndex == 0) { if (unkMonStruct.unk40 != 0) { s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc2(0); - sub_803E46C(28); + DungeonRunFrameActions(28); } unkMonStruct.unk40--; } @@ -3402,7 +3415,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else { - sub_8013744(&gUnknown_202EE10, 0); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 0); } } } @@ -3415,7 +3428,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 var = unkInfoTabStruct.unkC[gUnknown_202EE10.menuIndex]; r8 = gUnknown_202EE10.menuIndex; - sub_8083D44(); + PlayDungeonStartButtonSE(); sub_806285C(var); var_28 = 0; loopBreak = FALSE; @@ -3425,7 +3438,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 var = unkInfoTabStruct.unk0[gUnknown_202EE10.menuIndex]; r8 = gUnknown_202EE10.menuIndex; - sub_8083D44(); + PlayDungeonStartButtonSE(); sub_806262C(var); var_28 = 0; loopBreak = FALSE; @@ -3440,30 +3453,30 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) r8 = gUnknown_202EE10.menuIndex; sub_8062D68(); gUnknown_202EE6C = 0; - sub_8083D08(); + PlayDungeonConfirmationSE(); sub_8044F5C(0xC, 0); sub_805FC30(&windows, 0x16); while (1) { AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1C); + DungeonRunFrameActions(0x1C); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - sub_8083D08(); + PlayDungeonConfirmationSE(); sub_806285C(var); var_28 = 0; loopBreak = FALSE; break; } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); loopBreak = FALSE; break; } @@ -3476,7 +3489,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) r8 = gUnknown_202EE10.menuIndex; sub_8062D68(); gUnknown_202EE6C = var_2C; - sub_8083D08(); + PlayDungeonConfirmationSE(); sub_8044F5C(0x28, 0); sub_8044F5C(0xC, 0); if (CheckVariousStatuses2(entity, TRUE)) { @@ -3485,26 +3498,26 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) sub_805FC30(&windows, 0x16); while (1) { AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1C); + DungeonRunFrameActions(0x1C); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { - sub_8083D08(); + PlayDungeonConfirmationSE(); aPress = TRUE; break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); loopBreak = FALSE; aPress = FALSE; break; @@ -3525,13 +3538,13 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } } else { - sub_8083D08(); + PlayDungeonConfirmationSE(); loopBreak = TRUE; } break; } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); loopBreak = TRUE; break; } @@ -3541,7 +3554,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (var_30 != 0 || var_2C != 0) { AddMenuCursorSprite(&gUnknown_202EE10); } - sub_803E46C(0x1C); + DungeonRunFrameActions(0x1C); } if (loopBreak) { @@ -3643,17 +3656,16 @@ void sub_80625A4(s32 count, struct subStruct_203B240 **strings) sub_8062500(); } nullsub_34(&menuSub, 0); - sub_803E46C(0x16); + DungeonRunFrameActions(0x16); if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { - sub_8083D08(); + PlayDungeonConfirmationSE(); break; } if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); break; } } - } } @@ -3706,15 +3718,15 @@ void sub_806262C(u8 iqSkillId) sub_8062500(); } nullsub_34(&menuSub, 0); - sub_803E46C(0x16); + DungeonRunFrameActions(0x16); if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { bPress = FALSE; - sub_8083D08(); + PlayDungeonConfirmationSE(); break; } if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { bPress = TRUE; - sub_8083D30(); + PlayDungeonCancelSE(); break; } } @@ -3759,15 +3771,15 @@ void sub_8062748(u8 tacticId) sub_8062500(); } nullsub_34(&menuSub, 0); - sub_803E46C(62); + DungeonRunFrameActions(62); if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { bPress = FALSE; - sub_8083D08(); + PlayDungeonConfirmationSE(); break; } if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { bPress = TRUE; - sub_8083D30(); + PlayDungeonCancelSE(); break; } } @@ -3818,13 +3830,13 @@ void sub_806285C(s32 a0) while (1) { nullsub_34(&menuSub, 0); - sub_803E46C(22); + DungeonRunFrameActions(22); if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { - sub_8083D08(); + PlayDungeonConfirmationSE(); break; } if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); break; } } @@ -3854,7 +3866,7 @@ Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) windows.id[2] = gUnknown_8106C18; } - DrawFieldTeamMenu(&unkStruct, &windows, FALSE); + PrintOnDungeonTeamMenu(&unkStruct, &windows, FALSE); sub_80073B8(1); PrintStringOnWindow(4, 3, gWhichTextPtr2, 1, '\0'); sub_80073E0(1); @@ -3876,36 +3888,36 @@ Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) } prevId = currId; sub_806A2BC(entity, 0); - sub_804A728(&entity->pos, 0, 1, 1); + ChangeDungeonCameraPos(&entity->pos, 0, 1, 1); } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1B); + DungeonRunFrameActions(0x1B); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { if (unkStruct.unk14[gUnknown_202EE10.menuIndex] != 0) { - sub_8083D08(); + PlayDungeonConfirmationSE(); break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); bPress = TRUE; break; } } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1B); + DungeonRunFrameActions(0x1B); sub_804AA60(); sub_806A2BC(GetLeader(), 0); sub_803EAF0(0, 0); @@ -4039,9 +4051,9 @@ void sub_8062D8C(ActionContainer *a0) } sub_806A2BC(entityNew, 0); - sub_804A728(&entityNew->pos, 0, 1, 1); - sub_8044C10(1); - if (sub_8062F90(entityNew, 0, 1, countUntilId, count)) { + ChangeDungeonCameraPos(&entityNew->pos, 0, 1, 1); + SetLeaderActionToNothing(1); + if (ShowDungeonMovesMenu(entityNew, 0, 1, countUntilId, count)) { return; } @@ -4059,9 +4071,9 @@ void sub_8062D8C(ActionContainer *a0) a0->actionParameters[0].actionUseIndex = id; if (idBefore != id) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); } - sub_8044C10(1); + SetLeaderActionToNothing(1); } // Everything is the same as in the above if except for add/sub difference. else if (GetLeaderActionId() == 7) { @@ -4078,33 +4090,33 @@ void sub_8062D8C(ActionContainer *a0) a0->actionParameters[0].actionUseIndex = id; if (idBefore != id) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); } - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 29) { sub_80637E8(GetLeaderActionContainer()); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 30) { sub_803EAF0(0, NULL); sub_8063A70(GetLeaderActionContainer(), TRUE); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 51) { sub_803EAF0(0, NULL); sub_8063A70(GetLeaderActionContainer(), FALSE); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 31) { sub_803EAF0(0, NULL); sub_8063B54(GetLeaderActionContainer()); - sub_8044C10(1); + SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == 33) { sub_803EAF0(0, NULL); sub_8063CF0(GetLeaderActionContainer(), TRUE); - sub_8044C10(1); + SetLeaderActionToNothing(1); } if (GetLeaderActionId() != 0) @@ -4112,7 +4124,7 @@ void sub_8062D8C(ActionContainer *a0) } sub_806A2BC(entityOrg, 0); - sub_804A728(&entityOrg->pos, 0, 1, 1); + ChangeDungeonCameraPos(&entityOrg->pos, 0, 1, 1); } extern s32 gUnknown_202F2D8; @@ -4123,7 +4135,7 @@ void sub_8063698(Entity *entity, u8 a1, u8 a2); void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); void sub_80637A4(ActionContainer *a0, s32 a1); -bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) +bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) { s32 i; bool8 ret; @@ -4147,7 +4159,7 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) [3] = WINDOW_DUMMY, } }; - u8 unk[0x60]; + u8 unk[4]; bool8 r10; s32 r5; bool8 bPress; @@ -4169,7 +4181,7 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) sub_80633E4(entity, entInfo, a1, &windows, &header, unk, a3, a4); while (1) { AddMenuCursorSprite_(&gUnknown_202EE10, unk); - sub_803E46C(0x1E); + DungeonRunFrameActions(0x1E); if (gRealInputs.repeated & DPAD_DOWN) { bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; s32 id = gUnknown_202EE10.menuIndex; @@ -4177,10 +4189,10 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) if (rHeld) { gUnknown_202F2D8 = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); if (id != gUnknown_202F2D8) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); } else { - sub_8083D30(); + PlayDungeonCancelSE(); } r10 = TRUE; break; @@ -4188,7 +4200,7 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) else { sub_8013780(&gUnknown_202EE10, unk_FindMoveEnabledForAIAfter4(entInfo->moves.moves, id)); if (id != gUnknown_202EE10.menuIndex) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); } } } @@ -4199,10 +4211,10 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) if (rHeld) { gUnknown_202F2D8 = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); if (id != gUnknown_202F2D8) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); } else { - sub_8083D30(); + PlayDungeonCancelSE(); } r10 = TRUE; break; @@ -4210,7 +4222,7 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) else { sub_8013780(&gUnknown_202EE10, sub_8092DB8(entInfo->moves.moves, id)); if (id != gUnknown_202EE10.menuIndex) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); } } } @@ -4231,26 +4243,26 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) r5 = 3; } } - sub_8083D08(); + PlayDungeonConfirmationSE(); break; } if (gRealInputs.pressed & START_BUTTON) { r5 = 1; - sub_8083D44(); + PlayDungeonStartButtonSE(); break; } if (gRealInputs.pressed & SELECT_BUTTON) { r5 = 2; - sub_8083D44(); + PlayDungeonStartButtonSE(); break; } // Fixme: r0/r1 regswap... { - u32 pressed = B_BUTTON; - pressed &= gRealInputs.pressed; - if ((pressed) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + u32 bPressed = B_BUTTON; + bPressed &= gRealInputs.pressed; + if ((bPressed) || gUnknown_202EE10.unk28.b_button) { + PlayDungeonCancelSE(); ret = TRUE; break; } @@ -4258,7 +4270,7 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1E); + DungeonRunFrameActions(0x1E); if (leaderInfo->action.action == 6 || leaderInfo->action.action == 7) { unkBool = FALSE; break; @@ -4323,36 +4335,36 @@ bool8 sub_8062F90(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) sub_805FC30(&windows, 0x16); while (1) { AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1B); + DungeonRunFrameActions(0x1B); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); } if ((gRealInputs.pressed & sub_8062D88()) || gUnknown_202EE10.unk28.a_button) { if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { - sub_8083D08(); + PlayDungeonConfirmationSE(); } bPress = FALSE; break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); bPress = TRUE; break; } } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x1B); + DungeonRunFrameActions(0x1B); if (bPress != TRUE) { ret = 0; break; diff --git a/src/code_8066D04.c b/src/code_8066D04.c index 1b653f171..d1e358666 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -899,7 +899,7 @@ void sub_8067904(Entity *entity, u16 moveId) extern void sub_80684C4(void); void sub_8045064(void); -extern void sub_8083CE0(u8 param_1); +extern void PlayDungeonCursorSE(u8 param_1); extern void sub_8068344(void); bool8 sub_8044F3C(s32 param_1); void sub_8068310(s32 a0, PokemonStruct1 **a1); @@ -907,8 +907,8 @@ void sub_8067F00(u8 a0, PokemonStruct1 **a1, s32 a2, s32 a3, s32 a4); extern void sub_803ECB4(Windows *a0, u8 a1); u32 sub_8014140(s32 a0, const void *a1); void sub_8083D1C(void); -void sub_8083D08(void); -void sub_8083D30(void); +void PlayDungeonConfirmationSE(void); +void PlayDungeonCancelSE(void); void sub_806806C(PokemonStruct1 *a0); void sub_805FC30(Windows *a0, s32 a1); extern void sub_803EAF0(u32, u8 *); @@ -1011,13 +1011,13 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) } r4 = sub_8014140(0, gUnknown_8106DA4); - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); if (r4 == 2 && r5) { if (a2 - gUnknown_202F30C > 8) { s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc1(0); - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); } gUnknown_202F30C++; } @@ -1026,13 +1026,13 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) break; } if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); + PlayDungeonCursorSE(1); if (gUnknown_202EE10.menuIndex == 7) { if (a2 - gUnknown_202F30C > 8) { s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc1(0); - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); } gUnknown_202F30C++; } @@ -1040,7 +1040,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) r10 = 7; break; } - sub_80136E0(&gUnknown_202EE10, 0); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 0); } if (r4 == 1 && r7 != 0) { @@ -1048,7 +1048,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc2(0); - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); } gUnknown_202F30C--; } @@ -1057,13 +1057,13 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) break; } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); + PlayDungeonCursorSE(1); if (gUnknown_202EE10.menuIndex == 0) { if (gUnknown_202F30C != 0) { s32 i; for (i = 0; i < 6; i++) { gIwramTextFunc2(0); - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); } gUnknown_202F30C--; } @@ -1071,7 +1071,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) r10 = 0; break; } - sub_8013744(&gUnknown_202EE10, 0); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 0); } if (sub_80048C8()) { @@ -1084,19 +1084,19 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) break; } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - sub_8083D08(); + PlayDungeonConfirmationSE(); r7 = 1; break; } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); r7 = 2; break; } } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); if (r7 == 0) { continue; } @@ -1146,34 +1146,34 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) while (1) { AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); if (gRealInputs.repeated & DPAD_DOWN) { - sub_8083CE0(1); - sub_80136E0(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 1); } if (gRealInputs.repeated & DPAD_UP) { - sub_8083CE0(1); - sub_8013744(&gUnknown_202EE10, 1); + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 1); } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { - sub_8083D08(); + PlayDungeonConfirmationSE(); r7 = 1; break; } - sub_8083D30(); + PlayDungeonCancelSE(); } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); r7 = 0; break; } } AddMenuCursorSprite(&gUnknown_202EE10); - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); if (r7 != 0) { if (gUnknown_202EE10.menuIndex == 0) { a3[arrId]->unk0 |= 0x8000; @@ -1312,16 +1312,16 @@ void sub_806806C(PokemonStruct1 *a0) } r5 = sub_8014140(0, gUnknown_8106DA4); - sub_803E46C(0x1C); + DungeonRunFrameActions(0x1C); if ((gRealInputs.pressed & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); if (++r7 == 4) { r7 = 0; } break; } if ((gRealInputs.pressed & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { - sub_8083CE0(0); + PlayDungeonCursorSE(0); if (--r7 == -1) { r7 = 3; } @@ -1332,10 +1332,10 @@ void sub_806806C(PokemonStruct1 *a0) if (((gRealInputs.repeated & DPAD_DOWN) || r5 == 2) && var_C8.unk0[8] != 0) { s32 i; - sub_8083CE0(0); + PlayDungeonCursorSE(0); for (i = 0; i < 6; i++) { gIwramTextFunc1(0); - sub_803E46C(0x1C); + DungeonRunFrameActions(0x1C); } unkStruct.unk40++; break; @@ -1343,10 +1343,10 @@ void sub_806806C(PokemonStruct1 *a0) if (((gRealInputs.repeated & DPAD_UP) || r5 == 1) && unkStruct.unk40 != 0) { s32 i; - sub_8083CE0(0); + PlayDungeonCursorSE(0); for (i = 0; i < 6; i++) { gIwramTextFunc2(0); - sub_803E46C(0x1C); + DungeonRunFrameActions(0x1C); } unkStruct.unk40--; break; @@ -1358,18 +1358,18 @@ void sub_806806C(PokemonStruct1 *a0) } if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - sub_8083D08(); + PlayDungeonConfirmationSE(); loopBreak = TRUE; break; } if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); loopBreak = TRUE; break; } } - sub_803E46C(0x37); + DungeonRunFrameActions(0x37); if (loopBreak) { break; } diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index 7181cc058..baea43318 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -310,7 +310,7 @@ void sub_806A2BC(Entity *pokemon, u8 param_2) if (param_2 != '\0') { sub_804178C(1); while (gDungeon->unk12 < 0x3c) { - sub_803E46C(0x34); + DungeonRunFrameActions(0x34); } } sub_803E708(4,0x44); diff --git a/src/code_806CD90.c b/src/code_806CD90.c index b992b90b4..0810e0ac0 100644 --- a/src/code_806CD90.c +++ b/src/code_806CD90.c @@ -209,7 +209,7 @@ void sub_806CF18(Entity *entity) entityInfo = GetEntInfo(entity); for (i = 0; i < 100; i++) { - sub_803E46C(33); + DungeonRunFrameActions(33); if (!sub_808DA44(entityInfo->apparentID, entity->axObj.unk43_animId2)) break; diff --git a/src/code_8073CF0.c b/src/code_8073CF0.c index 6a06e5be5..fa2eb2d7d 100644 --- a/src/code_8073CF0.c +++ b/src/code_8073CF0.c @@ -912,7 +912,7 @@ bool8 UseAttack(Entity *a0) if (gDungeon->unk644.unk28 == 0 && r9) { sub_80526D0(0x35); for (loop = 0; loop < 24 / gUnknown_202F378; loop++) { - sub_803E46C(7); + DungeonRunFrameActions(7); for (i = 0; i < DUNGEON_MAX_POKEMON; i++) { Entity *mon = gDungeon->activePokemon[i]; if (EntityIsValid(mon)) { diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index 24550b07c..522521b4e 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -370,7 +370,7 @@ void BlindTarget(Entity *pokemon, Entity *target) entityInfo->blinkerClassStatus.turns = CalculateStatusTurns(target,gBlinkerTurnRange, TRUE) + 1; sub_8041E0C(target); TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FB7F4); - sub_803E46C(0x31); + DungeonRunFrameActions(0x31); sub_8049ED4(); sub_8040A84(); } @@ -423,7 +423,7 @@ void RestoreVisionTarget(Entity *pokemon, Entity *target) entityInfo->blinkerClassStatus.turns = CalculateStatusTurns(target,gEyedropsTurnRange, FALSE) + 1; sub_8041E3C(target); TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FB880); - sub_803E46C(0x31); + DungeonRunFrameActions(0x31); sub_8049ED4(); sub_8040A84(); } @@ -691,7 +691,7 @@ void SetChargeStatusTarget(Entity *pokemon, Entity *target, u8 newStatus, Move * if (bVar2) { break; } - sub_803E46C(0x53); + DungeonRunFrameActions(0x53); } } } @@ -1506,7 +1506,7 @@ void SendEyesightEndMessage(Entity * pokemon,Entity * target) entityInfo->blinkerClassStatus.status = STATUS_NONE; EntityUpdateStatusSprites(target); if (entityInfo->isTeamLeader) { - sub_803E46C(0x31); + DungeonRunFrameActions(0x31); sub_8049ED4(); sub_8040A84(); } @@ -1734,7 +1734,7 @@ void sub_807AB38(Entity *entity, bool8 forcedMonsterHouse) if (newMonster->unk1C.raw < IntToF248_2(1).raw) { break; } - sub_803E46C(0x57); + DungeonRunFrameActions(0x57); } newMonster->unk1C = IntToF248_2(0); } diff --git a/src/code_807CD9C.c b/src/code_807CD9C.c index 1edaa4117..0596c8e4f 100644 --- a/src/code_807CD9C.c +++ b/src/code_807CD9C.c @@ -129,7 +129,7 @@ void BlowAwayTarget(Entity *pokemon, Entity *target, u32 direction) { IncreaseEntityPixelPos(target,pos32.x,pos32.y); if (sub_8045888(target) != 0) { - sub_803E46C(0x19); + DungeonRunFrameActions(0x19); } } tile = GetTile(pos.x, pos.y); @@ -230,7 +230,7 @@ void sub_807D068(Entity *pokemon, DungeonPos *pos) pokemon->unk1C.raw = sin_4096(iVar8) * 0xc; sub_804535C(pokemon, &local_34); if (sub_8045888(pokemon)) { - sub_803E46C(0x1a); + DungeonRunFrameActions(0x1a); } iVar8 = iVar8 + 0xaa; } @@ -239,7 +239,7 @@ _0807D11E: local_34.y = posY; pokemon->unk1C = IntToF248(0); sub_804535C(pokemon,&local_34); - sub_803E46C(0x1a); + DungeonRunFrameActions(0x1a); } void WarpTarget(Entity *pokemon, Entity *target, u32 param_3, DungeonPos *pos) @@ -283,7 +283,7 @@ void WarpTarget(Entity *pokemon, Entity *target, u32 param_3, DungeonPos *pos) info->action.direction = direction & DIRECTION_MASK; sub_806CE68(target,direction); } - sub_803E46C(0x22); + DungeonRunFrameActions(0x22); target->unk1C.raw += 0x800; } } @@ -329,12 +329,12 @@ void WarpTarget(Entity *pokemon, Entity *target, u32 param_3, DungeonPos *pos) info->action.direction = direction & DIRECTION_MASK; sub_806CE68(target,direction); } - sub_803E46C(0x22); + DungeonRunFrameActions(0x22); target->unk1C.raw -= 0x400; } while (0 < target->unk1C.raw); } target->unk1C = IntToF248_2(0); - sub_803E46C(0x22); + DungeonRunFrameActions(0x22); if (flag) { TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FCB14); // But it dropped back at the same spot! } @@ -523,7 +523,7 @@ void HandleTrawlOrbAction(Entity *user, Entity *target) } } - sub_803E46C(0x13); + DungeonRunFrameActions(0x13); unkAngle += 0x22; if (!(animFrame & 3)) { var++; @@ -587,7 +587,7 @@ void HandlePounceOrbAction(Entity *pokemon, Entity *target, u8 r2) { sub_804535C(target, 0); if(!sub_8045888(target)) continue; - sub_803E46C(0x3A); + DungeonRunFrameActions(0x3A); } sub_806A5B8(target); diff --git a/src/code_807E5AC.c b/src/code_807E5AC.c index d3fd624f9..070d34a92 100644 --- a/src/code_807E5AC.c +++ b/src/code_807E5AC.c @@ -83,7 +83,7 @@ void sub_807E698(bool8 arg0) u8 savedByte; sub_8042818(GetApparentWeather(NULL), arg0); - sub_803E46C(0x25); + DungeonRunFrameActions(0x25); sub_804178C(1); savedByte = gUnknown_203B40D; gUnknown_203B40D = 1; @@ -91,7 +91,7 @@ void sub_807E698(bool8 arg0) for (i = 0; i < 64; i++) { bool8 r7 = FALSE; - sub_803E46C(0x25); + DungeonRunFrameActions(0x25); for (j = 0; j < COLOR_RAMP_COUNT; j++) { if (abs(gDungeon->colorRamp[j].r - fileData[weatherArrId + j].r) < 10) { gDungeon->colorRamp[j].r = fileData[weatherArrId + j].r; @@ -755,7 +755,7 @@ void sub_807F43C(Entity *target, Entity *attacker) sub_804535C(attacker, &var_54); if (sub_8045888(attacker)) { attacker->unk1C.raw = sin_4096(var_2C) << 5; - sub_803E46C(0x3B); + DungeonRunFrameActions(0x3B); if (!(i & 3)) { attackerDirection &= DIRECTION_MASK; sub_806CDD4(attacker, 6, attackerDirection); @@ -769,7 +769,7 @@ void sub_807F43C(Entity *target, Entity *attacker) var_54.y = pixelPosY; attacker->unk1C.raw = 0; sub_804535C(attacker, &var_54); - sub_803E46C(0x3B); + DungeonRunFrameActions(0x3B); GetEntInfo(attacker)->action.direction = attackerDirection & DIRECTION_MASK; tileEntity = GetTile(attackerPos.x, attackerPos.y)->monster; diff --git a/src/code_8085E98.c b/src/code_8085E98.c index 1a1d2db91..ec0886d27 100644 --- a/src/code_8085E98.c +++ b/src/code_8085E98.c @@ -46,7 +46,7 @@ u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,DungeonPos *param_4, sub_800EE5C(param_1_s32); sub_800EF64(); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); local_40.unk0 = param_1; local_40.unk4 = param_2; local_40.dir = param_3; @@ -69,7 +69,7 @@ void sub_8085F44(s32 param_1) { while (sub_800E9A8(param_1)) { sub_800E90C(&gDungeon->unk181e8.cameraPixelPos); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } } diff --git a/src/code_80861A8.c b/src/code_80861A8.c index 69fc275d7..076532e8c 100644 --- a/src/code_80861A8.c +++ b/src/code_80861A8.c @@ -20,7 +20,7 @@ static void sub_80861EC(Entity *); void sub_800EE5C(s32); void sub_800EF64(); -void sub_803E46C(s32); +void DungeonRunFrameActions(s32); s32 sub_800E700(s32); void sub_800569C(DungeonPos *, axdata *, u8); void sub_8085F44(s32); @@ -90,7 +90,7 @@ s32 sub_80861F8(s32 param_1,Entity *param_2,bool32 param_3) sub_800EE5C(param_1Copy2); sub_800EF64(); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); info = GetEntInfo(param_2); pos.x = 0; pos.y = 0; diff --git a/src/code_80869E4.c b/src/code_80869E4.c index 80578f4d5..a64cc5c99 100644 --- a/src/code_80869E4.c +++ b/src/code_80869E4.c @@ -147,7 +147,7 @@ void sub_8086448(void) YPos += 0x100; sub_803F878(XPos, YPos); sub_80855E4(sub_8086410); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_80855E4(sub_80863F8); @@ -173,7 +173,7 @@ static void sub_8086494(void) for (i = 0; i < 144; i++) { sub_80855E4(sub_8086424); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_80855E4(sub_8086310); @@ -193,7 +193,7 @@ void sub_8086500(void) YPos = GetCameraYPos(); sub_803F878(XPos, YPos); sub_80855E4(sub_8086434); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_80855E4(sub_8086404); @@ -213,7 +213,7 @@ void sub_808654C(void) YPos = GetCameraYPos(); sub_803F878(XPos, YPos); sub_80855E4(sub_8086434); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_80855E4(sub_8086404); @@ -232,7 +232,7 @@ void sub_8086598(void) YPos = GetCameraYPos(); sub_803F878(XPos, YPos - 0x100); sub_80855E4(sub_8086410); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_80855E4(sub_80863F8); @@ -252,7 +252,7 @@ void sub_80865E8(void) sub_803F878(XPos, YPos + 0x200); sub_80855E4(sub_8086424); sub_80855E4(sub_8086424); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_80855E4(sub_80863F8); @@ -272,7 +272,7 @@ void sub_808663C(void) sub_803F878(XPos, YPos + 0x200); sub_80855E4(sub_8086424); sub_80855E4(sub_8086424); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_80855E4(sub_80863F8); @@ -286,7 +286,7 @@ void sub_8086690(void) for (i = 0; i < 48; i++) { sub_80855E4(sub_8086434); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_80855E4(sub_8086404); @@ -308,7 +308,7 @@ UNUSED static void sub_80866FC(void) for (i = 0; i >= -250; i -= 10) { SetDungeonBGColorRGB(i, i, i, 1, 0); - sub_803E46C(70); + DungeonRunFrameActions(70); } } @@ -323,7 +323,7 @@ void sub_8086738(void) for (i = 0; i < 250; i += 10) { SetDungeonBGColorRGB(i, i, i, 1, 0); - sub_803E46C(70); + DungeonRunFrameActions(70); } } @@ -333,7 +333,7 @@ void sub_8086764(void) for (i = 250; i >= 0; i -= 5) { SetDungeonBGColorRGB(i, i, i, 1, 0); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_8085EB0(); @@ -348,7 +348,7 @@ void sub_8086794(void) for (i = 0; i < 200; i++) { SetDungeonBGColorRGB(0, 0, 0, 1, 0); BgColorCallNullsub4(); - sub_803E46C(70); + DungeonRunFrameActions(70); if ((i & 3) == 0) { gDungeonBrightness++; @@ -357,7 +357,7 @@ void sub_8086794(void) } } - sub_803E46C(70); + DungeonRunFrameActions(70); gDungeon->unk7 = 0; } diff --git a/src/dungeon_action.c b/src/dungeon_action.c index 840fa7caf..7b148347b 100644 --- a/src/dungeon_action.c +++ b/src/dungeon_action.c @@ -217,14 +217,13 @@ u8 *sub_8044BA8(u16 param_1, u8 id) } } -void sub_8044C10(u8 param_1) +void SetLeaderActionToNothing(bool8 clearActionFields) { EntityInfo * entityInfo = GetLeaderInfo(); entityInfo->action.action = ACTION_NOTHING; - if(param_1) - { + if (clearActionFields) { entityInfo->action.actionParameters[0].actionUseIndex = 0; entityInfo->action.actionParameters[1].actionUseIndex = 0; entityInfo->action.itemTargetPosition.x = -1; diff --git a/src/dungeon_ai_leader.c b/src/dungeon_ai_leader.c index ab9b35d93..9dd5ea6b2 100644 --- a/src/dungeon_ai_leader.c +++ b/src/dungeon_ai_leader.c @@ -169,7 +169,7 @@ bool8 sub_8072CF4(Entity *entity) sub_8052740(10); } sub_806A1E8(entity); - sub_803E46C(10); + DungeonRunFrameActions(10); } if (((ACTION_PASS_TURN < info->action.action) && (info->action.action != 4)) && (info->action.action != ACTION_WALK)) { info->attacking = TRUE; diff --git a/src/dungeon_cutscenes.c b/src/dungeon_cutscenes.c index 010fe490c..b2ec057b7 100644 --- a/src/dungeon_cutscenes.c +++ b/src/dungeon_cutscenes.c @@ -806,7 +806,7 @@ void sub_8087144(void) GetEntInfo(iVar4)->unk15F = 1; while( TRUE ) { if (!sub_8085B80(auStack_4c)) break; - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } GetEntInfo(iVar2)->unk15F = 0; GetEntInfo(iVar3)->unk15F = 0; @@ -909,7 +909,7 @@ void ZapdosPreFightDialogue(void) sub_8085B4C(&auStack_78,puStack_34,pEStack_34,1); GetEntInfo(partnerEntity)->unk15F = 1; while(sub_8085B80(&auStack_78)) { - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } GetEntInfo(partnerEntity)->unk15F = 0; @@ -927,7 +927,7 @@ void ZapdosPreFightDialogue(void) pEStack_2c[0] = partnerEntity; sub_8085B4C(&auStack_48,puStack_4c,pEStack_2c,1); while (sub_8085B80(&auStack_48)) { - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_80869E4(partnerEntity,2,1,DIRECTION_NORTHEAST); @@ -1012,7 +1012,7 @@ void ZapdosDropInEffect(Entity *zapdosEntity) for(iVar1 = 200; iVar1 >= 0; iVar1 -= 5) { GetEntInfo(zapdosEntity)->unk174 = IntToF248_2(iVar1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(0x1e,0x46); } @@ -1026,20 +1026,20 @@ void ZapdosScreenFlash(s32 numFlashes) for(index = 250; index > 199; index -= 10) { SetDungeonBGColorRGB(index,index,index / 2,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } } if (1 < numFlashes) { for(index = 250; index > 199; index -= 10) { SetDungeonBGColorRGB(index,index,index / 2,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } } for(index = 250; index >= 0; index -= 10) { SetDungeonBGColorRGB(index,index,index / 4,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_8085EB0(); } @@ -1261,7 +1261,7 @@ void MoltresDropInEffect(Entity * moltresEntity) for(iVar1 = 200; iVar1 >= 0; iVar1 -= 5) { GetEntInfo(moltresEntity)->unk174 = IntToF248_2(iVar1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } } @@ -1296,13 +1296,13 @@ void MoltresScreenFlash2(s32 xArg, s32 yArg) for (i = 250; i >= 20; i -= 10) { SetDungeonBGColorRGB(i, 0, 0, 1, 1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(0xA, 0x46); for (i = 250; i >= 0; i -= 10) { SetDungeonBGColorRGB(i, 0, 0, 1, 1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(0xA, 0x46); @@ -1319,14 +1319,14 @@ void MoltresScreenFlash3(void) for(iVar1 = 250; iVar1 > 9; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1 / 2,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(0x1e,0x46); PlaySoundEffect(0x1ed); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1 / 2,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(0x1e,0x46); sub_8085EB0(); @@ -1339,7 +1339,7 @@ void MoltresScreenDarken(void) for(iVar1 = 0; iVar1 >= -80; iVar1 -= 8) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,0,0); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } } @@ -1555,7 +1555,7 @@ void sub_8088484(Entity *param_1) { GetEntInfo(param_1)->unk174 = IntToF248_2(iVar1); SetDungeonBGColorRGB(iVar1,iVar1,iVar1 / 2,1,0); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } } @@ -1567,19 +1567,19 @@ void ArticunoScreenFlash(void) for(iVar1 = 250; iVar1 > 0x95; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1 / 2,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(4,0x46); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(0,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(4,0x46); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1 / 2,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(4,0x46); sub_8085EB0(); @@ -1592,7 +1592,7 @@ void sub_8088574(void) for(iVar1 = 0; iVar1 <= 80; iVar1 += 8) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,0,0); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } } @@ -1884,7 +1884,7 @@ void SceneGroudonMovement(Entity * groudonEntity) if ((iVar1 - 10U < 0xc) || (iVar1 > 0x1f)) { IncreaseEntityPixelPos(groudonEntity,0,0x100); } - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_80856C8(groudonEntity,groudonEntity->pos.x,groudonEntity->pos.y + 1); sub_80861D4(groudonEntity,0xf,DIRECTION_SOUTH); @@ -1901,21 +1901,21 @@ void GroudonScreenFlash(void) for(iVar1 = 250; iVar1 > 0x95; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1 / 2,iVar1 / 2,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1 / 2,0,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1 / 2,iVar1 / 2,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); sub_8085EB0(); @@ -1928,21 +1928,21 @@ void GroudonScreenFlash2(void) for(iVar1 = 250; iVar1 > 0x95; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1 / 2,iVar1 / 2,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1 / 2,0,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1 / 2,iVar1 / 2,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); sub_8085EB0(); @@ -2160,7 +2160,7 @@ void sub_80891F0(void) for(iVar1 = 0; iVar1 < 0x30; iVar1++) { sub_80855E4(sub_808919C); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_80855E4(sub_80891D0); } @@ -2215,7 +2215,7 @@ void sub_8089294(void) for(iVar1 = 0; iVar1 <= 0x77; iVar1++) { sub_80855E4(sub_8089224); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_80855E4(sub_80891D0); } @@ -2377,7 +2377,7 @@ void RayquazaDropInEffect(Entity *rayquazaEntity) } if (F248LessThanInt(iVar2, 0)) break; GetEntInfo(rayquazaEntity)->unk174 = iVar2; - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } GetEntInfo(rayquazaEntity)->unk174 = IntToF248_2(0); } @@ -2390,19 +2390,19 @@ void RayquazaScreenFlash(void) for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1 / 2, iVar1, iVar1 / 2, 1, 1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1 / 2, iVar1, 0, 1, 1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1 / 2, iVar1, iVar1 / 2, 1, 1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); sub_8085EB0(); @@ -2650,7 +2650,7 @@ void MewtwoDropInEffect(Entity *mewtwoEntity) } if (F248LessThanInt(iVar2, 0)) break; GetEntInfo(mewtwoEntity)->unk174 = iVar2; - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } GetEntInfo(mewtwoEntity)->unk174 = IntToF248_2(0); } @@ -2663,19 +2663,19 @@ void MewtwoScreenFlash(void) for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,0,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); sub_8085EB0(); @@ -2792,19 +2792,19 @@ void EnteiScreenFlash(void) for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1, iVar1 / 2, iVar1 / 2, 1, 1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1, 0, 0, 1, 1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1, iVar1 / 2, iVar1 / 2, 1, 1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); sub_8085EB0(); @@ -2947,19 +2947,19 @@ void RaikouScreenFlash(void) for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); sub_8085EB0(); @@ -3109,7 +3109,7 @@ void sub_808A528(Entity * param_1) } if (F248LessThanInt(iVar2, 0)) break; GetEntInfo(param_1)->unk174 = iVar2; - sub_803E46C(70); + DungeonRunFrameActions(70); } GetEntInfo(param_1)->unk174 = IntToF248_2(0); } @@ -3122,19 +3122,19 @@ void SuicuneScreenFlash(void) for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); sub_8085EB0(); @@ -3287,7 +3287,7 @@ void HoOhDropInEffect(Entity * param_1) } if (F248LessThanInt(iVar2, 0)) break; GetEntInfo(param_1)->unk174 = iVar2; - sub_803E46C(70); + DungeonRunFrameActions(70); } GetEntInfo(param_1)->unk174 = IntToF248_2(0); } @@ -3300,19 +3300,19 @@ void HoOhScreenFlash(void) for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); sub_8085EB0(); @@ -3442,13 +3442,13 @@ void LatiosScreenFlash(void) for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(70); + DungeonRunFrameActions(70); } sub_803E708(10,70); sub_8085EB0(); @@ -4073,21 +4073,21 @@ void JirachiWishGrantFlash(void) for(iVar1 = 0xFA; iVar1 > 0x95; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 0xFA; iVar1 > 0xC7; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 0xFA; iVar1 >= 0; iVar1 -= 10) { SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); sub_8085EB0(); @@ -4130,7 +4130,7 @@ void JirachiDropInEffect(Entity *jirachiEntity) } if (F248LessThanInt(iVar1, 0)) break; GetEntInfo(jirachiEntity)->unk174 = iVar1; - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } GetEntInfo(jirachiEntity)->unk174 = IntToF248_2(0); } @@ -4312,17 +4312,17 @@ void LugiaScreenFlash(void) PlaySoundEffect(0x1f6); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ SetDungeonBGColorRGB(0,0,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ SetDungeonBGColorRGB(0,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ SetDungeonBGColorRGB(0,0,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); sub_8085EB0(); @@ -4336,24 +4336,24 @@ void LugiaScreenFlash2(void) for(iVar1 = 0; iVar1 < 200; iVar1 += 100){ SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } for(iVar1 = 200; iVar1 >= 0; iVar1 -= 100){ SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(4,0x46); for(iVar1 = 0; iVar1 < 200; iVar1 += 100){ SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } for(iVar1 = 200; iVar1 >= 0; iVar1 -= 100){ SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); @@ -4365,7 +4365,7 @@ void sub_808C0CC(void) gDungeonBrightness = 0x1f; SetDungeonBGColorRGB(0,0,0,1,1); BgColorCallNullsub4(); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); gDungeon->unk7 = 0; LugiaScreenFlash(); } @@ -4465,17 +4465,17 @@ void KyogreScreenFlash(void) PlaySoundEffect(0x1f8); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ SetDungeonBGColorRGB(0,0,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ SetDungeonBGColorRGB(0,iVar1,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ SetDungeonBGColorRGB(0,0,iVar1,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); sub_8085EB0(); @@ -4486,7 +4486,7 @@ void sub_808C360(void) gDungeonBrightness = 0x1f; SetDungeonBGColorRGB(0,0,0,1,1); BgColorCallNullsub4(); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); gDungeon->unk7 = 0; KyogreScreenFlash(); } @@ -4552,17 +4552,17 @@ void DeoxysScreenFlash(void) PlaySoundEffect(0x2c1); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ SetDungeonBGColorRGB(iVar1,0,0,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ SetDungeonBGColorRGB(iVar1,iVar1,0,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ SetDungeonBGColorRGB(iVar1,0,0,1,1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_803E708(10,0x46); sub_8085EB0(); @@ -4573,7 +4573,7 @@ void sub_808C550(void) gDungeonBrightness = 0x1f; SetDungeonBGColorRGB(0,0,0,1,1); BgColorCallNullsub4(); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); gDungeon->unk7 = 0; DeoxysScreenFlash(); } @@ -4678,7 +4678,7 @@ void CelebiJoinDialogue(void) DungeonStopBGM(); PlaySoundEffect(0xcc); while (IsFanfareSEPlaying_2(0xcc) != 0) { - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } DungeonStartNewBGM(MUS_FRIEND_AREA_HEALING_FOREST); PlaySoundEffect(0x1c7); @@ -4751,11 +4751,11 @@ void sub_808C8E0(Entity *entity) sub_806CDD4(entity, 0, DIRECTION_SOUTH); for(iVar1 = 0; iVar1 < 16; iVar1++){ GetEntInfo(entity)->unk174 = IntToF248_2(iVar1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } for(iVar1 = 16; iVar1 < 200; iVar1 += 4){ GetEntInfo(entity)->unk174 = IntToF248_2(iVar1); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_8086A3C(entity); } @@ -4858,7 +4858,7 @@ void MedichamRescueDialogue(void) for(counter = 0x17; counter >= 0; counter--) { IncreaseEntityPixelPos(medichamEntity, 0, 0x100); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_806CE68(medichamEntity, DIRECTION_SOUTH); sub_803E708(0x20, 0x46); @@ -4947,7 +4947,7 @@ void SmeargleRescueDialogue(void) for(counter = 0x17; counter >= 0; counter--) { IncreaseEntityPixelPos(smeargleEntity, 0, 0x100); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } sub_806CE68(smeargleEntity, DIRECTION_SOUTH); sub_803E708(0x20, 0x46); diff --git a/src/dungeon_engine.c b/src/dungeon_engine.c index 686853216..8ab386c0f 100644 --- a/src/dungeon_engine.c +++ b/src/dungeon_engine.c @@ -125,7 +125,7 @@ static bool8 xxx_dungeon_80442D0(bool8 param_1) if ((UseAttack(0) == 0) && ((gDungeon->unk644.unk28 != 0 || (gDungeon->unk644.unk2F != 0)))) { - sub_803E46C(0xc); + DungeonRunFrameActions(0xc); } GetEntInfo(entity)->speedStageChanged = FALSE; if (sub_8044B28()) return FALSE; diff --git a/src/dungeon_map_access.c b/src/dungeon_map_access.c index 858fd80a5..fd28b0daf 100644 --- a/src/dungeon_map_access.c +++ b/src/dungeon_map_access.c @@ -761,7 +761,7 @@ void sub_804A49C(s32 a0, s32 a1) sub_80098F8(3); } -void sub_804A728(DungeonPos *pos, s32 a1, u8 a2, u8 a3) +void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3) { DungeonPos spArray[6]; u16 *src; diff --git a/src/dungeon_message.c b/src/dungeon_message.c index ccbaccb88..388de1883 100644 --- a/src/dungeon_message.c +++ b/src/dungeon_message.c @@ -36,11 +36,11 @@ extern void sub_803EAF0(s32, s32); extern void sub_8040238(void); extern void sub_8083E28(void); extern u32 sub_8014140(s32 a0, const void *a1); -extern void sub_8083D30(void); -extern void sub_8083D08(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); extern void sub_8007334(s32 a0); extern void sub_80087EC(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); -extern void sub_8083CE0(u8 param_1); +extern void PlayDungeonCursorSE(u8 param_1); extern u32 gUnknown_202EDD0; extern u8 gUnknown_203B40C; @@ -93,7 +93,7 @@ void sub_8052210(bool8 a0) if (a0 && gUnknown_202EDD0 == 3) { sub_803EAF0(0, 0); - sub_803E46C(11); + DungeonRunFrameActions(11); } } @@ -196,7 +196,7 @@ static void DisplayMessageAddToLog(Entity *pokemon, const u8 *str, bool8 r2) if (val != gDungeon->unk1BDD4.unk1C062) { break; } - sub_803E46C(0); + DungeonRunFrameActions(0); } if (*str == '\0') @@ -305,7 +305,7 @@ void sub_80526D0(s32 r0) { struct UnkStructDungeon1BDD4 *strPtr = &gDungeon->unk1BDD4; while (strPtr->unk1C06C != 0 || gDungeon->unk1BDD4.unk1C060 != gDungeon->unk1BDD4.unk1C062) { - sub_803E46C(r0); + DungeonRunFrameActions(r0); } } @@ -322,7 +322,7 @@ void sub_8052740(s32 a0) break; if (gRealInputs.pressed & JOY_EXCL_DPAD) break; - sub_803E46C(a0); + DungeonRunFrameActions(a0); } } @@ -333,7 +333,7 @@ void sub_8052740(s32 a0) \ do { \ DrawDialogueBoxString(); \ - sub_803E46C(9); \ + DungeonRunFrameActions(9); \ unkPrintRet = sub_80144A4(chosenMenuIndex);\ } while (unkPrintRet != 0); \ } @@ -772,7 +772,7 @@ void sub_8052FB8(const u8 *str) break; } DrawDialogueBoxString(); - sub_803E46C(9); + DungeonRunFrameActions(9); } while (r8 >= 0) { @@ -780,12 +780,12 @@ void sub_8052FB8(const u8 *str) SetBGPaletteBufferColorRGB(240 + j, &gFontPalette[j], r8 / 2, NULL); } DrawDialogueBoxString(); - sub_803E46C(9); + DungeonRunFrameActions(9); r8--; } ShowWindows(NULL, TRUE, TRUE); - sub_803E46C(9); + DungeonRunFrameActions(9); sub_8040238(); for (j = 0; j < 8; j++) { SetBGPaletteBufferColorArray(240 + j, &gFontPalette[j]); @@ -866,7 +866,7 @@ bool32 DisplayMessageLog(void) sub_801317C(&menuInput); sub_803EAF0(9, 0); do { - sub_803E46C(13); + DungeonRunFrameActions(13); unkRet = sub_8008D8C(0); } while (unkRet); @@ -888,7 +888,7 @@ bool32 DisplayMessageLog(void) scroll = TRUE; if (!scroll) { - sub_803E46C(0xD); + DungeonRunFrameActions(0xD); } if (sMessageLogFlags & FLAG_CAN_SCROLL_UP) { @@ -900,11 +900,11 @@ bool32 DisplayMessageLog(void) if (!sub_80048C8()) { if (gRealInputs.pressed & B_BUTTON || menuInput.b_button) { - sub_8083D30(); + PlayDungeonCancelSE(); break; } else if (gRealInputs.pressed & A_BUTTON) { - sub_8083D08(); + PlayDungeonConfirmationSE(); break; } } @@ -972,7 +972,7 @@ static bool8 TryScrollLogUp(s32 a0) return FALSE; } - sub_8083CE0(0); + PlayDungeonCursorSE(0); sub_80073B8(0); msgLogString = &gDungeon->messageLogStrings[arrId]; if (msgLogString->unk0) { @@ -983,11 +983,11 @@ static bool8 TryScrollLogUp(s32 a0) PrintStringOnWindow(8, y + 3, msgLogString->str, 0, 0xD); } sub_80073E0(0); - sub_803E46C(0xD); + DungeonRunFrameActions(0xD); for (i = 0; i < 7; i++) { gIwramTextFunc2(0); - sub_803E46C(0xD); + DungeonRunFrameActions(0xD); } sMessageLogCursor--; @@ -1022,7 +1022,7 @@ static bool8 TryScrollLogDown(s32 a0) return FALSE; } - sub_8083CE0(0); + PlayDungeonCursorSE(0); sub_80073B8(0); msgLogString = &gDungeon->messageLogStrings[arrId]; if (msgLogString->unk0) { @@ -1033,11 +1033,11 @@ static bool8 TryScrollLogDown(s32 a0) PrintStringOnWindow(8, y + 3, msgLogString->str, 0, 0xD); } sub_80073E0(0); - sub_803E46C(0xD); + DungeonRunFrameActions(0xD); for (i = 0; i < 7; i++) { gIwramTextFunc1(0); - sub_803E46C(0xD); + DungeonRunFrameActions(0xD); } sMessageLogCursor++; diff --git a/src/dungeon_move.c b/src/dungeon_move.c index 95881ee7a..e73cad7f3 100644 --- a/src/dungeon_move.c +++ b/src/dungeon_move.c @@ -2285,7 +2285,7 @@ s32 sub_8056564(Entity *entity, DungeonPos *pos, Move *move, s32 r4) sub_800EF10(sub_80412E0(move->id, GetApparentWeather(entity), 1)); sub_800EF64(); - sub_803E46C(0x5E); + DungeonRunFrameActions(0x5E); someRetVal = sub_800E710(entInfo->apparentID, sub_80412E0(move->id, GetApparentWeather(entity), 1)); if (someRetVal != -1) { sub_800569C(&unkSp1.unk8, &entity->axObj.axdata, someRetVal); @@ -2438,7 +2438,7 @@ void sub_80566F8(Entity *attacker, Move *move, s32 a2, bool8 a3, s32 itemId, s32 r2 /= 2; sub_800E3AC(var_34, &var_64, r2 + var_38); } - sub_803E46C(0x30); + DungeonRunFrameActions(0x30); pos32.x += var_28; pos32.y += var_24; r9 += var_2C; diff --git a/src/dungeon_music.c b/src/dungeon_music.c index e0c12616f..60289929f 100644 --- a/src/dungeon_music.c +++ b/src/dungeon_music.c @@ -138,14 +138,14 @@ bool8 sub_8083C88(u8 param_1) } } -void sub_8083CE0(u8 param_1) +void PlayDungeonCursorSE(bool8 checkMenuEntriesCount) { - if ((param_1 == 0) || (1 < gUnknown_202EE10.unk1A)) { + if ((!checkMenuEntriesCount) || (gUnknown_202EE10.unk1A > 1)) { PlayFanfareSE(0x12d,MAX_VOLUME); } } -void sub_8083D08(void) +void PlayDungeonConfirmationSE(void) { PlayFanfareSE(0x12E, MAX_VOLUME); } @@ -155,12 +155,12 @@ void sub_8083D1C(void) PlayFanfareSE(0x133, MAX_VOLUME); } -void sub_8083D30(void) +void PlayDungeonCancelSE(void) { PlayFanfareSE(0x12F, MAX_VOLUME); } -void sub_8083D44(void) +void PlayDungeonStartButtonSE(void) { PlayFanfareSE(0x130, MAX_VOLUME); } diff --git a/src/dungeon_util_1.c b/src/dungeon_util_1.c index fa1d66152..117a9c7ce 100644 --- a/src/dungeon_util_1.c +++ b/src/dungeon_util_1.c @@ -181,7 +181,7 @@ void sub_80856E0(Entity * pokemon, s32 direction) for(counter = 0; counter < 5; counter++) { entityInfo->unk174 = F248_Add(entityInfo->unk174, IntToF248(2)); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } entityInfo->action.direction = direction & DIRECTION_MASK; sub_806CE68(pokemon, direction); @@ -189,10 +189,10 @@ void sub_80856E0(Entity * pokemon, s32 direction) for(counter = 0; counter < 5; counter++) { entityInfo->unk174 = F248_Sub(entityInfo->unk174, IntToF248(2)); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } entityInfo->unk174.raw = 0; // weird one that doesn't match with struct assignment - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } void sub_8085764(void) @@ -265,12 +265,12 @@ void ShiftCameraToPosition(PixelPos *posStruct, s32 cameraSteps) XPos += XIncrement; YPos += YIncrement; sub_803F878(XPos,YPos); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); cameraSteps--; } while (cameraSteps != 0); } sub_803F878(posStruct->x,posStruct->y); - sub_803E46C(0x46); + DungeonRunFrameActions(0x46); } void SetFacingDirection(Entity *pokemon, s32 direction) diff --git a/src/menu_input.c b/src/menu_input.c index bb6408f41..a0b0ea261 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -722,7 +722,7 @@ void MoveMenuCursorDown(MenuInputStruct *param_1) } } -void sub_80136E0(MenuInputStruct *param_1, u8 param_2) +void MoveMenuCursorDownWrapAround(MenuInputStruct *param_1, u8 param_2) { param_1->unk24 = 0; @@ -754,7 +754,7 @@ void MoveMenuCursorUp(MenuInputStruct *param_1) } } -void sub_8013744(MenuInputStruct *param_1, u8 param_2) +void MoveMenuCursorUpWrapAround(MenuInputStruct *param_1, u8 param_2) { param_1->unk24 = 0; diff --git a/src/move_actions.c b/src/move_actions.c index a50f494ed..1a797a308 100644 --- a/src/move_actions.c +++ b/src/move_actions.c @@ -2616,7 +2616,7 @@ _0805A8C2: for(counter = 0; counter < 0xC; counter++) { IncreaseEntityPixelPos(target,pos2.x,pos2.y); - sub_803E46C(0x2c); + DungeonRunFrameActions(0x2c); } } tile = GetTileMut(pos1.x,pos1.y); @@ -2639,7 +2639,7 @@ _0805A9FE: for(counter = 0; counter < 0xC; counter++) { IncreaseEntityPixelPos(target, -pos2.x,-pos2.y); - sub_803E46C(0x2c); + DungeonRunFrameActions(0x2c); } } goto _0805AA5E; diff --git a/src/status.c b/src/status.c index f6ca6db60..db00cb46e 100644 --- a/src/status.c +++ b/src/status.c @@ -984,7 +984,7 @@ void sub_80783C4(Entity * pokemon, Entity * target, bool8 param_3) if ((((EntityIsValid(entity)) && (target != entity)) && (u8)(GetEntInfo(entity)->curseClassStatus.status - 2U) < 2)) { EndCurseClassStatus(pokemon,entity,STATUS_NONE); - sub_803E46C(0x2a); + DungeonRunFrameActions(0x2a); } } sub_8041D38(target); From 208d9308fb81a6f5a72447cb835e47da5e4da0a9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 1 Mar 2025 19:17:08 +0100 Subject: [PATCH 07/31] sub_80637A4 --- asm/code_805D8C8.s | 244 ++++------------ asm/code_808417C.s | 4 +- src/code_803E724.c | 16 +- src/code_805D8C8_1.c | 660 ++++++++++++++++++++++++------------------- src/code_8066D04.c | 114 ++++---- src/dungeon_music.c | 4 +- sym_ewram.txt | 2 +- 7 files changed, 481 insertions(+), 563 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 1fa80c864..c0b70f853 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,152 +6,6 @@ .text - thumb_func_start sub_8063698 -sub_8063698: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 24 - lsrs r7, r2, 24 - ldr r4, [r0, 0x70] - ldr r0, _080636E8 - ldr r0, [r0] - lsls r0, 3 - movs r1, 0x8C - lsls r1, 1 - adds r0, r1 - adds r5, r4, r0 - ldr r1, _080636EC - movs r0, 0 - str r0, [r1] - ldrb r0, [r4, 0x7] - cmp r0, 0 - beq _080636FA - cmp r7, 0 - beq _080636D0 - movs r0, 0x14 - movs r1, 0 - bl sub_8044F5C -_080636D0: - ldrb r1, [r5] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08063702 - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080636F0 - movs r0, 0x33 - b _080636F2 - .align 2, 0 -_080636E8: .4byte gUnknown_202F2D8 -_080636EC: .4byte gUnknown_202EE6C -_080636F0: - movs r0, 0x1E -_080636F2: - movs r1, 0 - bl sub_8044F5C - b _08063702 -_080636FA: - movs r0, 0x1F - movs r1, 0 - bl sub_8044F5C -_08063702: - cmp r6, 0 - beq _08063716 - movs r0, 0x20 - movs r1, 0 - bl sub_8044F5C - movs r0, 0x21 - movs r1, 0 - bl sub_8044F5C -_08063716: - movs r0, 0x1D - movs r1, 0 - bl sub_8044F5C - cmp r6, 0 - bne _0806372A - movs r0, 0x20 - bl sub_8044FF0 - b _08063754 -_0806372A: - ldr r5, _080637A0 - ldr r1, [r5] - adds r0, r4, 0 - bl sub_8063C88 - lsls r0, 24 - cmp r0, 0 - bne _08063740 - movs r0, 0x20 - bl sub_8044FF0 -_08063740: - ldr r1, [r5] - adds r0, r4, 0 - bl sub_8063DD4 - lsls r0, 24 - cmp r0, 0 - bne _08063754 - movs r0, 0x21 - bl sub_8044FF0 -_08063754: - ldr r5, _080637A0 - ldr r1, [r5] - adds r0, r4, 0 - bl sub_8063DD4 - lsls r0, 24 - cmp r0, 0 - bne _0806376A - movs r0, 0x21 - bl sub_8044FF0 -_0806376A: - cmp r7, 0 - beq _08063792 - movs r0, 0 - ldr r1, [r5] - cmp r1, 0x3 - bgt _08063788 - mov r0, r8 - movs r2, 0x1 - bl CanAIUseMove - lsls r0, 24 - lsrs r0, 24 - negs r1, r0 - orrs r1, r0 - lsrs r0, r1, 31 -_08063788: - cmp r0, 0 - bne _08063792 - movs r0, 0x14 - bl sub_8044FF0 -_08063792: - bl sub_8045064 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080637A0: .4byte gUnknown_202F2D8 - thumb_func_end sub_8063698 - - thumb_func_start sub_80637A4 -sub_80637A4: - push {lr} - adds r2, r1, 0 - ldr r1, _080637B8 - movs r3, 0x18 - ldrsh r1, [r1, r3] - bl sub_80637BC - pop {r0} - bx r0 - .align 2, 0 -_080637B8: .4byte gUnknown_202EE10 - thumb_func_end sub_80637A4 - thumb_func_start sub_80637BC sub_80637BC: push {r4,r5,lr} @@ -304,7 +158,7 @@ _08063898: strh r7, [r6, 0x1C] mov r0, sp movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows ldr r0, [sp, 0x78] adds r1, r0, r4 lsls r1, 3 @@ -345,7 +199,7 @@ _0806392C: movs r7, 0x2 b _080639AE .align 2, 0 -_0806393C: .4byte gUnknown_202EE10 +_0806393C: .4byte gDungeonMenu _08063940: .4byte gUnknown_2027370 _08063944: .4byte gUnknown_202EE38 _08063948: .4byte gRealInputs @@ -447,7 +301,7 @@ sub_80639E4: str r0, [r4, 0x14] adds r0, r4, 0 movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows movs r0, 0 bl sub_80073B8 ldr r0, _08063A64 @@ -492,7 +346,7 @@ _08063A5C: .4byte gUnknown_202F278 _08063A60: .4byte gUnknown_8106CC8 _08063A64: .4byte gFormatBuffer_Monsters _08063A68: .4byte gUnknown_8106CCC -_08063A6C: .4byte gUnknown_202EE10 +_08063A6C: .4byte gDungeonMenu thumb_func_end sub_80639E4 thumb_func_start sub_8063A70 @@ -1151,7 +1005,7 @@ _08063F76: b _08063FB2 .align 2, 0 _08063F80: .4byte gUnknown_202F2D8 -_08063F84: .4byte gUnknown_202EE10 +_08063F84: .4byte gDungeonMenu _08063F88: .4byte gRealInputs _08063F8C: movs r0, 0x8 @@ -1187,7 +1041,7 @@ _08063FB2: str r0, [r1] b _080640FA .align 2, 0 -_08063FD0: .4byte gUnknown_202EE10 +_08063FD0: .4byte gDungeonMenu _08063FD4: bl PlayDungeonStartButtonSE movs r4, 0x2 @@ -1217,7 +1071,7 @@ _08064008: bl sub_8064310 mov r0, sp movs r1, 0x16 - bl sub_805FC30 + bl CreateDungeonMenuSubWindow adds r4, r5, 0 ldr r6, _0806408C adds r5, 0x2A @@ -1315,7 +1169,7 @@ _080640CE: bl sub_8063E30 b _08063EE0 .align 2, 0 -_080640E4: .4byte gUnknown_202EE10 +_080640E4: .4byte gDungeonMenu _080640E8: cmp r0, 0x2 bne _080640FA @@ -1574,7 +1428,7 @@ _08064262: stm r1!, {r2,r3,r7} adds r0, r5, 0 movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows adds r0, r6, 0 movs r1, 0 bl sub_80137B0 @@ -1599,7 +1453,7 @@ _08064262: pop {r0} bx r0 .align 2, 0 -_08064304: .4byte gUnknown_202EE10 +_08064304: .4byte gDungeonMenu _08064308: .4byte gUnknown_202F2D8 _0806430C: .4byte gFormatBuffer_Monsters thumb_func_end sub_8064228 @@ -1771,7 +1625,7 @@ _080643F0: strh r4, [r5, 0xA] mov r0, sp movs r1, 0x16 - bl sub_805FC30 + bl CreateDungeonMenuSubWindow _0806445C: adds r0, r5, 0 bl AddMenuCursorSprite @@ -1823,7 +1677,7 @@ _080644B2: movs r4, 0x2 b _0806452A .align 2, 0 -_080644C8: .4byte gUnknown_202EE10 +_080644C8: .4byte gDungeonMenu _080644CC: .4byte gRealInputs _080644D0: movs r2, 0x18 @@ -1891,7 +1745,7 @@ _0806453C: bx r0 .align 2, 0 _08064554: .4byte gUnknown_202EE3A -_08064558: .4byte gUnknown_202EE10 +_08064558: .4byte gDungeonMenu thumb_func_end sub_80643AC thumb_func_start sub_806455C @@ -1908,7 +1762,7 @@ sub_806455C: strb r1, [r2, 0x2] strb r5, [r2, 0x3] movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows movs r0, 0 bl sub_80073B8 movs r1, 0 @@ -2073,7 +1927,7 @@ _080646B8: _080646C4: ldr r0, [sp, 0xE8] movs r1, 0 - bl sub_803ECB4 + bl DungeonShowWindows adds r0, r4, 0 bl GetTrapData adds r4, r0, 0 @@ -2298,7 +2152,7 @@ _08064834: strh r4, [r5, 0xA] mov r0, sp movs r1, 0x16 - bl sub_805FC30 + bl CreateDungeonMenuSubWindow _080648A0: adds r0, r5, 0 bl AddMenuCursorSprite @@ -2350,7 +2204,7 @@ _080648F6: movs r4, 0x2 b _0806496E .align 2, 0 -_0806490C: .4byte gUnknown_202EE10 +_0806490C: .4byte gDungeonMenu _08064910: .4byte gRealInputs _08064914: movs r2, 0x18 @@ -2418,7 +2272,7 @@ _08064980: bx r0 .align 2, 0 _08064998: .4byte gUnknown_202EE3A -_0806499C: .4byte gUnknown_202EE10 +_0806499C: .4byte gDungeonMenu thumb_func_end ShowDungeonStairsMenu thumb_func_start sub_80649A0 @@ -2434,7 +2288,7 @@ sub_80649A0: strb r1, [r2, 0x2] strb r3, [r2, 0x3] movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows movs r0, 0 bl sub_80073B8 bl GetFloorType @@ -2566,7 +2420,7 @@ _08064A58: strb r0, [r1, 0x3] ldr r0, [sp, 0xE4] movs r1, 0 - bl sub_803ECB4 + bl DungeonShowWindows bl GetFloorType adds r4, r0, 0 lsls r4, 24 @@ -2799,7 +2653,7 @@ _08064C8C: .align 2, 0 _08064C94: .4byte gDungeon _08064C98: .4byte gUnknown_202F2E0 -_08064C9C: .4byte gUnknown_202EE10 +_08064C9C: .4byte gDungeonMenu _08064CA0: .4byte gRealInputs _08064CA4: bl PlayDungeonCancelSE @@ -2896,7 +2750,7 @@ _08064D4C: pop {r0} bx r0 .align 2, 0 -_08064D68: .4byte gUnknown_202EE10 +_08064D68: .4byte gDungeonMenu _08064D6C: .4byte gUnknown_202F2E0 _08064D70: .4byte gDungeon thumb_func_end ShowDungeonOthersMenu @@ -2955,7 +2809,7 @@ _08064DDA: bl PlayDungeonConfirmationSE b _08064DFE .align 2, 0 -_08064DE0: .4byte gUnknown_202EE10 +_08064DE0: .4byte gDungeonMenu _08064DE4: .4byte gRealInputs _08064DE8: movs r0, 0x2 @@ -2991,7 +2845,7 @@ _08064DFE: bl sub_8064E68 b _08064E40 .align 2, 0 -_08064E2C: .4byte gUnknown_202EE10 +_08064E2C: .4byte gDungeonMenu _08064E30: .4byte gGameOptionsRef _08064E34: .4byte gUnknown_202F2E8 _08064E38: @@ -3076,7 +2930,7 @@ _08064EC2: bl sub_8065A8C b _08064F2E .align 2, 0 -_08064EDC: .4byte gUnknown_202EE10 +_08064EDC: .4byte gDungeonMenu _08064EE0: .4byte gRealInputs _08064EE4: movs r0, 0x10 @@ -3131,7 +2985,7 @@ _08064F30: pop {r1} bx r1 .align 2, 0 -_08064F4C: .4byte gUnknown_202EE10 +_08064F4C: .4byte gDungeonMenu thumb_func_end sub_8064E68 thumb_func_start sub_8064F50 @@ -3191,7 +3045,7 @@ _08064FAA: bl sub_8065A8C b _0806501C .align 2, 0 -_08064FC8: .4byte gUnknown_202EE10 +_08064FC8: .4byte gDungeonMenu _08064FCC: .4byte gRealInputs _08064FD0: movs r0, 0x10 @@ -3247,7 +3101,7 @@ _0806501E: pop {r1} bx r1 .align 2, 0 -_0806503C: .4byte gUnknown_202EE10 +_0806503C: .4byte gDungeonMenu thumb_func_end sub_8064F50 thumb_func_start sub_8065040 @@ -3374,7 +3228,7 @@ _0806512C: bl PlayDungeonConfirmationSE b _08065152 .align 2, 0 -_08065134: .4byte gUnknown_202EE10 +_08065134: .4byte gDungeonMenu _08065138: .4byte gRealInputs _0806513C: movs r0, 0x2 @@ -3406,7 +3260,7 @@ _08065152: bl sub_80651D0 b _08065184 .align 2, 0 -_08065178: .4byte gUnknown_202EE10 +_08065178: .4byte gDungeonMenu _0806517C: cmp r0, 0x1 bne _08065184 @@ -3613,7 +3467,7 @@ _080652D2: mov r1, r9 strh r1, [r0, 0x8] movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows adds r0, r4, 0 movs r1, 0 bl sub_80137B0 @@ -3693,7 +3547,7 @@ _080652D2: bl PrintFormattedStringOnWindow b _0806540E .align 2, 0 -_080653D0: .4byte gUnknown_202EE10 +_080653D0: .4byte gDungeonMenu _080653D4: .4byte gUnknown_202F2E0 _080653D8: .4byte gDungeon _080653DC: .4byte gUnknown_80FE8F8 @@ -3738,7 +3592,7 @@ _0806540E: bx r0 .align 2, 0 _08065440: .4byte gUnknown_80FEA44 -_08065444: .4byte gUnknown_202EE10 +_08065444: .4byte gDungeonMenu _08065448: .4byte gUnknown_80FEA50 thumb_func_end sub_8065250 @@ -3824,7 +3678,7 @@ sub_806544C: mov r2, r9 strh r2, [r0, 0x8] movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows adds r0, r4, 0 movs r1, 0 bl sub_80137B0 @@ -3873,7 +3727,7 @@ sub_806544C: pop {r0} bx r0 .align 2, 0 -_08065568: .4byte gUnknown_202EE10 +_08065568: .4byte gDungeonMenu _0806556C: .4byte gUnknown_80FE8F4 _08065570: .4byte gUnknown_80F7C50 thumb_func_end sub_806544C @@ -3964,7 +3818,7 @@ CreateFieldGameOptionsMenu: mov r0, r10 strh r1, [r0, 0x8] movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows adds r0, r4, 0 movs r1, 0 bl sub_80137B0 @@ -4021,7 +3875,7 @@ CreateFieldGameOptionsMenu: pop {r0} bx r0 .align 2, 0 -_080656AC: .4byte gUnknown_202EE10 +_080656AC: .4byte gDungeonMenu _080656B0: .4byte gGameOptionsTextPtr _080656B4: .4byte gOptionsDungeonTextPtr _080656B8: .4byte gOptionsOthersTextPtr @@ -4118,7 +3972,7 @@ CreateFieldDungeonMenu: strh r0, [r3, 0x8] mov r0, r9 movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows adds r0, r4, 0 movs r1, 0 bl sub_80137B0 @@ -4202,7 +4056,7 @@ CreateFieldDungeonMenu: b _08065872 .align 2, 0 _0806583C: .4byte gUnknown_8106CE8 -_08065840: .4byte gUnknown_202EE10 +_08065840: .4byte gDungeonMenu _08065844: .4byte gOptionsDungeonTextPtr _08065848: .4byte gUnknown_80FE764 _0806584C: .4byte gUnknown_80FE788 @@ -4408,7 +4262,7 @@ CreateFieldOthersMenu: mov r1, r9 strh r1, [r0, 0x8] movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows adds r0, r4, 0 movs r1, 0 bl sub_80137B0 @@ -4468,7 +4322,7 @@ _08065A0A: bx r0 .align 2, 0 _08065A78: .4byte gUnknown_8106CF4 -_08065A7C: .4byte gUnknown_202EE10 +_08065A7C: .4byte gDungeonMenu _08065A80: .4byte gOptionsOthersTextPtr _08065A84: .4byte gOptionsWindowColorPtr _08065A88: .4byte gUnknown_202F2E8 @@ -4740,7 +4594,7 @@ _08065C5A: bl PlayDungeonConfirmationSE b _08065C7E .align 2, 0 -_08065C60: .4byte gUnknown_202EE10 +_08065C60: .4byte gDungeonMenu _08065C64: .4byte gRealInputs _08065C68: movs r0, 0x2 @@ -4767,7 +4621,7 @@ _08065C7E: bl sub_8065DBC b _08065C04 .align 2, 0 -_08065C9C: .4byte gUnknown_202EE10 +_08065C9C: .4byte gDungeonMenu _08065CA0: pop {r3} mov r8, r3 @@ -4858,7 +4712,7 @@ sub_8065CAC: mov r1, r9 strh r1, [r0, 0x8] movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows adds r0, r4, 0 movs r1, 0 bl sub_80137B0 @@ -4898,7 +4752,7 @@ _08065D7A: pop {r0} bx r0 .align 2, 0 -_08065DB0: .4byte gUnknown_202EE10 +_08065DB0: .4byte gDungeonMenu _08065DB4: .4byte gUnknown_80FF770 _08065DB8: .4byte gUnknown_80FF774 thumb_func_end sub_8065CAC @@ -5015,7 +4869,7 @@ _08065E0C: strh r0, [r1, 0x8] add r0, sp, 0x4 movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows ldr r1, _08065F30 movs r2, 0 ldrsh r0, [r1, r2] @@ -5079,7 +4933,7 @@ _08065F16: b _08065F64 .align 2, 0 _08065F28: .4byte gGameOptionsRef -_08065F2C: .4byte gUnknown_202EE10 +_08065F2C: .4byte gDungeonMenu _08065F30: .4byte gUnknown_2027370 _08065F34: .4byte gUnknown_80FF774 _08065F38: .4byte gUnknown_80FF7EC @@ -5212,7 +5066,7 @@ _0806601C: strb r1, [r0, 0x1] ldr r0, _08066138 movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows mov r2, r8 strh r2, [r6, 0x1A] strh r2, [r6, 0x18] @@ -5332,7 +5186,7 @@ _0806612A: mov r10, r0 b _08066184 .align 2, 0 -_08066130: .4byte gUnknown_202EE10 +_08066130: .4byte gDungeonMenu _08066134: .4byte gUnknown_203B43C _08066138: .4byte gUnknown_8106D08 _0806613C: .4byte gUnknown_202F2F8 diff --git a/asm/code_808417C.s b/asm/code_808417C.s index 296721a32..369ba2e93 100644 --- a/asm/code_808417C.s +++ b/asm/code_808417C.s @@ -55,7 +55,7 @@ sub_80841EC: strh r0, [r1, 0xA] mov r0, sp movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows ldr r0, _0808426C ldr r0, [r0] ldr r1, _08084270 @@ -98,7 +98,7 @@ _08084290: strb r0, [r4] mov r0, sp movs r1, 0x1 - bl sub_803ECB4 + bl DungeonShowWindows b _08084290 .align 2, 0 _080842B8: .4byte gUnknown_80FE6E8 diff --git a/src/code_803E724.c b/src/code_803E724.c index d7244585e..87a51c1f6 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -40,7 +40,7 @@ extern struct DungeonPalFile *gDungeonNameBannerPalette; extern struct DungeonPalFile *gUnknown_202EC94; extern RGB gUnknown_202ECA4[]; extern u8 gUnknown_203B40C; -extern MenuInputStruct gUnknown_202EE10; +extern MenuInputStruct gDungeonMenu; extern SpriteOAM gUnknown_202EDDC; extern const u32 gUnknown_80F6490[]; @@ -345,15 +345,15 @@ void sub_803EAF0(u32 a0, u8 *a1) void sub_803EC94(void) { - gUnknown_202EE10.unk1E = 0; - gUnknown_202EE10.unk20 = 0; - gUnknown_202EE10.unkC = 0; - gUnknown_202EE10.unkE = 0; - gUnknown_202EE10.unk14.x = 0; - sub_801317C(&gUnknown_202EE10.unk28); + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + sub_801317C(&gDungeonMenu.unk28); } -void sub_803ECB4(Windows *a0, bool8 a1) +void DungeonShowWindows(Windows *a0, bool8 a1) { gUnknown_202EDD0 = 10; sub_8052210(0); diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index d64df7197..d2763ef80 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -172,7 +172,7 @@ void DungeonHandlePlayerInput(void) if (gDungeon->unk1 != 0) { gDungeon->unk1 = 0; if (!ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) { - SetLeaderActionToNothing(1); + SetLeaderActionToNothing(TRUE); sub_805E804(); ShowDungeonStairsMenu(GetLeader()); ResetRepeatTimers(); @@ -1089,7 +1089,7 @@ extern void sub_8041AE0(Entity *pokemon); extern void sub_807EC28(bool8); extern void PlayDungeonCursorSE(u8 param_1); -extern MenuInputStruct gUnknown_202EE10; +extern MenuInputStruct gDungeonMenu; void sub_805F02C(void) { @@ -1211,31 +1211,31 @@ void ShowMainMenu(bool8 fromBPress, bool8 a1) PrintOnMainMenu(printAll); sub_806A2BC(GetLeader(), 0); while (1) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1D); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & A_BUTTON || gUnknown_202EE10.unk28.a_button)) { - if (gUnknown_202749A[gUnknown_202EE10.menuIndex + 1] == 7) { + if ((gRealInputs.pressed & A_BUTTON || gDungeonMenu.unk28.a_button)) { + if (gUnknown_202749A[gDungeonMenu.menuIndex + 1] == 7) { PlayDungeonConfirmationSE(); - chosenOption = gUnknown_202EE10.menuIndex; + chosenOption = gDungeonMenu.menuIndex; break; } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); chosenOption = -1; break; } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1D); printAll = TRUE; } @@ -1566,18 +1566,18 @@ void PrintOnMainMenu(bool8 printAll) { s32 i, x, y, yLoop; - gUnknown_202EE10.menuIndex = 0; - gUnknown_202EE10.unk1A = 5; - gUnknown_202EE10.unk1C = 5; - gUnknown_202EE10.unk1E = 0; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.firstEntryY = 2; - gUnknown_202EE10.unkC = 0; - gUnknown_202EE10.unkE = 0; - gUnknown_202EE10.unk0 = 0; - gUnknown_202EE10.unk14.x = 0; - sub_801317C(&gUnknown_202EE10.unk28); - sub_80137B0(&gUnknown_202EE10, 0x38); + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1A = 5; + gDungeonMenu.unk1C = 5; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 2; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk0 = 0; + gDungeonMenu.unk14.x = 0; + sub_801317C(&gDungeonMenu.unk28); + sub_80137B0(&gDungeonMenu, 0x38); if (printAll) { sub_803EAF0(7, NULL); } @@ -1602,19 +1602,19 @@ void PrintOnMainMenu(bool8 printAll) gUnknown_202749A[5] = 7; } - y = GetMenuEntryYCoord(&gUnknown_202EE10, 0); + y = GetMenuEntryYCoord(&gDungeonMenu, 0); PrintStringOnWindow(8, y, gFieldMenuMovesPtr, 0, 0); - y = GetMenuEntryYCoord(&gUnknown_202EE10, 1); + y = GetMenuEntryYCoord(&gDungeonMenu, 1); PrintStringOnWindow(8, y, gFieldMenuItemsPtr, 0, 0); - y = GetMenuEntryYCoord(&gUnknown_202EE10, 2); + y = GetMenuEntryYCoord(&gDungeonMenu, 2); PrintStringOnWindow(8, y, gFieldMenuTeamPtr, 0, 0); - y = GetMenuEntryYCoord(&gUnknown_202EE10, 3); + y = GetMenuEntryYCoord(&gDungeonMenu, 3); PrintStringOnWindow(8, y, gFieldMenuOthersPtr, 0, 0); - y = GetMenuEntryYCoord(&gUnknown_202EE10, 4); + y = GetMenuEntryYCoord(&gDungeonMenu, 4); PrintStringOnWindow(8, y, gFieldMenuGroundPtr, 0, 0); sub_80073E0(0); @@ -1685,10 +1685,10 @@ extern bool8 sub_8044F3C(s32 param_1); extern s32 gUnknown_202EE6C; extern const u8 gUnknown_8106B50[]; -extern void sub_803ECB4(Windows *a0, u8 a1); +extern void DungeonShowWindows(Windows *a0, u8 a1); static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); -void sub_805FC30(Windows *a0, s32 a1) +void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX) { s32 i; Windows windows = { @@ -1706,37 +1706,37 @@ void sub_805FC30(Windows *a0, s32 a1) } }; - windows.id[0] = a0->id[0]; + windows.id[0] = *mainWindow; windows.id[0].unk0 = 0x80; - gUnknown_202EE10.menuIndex = 0; - gUnknown_202EE10.unk1C = gUnknown_202EE6C; - gUnknown_202EE10.unk1A = gUnknown_202EE6C; - gUnknown_202EE10.unk1E = 0; - gUnknown_202EE10.unk20 = 0; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.firstEntryY = 0; - gUnknown_202EE10.unk0 = 1; - gUnknown_202EE10.unkC = 0; - gUnknown_202EE10.unkE = 0; - gUnknown_202EE10.unk14 = gUnknown_202EE10.unk8; + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1C = gUnknown_202EE6C; + gDungeonMenu.unk1A = gUnknown_202EE6C; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 0; + gDungeonMenu.unk0 = 1; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14 = gDungeonMenu.unk8; - sub_801317C(&gUnknown_202EE10.unk28); + sub_801317C(&gDungeonMenu.unk28); - windows.id[1].pos.x = a1; - windows.id[1].width = 28 - a1; - windows.id[1].height = windows.id[1].unk10 = sub_80095E4(gUnknown_202EE10.unk1C, 0); - sub_803ECB4(&windows, 0); - sub_80137B0(&gUnknown_202EE10, windows.id[1].height * 8); + windows.id[1].pos.x = subWindowX; + windows.id[1].width = 28 - subWindowX; + windows.id[1].height = windows.id[1].unk10 = sub_80095E4(gDungeonMenu.unk1C, 0); + DungeonShowWindows(&windows, FALSE); + sub_80137B0(&gDungeonMenu, windows.id[1].height * 8); sub_80073B8(1); for (i = 0; i < gUnknown_202EE6C; i++) { - s32 r4, y; + s32 colorId, y; u8 text[20]; - r4 = (sub_8044F3C(i) != 0) ? 7 : 2; - sprintfStatic(text, gUnknown_8106B50, r4, sub_8044EC8(i)); - y = GetMenuEntryYCoord(&gUnknown_202EE10, i); + colorId = (sub_8044F3C(i) != 0) ? 7 : 2; + sprintfStatic(text, gUnknown_8106B50, colorId, sub_8044EC8(i)); + y = GetMenuEntryYCoord(&gDungeonMenu, i); PrintStringOnWindow(8, y, text, 1, 0); } sub_80073E0(1); @@ -1782,9 +1782,9 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) u8 var_2C = 0; u8 var_28 = 0; EntityInfo *a0Info = GetEntInfo(a0); - WindowHeader var_3C; + WindowHeader header; - Windows var_FC = + Windows windows = { .id = { @@ -1795,7 +1795,7 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) .width = 0x12, .height = 0x10, .unk10 = 0x10, - .unk14 = &var_3C, + .unk14 = &header, }, WINDOW_DUMMY, WINDOW_DUMMY, WINDOW_DUMMY }, @@ -1849,9 +1849,9 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) } } } - PrintOnDungeonItemsMenu(r8, a0, var_2C, var_30, &var_FC, &var_3C); + PrintOnDungeonItemsMenu(r8, a0, var_2C, var_30, &windows, &header); - id = sUnknown_202F248[gUnknown_202EE10.unk1E]; + id = sUnknown_202F248[gDungeonMenu.unk1E]; if (id >= MAX_TEAM_MEMBERS) { r4 = gDungeon->teamPokemon[id - MAX_TEAM_MEMBERS]; } @@ -1862,11 +1862,11 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) ChangeDungeonCameraPos(&r4->pos, 0, 1, 1); while (1) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x14); if (!var_30) { if (sUnknown_202F258 > 1) { - if ((gRealInputs.pressed & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { + if ((gRealInputs.pressed & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { PlayDungeonCursorSE(0); if (--r8 < 0) { r8 = sUnknown_202F258 - 1; @@ -1874,7 +1874,7 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) sUnknown_202F240 = var_30; break; } - if ((gRealInputs.pressed & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { + if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { PlayDungeonCursorSE(0); if (++r8 == sUnknown_202F258) { r8 = 0; @@ -1885,11 +1885,11 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) } if (gRealInputs.repeated & DPAD_DOWN && sub_8060860(r8)) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP && sub_8060860(r8)) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.pressed & SELECT_BUTTON && sUnknown_202F248[r8] <= 1) { s32 r3; @@ -1921,7 +1921,7 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) } break; } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { PlayDungeonConfirmationSE(); sub_8060890(&a0->pos); r9 = 1; @@ -1933,7 +1933,7 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) r9 = 3; break; } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); r9 = 2; break; @@ -1945,9 +1945,9 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) break; } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x14); - if (sUnknown_202F248[gUnknown_202EE10.unk1E] <= 1 && !(gTeamInventoryRef->teamItems[0].flags & ITEM_FLAG_EXISTS)) { + if (sUnknown_202F248[gDungeonMenu.unk1E] <= 1 && !(gTeamInventoryRef->teamItems[0].flags & ITEM_FLAG_EXISTS)) { r9 = 2; } @@ -1967,7 +1967,7 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) break; } else { - sUnknown_202F240 = gUnknown_202EE10.menuIndex; + sUnknown_202F240 = gDungeonMenu.menuIndex; if (var_2C != 0) { a0Info->action.actionParameters[1] = sUnknownActionUnk4; sub_803EAF0(0, NULL); @@ -1976,21 +1976,21 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) } sub_8060900(a0); - sub_8060800(&var_3C, gUnknown_202EE10.unk1E); - sub_805FC30(&var_FC, 0x16); + sub_8060800(&header, gDungeonMenu.unk1E); + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); while (1) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x14); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (sub_8044F3C(gDungeonMenu.menuIndex)) { PlayDungeonConfirmationSE(); sub_8060CE8(&a0Info->action); r9 = 0; @@ -1998,13 +1998,13 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); r9 = 1; break; } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x14); gDungeon->unk181e8.unk18212 = 0; if (r9 != 1 || var_30 != 0) { @@ -2058,14 +2058,14 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind var_94 = gUnknown_8106B6C; a1Info = GetEntInfo(a1); r10 = sub_8060800(a5, a0); - gUnknown_202EE10.menuIndex = sUnknown_202F240; - gUnknown_202EE10.unk1A = 0; - gUnknown_202EE10.unk1E = a0; - gUnknown_202EE10.unk20 = sUnknown_202F258; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.unk0 = 0; - gUnknown_202EE10.unk14.x = 0; - sub_801317C(&gUnknown_202EE10.unk28); + gDungeonMenu.menuIndex = sUnknown_202F240; + gDungeonMenu.unk1A = 0; + gDungeonMenu.unk1E = a0; + gDungeonMenu.unk20 = sUnknown_202F258; + gDungeonMenu.unk4 = 0; + gDungeonMenu.unk0 = 0; + gDungeonMenu.unk14.x = 0; + sub_801317C(&gDungeonMenu.unk28); gDungeon->unk181e8.unk18212 = 0; switch (sUnknown_202F248[a0]) { case 0: @@ -2073,29 +2073,29 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind windows->id[0].unk10 = 0x10; windows->id[0].height = 0x10; a5->f2 = 0xC; - gUnknown_202EE10.firstEntryY = 0x10; - gUnknown_202EE10.unk1C = 0xA; + gDungeonMenu.firstEntryY = 0x10; + gDungeonMenu.unk1C = 0xA; gDungeon->unk181e8.unk18212 = 1; break; case 2: windows->id[0].unk10 = 4; windows->id[0].height = 4; a5->f2 = 6; - gUnknown_202EE10.firstEntryY = 0x12; - gUnknown_202EE10.unk1C = 1; + gDungeonMenu.firstEntryY = 0x12; + gDungeonMenu.unk1C = 1; break; case 3: default: windows->id[0].unk10 = 4; windows->id[0].height = 4; a5->f2 = 0xC; - gUnknown_202EE10.firstEntryY = 0x12; - gUnknown_202EE10.unk1C = 1; + gDungeonMenu.firstEntryY = 0x12; + gDungeonMenu.unk1C = 1; break; } if (a2) { - gUnknown_202EE10.unkC += 0x40; + gDungeonMenu.unkC += 0x40; windows->id[0].pos.x = 0xA; windows->id[1] = var_94; } @@ -2104,11 +2104,11 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind windows->id[1] = windows->id[3]; } - sub_803ECB4(windows, 1); + DungeonShowWindows(windows, 1); txtStrPtr = &gUnknown_2027370[0]; - gUnknown_202EE10.unkC = (txtStrPtr->unk0 + 0x10) * 8; - gUnknown_202EE10.unkE = ((txtStrPtr->unk2 + 1) * 8) - 2; - sub_80137B0(&gUnknown_202EE10, 0x70); + gDungeonMenu.unkC = (txtStrPtr->unk0 + 0x10) * 8; + gDungeonMenu.unkE = ((txtStrPtr->unk2 + 1) * 8) - 2; + sub_80137B0(&gDungeonMenu, 0x70); sub_80073B8(0); x = ((a0 - r10) * 8) + 0xC; switch (sUnknown_202F248[a0]) @@ -2117,9 +2117,9 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind PrintFormattedStringOnWindow(x, 0, gTeamToolboxAPtr, 0, 0); for (i = 0; i < 10; i++) { if (ItemExists(&gTeamInventoryRef->teamItems[i])) { - gUnknown_202EE10.unk1A++; + gDungeonMenu.unk1A++; sub_8090E14(txtBuff, &gTeamInventoryRef->teamItems[i], &gUnknown_8106B60); - y = GetMenuEntryYCoord(&gUnknown_202EE10, i); + y = GetMenuEntryYCoord(&gDungeonMenu, i); PrintFormattedStringOnWindow(8, y, txtBuff, 0, 0); } else { @@ -2131,9 +2131,9 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind PrintFormattedStringOnWindow(x, 0, gTeamToolboxBPtr, 0, 0); for (i = 0; i < 10; i++) { if (ItemExists(&gTeamInventoryRef->teamItems[i + 10])) { - gUnknown_202EE10.unk1A++; + gDungeonMenu.unk1A++; sub_8090E14(txtBuff, &gTeamInventoryRef->teamItems[i + 10], &gUnknown_8106B60); - y = GetMenuEntryYCoord(&gUnknown_202EE10, i); + y = GetMenuEntryYCoord(&gDungeonMenu, i); PrintFormattedStringOnWindow(8, y, txtBuff, 0, 0); } else { @@ -2146,13 +2146,13 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind Item *item = GetItemData(tile->object); PrintFormattedStringOnWindow(x, 0, gFieldItemMenuGroundTextPtr, 0, 0); if (item->flags & ITEM_FLAG_EXISTS) { - gUnknown_202EE10.unk1A++; + gDungeonMenu.unk1A++; sub_8090E14(txtBuff, item, &gUnknown_8106B60); - y = GetMenuEntryYCoord(&gUnknown_202EE10, 0); + y = GetMenuEntryYCoord(&gDungeonMenu, 0); PrintFormattedStringOnWindow(8, y, txtBuff, 0, 0); } if (a3) { - gUnknown_202EE10.unk8.x = gUnknown_202EE10.unk8.y = 0; + gDungeonMenu.unk8.x = gDungeonMenu.unk8.y = 0; } } break; @@ -2161,9 +2161,9 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind SetMessageArgument_2(gFormatBuffer_Monsters[0], a1Info, 0); PrintFormattedStringOnWindow(x, 0, gUnknown_80FE940, 0, 0); if (item->flags & ITEM_FLAG_EXISTS) { - gUnknown_202EE10.unk1A++; + gDungeonMenu.unk1A++; sub_8090E14(txtBuff, item, &gUnknown_8106B60); - y = GetMenuEntryYCoord(&gUnknown_202EE10, 0); + y = GetMenuEntryYCoord(&gDungeonMenu, 0); PrintFormattedStringOnWindow(8, y, txtBuff, 0, 0); } } @@ -2176,9 +2176,9 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind SetMessageArgument_2(gFormatBuffer_Monsters[0], monInfo, 0); PrintFormattedStringOnWindow(x, 0, gUnknown_80FE940, 0, 0); if (item->flags & ITEM_FLAG_EXISTS) { - gUnknown_202EE10.unk1A++; + gDungeonMenu.unk1A++; sub_8090E14(txtBuff, item, &gUnknown_8106B60); - y = GetMenuEntryYCoord(&gUnknown_202EE10, 0); + y = GetMenuEntryYCoord(&gDungeonMenu, 0); PrintFormattedStringOnWindow(8, y, txtBuff, 0, 0); } } @@ -2186,8 +2186,8 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind break; } - if (gUnknown_202EE10.menuIndex >= gUnknown_202EE10.unk1A) { - gUnknown_202EE10.menuIndex = 0; + if (gDungeonMenu.menuIndex >= gDungeonMenu.unk1A) { + gDungeonMenu.menuIndex = 0; } sub_80073E0(0); if (a2) { @@ -2229,7 +2229,7 @@ s32 sub_8060800(WindowHeader *a0, s32 a1) bool8 sub_8060860(s32 a0) { - if (gUnknown_202EE10.unk1A <= 1 || sUnknown_202F248[a0] > 1) + if (gDungeonMenu.unk1A <= 1 || sUnknown_202F248[a0] > 1) return FALSE; else return TRUE; @@ -2237,14 +2237,14 @@ bool8 sub_8060860(s32 a0) void sub_8060890(DungeonPos *a0) { - s32 var = sUnknown_202F248[gUnknown_202EE10.unk1E]; + s32 var = sUnknown_202F248[gDungeonMenu.unk1E]; switch (var) { case 0: - sUnknownActionUnk4.actionUseIndex = gUnknown_202EE10.menuIndex + 1; + sUnknownActionUnk4.actionUseIndex = gDungeonMenu.menuIndex + 1; break; case 1: - sUnknownActionUnk4.actionUseIndex = gUnknown_202EE10.menuIndex + 11; + sUnknownActionUnk4.actionUseIndex = gDungeonMenu.menuIndex + 11; break; case 2: sUnknownActionUnk4.actionUseIndex = 128; @@ -2453,7 +2453,7 @@ void sub_8060900(Entity *a0) void sub_8060CE8(ActionContainer *a0) { - SetMonsterActionFields(a0, gUnknown_202EE44[gUnknown_202EE10.menuIndex].unk0); + SetMonsterActionFields(a0, gUnknown_202EE44[gDungeonMenu.menuIndex].unk0); a0->actionParameters[0] = sUnknownActionUnk4; a0->actionParameters[1].actionUseIndex = 0; a0->actionParameters[1].itemPos.x = 0; @@ -2463,7 +2463,7 @@ void sub_8060CE8(ActionContainer *a0) void sub_8060D24(UNUSED ActionContainer *a0) { Item *item = sub_8044D90(GetLeader(), 0, 0xB); - sub_803ECB4(NULL, 0); + DungeonShowWindows(NULL, 0); sub_801B3C0(item); do { @@ -2563,62 +2563,62 @@ bool8 ShowDungeonTeamMenu(Entity *a0) PrintOnDungeonTeamMenu(&sp, &windows, TRUE); r10 = FALSE; while (1) { - s32 id = sp.unk4[gUnknown_202EE10.menuIndex]; + s32 id = sp.unk4[gDungeonMenu.menuIndex]; if (id >= 0) { Entity *teamMon = gDungeon->teamPokemon[id]; sub_806A2BC(teamMon, 0); ChangeDungeonCameraPos(&teamMon->pos, 0, 1, 1); } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1B); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.pressed & START_BUTTON) { - if (sp.unk14[gUnknown_202EE10.menuIndex] != 0) { + if (sp.unk14[gDungeonMenu.menuIndex] != 0) { PlayDungeonStartButtonSE(); r10 = TRUE; break; } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (sp.unk14[gUnknown_202EE10.menuIndex] != 0) { + if (sp.unk14[gDungeonMenu.menuIndex] != 0) { PlayDungeonConfirmationSE(); break; } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); ret = TRUE; break; } } - id = sp.unk4[gUnknown_202EE10.menuIndex]; + id = sp.unk4[gDungeonMenu.menuIndex]; if (id >= 0) { Entity *teamMon = gDungeon->teamPokemon[id]; sub_806A2BC(teamMon, 0); ChangeDungeonCameraPos(&teamMon->pos, 0, 1, 1); } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1B); sub_804AA60(); if (ret) { break; } - sp.unk0 = gUnknown_202EE10.menuIndex; - sTeamMenuChosenId = gUnknown_202EE10.menuIndex; + sp.unk0 = gDungeonMenu.menuIndex; + sTeamMenuChosenId = gDungeonMenu.menuIndex; sub_806145C(&sp); if (r10) { EntityInfo *info = GetEntInfo(a0); @@ -2628,20 +2628,20 @@ bool8 ShowDungeonTeamMenu(Entity *a0) break; } - sub_805FC30(&windows, 0x12); + CreateDungeonMenuSubWindow(&windows.id[0], 0x12); while (1) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1B); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (sub_8044F3C(gDungeonMenu.menuIndex)) { sub_80615B4(&GetEntInfo(a0)->action, &sp); PlayDungeonConfirmationSE(); r4 = FALSE; @@ -2649,13 +2649,13 @@ bool8 ShowDungeonTeamMenu(Entity *a0) } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); r4 = TRUE; break; } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1B); if (r4 != TRUE) { ret = FALSE; @@ -2727,18 +2727,18 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, gUnknown_202F270.f0 = 1; gUnknown_202F270.f1 = 0; gUnknown_202F270.f3 = 0; - gUnknown_202EE10.menuIndex = sTeamMenuChosenId; - gUnknown_202EE10.unk1A = count; - gUnknown_202EE10.unk1C = count; - gUnknown_202EE10.unk1E = 0; - gUnknown_202EE10.unk20 = 0; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.firstEntryY = (r10 != FALSE) * 16; - gUnknown_202EE10.unkC = 0; - gUnknown_202EE10.unkE = 0; - gUnknown_202EE10.unk14.x = 0; - gUnknown_202EE10.unk0 = 0; - sub_801317C(&gUnknown_202EE10.unk28); + gDungeonMenu.menuIndex = sTeamMenuChosenId; + gDungeonMenu.unk1A = count; + gDungeonMenu.unk1C = count; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = (r10 != FALSE) * 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); r0 = sub_80095E4(count, 0); if (r10) { r0 += 2; @@ -2750,8 +2750,8 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, windows->id[1] = windows->id[3]; } - sub_803ECB4(windows, 1); - sub_80137B0(&gUnknown_202EE10, 0); + DungeonShowWindows(windows, 1); + sub_80137B0(&gDungeonMenu, 0); sub_80073B8(0); if (r10) { PrintFormattedStringOnWindow(0xC, 0, gTeamFormat, 0, 0); @@ -2800,7 +2800,7 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, gFormatArgs[0] = monInfo->HP; gFormatArgs[1] = monInfo->maxHPStat; - y = GetMenuEntryYCoord(&gUnknown_202EE10, i); + y = GetMenuEntryYCoord(&gDungeonMenu, i); if (monInfo->isTeamLeader) { PrintFormattedStringOnWindow(9, y, gUnknown_8106BD4, 0, 0); } @@ -2822,7 +2822,7 @@ void sub_806145C(struct UnkFieldTeamMenuStruct *a0) EntityInfo *monInfo; gUnknown_202EE6C = 0; - teamMon = gDungeon->teamPokemon[a0->unk4[gUnknown_202EE10.menuIndex]]; + teamMon = gDungeon->teamPokemon[a0->unk4[gDungeonMenu.menuIndex]]; monInfo = GetEntInfo(teamMon); sub_8044F5C(0x1B, 0); sub_8044F5C(0x19, 0); @@ -2872,7 +2872,7 @@ void sub_806145C(struct UnkFieldTeamMenuStruct *a0) void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1) { - SetMonsterActionFields(a0, gUnknown_202EE44[gUnknown_202EE10.menuIndex].unk0); + SetMonsterActionFields(a0, gUnknown_202EE44[gDungeonMenu.menuIndex].unk0); a0->actionParameters[0].actionUseIndex = a1->unk4[a1->unk0]; } @@ -2919,29 +2919,29 @@ void ShowTacticsMenu(ActionContainer *a0) gUnknown_202F270.f1 = 0; gUnknown_202F270.f2 = 10; gUnknown_202F270.f3 = 0; - sub_803ECB4(&windows, 1); + DungeonShowWindows(&windows, 1); PrintMonTactics(scrollFirstId, tacticIds, monInfo, 0); for (i = 0; i < 8; i++) { if (tacticIds[i] == TACTIC_UNUSED) break; } - gUnknown_202EE10.unk1A = i; - gUnknown_202EE10.unk1C = 8; - gUnknown_202EE10.unk1E = 0; - gUnknown_202EE10.unk20 = 0; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.firstEntryY = 16; - gUnknown_202EE10.unkC = 0; - gUnknown_202EE10.unkE = 0; - gUnknown_202EE10.unk14.x = 0; - gUnknown_202EE10.unk0 = 0; - sub_801317C(&gUnknown_202EE10.unk28); - sub_80137B0(&gUnknown_202EE10, 0); - gUnknown_202EE10.menuIndex = menuIndex; + gDungeonMenu.unk1A = i; + gDungeonMenu.unk1C = 8; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + sub_80137B0(&gDungeonMenu, 0); + gDungeonMenu.menuIndex = menuIndex; while (1) { s32 i; - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); if (tacticIds[8] != TACTIC_UNUSED) { sub_80623B0(); } @@ -2951,7 +2951,7 @@ void ShowTacticsMenu(ActionContainer *a0) DungeonRunFrameActions(0x3D); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - if (gUnknown_202EE10.menuIndex == 7) { + if (gDungeonMenu.menuIndex == 7) { if (tacticIds[8] != TACTIC_UNUSED) { for (i = 0; i < 6; i++) { gIwramTextFunc1(0); @@ -2962,11 +2962,11 @@ void ShowTacticsMenu(ActionContainer *a0) menuIndex = 7; break; } - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 0); + MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - if (gUnknown_202EE10.menuIndex == 0) { + if (gDungeonMenu.menuIndex == 0) { if (scrollFirstId != 0) { for (i = 0; i < 6; i++) { gIwramTextFunc2(0); @@ -2977,21 +2977,21 @@ void ShowTacticsMenu(ActionContainer *a0) menuIndex = 0; break; } - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 0); + MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); } if (gRealInputs.pressed & START_BUTTON) { - u32 tacticId = tacticIds[gUnknown_202EE10.menuIndex]; - menuIndex = gUnknown_202EE10.menuIndex; + u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; + menuIndex = gDungeonMenu.menuIndex; PlayDungeonStartButtonSE(); sub_8062748(tacticId); loopBreak = FALSE; break; } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { bool32 changed; - u32 tacticId = tacticIds[gUnknown_202EE10.menuIndex]; - menuIndex = gUnknown_202EE10.menuIndex; + u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; + menuIndex = gDungeonMenu.menuIndex; sub_8062D68(); PlayDungeonConfirmationSE(); gUnknown_202EE6C = 0; @@ -3000,27 +3000,27 @@ void ShowTacticsMenu(ActionContainer *a0) if (CheckVariousStatuses2(teamMon, TRUE)) { sub_8044FF0(0x2F); } - sub_805FC30(&windows, 0x16); + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); while (1) { changed = FALSE; - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x3D); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (sub_8044F3C(gDungeonMenu.menuIndex)) { changed = TRUE; break; } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); changed = FALSE; break; @@ -3028,7 +3028,7 @@ void ShowTacticsMenu(ActionContainer *a0) } if (changed) { PlayDungeonConfirmationSE(); - if (gUnknown_202EE10.menuIndex == 0) { + if (gDungeonMenu.menuIndex == 0) { PlaySoundEffect(0x133); monInfo->tactic = tacticId; monInfo->aiTarget.aiObjective = 6; @@ -3047,7 +3047,7 @@ void ShowTacticsMenu(ActionContainer *a0) loopBreak = FALSE; break; } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); loopBreak = TRUE; break; @@ -3055,7 +3055,7 @@ void ShowTacticsMenu(ActionContainer *a0) } if (addCursor) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); } DungeonRunFrameActions(0x3D); if (loopBreak) @@ -3176,7 +3176,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) unkMonStruct.unk40 = 0; unkMonStruct.unk56 = 0; - gUnknown_202EE10.menuIndex = 0; + gDungeonMenu.menuIndex = 0; while (1) { bool8 loopBreak = FALSE; @@ -3189,21 +3189,21 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) gUnknown_202F270.f1 = var_3C; gUnknown_202F270.f2 = 10; gUnknown_202F270.f3 = 0; - sub_803ECB4(&windows, TRUE); + DungeonShowWindows(&windows, TRUE); sub_8069844(&unkMonStruct, entity); CreatePokemonInfoTabScreen(spArr[var_3C], var_3C, &unkMonStruct, &unkInfoTabStruct, 0); - gUnknown_202EE10.unk1E = var_3C; - gUnknown_202EE10.unk20 = var_38; - gUnknown_202EE10.unkC = (unkTxtStr1Ptr->unk0 + 15) * 8; - gUnknown_202EE10.unkE = ((unkTxtStr1Ptr->unk2 + 1) * 8) - 2; - gUnknown_202EE10.unk14.x = 0; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.firstEntryY = 16; - gUnknown_202EE10.unk0 = 0; - sub_801317C(&gUnknown_202EE10.unk28); - gUnknown_202EE10.menuIndex = 0; - gUnknown_202EE10.unk1A = 0; - gUnknown_202EE10.unk1C = 0; + gDungeonMenu.unk1E = var_3C; + gDungeonMenu.unk20 = var_38; + gDungeonMenu.unkC = (unkTxtStr1Ptr->unk0 + 15) * 8; + gDungeonMenu.unkE = ((unkTxtStr1Ptr->unk2 + 1) * 8) - 2; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1A = 0; + gDungeonMenu.unk1C = 0; if (spArr[var_3C] == 1) { s32 i; @@ -3216,11 +3216,11 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (i != 0) { var_2C = 1; - gUnknown_202EE10.unk1A = i; - gUnknown_202EE10.unk1C = 8; - sub_80137B0(&gUnknown_202EE10, 0); + gDungeonMenu.unk1A = i; + gDungeonMenu.unk1C = 8; + sub_80137B0(&gDungeonMenu, 0); } - gUnknown_202EE10.menuIndex = r8; + gDungeonMenu.menuIndex = r8; } else if (spArr[var_3C] == 4) { s32 i; @@ -3233,18 +3233,18 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (i != 0) { var_30 = 1; - gUnknown_202EE10.unk1A = i; - gUnknown_202EE10.unk1C = 8; - sub_80137B0(&gUnknown_202EE10, 0); + gDungeonMenu.unk1A = i; + gDungeonMenu.unk1C = 8; + sub_80137B0(&gDungeonMenu, 0); } - gUnknown_202EE10.menuIndex = r8; + gDungeonMenu.menuIndex = r8; } while (1) { s32 unkVar; bool8 r5, r6; - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); unkVar = sub_8014140(0, gUnknown_8106B8C); r5 = FALSE; r6 = FALSE; @@ -3271,7 +3271,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) DungeonRunFrameActions(0x1C); if (gUnknown_202F270.f0 > 1 && !sub_80048C8()) { - if ((gRealInputs.pressed & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { + if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { PlayDungeonCursorSE(0); var_3C++; if (spArr[var_3C] == 0) { @@ -3279,7 +3279,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } break; } - if ((gRealInputs.pressed & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { + if ((gRealInputs.pressed & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { PlayDungeonCursorSE(0); var_3C--; if (var_3C == -1) { @@ -3308,7 +3308,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(0); - if (gUnknown_202EE10.menuIndex == 7) { + if (gDungeonMenu.menuIndex == 7) { if (unkInfoTabStruct.unkC[8] != 0) { s32 i; for (i = 0; i < 6; i++) { @@ -3321,7 +3321,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else { - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 0); + MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); } } @@ -3339,7 +3339,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - if (gUnknown_202EE10.menuIndex == 0) { + if (gDungeonMenu.menuIndex == 0) { if (unkMonStruct.unk56 != 0) { s32 i; for (i = 0; i < 6; i++) { @@ -3352,7 +3352,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else { - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 0); + MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); } } } @@ -3371,7 +3371,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - if (gUnknown_202EE10.menuIndex == 7) { + if (gDungeonMenu.menuIndex == 7) { if (unkInfoTabStruct.unk0[8] != 0) { s32 i; for (i = 0; i < 6; i++) { @@ -3384,7 +3384,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else { - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 0); + MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); } } @@ -3402,7 +3402,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - if (gUnknown_202EE10.menuIndex == 0) { + if (gDungeonMenu.menuIndex == 0) { if (unkMonStruct.unk40 != 0) { s32 i; for (i = 0; i < 6; i++) { @@ -3415,7 +3415,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else { - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 0); + MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); } } } @@ -3425,9 +3425,9 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (gRealInputs.pressed & START_BUTTON) { if (var_2C) { - s32 var = unkInfoTabStruct.unkC[gUnknown_202EE10.menuIndex]; + s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; - r8 = gUnknown_202EE10.menuIndex; + r8 = gDungeonMenu.menuIndex; PlayDungeonStartButtonSE(); sub_806285C(var); var_28 = 0; @@ -3435,9 +3435,9 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else if (var_30) { - s32 var = unkInfoTabStruct.unk0[gUnknown_202EE10.menuIndex]; + s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; - r8 = gUnknown_202EE10.menuIndex; + r8 = gDungeonMenu.menuIndex; PlayDungeonStartButtonSE(); sub_806262C(var); var_28 = 0; @@ -3446,36 +3446,36 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { if (var_2C) { - s32 var = unkInfoTabStruct.unkC[gUnknown_202EE10.menuIndex]; + s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; - r8 = gUnknown_202EE10.menuIndex; + r8 = gDungeonMenu.menuIndex; sub_8062D68(); gUnknown_202EE6C = 0; PlayDungeonConfirmationSE(); sub_8044F5C(0xC, 0); - sub_805FC30(&windows, 0x16); + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); while (1) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1C); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { PlayDungeonConfirmationSE(); sub_806285C(var); var_28 = 0; loopBreak = FALSE; break; } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); loopBreak = FALSE; break; @@ -3484,9 +3484,9 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } else if (var_30) { bool8 aPress = FALSE; - s32 var = unkInfoTabStruct.unk0[gUnknown_202EE10.menuIndex]; + s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; - r8 = gUnknown_202EE10.menuIndex; + r8 = gDungeonMenu.menuIndex; sub_8062D68(); gUnknown_202EE6C = var_2C; PlayDungeonConfirmationSE(); @@ -3495,28 +3495,28 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (CheckVariousStatuses2(entity, TRUE)) { sub_8044FF0(0x28); } - sub_805FC30(&windows, 0x16); + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); while (1) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1C); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (sub_8044F3C(gDungeonMenu.menuIndex)) { PlayDungeonConfirmationSE(); aPress = TRUE; break; } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); loopBreak = FALSE; aPress = FALSE; @@ -3525,7 +3525,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } if (aPress) { - if (gUnknown_202EE10.menuIndex == 0) { + if (gDungeonMenu.menuIndex == 0) { PlaySoundEffect(0x133); ToggleIQSkill(&entityInfo->IQSkillMenuFlags, var); } @@ -3543,7 +3543,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } break; } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); loopBreak = TRUE; break; @@ -3552,7 +3552,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (var_28) { if (var_30 != 0 || var_2C != 0) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); } DungeonRunFrameActions(0x1C); } @@ -3705,7 +3705,7 @@ void sub_806262C(u8 iqSkillId) header.f1 = 0; header.f2 = 16; header.f3 = 0; - sub_803ECB4(&windows, TRUE); + DungeonShowWindows(&windows, TRUE); sub_80073B8(0); strcpy(gFormatBuffer_Items[0], GetIQSkillName(iqSkillId)); @@ -3758,7 +3758,7 @@ void sub_8062748(u8 tacticId) header.f1 = 0; header.f2 = 16; header.f3 = 0; - sub_803ECB4(&windows, TRUE); + DungeonShowWindows(&windows, TRUE); sub_80073B8(0); CopyTacticsNameToBuffer(gFormatBuffer_Items[0], tacticId); @@ -3820,7 +3820,7 @@ void sub_806285C(s32 a0) header.f1 = 0; header.f2 = 16; header.f3 = 0; - sub_803ECB4(&windows, TRUE); + DungeonShowWindows(&windows, TRUE); sub_80073B8(0); str = sub_808E4FC(a0); strcpy(gFormatBuffer_Items[0], str); @@ -3873,7 +3873,7 @@ Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) prevId = -985; // Magic number or does it actually mean anything? while (1) { - currId = unkStruct.unk4[gUnknown_202EE10.menuIndex]; + currId = unkStruct.unk4[gDungeonMenu.menuIndex]; if (currId >= 0) { Entity *entity = gDungeon->teamPokemon[currId]; @@ -3891,32 +3891,32 @@ Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) ChangeDungeonCameraPos(&entity->pos, 0, 1, 1); } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1B); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - if (unkStruct.unk14[gUnknown_202EE10.menuIndex] != 0) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (unkStruct.unk14[gDungeonMenu.menuIndex] != 0) { PlayDungeonConfirmationSE(); break; } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); bPress = TRUE; break; } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1B); sub_804AA60(); sub_806A2BC(GetLeader(), 0); @@ -3925,7 +3925,7 @@ Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) if (bPress) { return NULL; } - currId = unkStruct.unk4[gUnknown_202EE10.menuIndex]; + currId = unkStruct.unk4[gDungeonMenu.menuIndex]; if (teamId != NULL) { *teamId = currId; } @@ -4017,12 +4017,12 @@ void sub_8062CA8(Entity *entity) void sub_8062D68(void) { - gUnknown_202EE10.unk1E = 0; - gUnknown_202EE10.unk20 = 0; - gUnknown_202EE10.unkC = 0; - gUnknown_202EE10.unkE = 0; - gUnknown_202EE10.unk14.x = 0; - sub_801317C(&gUnknown_202EE10.unk28); + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + sub_801317C(&gDungeonMenu.unk28); } u32 sub_8062D88(void) @@ -4180,11 +4180,11 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) r10 = FALSE; sub_80633E4(entity, entInfo, a1, &windows, &header, unk, a3, a4); while (1) { - AddMenuCursorSprite_(&gUnknown_202EE10, unk); + AddMenuCursorSprite_(&gDungeonMenu, unk); DungeonRunFrameActions(0x1E); if (gRealInputs.repeated & DPAD_DOWN) { bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; - s32 id = gUnknown_202EE10.menuIndex; + s32 id = gDungeonMenu.menuIndex; if (rHeld) { gUnknown_202F2D8 = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); @@ -4198,15 +4198,15 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) break; } else { - sub_8013780(&gUnknown_202EE10, unk_FindMoveEnabledForAIAfter4(entInfo->moves.moves, id)); - if (id != gUnknown_202EE10.menuIndex) { + sub_8013780(&gDungeonMenu, unk_FindMoveEnabledForAIAfter4(entInfo->moves.moves, id)); + if (id != gDungeonMenu.menuIndex) { PlayDungeonCursorSE(0); } } } if (gRealInputs.repeated & DPAD_UP) { bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; - s32 id = gUnknown_202EE10.menuIndex; + s32 id = gDungeonMenu.menuIndex; if (rHeld) { gUnknown_202F2D8 = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); @@ -4220,23 +4220,23 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) break; } else { - sub_8013780(&gUnknown_202EE10, sub_8092DB8(entInfo->moves.moves, id)); - if (id != gUnknown_202EE10.menuIndex) { + sub_8013780(&gDungeonMenu, sub_8092DB8(entInfo->moves.moves, id)); + if (id != gDungeonMenu.menuIndex) { PlayDungeonCursorSE(0); } } } - if ((gRealInputs.repeated & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { + if ((gRealInputs.repeated & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { SetMonsterActionFields(&leaderInfo->action, 6); break; } - if ((gRealInputs.repeated & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { + if ((gRealInputs.repeated & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { SetMonsterActionFields(&leaderInfo->action, 7); break; } - if ((gRealInputs.pressed & sub_8062D88()) || gUnknown_202EE10.unk28.a_button) { + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { if (a1) { bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; if (rHeld) { @@ -4261,7 +4261,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) { u32 bPressed = B_BUTTON; bPressed &= gRealInputs.pressed; - if ((bPressed) || gUnknown_202EE10.unk28.b_button) { + if ((bPressed) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); ret = TRUE; break; @@ -4269,7 +4269,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1E); if (leaderInfo->action.action == 6 || leaderInfo->action.action == 7) { unkBool = FALSE; @@ -4281,7 +4281,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) if (ret) break; - gUnknown_202F2D8 = gUnknown_202EE10.menuIndex; + gUnknown_202F2D8 = gDungeonMenu.menuIndex; if (r5 == 1) { SetMonsterActionFields(&leaderInfo->action, 0x1D); leaderInfo->action.actionParameters[0].actionUseIndex = entity->unk24; @@ -4332,21 +4332,21 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) } sub_8009524(2); - sub_805FC30(&windows, 0x16); + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); while (1) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1B); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & sub_8062D88()) || gUnknown_202EE10.unk28.a_button) { - if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if (sub_8044F3C(gDungeonMenu.menuIndex)) { sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { PlayDungeonConfirmationSE(); @@ -4356,14 +4356,14 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); bPress = TRUE; break; } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1B); if (bPress != TRUE) { ret = 0; @@ -4400,34 +4400,34 @@ void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, W } } - gUnknown_202EE10.menuIndex = gUnknown_202F2D8; - gUnknown_202EE10.unk1A = movesCount; - gUnknown_202EE10.unk1C = 4; - gUnknown_202EE10.unk1E = arg6; - gUnknown_202EE10.unk20 = arg7; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.firstEntryY = 16; - gUnknown_202EE10.unk14.x = 0; - gUnknown_202EE10.unk0 = 0; - sub_801317C(&gUnknown_202EE10.unk28); + gDungeonMenu.menuIndex = gUnknown_202F2D8; + gDungeonMenu.unk1A = movesCount; + gDungeonMenu.unk1C = 4; + gDungeonMenu.unk1E = arg6; + gDungeonMenu.unk20 = arg7; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); windows->id[0].height = windows->id[0].unk10 = sub_80095E4(4, 0xC) + 2; header->f2 = 13; windows->id[0].pos.x = 2; windows->id[1] = windows->id[3]; windows->id[2] = windowNew; - sub_803ECB4(windows, TRUE); - sub_80137B0(&gUnknown_202EE10, 0); - gUnknown_202EE10.unkC = (gUnknown_2027370[0].unk0 + 16) * 8; - gUnknown_202EE10.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + DungeonShowWindows(windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 16) * 8; + gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; SetMessageArgument_2(gFormatBuffer_Monsters[0], entInfo, 0); for (i = 0; i < MAX_MON_MOVES; i++) { Move *move = &entInfo->moves.moves[i]; arg5[i] = 0; if (!MoveFlagExists(move)) { - if (gUnknown_202EE10.menuIndex == i) { - gUnknown_202EE10.menuIndex = 0; + if (gDungeonMenu.menuIndex == i) { + gDungeonMenu.menuIndex = 0; } } else if (MoveFlagLinkChain(move)) { @@ -4466,7 +4466,7 @@ void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); - y = GetMenuEntryYCoord(&gUnknown_202EE10, i); + y = GetMenuEntryYCoord(&gDungeonMenu, i); if (MoveFlagLinkChain(move)) { x = 13; } @@ -4483,5 +4483,69 @@ void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s sub_80073E0(windowId); } +bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); +bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); + +void sub_8063698(Entity *entity, u8 a1, u8 a2) +{ + EntityInfo *entInfo = GetEntInfo(entity); + Move *move = &entInfo->moves.moves[gUnknown_202F2D8]; + + gUnknown_202EE6C = 0; + if (entInfo->isTeamLeader) { + if (a2) { + sub_8044F5C(0x14, 0); + } + if (MoveFlagExists(move)) { + if (MoveFlagSet(move)) { + sub_8044F5C(0x33, 0); + } + else { + sub_8044F5C(0x1E, 0); + } + } + } + else { + sub_8044F5C(0x1F, 0); + } + + if (a1) { + sub_8044F5C(0x20, 0); + sub_8044F5C(0x21, 0); + } + sub_8044F5C(0x1D, 0); + if (!a1) { + sub_8044FF0(0x20); + } + else { + if (!sub_8063C88(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x20); + } + if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x21); + } + } + + if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x21); + } + + if (a2) { + bool8 unkBool = FALSE; + if (gUnknown_202F2D8 < MAX_MON_MOVES) { + unkBool = CanAIUseMove(entity, gUnknown_202F2D8, TRUE) != FALSE; + } + if (!unkBool) { + sub_8044FF0(0x14); + } + } + + sub_8045064(); +} + +void sub_80637A4(ActionContainer *a0, s32 a1) +{ + sub_80637BC(a0, gDungeonMenu.menuIndex, a1); +} // diff --git a/src/code_8066D04.c b/src/code_8066D04.c index d1e358666..020a8dcff 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -904,17 +904,17 @@ extern void sub_8068344(void); bool8 sub_8044F3C(s32 param_1); void sub_8068310(s32 a0, PokemonStruct1 **a1); void sub_8067F00(u8 a0, PokemonStruct1 **a1, s32 a2, s32 a3, s32 a4); -extern void sub_803ECB4(Windows *a0, u8 a1); +extern void DungeonShowWindows(Windows *a0, u8 a1); u32 sub_8014140(s32 a0, const void *a1); void sub_8083D1C(void); void PlayDungeonConfirmationSE(void); void PlayDungeonCancelSE(void); void sub_806806C(PokemonStruct1 *a0); -void sub_805FC30(Windows *a0, s32 a1); +void CreateDungeonMenuSubWindow(Windows *a0, s32 a1); extern void sub_803EAF0(u32, u8 *); extern const s32 gUnknown_8106E80[]; -extern MenuInputStruct gUnknown_202EE10; +extern MenuInputStruct gDungeonMenu; static EWRAM_DATA WindowHeader gUnknown_202F308 = {0}; static EWRAM_DATA s32 gUnknown_202F30C = 0; @@ -980,25 +980,25 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) ASM_MATCH_TRICK(r7); - sub_803ECB4(&spTxtStruct, 1); + DungeonShowWindows(&spTxtStruct, 1); sub_8067F00(a0, a3, gUnknown_202F30C, a2, a1); - gUnknown_202EE10.unk1A = min(a2, 8); - gUnknown_202EE10.menuIndex = r10; - gUnknown_202EE10.unk1C = 8; - gUnknown_202EE10.unk1E = 0; - gUnknown_202EE10.unk20 = 0; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.firstEntryY = 18; - gUnknown_202EE10.unkC = 0; - gUnknown_202EE10.unkE = 0; - gUnknown_202EE10.unk14.x = 0; - gUnknown_202EE10.unk0 = 0; - sub_801317C(&gUnknown_202EE10.unk28); - sub_80137B0(&gUnknown_202EE10, 0); + gDungeonMenu.unk1A = min(a2, 8); + gDungeonMenu.menuIndex = r10; + gDungeonMenu.unk1C = 8; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 18; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + sub_80137B0(&gDungeonMenu, 0); while (1) { s32 r4; - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); r5 = 0; r7 = 0; if (a2 - gUnknown_202F30C > 8) { @@ -1027,7 +1027,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) } if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - if (gUnknown_202EE10.menuIndex == 7) { + if (gDungeonMenu.menuIndex == 7) { if (a2 - gUnknown_202F30C > 8) { s32 i; for (i = 0; i < 6; i++) { @@ -1040,7 +1040,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) r10 = 7; break; } - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 0); + MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); } if (r4 == 1 && r7 != 0) { @@ -1058,7 +1058,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - if (gUnknown_202EE10.menuIndex == 0) { + if (gDungeonMenu.menuIndex == 0) { if (gUnknown_202F30C != 0) { s32 i; for (i = 0; i < 6; i++) { @@ -1071,7 +1071,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) r10 = 0; break; } - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 0); + MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); } if (sub_80048C8()) { @@ -1083,25 +1083,25 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) r7 = 3; break; } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { PlayDungeonConfirmationSE(); r7 = 1; break; } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); r7 = 2; break; } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x37); if (r7 == 0) { continue; } else if (r7 == 2) { - r10 = gUnknown_202EE10.menuIndex; + r10 = gDungeonMenu.menuIndex; if (gUnknown_202F310 < a1) { continue; } @@ -1114,7 +1114,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) } } else if (r7 == 3) { - r10 = gUnknown_202EE10.menuIndex; + r10 = gDungeonMenu.menuIndex; sub_806806C(a3[gUnknown_202F30C + r10]); continue; } @@ -1122,7 +1122,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) s32 arrId; u8 locIdIsPartner; - r10 = gUnknown_202EE10.menuIndex; + r10 = gDungeonMenu.menuIndex; arrId = gUnknown_202F30C + r10; gUnknown_202EE6C = 0; sub_8044F5C(0x29, 0); @@ -1142,44 +1142,44 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) } sub_8045064(); - sub_805FC30(&spTxtStruct, 0x15); + CreateDungeonMenuSubWindow(&spTxtStruct, 0x15); while (1) { - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x37); if (gRealInputs.repeated & DPAD_DOWN) { PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gUnknown_202EE10, 1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, 1); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gUnknown_202EE10, 1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, 1); } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { - if (sub_8044F3C(gUnknown_202EE10.menuIndex)) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (sub_8044F3C(gDungeonMenu.menuIndex)) { PlayDungeonConfirmationSE(); r7 = 1; break; } PlayDungeonCancelSE(); } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); r7 = 0; break; } } - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x37); if (r7 != 0) { - if (gUnknown_202EE10.menuIndex == 0) { + if (gDungeonMenu.menuIndex == 0) { a3[arrId]->unk0 |= 0x8000; sub_8068310(a2, a3); } - else if (gUnknown_202EE10.menuIndex == 1) { + else if (gDungeonMenu.menuIndex == 1) { a3[arrId]->unk0 &= ~(0x8000); sub_8068310(a2, a3); } @@ -1269,7 +1269,7 @@ void sub_806806C(PokemonStruct1 *a0) r7 = 0; unkStruct.unk40 = 0; unkStruct.unk56 = 0; - gUnknown_202EE10.menuIndex = 0; + gDungeonMenu.menuIndex = 0; while (1) { bool32 loopBreak = FALSE; @@ -1280,28 +1280,28 @@ void sub_806806C(PokemonStruct1 *a0) gUnknown_202F308.f2 = 10; gUnknown_202F308.f3 = 0; - gUnknown_202EE10.unk1E = r7; - gUnknown_202EE10.unk20 = 4; - gUnknown_202EE10.unk1A = 0; - gUnknown_202EE10.menuIndex = 0; - gUnknown_202EE10.unk1C = 0; - gUnknown_202EE10.unk4 = 0; - gUnknown_202EE10.firstEntryY = 16; - gUnknown_202EE10.unk14.x = 0; - gUnknown_202EE10.unk0 = 0; + gDungeonMenu.unk1E = r7; + gDungeonMenu.unk20 = 4; + gDungeonMenu.unk1A = 0; + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1C = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; - sub_801317C(&gUnknown_202EE10.unk28); - sub_803ECB4(&spTxtStruct, 1); + sub_801317C(&gDungeonMenu.unk28); + DungeonShowWindows(&spTxtStruct, 1); sub_808FF20(&unkStruct, a0, gDungeon->unk644.unk16); CreatePokemonInfoTabScreen(spF8[r7], r7, &unkStruct, &var_C8, 0); - gUnknown_202EE10.unkC = (gUnknown_2027370[0].unk0 + 15) * 8; - gUnknown_202EE10.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 15) * 8; + gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; while (1) { s32 r5; - AddMenuCursorSprite(&gUnknown_202EE10); + AddMenuCursorSprite(&gDungeonMenu); if (spF8[r7] == 4) { if (var_C8.unk0[8] != 0) { sub_80684C4(); @@ -1313,14 +1313,14 @@ void sub_806806C(PokemonStruct1 *a0) r5 = sub_8014140(0, gUnknown_8106DA4); DungeonRunFrameActions(0x1C); - if ((gRealInputs.pressed & DPAD_RIGHT) || gUnknown_202EE10.unk28.dpad_right) { + if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { PlayDungeonCursorSE(0); if (++r7 == 4) { r7 = 0; } break; } - if ((gRealInputs.pressed & DPAD_LEFT) || gUnknown_202EE10.unk28.dpad_left) { + if ((gRealInputs.pressed & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { PlayDungeonCursorSE(0); if (--r7 == -1) { r7 = 3; @@ -1357,12 +1357,12 @@ void sub_806806C(PokemonStruct1 *a0) continue; } - if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) { + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { PlayDungeonConfirmationSE(); loopBreak = TRUE; break; } - if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) { + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { PlayDungeonCancelSE(); loopBreak = TRUE; break; diff --git a/src/dungeon_music.c b/src/dungeon_music.c index 60289929f..4f6d5ec31 100644 --- a/src/dungeon_music.c +++ b/src/dungeon_music.c @@ -10,7 +10,7 @@ #include "text_util.h" -extern MenuInputStruct gUnknown_202EE10; +extern MenuInputStruct gDungeonMenu; extern u8 *gUnknown_80FE6F4[]; extern u8 gUnknown_810AC60; // 0xC @@ -140,7 +140,7 @@ bool8 sub_8083C88(u8 param_1) void PlayDungeonCursorSE(bool8 checkMenuEntriesCount) { - if ((!checkMenuEntriesCount) || (gUnknown_202EE10.unk1A > 1)) { + if ((!checkMenuEntriesCount) || (gDungeonMenu.unk1A > 1)) { PlayFanfareSE(0x12d,MAX_VOLUME); } } diff --git a/sym_ewram.txt b/sym_ewram.txt index 4ea6cbbfe..03fbfb149 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -123,7 +123,7 @@ gUnknown_202EE08: /* 202EE08 (sub_8040150 - sub_8040788) */ gUnknown_202EE0C: /* 202EE0C (sub_80694C0 - sub_806B8CC) */ .space 0x4 -gUnknown_202EE10: /* 202EE10 (sub_803EC94 - sub_8083CE0) */ +gDungeonMenu: /* 202EE10 (sub_803EC94 - sub_8083CE0) */ .space 0x28 gUnknown_202EE38: /* 202EE38 (sub_8063834) */ From 7ad89f101da8586e76d30e8aa4d33f80e5aa3abd Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 1 Mar 2025 20:31:56 +0100 Subject: [PATCH 08/31] start splitting dungeon menu files --- asm/code_805D8C8.s | 71 +- include/dungeon_main.h | 16 + ld_script.txt | 3 +- src/code_8044CC8.c | 26 +- src/{code_805D8C8_1.c => code_805D8C8_2.c} | 1706 +------------------ src/code_8066D04.c | 8 +- src/dungeon_main.c | 1748 ++++++++++++++++++++ sym_ewram.txt | 5 +- sym_ewram_init.txt | 3 +- 9 files changed, 1867 insertions(+), 1719 deletions(-) create mode 100644 include/dungeon_main.h rename src/{code_805D8C8_1.c => code_805D8C8_2.c} (62%) create mode 100644 src/dungeon_main.c diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index c0b70f853..93f413c11 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,66 +6,7 @@ .text - thumb_func_start sub_80637BC -sub_80637BC: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r2, 0 - ldr r0, _080637E0 - lsls r1, 2 - adds r1, r0 - ldrh r1, [r1] - adds r0, r4, 0 - bl SetMonsterActionFields - strb r5, [r4, 0x4] - ldr r0, _080637E4 - ldr r0, [r0] - strb r0, [r4, 0xC] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080637E0: .4byte gUnknown_202EE44 -_080637E4: .4byte gUnknown_202F2D8 - thumb_func_end sub_80637BC - thumb_func_start sub_80637E8 -sub_80637E8: - push {lr} - adds r3, r0, 0 - ldr r0, _08063828 - ldr r1, [r0] - ldrb r0, [r3, 0x4] - lsls r0, 2 - ldr r2, _0806382C - adds r1, r2 - adds r1, r0 - ldr r0, [r1] - ldr r0, [r0, 0x70] - ldrb r1, [r3, 0xC] - lsls r1, 3 - adds r1, r0, r1 - ldr r2, _08063830 - adds r2, r1 - mov r12, r2 - ldrb r2, [r2] - movs r1, 0x2 - orrs r1, r2 - mov r2, r12 - strb r1, [r2] - movs r1, 0x8C - lsls r1, 1 - adds r0, r1 - ldrb r1, [r3, 0xC] - movs r2, 0x4 - bl sub_8063834 - pop {r0} - bx r0 - .align 2, 0 -_08063828: .4byte gDungeon -_0806382C: .4byte 0x0001357c -_08063830: .4byte 0x00000119 - thumb_func_end sub_80637E8 thumb_func_start sub_8063834 sub_8063834: @@ -1115,7 +1056,7 @@ _08064058: _0806406E: movs r1, 0x18 ldrsh r0, [r4, r1] - bl sub_8044F3C + bl CanSubMenuItemBeChosen lsls r0, 24 cmp r0, 0 beq _08064098 @@ -1488,7 +1429,7 @@ _08064340: pop {r0} bx r0 .align 2, 0 -_08064350: .4byte gUnknown_202EE6C +_08064350: .4byte gDungeonSubMenuItemsCount _08064354: .4byte gUnknown_202F2D8 thumb_func_end sub_8064310 @@ -1682,7 +1623,7 @@ _080644CC: .4byte gRealInputs _080644D0: movs r2, 0x18 ldrsh r0, [r5, r2] - bl sub_8044F3C + bl CanSubMenuItemBeChosen lsls r0, 24 cmp r0, 0 beq _0806450C @@ -1820,7 +1761,7 @@ sub_80645D4: pop {r0} bx r0 .align 2, 0 -_080645F4: .4byte gUnknown_202EE6C +_080645F4: .4byte gDungeonSubMenuItemsCount thumb_func_end sub_80645D4 thumb_func_start sub_80645F8 @@ -2209,7 +2150,7 @@ _08064910: .4byte gRealInputs _08064914: movs r2, 0x18 ldrsh r0, [r5, r2] - bl sub_8044F3C + bl CanSubMenuItemBeChosen lsls r0, 24 cmp r0, 0 beq _08064950 @@ -2353,7 +2294,7 @@ sub_8064A18: pop {r0} bx r0 .align 2, 0 -_08064A38: .4byte gUnknown_202EE6C +_08064A38: .4byte gDungeonSubMenuItemsCount thumb_func_end sub_8064A18 thumb_func_start sub_8064A3C diff --git a/include/dungeon_main.h b/include/dungeon_main.h new file mode 100644 index 000000000..232533bdc --- /dev/null +++ b/include/dungeon_main.h @@ -0,0 +1,16 @@ +#ifndef GUARD_DUNGEON_MAIN_H +#define GUARD_DUNGEON_MAIN_H + +#include "structs/str_text.h" + +void DungeonHandlePlayerInput(void); +void sub_805E804(void); +void sub_805EE30(void); +void sub_805EFB4(Entity *a0, bool8 a1); +void sub_805F02C(void); +ActionContainer *GetLeaderActionContainer(void); +u16 GetLeaderActionId(void); +bool8 sub_805FBE8(u8 *a0); +void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX); + +#endif diff --git a/ld_script.txt b/ld_script.txt index 3508fe4a8..e3b4ce6b9 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -226,7 +226,8 @@ SECTIONS { src/move_actions.o(.text); src/status_actions.o(.text); src/move_checks.o(.text); - src/code_805D8C8_1.o(.text); + src/dungeon_main.o(.text); + src/code_805D8C8_2.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); src/code_805D8C8.o(.text); diff --git a/src/code_8044CC8.c b/src/code_8044CC8.c index 1de1a7fde..52423405f 100644 --- a/src/code_8044CC8.c +++ b/src/code_8044CC8.c @@ -23,7 +23,7 @@ typedef struct unkStr_80F7C54 EWRAM_DATA unkStruct_202EE44 gUnknown_202EE44[10] = {0}; -extern s32 gUnknown_202EE6C; +extern s32 gDungeonSubMenuItemsCount; extern const ItemText gActions[]; extern u16 gUnknown_80F6964[NUM_ITEM_CATEGORIES]; @@ -159,7 +159,7 @@ void sub_8044E24(Entity *entity,int index,u32 unused) } // Similar to sub_8044BA8 -u8 *sub_8044EC8(s32 param_1) +u8 *GetDungeonSubMenuItemString(s32 param_1) { u16 uVar1; u32 uVar3; @@ -185,7 +185,7 @@ u8 *sub_8044EC8(s32 param_1) } } -bool8 sub_8044F3C(s32 param_1) +bool8 CanSubMenuItemBeChosen(s32 param_1) { if(param_1 < 0) return FALSE; @@ -197,17 +197,17 @@ void sub_8044F5C(u16 param_1, u8 param_2) { int index; - if (gUnknown_202EE6C < 10) { - for(index = 0; index < gUnknown_202EE6C; index++) + if (gDungeonSubMenuItemsCount < 10) { + for(index = 0; index < gDungeonSubMenuItemsCount; index++) { if (gUnknown_202EE44[index].unk0 == param_1) { return; } } - gUnknown_202EE44[gUnknown_202EE6C].unk0 = param_1; - gUnknown_202EE44[gUnknown_202EE6C].unk2 = param_2; - gUnknown_202EE44[gUnknown_202EE6C].unk3 = TRUE; - gUnknown_202EE6C++; + gUnknown_202EE44[gDungeonSubMenuItemsCount].unk0 = param_1; + gUnknown_202EE44[gDungeonSubMenuItemsCount].unk2 = param_2; + gUnknown_202EE44[gDungeonSubMenuItemsCount].unk3 = TRUE; + gDungeonSubMenuItemsCount++; } } @@ -215,7 +215,7 @@ s32 sub_8044FB4(u16 param_1) { int index; - for(index = 0; index < gUnknown_202EE6C; index++) + for(index = 0; index < gDungeonSubMenuItemsCount; index++) { if (gUnknown_202EE44[index].unk0 == param_1) { return index; @@ -228,7 +228,7 @@ void sub_8044FF0(u16 param_1) { int index; - for(index = 0; index < gUnknown_202EE6C; index++) + for(index = 0; index < gDungeonSubMenuItemsCount; index++) { if (gUnknown_202EE44[index].unk0 == param_1) { gUnknown_202EE44[index].unk3 = FALSE; @@ -269,8 +269,8 @@ void sub_8045064(void) unkStruct_202EE44 *jPtr; unkStruct_202EE44 temp; - for (i = 0; i < gUnknown_202EE6C; i++) { - for (j = i + 1; j < gUnknown_202EE6C; j++) { + for (i = 0; i < gDungeonSubMenuItemsCount; i++) { + for (j = i + 1; j < gDungeonSubMenuItemsCount; j++) { iPtr = &gUnknown_202EE44[i]; jPtr = &gUnknown_202EE44[j]; if ((s32)gUnknown_80F7C54[iPtr->unk0].unk0 > (s32)gUnknown_80F7C54[jPtr->unk0].unk0) { diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_2.c similarity index 62% rename from src/code_805D8C8_1.c rename to src/code_805D8C8_2.c index d2763ef80..e2648ba2b 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_2.c @@ -3,6 +3,7 @@ #include "number_util.h" #include "input.h" #include "structs/map.h" +#include "dungeon_main.h" #include "dungeon_message.h" #include "dungeon_action.h" #include "dungeon_ai_targeting.h" @@ -87,7 +88,6 @@ void sub_806A914(u8 a0, u8 a1, u8 a2); void SetLeaderActionToNothing(u8 a0); u16 GetLeaderActionId(void); void sub_80978C8(s16 a0); -static void TryCreateModeArrows(Entity *leader); bool8 sub_8094C48(void); bool8 sub_805EC4C(Entity *a0, u8 a1); void sub_803E724(s32 a0); @@ -141,1410 +141,6 @@ extern const u8 *gTeamToolboxBPtr; extern const u8 *gFieldItemMenuGroundTextPtr; extern const u8 *gUnknown_80FE940; extern const u8 *gWhichTextPtr1; - -static EWRAM_DATA bool8 sInDiagonalMode = 0; -static EWRAM_DATA bool8 sInRotateMode = 0; -// Frames counter for arrows in diagonal/rotate mode. -static EWRAM_DATA s16 sArrowsFrames = 0; -// If both of these are set to TRUE, there are 3 arrows visible instead of 1 in rotate mode -static EWRAM_DATA bool8 sShowThreeArrows1 = 0; -static EWRAM_DATA bool8 sShowThreeArrows2 = 0; - -void DungeonHandlePlayerInput(void) -{ - struct UnkMenuBitsStruct r6; - bool8 triggers[5]; // Always FALSE, if one of these is TRUE - they can open various menus or cause an item throw. Most likely used for debugging/testing. - s32 frames; - s32 var_38; - UnkDungeonGlobal_unk181E8_sub *unkPtr; - - unkPtr = &gDungeon->unk181e8; - var_38 = 3; - gDungeon->unk12 = 0; - sub_806A2BC(GetLeader(), 1); - if (sub_80701A4(GetLeader())) { - sub_803E708(60, 16); - return; - } - - gDungeon->unk644.unk2F = 0; - sub_8040A78(); - if (gDungeon->unk1 != 0) { - gDungeon->unk1 = 0; - if (!ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) { - SetLeaderActionToNothing(TRUE); - sub_805E804(); - ShowDungeonStairsMenu(GetLeader()); - ResetRepeatTimers(); - ResetUnusedInputStruct(); - if (GetLeaderActionId() != 0) { - return; - } - } - } - - sub_806A914(1, 1, 1); - while (1) { - Entity *leader = GetLeader(); - EntityInfo *leaderInfo = GetEntInfo(leader); - - sub_80978C8(leaderInfo->id); - if (gDungeon->unk644.unk28 != 0) { - if (sub_805E874() != 0) { - leaderInfo->action.action = 2; - leaderInfo->action.actionParameters[0].actionUseIndex = 0; - break; - } - sub_805E804(); - } - sInRotateMode = FALSE; - sInDiagonalMode = FALSE; - if (gDungeon->unk5C0 >= 0) { - r6.a0_8 = 1; - r6.a0_16 = 0; - r6.a0_24 = 0; - } - else { - r6.a0_8 = 0; - r6.a0_16 = 0; - r6.a0_24 = 0; - } - - frames = 0; - sub_8044C50(ACTION_NOTHING); - sShowThreeArrows1 = FALSE; - sShowThreeArrows2 = FALSE; - - while (r6.a0_8 == 0) { - u32 dpadDiagonal, dpadSimple; - bool32 highlightTiles, tryItemThrow; - bool32 bPress, rPress, unkBool; // Always FALSE, might've been used as debug variables. - s32 directionNew; - - sArrowsFrames++; - if (unkPtr->unk1821A != 0) { - frames = 0; - } - else { - frames++; - } - - if (var_38 != 0 && --var_38 == 0) { - sub_8075680(0); - } - - TryCreateModeArrows(leader); - unkBool = FALSE; - { - s32 i; - for (i = 0; i < 5; i++) { - triggers[i] = FALSE; - } - } - - if (gRealInputs.held & A_BUTTON && gRealInputs.held & B_BUTTON && FixedPointToInt(leaderInfo->belly) != 0) { - sub_8044C50(ACTION_PASS_TURN); - gDungeon->unk644.unk2F = 1; - break; - } - - bPress = FALSE; - rPress = FALSE; - - if (gRealInputs.pressed & A_BUTTON) { - if (gRealInputs.held & B_BUTTON) { - if (FixedPointToInt(leaderInfo->belly) != 0) { - sub_8044C50(ACTION_PASS_TURN); - gDungeon->unk644.unk2F = 1; - break; - } - } - else if (ShouldMonsterRunAwayAndShowEffect(leader, TRUE)) { - LogMessageByIdWithPopupCheckUser(leader, gUnknown_80FD4B0); - sub_8044C50(ACTION_PASS_TURN); - gDungeon->unk644.unk2F = 1; - break; - } - else if (gRealInputs.held & L_BUTTON) { - bool32 canUseMove; - s32 i, j; - - for (i = 0; i < MAX_MON_MOVES; i++) { - if (MoveFlagExists(&leaderInfo->moves.moves[i]) && MoveFlagSet(&leaderInfo->moves.moves[i])) { - break; - } - } - if (i == MAX_MON_MOVES) { - LogMessageByIdWithPopupCheckUser(leader, gUnknown_80F8A28); - break; - } - - for (j = 0; j < MAX_MON_MOVES; j++) { - if (MoveFlagExists(&leaderInfo->moves.moves[j])) { - if (leaderInfo->moves.moves[j].PP != 0) - break; - } - } - if (j == MAX_MON_MOVES) { - SetMonsterActionFields(&leaderInfo->action, ACTION_STRUGGLE); - break; - } - - canUseMove = FALSE; - for (j = i; j < MAX_MON_MOVES; j++) { - if (j != i && !(leaderInfo->moves.moves[j].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)) { - break; - } - if (leaderInfo->moves.moves[j].PP != 0) { - canUseMove = TRUE; - break; - } - } - if (!canUseMove) { - LogMessageByIdWithPopupCheckUser(leader, gUnknown_80F8A4C); - } - else { - SetMonsterActionFields(&leaderInfo->action, ACTION_USE_MOVE_PLAYER); - leaderInfo->action.actionParameters[0].actionUseIndex = GetTeamMemberEntityIndex(leader); - leaderInfo->action.actionParameters[1].actionUseIndex = i; - } - break; - } - else { - if (!sub_805EF60(leader, leaderInfo)) { - SetMonsterActionFields(&leaderInfo->action, ACTION_REGULAR_ATTACK); - } - break; - } - } - - if (gRealInputs.shortPress & B_BUTTON) { - r6.a0_8 = 1; - r6.a0_16 = 0; - r6.a0_24 = 0; - break; - } - else if (triggers[1]) { // Opens moves menu - gDungeon->unk5C0 = 0; - r6.a0_8 = 1; - r6.a0_16 = 0; - r6.a0_24 = 1; - break; - } - else if (triggers[2]) { // Opens item menu - gDungeon->unk5C0 = 1; - r6.a0_8 = 1; - r6.a0_16 = 0; - r6.a0_24 = 1; - break; - } - else if (triggers[3]) { // Opens pokemon menu - gDungeon->unk5C0 = 2; - r6.a0_8 = 1; - r6.a0_16 = 0; - r6.a0_24 = 1; - break; - } - else if (triggers[4]) { // Opens regular menu - r6.a0_8 = 1; - r6.a0_16 = 0; - r6.a0_24 = 1; - break; - } - else if (frames > 0x707) { // Opens simple menu when idling - r6.a0_8 = 1; - r6.a0_16 = 1; - r6.a0_24 = 0; - break; - } - - if (gGameOptionsRef->unk9 == 0 - && (gRealInputs.pressed & B_BUTTON || (!unkBool && bPress)) - && unkPtr->unk1821A != 0) - { - sub_804AA60(); - sInRotateMode = FALSE; - ResetRepeatTimers(); - ResetUnusedInputStruct(); - } - - if (gRealInputs.held & L_BUTTON) { - if (gRealInputs.pressed & B_BUTTON) { - DisplayMessageLog(); - ResetRepeatTimers(); - ResetUnusedInputStruct(); - } - } - - tryItemThrow = FALSE; - if (gRealInputs.held & R_BUTTON) { - if (!sInDiagonalMode) { - sArrowsFrames = 0; - } - sInDiagonalMode = TRUE; - } - else { - sInDiagonalMode = FALSE; - } - - highlightTiles = FALSE; - if (gGameOptionsRef->unk9 == 0) { - if (gRealInputs.shortPress & R_BUTTON || rPress || gRealInputs.pressed & START_BUTTON) { - highlightTiles = TRUE; - } - } - if (highlightTiles) { - sub_805E738(leader); - sInRotateMode = TRUE; - unkPtr->unk1821B = leaderInfo->action.direction; - unkPtr->unk1821C = 0xFF; - ResetRepeatTimers(); - } - - if ((gRealInputs.held & L_BUTTON) == L_BUTTON && (gRealInputs.pressed & R_BUTTON) == R_BUTTON) { - tryItemThrow = TRUE; - } - if (triggers[0]) { - tryItemThrow = TRUE; - } - if (tryItemThrow) { - s32 i; - for (i = 0; i < INVENTORY_SIZE; i++) { - if (ItemExists(&gTeamInventoryRef->teamItems[i]) && ItemSet(&gTeamInventoryRef->teamItems[i])) { - sub_8044C50(ACTION_THROW_ITEM_PLAYER); - leaderInfo->action.actionParameters[0].actionUseIndex = i +1; - leaderInfo->action.actionParameters[0].itemPos.x = 0; - leaderInfo->action.actionParameters[0].itemPos.y = 0; - break; - } - } - if (leaderInfo->action.action != 0) { - break; - } - } - - // SELECT button - if (!gDungeon->unk181e8.blinded && gGameOptionsRef->mapOption != 6 && gRealInputs.pressed & SELECT_BUTTON) { - s32 prevMapOption = gGameOptionsRef->mapOption; - gUnknown_202EE00 = 1; - gDungeon->unk181e8.unk18214 = 1; - if (!sub_8094C48()) { - sub_8094C88(); - } - sub_8052210(1); - sub_8040A84(); - SetBGOBJEnableFlags(0x1E); - sub_803E708(0xA, 0x2F); - while (1) { - DungeonRunFrameActions(0x2F); - if (gRealInputs.pressed & SELECT_BUTTON) - break; - if (gRealInputs.pressed & B_BUTTON) - break; - - if (gRealInputs.pressed & A_BUTTON) { - gUnknown_202EE00 = (gUnknown_202EE00 == 0) ? 1 : 0; // Flip - sub_8040A84(); - } - } - gDungeon->unk181e8.unk18214 = 0; - gGameOptionsRef->mapOption = prevMapOption; - gUnknown_202EE00 = 1; - sub_8040A84(); - SetBGOBJEnableFlags(0); - DungeonRunFrameActions(0x2F); - DungeonRunFrameActions(0x2F); - } - - if (gDungeon->unk644.unk29 != 0 && !sInDiagonalMode) { - dpadDiagonal = dpadSimple = gRealInputs.pressed; - } - else { - dpadDiagonal = gRealInputs.held; - dpadSimple = (unkPtr->unk1821A == 0) ? gRealInputs.held : gRealInputs.pressed; - } - - dpadDiagonal &= DPAD_ANY; - dpadSimple &= DPAD_ANY; - directionNew = -1; - if (dpadDiagonal == (DPAD_UP | DPAD_RIGHT)) - directionNew = DIRECTION_NORTHEAST; - if (dpadDiagonal == (DPAD_UP | DPAD_LEFT)) - directionNew = DIRECTION_NORTHWEST; - if (dpadDiagonal == (DPAD_DOWN | DPAD_RIGHT)) - directionNew = DIRECTION_SOUTHEAST; - if (dpadDiagonal == (DPAD_DOWN | DPAD_LEFT)) - directionNew = DIRECTION_SOUTHWEST; - - if (dpadSimple == DPAD_UP) - directionNew = DIRECTION_NORTH; - if (dpadSimple == DPAD_DOWN) - directionNew = DIRECTION_SOUTH; - if (dpadSimple == DPAD_RIGHT) - directionNew = DIRECTION_EAST; - if (dpadSimple == DPAD_LEFT) - directionNew = DIRECTION_WEST; - - if (directionNew >= 0 && (!sInDiagonalMode || (directionNew & 1))) { - bool32 directionChanged = (leaderInfo->action.direction != directionNew); - leaderInfo->action.direction = directionNew & DIRECTION_MASK; - if (sInRotateMode) { - unkPtr->unk1821B = directionNew; - sub_806CDD4(leader, sub_806CEBC(leader), directionNew); - } - else { - u8 canMoveFlags = 0; - const u8 *immobilizedMsg = NULL; - - if (sub_805EC4C(leader, 1)) - break; - - if (leaderInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) { - immobilizedMsg = gUnknown_80F8A84, canMoveFlags |= 1; - } - else if (leaderInfo->frozenClassStatus.status == STATUS_CONSTRICTION) { - immobilizedMsg = gUnknown_80F8A6C, canMoveFlags |= 1; - } - else if (leaderInfo->frozenClassStatus.status == STATUS_INGRAIN) { - immobilizedMsg = gUnknown_80F8AB0, canMoveFlags |= 1; - } - else if (leaderInfo->frozenClassStatus.status == STATUS_WRAP) { - immobilizedMsg = gUnknown_80F8ADC, canMoveFlags |= 1; - } - else if (leaderInfo->frozenClassStatus.status == STATUS_WRAPPED) { - immobilizedMsg = gUnknown_80F8B0C, canMoveFlags |= 1; - } - - if (!CanMoveInDirection(leader, directionNew)) - canMoveFlags |= 2; - - if (directionChanged) { - sub_806CDD4(leader, sub_806CEBC(leader), directionNew); - } - - if (!(canMoveFlags & 2)) { - if (canMoveFlags & 1) { - if (immobilizedMsg != NULL) { - LogMessageByIdWithPopupCheckUser(leader, immobilizedMsg); - } - sub_8044C50(ACTION_PASS_TURN); - gDungeon->unk644.unk2F = 1; - } - else { - sub_8044C50(ACTION_WALK); - if ((gRealInputs.held & B_BUTTON || bPress) && FixedPointToInt(leaderInfo->belly) != 0) { - if (GetEntInfo(leader)->cringeClassStatus.status != STATUS_CONFUSED) { - gDungeon->unk644.unk28 = 1; - } - leaderInfo->action.actionParameters[0].actionUseIndex = 0; - } - else { - leaderInfo->action.actionParameters[0].actionUseIndex = 1; - } - } - break; - } - else if (canMoveFlags & 1) { - sub_803E724(0x23); - } - - } - } - DungeonRunFrameActions(0xF); - } - - if (unkPtr->unk1821A != 0) { - sub_804AA60(); - } - - if (leaderInfo->action.action == 0x2D || leaderInfo->action.action == 0x13) { - HandleTalkFieldAction(leader); - if (sub_8044B28()) - break; - sub_8044C50(ACTION_NOTHING); - } - else if ((r6.a0_8) == 0) { - gDungeon->unk644.unk29 = 0; - if (leaderInfo->action.action != 0) { - if (!IsNotAttacking(leader, FALSE)) { - DungeonRunFrameActions(0xF); - } - break; - } - DungeonRunFrameActions(0xF); - } - else { - DungeonRunFrameActions(0xF); - sub_8047158(); - ShowMainMenu((r6.a0_16 == 0), r6.a0_24); - ResetRepeatTimers(); - ResetUnusedInputStruct(); - sInRotateMode = FALSE; - unkPtr->unk1821A = 0; - sub_804AA60(); - if (sub_8044B28()) - break; - if (leaderInfo->action.action != 0) { - if (leaderInfo->action.action == 0x2B) { - gDungeon->unk4 = 1; - gDungeon->unk3 = 1; - } - if (leaderInfo->action.action == 0x2E) { - gDungeon->unk4 = 1; - gDungeon->unk3 = 0; - } - break; - } - DungeonRunFrameActions(0xF); - if (gDungeon->unk4 != 0) - break; - } - } -} - -struct UnkStruct_8106AC8 -{ - s16 unk0; - s16 unk2; - u8 unk4; - u8 unk5; -}; - -extern const struct UnkStruct_8106AC8 gUnknown_8106AC8[]; - -struct UnkStruct_8106AE8 -{ - s16 unk0; - s16 unk2; - u32 unk4; - u8 unk8; - u8 unk9; - u8 unkA; -}; - -extern const struct UnkStruct_8106AE8 gUnknown_8106AE8[]; - -// Creates arrow sprites which are used when in rotate or diagonal modes. -static void TryCreateModeArrows(Entity *leader) -{ - UnkDungeonGlobal_unk181E8_sub *unkPtr = &gDungeon->unk181e8; - - if (sInDiagonalMode) { - s32 i; - SpriteOAM sprite; - - for (i = 0; i < 4; i++) { - u32 matrixNum; - s32 x, xMul, x2; - s32 y, yMul, y2; - - SpriteSetAffine1(&sprite, 0); - SpriteSetAffine2(&sprite, 0); - SpriteSetObjMode(&sprite, 1); - SpriteSetMosaic(&sprite, 0); - SpriteSetBpp(&sprite, 0); - SpriteSetShape(&sprite, 0); - - matrixNum = (gUnknown_8106AC8[i].unk4 != 0) ? 8 : 0; - - if (gUnknown_8106AC8[i].unk5) - matrixNum += 16; - - SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum); - SpriteSetSize(&sprite, 0); - - SpriteSetTileNum(&sprite, 0x213); - SpriteSetPriority(&sprite, 2); - SpriteSetPalNum(&sprite, 0); - - SpriteSetUnk6_0(&sprite, 0); - SpriteSetUnk6_1(&sprite, 0); - - xMul = gUnknown_8106AC8[i].unk0 * 10; - x2 = (sArrowsFrames / 2) & 7; - x = (x2 * gUnknown_8106AC8[i].unk0) + xMul + 116; - SpriteSetX(&sprite, x); - - yMul = gUnknown_8106AC8[i].unk2 * 10; - y2 = (sArrowsFrames / 2) & 7; - y = (y2 * gUnknown_8106AC8[i].unk2) + yMul + 82; - SpriteSetY(&sprite, y); - - AddSprite(&sprite, 0x100, NULL, NULL); - } - } - - else if (unkPtr->unk1821A) { - s32 i; - SpriteOAM sprite; - s32 var_2C = unkPtr->unk1821B; - - if (unkPtr->unk1821B < 8) { - s32 x, xMul, x2; - s32 y, yMul, y2; - s32 to = (sShowThreeArrows2 != FALSE && sShowThreeArrows1 != FALSE) ? 3 : 1; - - xMul = gUnknown_8106AE8[var_2C].unk0 * 10; - x2 = (sArrowsFrames / 2) & 7; - x = (gUnknown_8106AE8[var_2C].unk0 * x2) + xMul + 116; - - yMul = gUnknown_8106AE8[var_2C].unk2 * 10; - y2 = (sArrowsFrames / 2) & 7; - y = (y2 * gUnknown_8106AE8[var_2C].unk2) + yMul + 82; - for (i = 0; i < to; i++) { - u32 matrixNum; - - SpriteSetAffine1(&sprite, 0); - SpriteSetAffine2(&sprite, 0); - SpriteSetObjMode(&sprite, 1); - SpriteSetMosaic(&sprite, 0); - SpriteSetBpp(&sprite, 0); - SpriteSetShape(&sprite, 0); - - matrixNum = (gUnknown_8106AE8[var_2C].unk8 != 0) ? 8 : 0; - - if (gUnknown_8106AE8[var_2C].unk9) - matrixNum += 16; - - SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum); - SpriteSetSize(&sprite, 0); - - SpriteSetTileNum(&sprite, gUnknown_8106AE8[var_2C].unk4); - SpriteSetPriority(&sprite, 2); - SpriteSetPalNum(&sprite, 0); - - SpriteSetUnk6_0(&sprite, 0); - SpriteSetUnk6_1(&sprite, 0); - - SpriteSetX(&sprite, x); - SpriteSetY(&sprite, y); - - AddSprite(&sprite, 0x100, NULL, NULL); - x += gUnknown_8106AE8[var_2C].unk0 * 4; - y += gUnknown_8106AE8[var_2C].unk2 * 4; - } - } - } - - if (sInRotateMode && unkPtr->unk1821C != unkPtr->unk1821B) { - unkPtr->unk1821C = unkPtr->unk1821B; - ChangeDungeonCameraPos(&leader->pos, unkPtr->unk1821B, 0, sInRotateMode); - } -} - -void sub_805E738(Entity *a0) -{ - const Tile *tile; - s32 i, j; - EntityInfo *entityInfo = GetEntInfo(a0); - if (entityInfo->blinkerClassStatus.status != 1 && entityInfo->blinkerClassStatus.status != 2) { - // What??? - for (i = 0; i < 1; i++) { - bool8 r9 = FALSE; - u32 direction = entityInfo->action.direction; - direction++; - for (j = 1; j < 8; j++, direction++) { - direction &= DIRECTION_MASK; - tile = GetTile(a0->pos.x + gAdjacentTileOffsets[direction].x, a0->pos.y + gAdjacentTileOffsets[direction].y); - if (tile->monster != NULL && GetEntityType(tile->monster) == ENTITY_MONSTER) { - EntityInfo *tileMonsterInfo = GetEntInfo(tile->monster); - if (CanSeeTarget(a0, tile->monster)) { - if (i != 0 || tileMonsterInfo->isNotTeamMember) { - r9 = TRUE; - break; - } - } - } - } - if (r9) { - GetEntInfo(a0)->action.direction = direction & DIRECTION_MASK; - sub_806CDD4(a0, sub_806CEBC(a0), direction); - break; - } - } - } -} - -void sub_805E804(void) -{ - gDungeon->unk644.unk29 |= gDungeon->unk644.unk28; - gDungeon->unk644.unk28 = 0; - while (gDungeon->unk644.unk29 != 0 && gRealInputs.held & R_BUTTON) { - DungeonRunFrameActions(0x54); - } -} - -extern bool8 sub_8070F14(Entity * pokemon, s32 direction); -bool8 sub_805EC2C(Entity *a0, s32 x, s32 y); - -bool8 sub_805E874(void) -{ - u8 r7, r8, r0; - s32 i, j, k; - s32 xArray[3]; - s32 yArray[3]; - Dungeon *dungeon = gDungeon; - Entity *leader = GetLeader(); - s32 direction = GetEntInfo(leader)->action.direction; - s32 x = leader->pos.x; - s32 y = leader->pos.y; - const Tile *leaderTile = GetTile(x, y); - s32 xAdjacent = x + gAdjacentTileOffsets[direction].x; - s32 yAdjacent = y + gAdjacentTileOffsets[direction].y; - s32 room; - - if (dungeon->unk644.unk28 == 0) - return FALSE; - if (leaderTile->object != NULL) - return FALSE; - if (sub_805EC2C(leader, x, y)) - return FALSE; - if (!sub_8070F14(leader, direction)) - return FALSE; - - room = leaderTile->room; - if (room == 0xFF) { - if (GetTile(xAdjacent, yAdjacent)->room != 0xFF) - return FALSE; - } - else { - if (leaderTile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION) - return FALSE; - } - - for (j = -1; j < 2; j++) { - const Tile *tile = GetTile(x + gAdjacentTileOffsets[(direction + j) & 7].x, y + gAdjacentTileOffsets[(direction + j) & 7].y); - if (tile->monster != NULL) - return FALSE; - if (tile->terrainType & TERRAIN_TYPE_STAIRS) - return FALSE; - } - - xArray[0] = x + gAdjacentTileOffsets[(direction + 3) & 7].x; - xArray[1] = x + gAdjacentTileOffsets[(direction + 4) & 7].x; - xArray[2] = x + gAdjacentTileOffsets[(direction + 5) & 7].x; - - yArray[0] = y + gAdjacentTileOffsets[(direction + 3) & 7].y; - yArray[1] = y + gAdjacentTileOffsets[(direction + 4) & 7].y; - yArray[2] = y + gAdjacentTileOffsets[(direction + 5) & 7].y; - - for (i = -1; i < 2; i++) { - for (j = -1; j < 2; j++) { - const Tile *tile = GetTile(x + i, y + j); - if (tile->object != NULL) { - for (k = 0; k < 3; k++) { - if (x + i == xArray[k] && y + j == yArray[k]) - break; - } - if (k == 3 && GetEntityType(tile->object) == ENTITY_ITEM) - return FALSE; - } - - if (direction & 1) { - // This doesn't really have to be called two times... - if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP && GetEntityType(tile->object) == ENTITY_TRAP) { - if (tile->object->isVisible) - return FALSE; - if (gDungeon->unk181e8.unk1820F) - return FALSE; - } - } - else if (i == 0 || j == 0) { - if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP) { - if (tile->object->isVisible) - return FALSE; - if (gDungeon->unk181e8.unk1820F) - return FALSE; - } - } - - if (i != 0 && j != 0) continue; - if (i == 0 && j == 0) continue; - - if ((xArray[1] != x + i || yArray[1] != y + j) && !sub_805EC2C(leader, x + i, y + j) && room != 0xFF && room != tile->room) - return FALSE; - } - } - - if (!(direction & 1)) { - if (direction == 0 || direction == 4) { - r8 = sub_805EC2C(leader, x - 1, y - 1); - r7 = sub_805EC2C(leader, x - 1, y); - r0 = sub_805EC2C(leader, x - 1, y + 1); - if (r7 == 0) { - if (r8 != 0 || r7 != r0) - return FALSE; - } - - r8 = sub_805EC2C(leader, x + 1, y - 1); - r7 = sub_805EC2C(leader, x + 1, y); - r0 = sub_805EC2C(leader, x + 1, y + 1); - if (r7 == 0) { - if (r8 != 0 || r7 != r0) - return FALSE; - } - } - else { - r8 = sub_805EC2C(leader, x - 1, y - 1); - r7 = sub_805EC2C(leader, x, y - 1); - r0 = sub_805EC2C(leader, x + 1, y - 1); - if (r7 == 0) { - if (r8 != 0 || r7 != r0) - return FALSE; - } - - r8 = sub_805EC2C(leader, x - 1, y + 1); - r7 = sub_805EC2C(leader, x, y + 1); - r0 = sub_805EC2C(leader, x + 1, y + 1); - if (r7 == 0) { - if (r8 != 0 || r7 != r0) - return FALSE; - } - } - } - - return TRUE; -} - -bool8 sub_805EC2C(Entity *a0, s32 x, s32 y) -{ - DungeonPos pos = {.x = x, .y = y}; - return sub_8070564(a0, &pos); -} - -bool8 sub_805EC4C(Entity *a0, u8 a1) -{ - DungeonPos pos; - const Tile *tile; - EntityInfo *tileMonsterInfo; - Entity *tileMonster; - EntityInfo *entityInfo = GetEntInfo(a0); - - pos.x = a0->pos.x + gAdjacentTileOffsets[entityInfo->action.direction].x; - pos.y = a0->pos.y + gAdjacentTileOffsets[entityInfo->action.direction].y; - tile = GetTile(pos.x, pos.y); - tileMonster = tile->monster; - - if (tileMonster == NULL) return FALSE; - if (GetEntityType(tileMonster) != ENTITY_MONSTER) return FALSE; - - tileMonsterInfo = GetEntInfo(tileMonster); - if (tileMonsterInfo->isNotTeamMember - && (tileMonsterInfo->shopkeeper != 1 && tileMonsterInfo->shopkeeper != 2) - && !IsExperienceLocked(tileMonsterInfo->joinedAt.id) - && tileMonsterInfo->monsterBehavior != BEHAVIOR_RESCUE_TARGET) { - return FALSE; - } - - if (entityInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) return FALSE; - if (entityInfo->frozenClassStatus.status == STATUS_FROZEN) return FALSE; - if (entityInfo->frozenClassStatus.status == STATUS_CONSTRICTION) return FALSE; - if (entityInfo->frozenClassStatus.status == STATUS_INGRAIN) return FALSE; - if (entityInfo->frozenClassStatus.status == STATUS_WRAP) return FALSE; - if (entityInfo->frozenClassStatus.status == STATUS_WRAPPED) return FALSE; - - if (tileMonsterInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) return FALSE; - if (tileMonsterInfo->frozenClassStatus.status == STATUS_FROZEN) return FALSE; - if (tileMonsterInfo->frozenClassStatus.status == STATUS_CONSTRICTION) return FALSE; - if (tileMonsterInfo->frozenClassStatus.status == STATUS_INGRAIN) return FALSE; - if (tileMonsterInfo->frozenClassStatus.status == STATUS_WRAP) return FALSE; - if (tileMonsterInfo->frozenClassStatus.status == STATUS_WRAPPED) return FALSE; - - if (entityInfo->cringeClassStatus.status == STATUS_CONFUSED) return FALSE; - if (tileMonsterInfo->cringeClassStatus.status == STATUS_CONFUSED) return FALSE; - - if (tileMonsterInfo->sleepClassStatus.status != STATUS_NONE && tileMonsterInfo->sleepClassStatus.status != STATUS_SLEEPLESS && tileMonsterInfo->sleepClassStatus.status != STATUS_YAWNING) return FALSE; - if (entityInfo->sleepClassStatus.status != STATUS_NONE && entityInfo->sleepClassStatus.status != STATUS_SLEEPLESS && entityInfo->sleepClassStatus.status != STATUS_YAWNING) return FALSE; - - if (IsChargingAnyTwoTurnMove(tileMonster, FALSE)) return FALSE; - if (!sub_8070F80(a0, entityInfo->action.direction)) return FALSE; - - if (a1 != 0 && sub_807049C(tileMonster, &a0->pos) && !DisplayDungeonYesNoMessage(0, gUnknown_8100208, 0)) return FALSE; - - SetMonsterActionFields(&entityInfo->action, ACTION_WALK); - if (gRealInputs.held & B_BUTTON) { - entityInfo->action.actionParameters[0].actionUseIndex = 0; - } - else { - entityInfo->action.actionParameters[0].actionUseIndex = 1; - } - entityInfo->flags |= 0x8000; - - SetMonsterActionFields(&tileMonsterInfo->action, ACTION_WALK); - tileMonsterInfo->action.actionParameters[0].actionUseIndex = 0; - tileMonsterInfo->action.direction = (entityInfo->action.direction + 4) & 7; - tileMonsterInfo->flags |= 0x8000; - tileMonsterInfo->targetPos.x = tileMonster->pos.x; - tileMonsterInfo->targetPos.y = tileMonster->pos.y; - gDungeon->unkE = 1; - return TRUE; -} - -void sub_805EE30(void) -{ - Entity *tileObject; - Tile *tile; - Entity *leader = GetLeader(); - if (leader == NULL) - return; - if (sub_8044B28()) - return; - - tile = GetTileAtEntitySafe(leader); - if (IQSkillIsEnabled(leader, IQ_SUPER_MOBILE) && GetEntInfo(leader)->invisibleClassStatus.status != STATUS_MOBILE && !HasHeldItem(leader, ITEM_MOBILE_SCARF)) - sub_804AE84(&leader->pos); - if (tile->terrainType & TERRAIN_TYPE_STAIRS) - gDungeon->unk1 = 1; - - tileObject = tile->object; - if (tileObject == NULL) - return; - switch (GetEntityType(tileObject)) - { - case ENTITY_TRAP: { - Trap *trap = GetTrapData(tileObject); - bool32 r8 = FALSE; - bool32 r7 = FALSE; - if (IQSkillIsEnabled(leader, IQ_TRAP_SEER) && !tileObject->isVisible) { - tileObject->isVisible = TRUE; - sub_8049ED4(); - r7 = TRUE; - } - if (trap->unk1 != 0) { - if (trap->unk1 == 1) - break; - if (trap->unk1 == 2) - r8 = TRUE; - if (r8 == FALSE) - break; - } - if (!r7) { - HandleTrap(leader, &leader->pos, 0, 1); - } - } - break; - case ENTITY_ITEM: { - Item *item = GetItemData(tileObject); - if (!(item->flags & ITEM_FLAG_IN_SHOP)) { - sub_8045DB4(&leader->pos, 1); - } - else { - gDungeon->unk5C0 = 4; - } - } - break; - case ENTITY_NOTHING: - case ENTITY_MONSTER: - case ENTITY_UNK_4: - case ENTITY_UNK_5: - default: - break; - } -} - -extern Entity *sub_80696A8(Entity *a0); -extern u8 sub_806A538(s32); - -bool8 sub_805EF60(Entity *a0, EntityInfo *a1) -{ - Entity *r4 = sub_80696A8(a0); - - if (r4 == NULL) - return FALSE; - if (GetEntityType(r4) != ENTITY_MONSTER) - return FALSE; - if (!sub_8070BC0(a0)) - return FALSE; - if (GetEntInfo(r4)->isNotTeamMember && GetEntInfo(r4)->monsterBehavior != BEHAVIOR_RESCUE_TARGET && GetEntInfo(r4)->shopkeeper != 1) - return FALSE; - - SetMonsterActionFields(&a1->action, ACTION_TALK_FIELD); - return TRUE; -} - -void sub_805EFB4(Entity *a0, bool8 a1) -{ - s32 i; - EntityInfo *leaderInfo = GetLeaderInfo(); - if (a1 && leaderInfo->cringeClassStatus.status == STATUS_COWERING) { - leaderInfo->action.direction += 4; - leaderInfo->action.direction &= 7; - } - else if (leaderInfo->cringeClassStatus.status == STATUS_CONFUSED) { - s32 rnd = DungeonRandInt(8); - for (i = 0; i < 8; i++) { - if (a1 || CanMoveInDirection(a0, rnd)) { - leaderInfo->action.direction = rnd & 7; - return; - } - rnd = (rnd + 1) & 7; - } - } -} - -extern void sub_803EAF0(u32, u8 *); -extern void sub_803F508(Entity *); -extern void sub_8041AD0(Entity *pokemon); -extern void sub_8041AE0(Entity *pokemon); -extern void sub_807EC28(bool8); -extern void PlayDungeonCursorSE(u8 param_1); - -extern MenuInputStruct gDungeonMenu; - -void sub_805F02C(void) -{ - s32 i; - Entity *r7 = gDungeon->unkBC; - Entity *leader = GetLeader(); - EntityInfo *r8 = GetEntInfo(r7); - EntityInfo *leaderInfo = GetEntInfo(leader); - - if (r8->isTeamLeader) { - DisplayDungeonLoggableMessageTrue(r7, gUnknown_80F9BD8); - } - else if (sub_8047084(ITEM_FLAG_IN_SHOP) || sub_807EF48()) { - DisplayDungeonLoggableMessageTrue(r7, gUnknown_80F9C08); - } - else if (gDungeon->unk644.unk2A) { - DisplayDungeonLoggableMessageTrue(r7, gUnknown_80F9C2C); - } - else { - gDungeon->unk644.unk35 = 0; - r8->isTeamLeader = TRUE; - leaderInfo->isTeamLeader = FALSE; - for (i = 0; i < 4; i++) { - PokemonStruct2 *mon = &gRecruitedPokemonRef->pokemon2[i]; - PokemonStruct1 *r5 = NULL; - - if ((u8)mon->unk0 & 1) { - if (!sub_806A538(mon->unkA)) { - r5 = &gRecruitedPokemonRef->pokemon[mon->unkA]; - } - if (i == r8->teamIndex) { - mon->isTeamLeader = TRUE; - if (r5 != NULL) { - r5->isTeamLeader = TRUE; - } - } - else { - mon->isTeamLeader = FALSE; - if (r5 != NULL) { - r5->isTeamLeader = FALSE; - } - } - } - } - gLeaderPointer = NULL; - r8->action = leaderInfo->action; - sub_803F508(r7); - sub_8041AD0(leader); - sub_8041AE0(GetLeader()); - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], r7, 0); - LogMessageByIdWithPopupCheckUser(r7, gUnknown_80F9BB0); - sub_807EC28(FALSE); - r8->unk64 = 0; - leaderInfo->unk64 = 0; - sub_806A6E8(leader); - sub_806A6E8(r7); - } -} - -ActionContainer *GetLeaderActionContainer(void) -{ - return &GetLeaderInfo()->action; -} - -u16 GetLeaderActionId(void) -{ - return GetLeaderInfo()->action.action; -} - -// Could this be a start of a new file? -static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; -static EWRAM_DATA ActionParameter sUnknownActionUnk4 = {0}; -static EWRAM_DATA s32 sUnknown_202F240 = 0; -static UNUSED EWRAM_DATA u8 sUnused2[4] = {0}; -static EWRAM_DATA s16 sUnknown_202F248[8] = {0}; -static EWRAM_DATA s32 sUnknown_202F258 = 0; -static UNUSED EWRAM_DATA u8 sUnused3[4] = {0}; -static EWRAM_DATA s32 sTeamMenuChosenId = 0; -static UNUSED EWRAM_DATA u8 sUnused4[4] = {0}; - -enum -{ - MAIN_MENU_MOVES, - MAIN_MENU_ITEMS, - MAIN_MENU_TEAM, - MAIN_MENU_OTHERS, - MAIN_MENU_GROUND, -}; - -void ShowMainMenu(bool8 fromBPress, bool8 a1) -{ - Item *item; - s32 r10; - bool8 printAll = fromBPress; - s32 chosenOption; - s32 var_24; - struct UnkMenuBitsStruct var_30; - struct UnkMenuBitsStruct var_34; - - r10 = gDungeon->unk5C0; - chosenOption = 0; - var_24 = (gDungeon->unk5C0 > - 1); - gDungeon->unk5C0 = -1; - if (r10 >= 0) { - chosenOption = r10; - } - - if (a1) { - PlayFanfareSE(0x137, 0x100); - } - else { - PlayDungeonStartButtonSE(); - } - - while (1) { - if (r10 < 0) { - SetLeaderActionToNothing(1); - sTeamMenuChosenId = -1; - PrintOnMainMenu(printAll); - sub_806A2BC(GetLeader(), 0); - while (1) { - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1D); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - if ((gRealInputs.pressed & A_BUTTON || gDungeonMenu.unk28.a_button)) { - if (gUnknown_202749A[gDungeonMenu.menuIndex + 1] == 7) { - PlayDungeonConfirmationSE(); - chosenOption = gDungeonMenu.menuIndex; - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - chosenOption = -1; - break; - } - } - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1D); - printAll = TRUE; - } - - r10 = chosenOption; - if (chosenOption == MAIN_MENU_ITEMS) { - u16 action; - - SetLeaderActionToNothing(1); - var_34.a0_8 = 0; - var_34.a0_16 = 1; - var_34.a0_24 = 0; - var_34.a0_32 = 0; - if (ShowDungeonItemsMenu(GetLeader(), &var_34)) { - r10 = -1; - } - if (sub_805FD3C(&var_34) && ShowDungeonItemsMenu(GetLeader(), &var_34)) { - SetLeaderActionToNothing(1); - } - action = GetLeaderActionId(); - if (action == 12) { - sub_8044D90(GetLeader(), 0, 12)->flags |= ITEM_FLAG_UNPAID; - sub_8060D24(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (action == 53) { - item = sub_8044D90(GetLeader(), 0, 13); - if (!sub_8048A68(GetLeader(), item)) { - SetLeaderActionToNothing(1); - } - } - else if (action == 16) { - item = sub_8044D90(GetLeader(), 0, 14); - if (!sub_8048950(GetLeader(), item)) { - SetLeaderActionToNothing(1); - } - } - else if (action == 44) { - item = sub_8044D90(GetLeader(), 0, 15); - if (!sub_8048B9C(GetLeader(), item)) { - SetLeaderActionToNothing(1); - } - } - else if (action == 60) { - HandleSetItemAction(GetLeader(), TRUE); - SetLeaderActionToNothing(1); - sub_803E708(0x50, 0x4D); - sub_8052210(0); - break; - } - else if (action == 61) { - HandleUnsetItemAction(GetLeader(), TRUE); - SetLeaderActionToNothing(1); - sub_803E708(0x50, 0x4D); - sub_8052210(0); - break; - } - - if (GetLeaderActionId() != 0) - break; - } - else if (chosenOption == MAIN_MENU_TEAM) { - SetLeaderActionToNothing(1); - if (ShowDungeonTeamMenu(GetLeader())) { - r10 = -1; - } - - if (GetLeaderActionId() == 0x1B) { - sub_8061A38(GetLeaderActionContainer(), FALSE); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 0x1C) { - sub_806752C(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 0x34) { - sub_8067768(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 0x1A) { - ShowTacticsMenu(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 0x30) { - sub_8061A38(GetLeaderActionContainer(), TRUE); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 0x19) { - s32 i, count; - - sub_8062D8C(GetLeaderActionContainer()); - count = 0; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - Entity *teamMon = gDungeon->teamPokemon[i]; - if (EntityIsValid(teamMon)) { - if (i == GetLeaderActionContainer()->actionParameters[0].actionUseIndex) { - sTeamMenuChosenId = count; - if (GetLeaderActionId() != 0) { - sub_806A2BC(teamMon, 0); - } - break; - } - count++; - } - } - } - - if (GetLeaderActionId() != 0) - break; - } - else if (chosenOption == MAIN_MENU_MOVES) { - s32 i, currMonId, teamMonsCount, r9; - Entity *currEntity; - - currMonId = 0; - SetLeaderActionToNothing(1); - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - Entity *teamMon = gDungeon->teamPokemon[i]; - if (EntityIsValid(teamMon)) { - if (GetEntInfo(teamMon)->isTeamLeader) { - currMonId = i; - break; - } - } - } - - - while (1) { - SetLeaderActionToNothing(0); - LOOP_START_NO_CALL: // Actions 6 and 7 don't call SetLeaderActionToNothing - currEntity = NULL; - r9 = 0; - teamMonsCount = 0; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - Entity *teamMon = gDungeon->teamPokemon[i]; - if (sub_8071A8C(teamMon)) { - if (i == currMonId) { - r9 = teamMonsCount; - currEntity = teamMon; - } - teamMonsCount++; - } - } - if (currEntity == NULL) { - currEntity = GetLeader(); - } - - sub_806A2BC(currEntity, 0); - ChangeDungeonCameraPos(&currEntity->pos, 0, 1, 1); - GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; - SetLeaderActionToNothing(FALSE); - if (ShowDungeonMovesMenu(currEntity, 0, 1, r9, teamMonsCount)) { - r10 = -1; - } - - if (GetLeaderActionId() == ACTION_MOVES_MENU_NEXT_MON) { - s32 prevMonId = currMonId; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (++currMonId >= MAX_TEAM_MEMBERS) { - currMonId = 0; - } - currEntity = gDungeon->teamPokemon[currMonId]; - if (sub_8071A8C(currEntity)) - break; - } - GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; - if (prevMonId != currMonId) { - PlayDungeonCursorSE(0); - } - goto LOOP_START_NO_CALL; - } - else if (GetLeaderActionId() == ACTION_MOVES_MENU_PREV_MON) { - s32 prevMonId = currMonId; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (--currMonId < 0) { - currMonId = MAX_TEAM_MEMBERS - 1; - } - currEntity = gDungeon->teamPokemon[currMonId]; - if (sub_8071A8C(currEntity)) - break; - } - GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; - if (prevMonId != currMonId) { - PlayDungeonCursorSE(0); - } - goto LOOP_START_NO_CALL; - } - else if (GetLeaderActionId() == ACTION_UNK1D) { - sub_80637E8(GetLeaderActionContainer()); - } - else if (GetLeaderActionId() == ACTION_SET_MOVE || GetLeaderActionId() == ACTION_UNSET_MOVE) { - sub_8063A70(GetLeaderActionContainer(), FALSE); - } - else if (GetLeaderActionId() == ACTION_UNK1F) { - sub_8063B54(GetLeaderActionContainer()); - } - else if (GetLeaderActionId() == ACTION_UNK20) { - sub_8063BB4(GetLeaderActionContainer()); - } - else if (GetLeaderActionId() == ACTION_UNK21) { - sub_8063CF0(GetLeaderActionContainer(), FALSE); - } - else { - break; - } - } - sub_806A2BC(GetLeader(), 0); - ChangeDungeonCameraPos(&GetLeader()->pos, 0, 1, 1); - if (GetLeaderActionId() != 0) - break; - } - else if (chosenOption == MAIN_MENU_GROUND) { - Entity *leader = GetLeader(); - const Tile *tile = GetTile(leader->pos.x, leader->pos.y); - Entity *tileObject = tile->object; - if (tileObject != NULL) { - if (GetEntityType(tileObject) == ENTITY_ITEM) { - u16 action; - - SetLeaderActionToNothing(1); - var_30.a0_8 = 0; - var_30.a0_16 = 1; - var_30.a0_24 = 1; - var_30.a0_32 = 1; - if (ShowDungeonItemsMenu(GetLeader(), &var_30)) { - // This actually doesn't do anything, it's just there to make the code match as the compiler does a `lsl r0, r0, #0x10, mov r0, r4` - ASM_MATCH_TRICK(leader); - } - if (sub_805FD3C(&var_30) && ShowDungeonItemsMenu(GetLeader(), &var_30)) { - SetLeaderActionToNothing(1); - } - - action = GetLeaderActionId(); - if (action == 0xC) { - sub_8044D90(GetLeader(), 0, 0x10)->flags |= ITEM_FLAG_UNPAID; - sub_8060D24(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (action == 0x35) { - item = sub_8044D90(GetLeader(), 0, 0x11); - if (!sub_8048A68(GetLeader(), item)) { - SetLeaderActionToNothing(1); - } - } - else if (action == 0x10) { - item = sub_8044D90(GetLeader(), 0, 0x12); - if (!sub_8048950(GetLeader(), item)) { - SetLeaderActionToNothing(1); - } - } - else if (action == 0x2C) { - item = sub_8044D90(GetLeader(), 0, 0x13); - if (!sub_8048B9C(GetLeader(), item)) { - SetLeaderActionToNothing(1); - } - } - if (GetLeaderActionId() != 0) - break; - } - else if (GetEntityType(tileObject) == ENTITY_TRAP) { - SetLeaderActionToNothing(1); - sub_80643AC(GetLeader()); - if (GetLeaderActionId() != 0) - break; - } - } - else - { - if (tile->terrainType & TERRAIN_TYPE_STAIRS) { - SetLeaderActionToNothing(1); - ShowDungeonStairsMenu(GetLeader()); - if (GetLeaderActionId() != 0) - break; - } - else { - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], GetLeader(), 0); - DisplayDungeonMessage(0, gUnknown_80FDE18, 1); - } - } - r10 = -1; - } - else if (chosenOption == MAIN_MENU_OTHERS) { - ShowDungeonOthersMenu(); - if (gDungeon->unk4) - break; - if (GetLeaderActionId() != 0) - break; - r10 = -1; - } - - // B button - if (chosenOption < 0) - break; - - if (var_24 == 0) { - ResetRepeatTimers(); - ResetUnusedInputStruct(); - } - else { - sub_806A2BC(GetLeader(), 0); - break; - } - } - - sub_803EAF0(0, NULL); - ResetRepeatTimers(); - ResetUnusedInputStruct(); -} - extern const u8 *const gFieldMenuMovesPtr; extern const u8 *const gFieldMenuItemsPtr; extern const u8 *const gFieldMenuTeamPtr; @@ -1557,210 +153,23 @@ extern const u8 *const gUnknown_80F91E0; extern const u8 *const gUnknown_80F91A8; extern const u8 *const gUnknown_80FE954; -const u8 *GetCurrentDungeonName(void); -void GetWeatherName(u8 *dst, u8 weatherId); - -extern s32 gFormatArgs[]; - -void PrintOnMainMenu(bool8 printAll) -{ - s32 i, x, y, yLoop; - - gDungeonMenu.menuIndex = 0; - gDungeonMenu.unk1A = 5; - gDungeonMenu.unk1C = 5; - gDungeonMenu.unk1E = 0; - gDungeonMenu.unk4 = 0; - gDungeonMenu.firstEntryY = 2; - gDungeonMenu.unkC = 0; - gDungeonMenu.unkE = 0; - gDungeonMenu.unk0 = 0; - gDungeonMenu.unk14.x = 0; - sub_801317C(&gDungeonMenu.unk28); - sub_80137B0(&gDungeonMenu, 0x38); - if (printAll) { - sub_803EAF0(7, NULL); - } - else { - sub_803EAF0(6, NULL); - } - - sub_80073B8(0); - if (ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) { - gUnknown_202749A[1] = 2; - gUnknown_202749A[2] = 2; - gUnknown_202749A[3] = 2; - gUnknown_202749A[4] = 7; - gUnknown_202749A[5] = 2; - } - else - { - gUnknown_202749A[1] = 7; - gUnknown_202749A[2] = 7; - gUnknown_202749A[3] = 7; - gUnknown_202749A[4] = 7; - gUnknown_202749A[5] = 7; - } - - y = GetMenuEntryYCoord(&gDungeonMenu, 0); - PrintStringOnWindow(8, y, gFieldMenuMovesPtr, 0, 0); - - y = GetMenuEntryYCoord(&gDungeonMenu, 1); - PrintStringOnWindow(8, y, gFieldMenuItemsPtr, 0, 0); - - y = GetMenuEntryYCoord(&gDungeonMenu, 2); - PrintStringOnWindow(8, y, gFieldMenuTeamPtr, 0, 0); - - y = GetMenuEntryYCoord(&gDungeonMenu, 3); - PrintStringOnWindow(8, y, gFieldMenuOthersPtr, 0, 0); - - y = GetMenuEntryYCoord(&gDungeonMenu, 4); - PrintStringOnWindow(8, y, gFieldMenuGroundPtr, 0, 0); - - sub_80073E0(0); - if (printAll) { - u32 hours, minutes, seconds; - EntityInfo *leaderInfo = GetEntInfo(GetLeader()); - const u8 *dungeonName = GetCurrentDungeonName(); - - x = (136 - sub_8008ED0(dungeonName)) / 2; - sub_80073B8(1); - PrintStringOnWindow(x, 2, dungeonName, 1, 0); - sub_80073E0(1); - sub_80073B8(2); - DeconstructPlayTime(gPlayTimeRef, &hours, &minutes, &seconds); - - gFormatArgs[0] = FixedPointToInt(leaderInfo->belly); - gFormatArgs[1] = FixedPointToInt(leaderInfo->maxBelly); - PrintFormattedStringOnWindow(0x73, 0, gUnknown_80F9174, 2, 0); - - gFormatArgs[0] = gTeamInventoryRef->teamMoney; - PrintFormattedStringOnWindow(0x73, 12, gUnknown_80F9190, 2, 0); - - GetWeatherName(gFormatBuffer_Monsters[0], GetApparentWeather(NULL)); - PrintFormattedStringOnWindow(0x73, 24, gUnknown_80F91A8, 2, 0); - - gFormatArgs[0] = hours; - gFormatArgs[1] = minutes; - gFormatArgs[2] = seconds; - PrintFormattedStringOnWindow(0x73, 36, gUnknown_80F91C8, 2, 0); - for (yLoop = 0, i = 0; i < MAX_TEAM_MEMBERS; i++) { - Entity *teamMon = gDungeon->teamPokemon[i]; - if (EntityIsValid(teamMon)) { - EntityInfo *monInfo = GetEntInfo(teamMon); - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], teamMon, 0); - gFormatArgs[0] = monInfo->HP; - gFormatArgs[1] = monInfo->maxHPStat; - PrintFormattedStringOnWindow(4, yLoop, gUnknown_80F91E0, 2, 0); - yLoop += 12; - if (yLoop >= 12 * MAX_TEAM_MEMBERS) - break; - } - } - sub_80073E0(2); - } -} - -bool8 sub_805FBE8(u8 *a0) -{ - s32 r4; - sub_803EAF0(8, a0); - do - { - DungeonRunFrameActions(0xE); - DrawDialogueBoxString(); - r4 = sub_8016080(); - } while (r4 == 0); - CleanConfirmNameMenu(); - DungeonRunFrameActions(0xE); - sub_803EAF0(0, NULL); - if (r4 == 3 && *a0 != 0) - return TRUE; - - return FALSE; -} - -extern u8 *sub_8044EC8(s32 param_1); -extern bool8 sub_8044F3C(s32 param_1); -extern s32 gUnknown_202EE6C; +extern bool8 sub_8070F14(Entity * pokemon, s32 direction); +bool8 sub_805EC2C(Entity *a0, s32 x, s32 y); +extern Entity *sub_80696A8(Entity *a0); +extern u8 sub_806A538(s32); +extern void sub_803EAF0(u32, u8 *); +extern void sub_803F508(Entity *); +extern void sub_8041AD0(Entity *pokemon); +extern void sub_8041AE0(Entity *pokemon); +extern void sub_807EC28(bool8); +extern void PlayDungeonCursorSE(u8 param_1); +extern u8 *GetDungeonSubMenuItemString(s32 param_1); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern s32 gDungeonSubMenuItemsCount; extern const u8 gUnknown_8106B50[]; - extern void DungeonShowWindows(Windows *a0, u8 a1); -static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); -void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX) -{ - s32 i; - Windows windows = { - .id = { - [0] = WINDOW_DUMMY, - [1] = { - .type = WINDOW_TYPE_NORMAL, - .pos = {22, 4}, - .width = 6, - .height = 4, - .unk10 = 4, - }, - [2] = WINDOW_DUMMY, - [3] = WINDOW_DUMMY, - } - }; - - windows.id[0] = *mainWindow; - windows.id[0].unk0 = 0x80; - - gDungeonMenu.menuIndex = 0; - gDungeonMenu.unk1C = gUnknown_202EE6C; - gDungeonMenu.unk1A = gUnknown_202EE6C; - gDungeonMenu.unk1E = 0; - gDungeonMenu.unk20 = 0; - gDungeonMenu.unk4 = 0; - gDungeonMenu.firstEntryY = 0; - gDungeonMenu.unk0 = 1; - gDungeonMenu.unkC = 0; - gDungeonMenu.unkE = 0; - gDungeonMenu.unk14 = gDungeonMenu.unk8; - - sub_801317C(&gDungeonMenu.unk28); - - windows.id[1].pos.x = subWindowX; - windows.id[1].width = 28 - subWindowX; - windows.id[1].height = windows.id[1].unk10 = sub_80095E4(gDungeonMenu.unk1C, 0); - DungeonShowWindows(&windows, FALSE); - sub_80137B0(&gDungeonMenu, windows.id[1].height * 8); - sub_80073B8(1); - - for (i = 0; i < gUnknown_202EE6C; i++) { - s32 colorId, y; - u8 text[20]; - - colorId = (sub_8044F3C(i) != 0) ? 7 : 2; - sprintfStatic(text, gUnknown_8106B50, colorId, sub_8044EC8(i)); - y = GetMenuEntryYCoord(&gDungeonMenu, i); - PrintStringOnWindow(8, y, text, 1, 0); - } - sub_80073E0(1); -} - -bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0) -{ - u16 action = GetLeaderActionId(); - - a0->a0_8 = 0; - a0->a0_16 = 0; - a0->a0_24 = 0; - a0->a0_32 = 0; - if (action == 0xA) { - a0->a0_8 = 1; - a0->a0_32 = 1; - } - if (action == 0x3E) { - a0->a0_8 = 1; - a0->a0_16 = 0; - a0->a0_32 = 1; - } - return a0->a0_8; -} +extern MenuInputStruct gDungeonMenu; s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4); @@ -1768,9 +177,22 @@ void sub_8060890(DungeonPos *a0); bool8 sub_8060860(s32 a0); void sub_8060900(Entity *a0); s32 sub_8060800(WindowHeader *a0, s32 a1); -void sub_8060CE8(ActionContainer *a0); +void ChosenSubMenuToAction(ActionContainer *a0); Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); +// Could this be a start of a new file? +static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; +static EWRAM_DATA ActionParameter sUnknownActionUnk4 = {0}; +static EWRAM_DATA s32 sUnknown_202F240 = 0; +static UNUSED EWRAM_DATA u8 sUnused2[4] = {0}; +static EWRAM_DATA s16 sUnknown_202F248[8] = {0}; +static EWRAM_DATA s32 sUnknown_202F258 = 0; +static UNUSED EWRAM_DATA u8 sUnused3[4] = {0}; +EWRAM_DATA s32 gTeamMenuChosenId = 0; +static UNUSED EWRAM_DATA u8 sUnused4[4] = {0}; + +static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); + bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) { s32 i, i_r6; @@ -1990,9 +412,9 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (sub_8044F3C(gDungeonMenu.menuIndex)) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { PlayDungeonConfirmationSE(); - sub_8060CE8(&a0Info->action); + ChosenSubMenuToAction(&a0Info->action); r9 = 0; break; } @@ -2271,7 +693,7 @@ void sub_8060900(Entity *a0) Item *item = sub_8044CC8(a0, &sUnknownActionUnk4, 0xA); EntityInfo *a0Info = GetEntInfo(a0); - gUnknown_202EE6C = 0; + gDungeonSubMenuItemsCount = 0; if (sUnknownActionUnk4.actionUseIndex < 144) { if (sUnknownActionUnk4.actionUseIndex == 128) { sub_8044F5C(9, item->id); @@ -2451,7 +873,7 @@ void sub_8060900(Entity *a0) sub_8045064(); } -void sub_8060CE8(ActionContainer *a0) +void ChosenSubMenuToAction(ActionContainer *a0) { SetMonsterActionFields(a0, gUnknown_202EE44[gDungeonMenu.menuIndex].unk0); a0->actionParameters[0] = sUnknownActionUnk4; @@ -2618,7 +1040,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) } sp.unk0 = gDungeonMenu.menuIndex; - sTeamMenuChosenId = gDungeonMenu.menuIndex; + gTeamMenuChosenId = gDungeonMenu.menuIndex; sub_806145C(&sp); if (r10) { EntityInfo *info = GetEntInfo(a0); @@ -2641,7 +1063,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (sub_8044F3C(gDungeonMenu.menuIndex)) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { sub_80615B4(&GetEntInfo(a0)->action, &sp); PlayDungeonConfirmationSE(); r4 = FALSE; @@ -2705,18 +1127,18 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, a0->unk4[count] = i; monInfo = GetEntInfo(teamMon); a0->unk14[count] = monInfo->unk157; - if (pos.x == teamMon->pos.x && pos.y == teamMon->pos.y && sTeamMenuChosenId < 0) { - sTeamMenuChosenId = count; + if (pos.x == teamMon->pos.x && pos.y == teamMon->pos.y && gTeamMenuChosenId < 0) { + gTeamMenuChosenId = count; } count++; } } - if (sTeamMenuChosenId >= count) { - sTeamMenuChosenId = count - 1; + if (gTeamMenuChosenId >= count) { + gTeamMenuChosenId = count - 1; } - if (sTeamMenuChosenId < 0) { - sTeamMenuChosenId = 0; + if (gTeamMenuChosenId < 0) { + gTeamMenuChosenId = 0; } for (i = count; i < MAX_TEAM_MEMBERS; i++) { @@ -2727,7 +1149,7 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, gUnknown_202F270.f0 = 1; gUnknown_202F270.f1 = 0; gUnknown_202F270.f3 = 0; - gDungeonMenu.menuIndex = sTeamMenuChosenId; + gDungeonMenu.menuIndex = gTeamMenuChosenId; gDungeonMenu.unk1A = count; gDungeonMenu.unk1C = count; gDungeonMenu.unk1E = 0; @@ -2821,7 +1243,7 @@ void sub_806145C(struct UnkFieldTeamMenuStruct *a0) Entity *teamMon; EntityInfo *monInfo; - gUnknown_202EE6C = 0; + gDungeonSubMenuItemsCount = 0; teamMon = gDungeon->teamPokemon[a0->unk4[gDungeonMenu.menuIndex]]; monInfo = GetEntInfo(teamMon); sub_8044F5C(0x1B, 0); @@ -2994,7 +1416,7 @@ void ShowTacticsMenu(ActionContainer *a0) menuIndex = gDungeonMenu.menuIndex; sub_8062D68(); PlayDungeonConfirmationSE(); - gUnknown_202EE6C = 0; + gDungeonSubMenuItemsCount = 0; sub_8044F5C(0x2F, 0); sub_8044F5C(0xC, 0); if (CheckVariousStatuses2(teamMon, TRUE)) { @@ -3014,7 +1436,7 @@ void ShowTacticsMenu(ActionContainer *a0) MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (sub_8044F3C(gDungeonMenu.menuIndex)) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { changed = TRUE; break; } @@ -3452,7 +1874,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) r8 = gDungeonMenu.menuIndex; sub_8062D68(); - gUnknown_202EE6C = 0; + gDungeonSubMenuItemsCount = 0; PlayDungeonConfirmationSE(); sub_8044F5C(0xC, 0); CreateDungeonMenuSubWindow(&windows.id[0], 0x16); @@ -3488,7 +1910,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) r8 = gDungeonMenu.menuIndex; sub_8062D68(); - gUnknown_202EE6C = var_2C; + gDungeonSubMenuItemsCount = var_2C; PlayDungeonConfirmationSE(); sub_8044F5C(0x28, 0); sub_8044F5C(0xC, 0); @@ -3509,7 +1931,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (sub_8044F3C(gDungeonMenu.menuIndex)) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { PlayDungeonConfirmationSE(); aPress = TRUE; break; @@ -4295,9 +2717,9 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) sub_8063698(entity, a1, a2); if (r5 == 3) { s32 r6 = sub_8044FB4(0x20); - if (!sub_8044F3C(r6)) { + if (!CanSubMenuItemBeChosen(r6)) { r6 = sub_8044FB4(0x21); - if (sub_8044F3C(r6)) { + if (CanSubMenuItemBeChosen(r6)) { sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); break; } @@ -4310,9 +2732,9 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) else if (r5 == 2) { if (entInfo->isTeamLeader) { s32 r6 = sub_8044FB4(0x1E); - if (!sub_8044F3C(r6)) { + if (!CanSubMenuItemBeChosen(r6)) { r6 = sub_8044FB4(0x33); - if (sub_8044F3C(r6)) { + if (CanSubMenuItemBeChosen(r6)) { sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); break; } @@ -4324,7 +2746,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) } else { s32 r6 = sub_8044FB4(0x1F); - if (sub_8044F3C(r6)) { + if (CanSubMenuItemBeChosen(r6)) { sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); break; } @@ -4346,7 +2768,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) } if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { - if (sub_8044F3C(gDungeonMenu.menuIndex)) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { PlayDungeonConfirmationSE(); @@ -4491,7 +2913,7 @@ void sub_8063698(Entity *entity, u8 a1, u8 a2) EntityInfo *entInfo = GetEntInfo(entity); Move *move = &entInfo->moves.moves[gUnknown_202F2D8]; - gUnknown_202EE6C = 0; + gDungeonSubMenuItemsCount = 0; if (entInfo->isTeamLeader) { if (a2) { sub_8044F5C(0x14, 0); @@ -4548,4 +2970,22 @@ void sub_80637A4(ActionContainer *a0, s32 a1) sub_80637BC(a0, gDungeonMenu.menuIndex, a1); } +void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2) +{ + SetMonsterActionFields(a0, gUnknown_202EE44[a1].unk0); + a0->actionParameters[0].actionUseIndex = a2; + a0->actionParameters[1].actionUseIndex = gUnknown_202F2D8; +} + +void sub_8063834(Move *moves, s32 a1, s32 a2); + +void sub_80637E8(ActionContainer *a0) +{ + Entity *mon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + EntityInfo *monInfo = GetEntInfo(mon); + + monInfo->moves.moves[a0->actionParameters[1].actionUseIndex].moveFlags2 |= 2; + sub_8063834(monInfo->moves.moves, a0->actionParameters[1].actionUseIndex, 4); +} + // diff --git a/src/code_8066D04.c b/src/code_8066D04.c index 020a8dcff..5f0810331 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -76,7 +76,7 @@ extern const u8 *const gMonCringing; extern const u8 *const gMonParalyzed; extern const u8 *const gUnknown_80FC690; -extern s32 gUnknown_202EE6C; +extern s32 gDungeonSubMenuItemsCount; extern u32 gUnknown_202F208; extern void sub_8071DA4(Entity *); @@ -901,7 +901,7 @@ extern void sub_80684C4(void); void sub_8045064(void); extern void PlayDungeonCursorSE(u8 param_1); extern void sub_8068344(void); -bool8 sub_8044F3C(s32 param_1); +bool8 CanSubMenuItemBeChosen(s32 param_1); void sub_8068310(s32 a0, PokemonStruct1 **a1); void sub_8067F00(u8 a0, PokemonStruct1 **a1, s32 a2, s32 a3, s32 a4); extern void DungeonShowWindows(Windows *a0, u8 a1); @@ -1124,7 +1124,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) r10 = gDungeonMenu.menuIndex; arrId = gUnknown_202F30C + r10; - gUnknown_202EE6C = 0; + gDungeonSubMenuItemsCount = 0; sub_8044F5C(0x29, 0); sub_8044F5C(0x2A, 0); sub_8044F5C(0x40, 0); @@ -1158,7 +1158,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) } if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (sub_8044F3C(gDungeonMenu.menuIndex)) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { PlayDungeonConfirmationSE(); r7 = 1; break; diff --git a/src/dungeon_main.c b/src/dungeon_main.c new file mode 100644 index 000000000..c775ce053 --- /dev/null +++ b/src/dungeon_main.c @@ -0,0 +1,1748 @@ +#include "global.h" +#include "structs/str_dungeon.h" +#include "number_util.h" +#include "input.h" +#include "structs/map.h" +#include "dungeon_main.h" +#include "dungeon_message.h" +#include "dungeon_action.h" +#include "dungeon_ai_targeting.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_random.h" +#include "dungeon_util.h" +#include "pokemon.h" +#include "moves.h" +#include "items.h" +#include "dungeon_music.h" +#include "dungeon_ai_movement.h" +#include "code_8045A00.h" +#include "string_format.h" +#include "code_803E46C.h" +#include "code_801602C.h" +#include "code_800D090.h" +#include "trap.h" +#include "charge_move.h" +#include "dungeon_map_access.h" +#include "status_checks_1.h" +#include "game_options.h" +#include "weather.h" +#include "dungeon_items.h" +#include "dungeon_leader.h" +#include "tile_types.h" +#include "dungeon_visibility.h" +#include "dungeon_movement.h" +#include "bg_control.h" +#include "menu_input.h" +#include "music.h" +#include "items.h" +#include "play_time.h" +#include "pokemon_3.h" +#include "text.h" +#include "code_806CD90.h" +#include "code_8044CC8.h" +#include "code_801B3C0.h" +#include "dungeon_capabilities.h" +#include "constants/dungeon.h" +#include "constants/status.h" +#include "constants/tactic.h" +#include "constants/iq_skill.h" +#include "constants/dungeon_action.h" +#include "structs/struct_sub80095e4.h" +#include "structs/str_text.h" + +struct UnkMenuBitsStruct { + u8 a0_8; + u8 a0_16; + u8 a0_24; + u8 a0_32; +}; + +extern void HandleSetItemAction(Entity *,bool8); +extern void HandleUnsetItemAction(Entity *,bool8); +extern bool8 sub_8048A68(Entity *param_1,Item *item); +extern bool8 sub_8048950(Entity *param_1,Item *item); +extern bool8 sub_8048B9C(Entity *param_1,Item *item); +extern Item *sub_8044D90(Entity *, s32, u32); +extern void PlayDungeonStartButtonSE(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); +extern void sub_806A6E8(Entity *); +extern bool8 sub_8047084(s32 itemFlag); +extern void HandleTrap(Entity *pokemon, DungeonPos *pos, int param_3, char param_4); +extern void sub_8045DB4(DungeonPos *, u32); +bool8 sub_807EF48(void); +void sub_806A2BC(Entity *a0, u8 a1); +bool8 sub_80701A4(Entity *a0); +void ShowDungeonStairsMenu(Entity *a0); +void sub_803E708(s32 a0, s32 a1); +void sub_8040A78(void); +void ShowDungeonOthersMenu(void); +void sub_8075680(u32); +void sub_8094C88(void); +void sub_8040A84(void); +void sub_8047158(void); +void sub_806A914(u8 a0, u8 a1, u8 a2); +void SetLeaderActionToNothing(u8 a0); +u16 GetLeaderActionId(void); +void sub_80978C8(s16 a0); +static void TryCreateModeArrows(Entity *leader); +bool8 sub_8094C48(void); +void sub_803E724(s32 a0); +void HandleTalkFieldAction(Entity *); +bool8 sub_8044B28(void); +bool8 IsNotAttacking(Entity *param_1, bool8 param_2); +s32 GetTeamMemberEntityIndex(Entity *pokemon); +bool8 sub_8070F80(Entity * pokemon, s32 direction); +bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); +void sub_8060D24(UNUSED ActionContainer *a0); +bool8 ShowDungeonTeamMenu(Entity *a0); +void sub_8062D8C(ActionContainer *a0); +void sub_80637E8(ActionContainer *a0); +void sub_8063B54(ActionContainer *a0); +void sub_8063BB4(ActionContainer *a0); +void sub_806752C(ActionContainer *a0); +void sub_8061A38(ActionContainer *a0, bool8 a1); +void sub_8063A70(ActionContainer *a0, bool8 a1); +void sub_8063CF0(ActionContainer *a0, bool8 a1); +void sub_8067768(ActionContainer *a0); +void ShowTacticsMenu(ActionContainer *a0); +void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); +extern bool8 sub_8071A8C(Entity *pokemon); +extern void sub_80643AC(Entity *pokemon); +extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); + +extern u8 gUnknown_202EE00; +extern Entity *gLeaderPointer; + +extern const u8 *gUnknown_80F8A84; +extern const u8 *gUnknown_80F8A6C; +extern const u8 *gUnknown_80F8ADC; +extern const u8 *gUnknown_80F8AB0; +extern const u8 *gUnknown_80F8B0C; +extern const u8 *gUnknown_80FD4B0; +extern const u8 *gUnknown_80F8A4C; +extern const u8 *gUnknown_80F8A28; +extern const u8 *gUnknown_8100208; +extern const u8 *gUnknown_80F9BD8; +extern const u8 *gUnknown_80F9C08; +extern const u8 *gUnknown_80F9C2C; +extern const u8 *gUnknown_80F9BB0; +extern const u8 *gUnknown_80FDE18; +extern const u8 *gUnknown_80F8B24; +extern const u8 *gTeamToolboxAPtr; +extern const u8 *gTeamToolboxBPtr; +extern const u8 *gFieldItemMenuGroundTextPtr; +extern const u8 *gUnknown_80FE940; +extern const u8 *gWhichTextPtr1; + +extern const u8 *const gFieldMenuMovesPtr; +extern const u8 *const gFieldMenuItemsPtr; +extern const u8 *const gFieldMenuTeamPtr; +extern const u8 *const gFieldMenuOthersPtr; +extern const u8 *const gFieldMenuGroundPtr; +extern const u8 *const gUnknown_80F9174; +extern const u8 *const gUnknown_80F9190; +extern const u8 *const gUnknown_80F91C8; +extern const u8 *const gUnknown_80F91E0; +extern const u8 *const gUnknown_80F91A8; +extern const u8 *const gUnknown_80FE954; + +const u8 *GetCurrentDungeonName(void); +void GetWeatherName(u8 *dst, u8 weatherId); +extern u8 *GetDungeonSubMenuItemString(s32 param_1); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern s32 gDungeonSubMenuItemsCount; +extern const u8 gUnknown_8106B50[]; + +extern void DungeonShowWindows(Windows *a0, u8 a1); + +extern bool8 sub_8070F14(Entity * pokemon, s32 direction); +extern Entity *sub_80696A8(Entity *a0); +extern u8 sub_806A538(s32); +extern void sub_803EAF0(u32, u8 *); +extern void sub_803F508(Entity *); +extern void sub_8041AD0(Entity *pokemon); +extern void sub_8041AE0(Entity *pokemon); +extern void sub_807EC28(bool8); +extern void PlayDungeonCursorSE(u8 param_1); + +extern MenuInputStruct gDungeonMenu; +extern s32 gTeamMenuChosenId; + +static EWRAM_DATA bool8 sInDiagonalMode = 0; +static EWRAM_DATA bool8 sInRotateMode = 0; +// Frames counter for arrows in diagonal/rotate mode. +static EWRAM_DATA s16 sArrowsFrames = 0; +// If both of these are set to TRUE, there are 3 arrows visible instead of 1 in rotate mode +static EWRAM_DATA bool8 sShowThreeArrows1 = 0; +static EWRAM_DATA bool8 sShowThreeArrows2 = 0; + +static void sub_805E738(Entity *a0); +static bool8 sub_805E874(void); +static bool8 sub_805EC2C(Entity *a0, s32 x, s32 y); +static bool8 sub_805EC4C(Entity *a0, u8 a1); +static bool8 sub_805EF60(Entity *a0, EntityInfo *a1); +static void ShowMainMenu(bool8 fromBPress, bool8 a1); +static void PrintOnMainMenu(bool8 printAll); +static bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0); + +void DungeonHandlePlayerInput(void) +{ + struct UnkMenuBitsStruct r6; + bool8 triggers[5]; // Always FALSE, if one of these is TRUE - they can open various menus or cause an item throw. Most likely used for debugging/testing. + s32 frames; + s32 var_38; + UnkDungeonGlobal_unk181E8_sub *unkPtr; + + unkPtr = &gDungeon->unk181e8; + var_38 = 3; + gDungeon->unk12 = 0; + sub_806A2BC(GetLeader(), 1); + if (sub_80701A4(GetLeader())) { + sub_803E708(60, 16); + return; + } + + gDungeon->unk644.unk2F = 0; + sub_8040A78(); + if (gDungeon->unk1 != 0) { + gDungeon->unk1 = 0; + if (!ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) { + SetLeaderActionToNothing(TRUE); + sub_805E804(); + ShowDungeonStairsMenu(GetLeader()); + ResetRepeatTimers(); + ResetUnusedInputStruct(); + if (GetLeaderActionId() != 0) { + return; + } + } + } + + sub_806A914(1, 1, 1); + while (1) { + Entity *leader = GetLeader(); + EntityInfo *leaderInfo = GetEntInfo(leader); + + sub_80978C8(leaderInfo->id); + if (gDungeon->unk644.unk28 != 0) { + if (sub_805E874()) { + leaderInfo->action.action = 2; + leaderInfo->action.actionParameters[0].actionUseIndex = 0; + break; + } + sub_805E804(); + } + sInRotateMode = FALSE; + sInDiagonalMode = FALSE; + if (gDungeon->unk5C0 >= 0) { + r6.a0_8 = 1; + r6.a0_16 = 0; + r6.a0_24 = 0; + } + else { + r6.a0_8 = 0; + r6.a0_16 = 0; + r6.a0_24 = 0; + } + + frames = 0; + sub_8044C50(ACTION_NOTHING); + sShowThreeArrows1 = FALSE; + sShowThreeArrows2 = FALSE; + + while (r6.a0_8 == 0) { + u32 dpadDiagonal, dpadSimple; + bool32 highlightTiles, tryItemThrow; + bool32 bPress, rPress, unkBool; // Always FALSE, might've been used as debug variables. + s32 directionNew; + + sArrowsFrames++; + if (unkPtr->unk1821A != 0) { + frames = 0; + } + else { + frames++; + } + + if (var_38 != 0 && --var_38 == 0) { + sub_8075680(0); + } + + TryCreateModeArrows(leader); + unkBool = FALSE; + { + s32 i; + for (i = 0; i < 5; i++) { + triggers[i] = FALSE; + } + } + + if (gRealInputs.held & A_BUTTON && gRealInputs.held & B_BUTTON && FixedPointToInt(leaderInfo->belly) != 0) { + sub_8044C50(ACTION_PASS_TURN); + gDungeon->unk644.unk2F = 1; + break; + } + + bPress = FALSE; + rPress = FALSE; + + if (gRealInputs.pressed & A_BUTTON) { + if (gRealInputs.held & B_BUTTON) { + if (FixedPointToInt(leaderInfo->belly) != 0) { + sub_8044C50(ACTION_PASS_TURN); + gDungeon->unk644.unk2F = 1; + break; + } + } + else if (ShouldMonsterRunAwayAndShowEffect(leader, TRUE)) { + LogMessageByIdWithPopupCheckUser(leader, gUnknown_80FD4B0); + sub_8044C50(ACTION_PASS_TURN); + gDungeon->unk644.unk2F = 1; + break; + } + else if (gRealInputs.held & L_BUTTON) { + bool32 canUseMove; + s32 i, j; + + for (i = 0; i < MAX_MON_MOVES; i++) { + if (MoveFlagExists(&leaderInfo->moves.moves[i]) && MoveFlagSet(&leaderInfo->moves.moves[i])) { + break; + } + } + if (i == MAX_MON_MOVES) { + LogMessageByIdWithPopupCheckUser(leader, gUnknown_80F8A28); + break; + } + + for (j = 0; j < MAX_MON_MOVES; j++) { + if (MoveFlagExists(&leaderInfo->moves.moves[j])) { + if (leaderInfo->moves.moves[j].PP != 0) + break; + } + } + if (j == MAX_MON_MOVES) { + SetMonsterActionFields(&leaderInfo->action, ACTION_STRUGGLE); + break; + } + + canUseMove = FALSE; + for (j = i; j < MAX_MON_MOVES; j++) { + if (j != i && !(leaderInfo->moves.moves[j].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)) { + break; + } + if (leaderInfo->moves.moves[j].PP != 0) { + canUseMove = TRUE; + break; + } + } + if (!canUseMove) { + LogMessageByIdWithPopupCheckUser(leader, gUnknown_80F8A4C); + } + else { + SetMonsterActionFields(&leaderInfo->action, ACTION_USE_MOVE_PLAYER); + leaderInfo->action.actionParameters[0].actionUseIndex = GetTeamMemberEntityIndex(leader); + leaderInfo->action.actionParameters[1].actionUseIndex = i; + } + break; + } + else { + if (!sub_805EF60(leader, leaderInfo)) { + SetMonsterActionFields(&leaderInfo->action, ACTION_REGULAR_ATTACK); + } + break; + } + } + + if (gRealInputs.shortPress & B_BUTTON) { + r6.a0_8 = 1; + r6.a0_16 = 0; + r6.a0_24 = 0; + break; + } + else if (triggers[1]) { // Opens moves menu + gDungeon->unk5C0 = 0; + r6.a0_8 = 1; + r6.a0_16 = 0; + r6.a0_24 = 1; + break; + } + else if (triggers[2]) { // Opens item menu + gDungeon->unk5C0 = 1; + r6.a0_8 = 1; + r6.a0_16 = 0; + r6.a0_24 = 1; + break; + } + else if (triggers[3]) { // Opens pokemon menu + gDungeon->unk5C0 = 2; + r6.a0_8 = 1; + r6.a0_16 = 0; + r6.a0_24 = 1; + break; + } + else if (triggers[4]) { // Opens regular menu + r6.a0_8 = 1; + r6.a0_16 = 0; + r6.a0_24 = 1; + break; + } + else if (frames > 0x707) { // Opens simple menu when idling + r6.a0_8 = 1; + r6.a0_16 = 1; + r6.a0_24 = 0; + break; + } + + if (gGameOptionsRef->unk9 == 0 + && (gRealInputs.pressed & B_BUTTON || (!unkBool && bPress)) + && unkPtr->unk1821A != 0) + { + sub_804AA60(); + sInRotateMode = FALSE; + ResetRepeatTimers(); + ResetUnusedInputStruct(); + } + + if (gRealInputs.held & L_BUTTON) { + if (gRealInputs.pressed & B_BUTTON) { + DisplayMessageLog(); + ResetRepeatTimers(); + ResetUnusedInputStruct(); + } + } + + tryItemThrow = FALSE; + if (gRealInputs.held & R_BUTTON) { + if (!sInDiagonalMode) { + sArrowsFrames = 0; + } + sInDiagonalMode = TRUE; + } + else { + sInDiagonalMode = FALSE; + } + + highlightTiles = FALSE; + if (gGameOptionsRef->unk9 == 0) { + if (gRealInputs.shortPress & R_BUTTON || rPress || gRealInputs.pressed & START_BUTTON) { + highlightTiles = TRUE; + } + } + if (highlightTiles) { + sub_805E738(leader); + sInRotateMode = TRUE; + unkPtr->unk1821B = leaderInfo->action.direction; + unkPtr->unk1821C = 0xFF; + ResetRepeatTimers(); + } + + if ((gRealInputs.held & L_BUTTON) == L_BUTTON && (gRealInputs.pressed & R_BUTTON) == R_BUTTON) { + tryItemThrow = TRUE; + } + if (triggers[0]) { + tryItemThrow = TRUE; + } + if (tryItemThrow) { + s32 i; + for (i = 0; i < INVENTORY_SIZE; i++) { + if (ItemExists(&gTeamInventoryRef->teamItems[i]) && ItemSet(&gTeamInventoryRef->teamItems[i])) { + sub_8044C50(ACTION_THROW_ITEM_PLAYER); + leaderInfo->action.actionParameters[0].actionUseIndex = i +1; + leaderInfo->action.actionParameters[0].itemPos.x = 0; + leaderInfo->action.actionParameters[0].itemPos.y = 0; + break; + } + } + if (leaderInfo->action.action != 0) { + break; + } + } + + // SELECT button + if (!gDungeon->unk181e8.blinded && gGameOptionsRef->mapOption != 6 && gRealInputs.pressed & SELECT_BUTTON) { + s32 prevMapOption = gGameOptionsRef->mapOption; + gUnknown_202EE00 = 1; + gDungeon->unk181e8.unk18214 = 1; + if (!sub_8094C48()) { + sub_8094C88(); + } + sub_8052210(1); + sub_8040A84(); + SetBGOBJEnableFlags(0x1E); + sub_803E708(0xA, 0x2F); + while (1) { + DungeonRunFrameActions(0x2F); + if (gRealInputs.pressed & SELECT_BUTTON) + break; + if (gRealInputs.pressed & B_BUTTON) + break; + + if (gRealInputs.pressed & A_BUTTON) { + gUnknown_202EE00 = (gUnknown_202EE00 == 0) ? 1 : 0; // Flip + sub_8040A84(); + } + } + gDungeon->unk181e8.unk18214 = 0; + gGameOptionsRef->mapOption = prevMapOption; + gUnknown_202EE00 = 1; + sub_8040A84(); + SetBGOBJEnableFlags(0); + DungeonRunFrameActions(0x2F); + DungeonRunFrameActions(0x2F); + } + + if (gDungeon->unk644.unk29 != 0 && !sInDiagonalMode) { + dpadDiagonal = dpadSimple = gRealInputs.pressed; + } + else { + dpadDiagonal = gRealInputs.held; + dpadSimple = (unkPtr->unk1821A == 0) ? gRealInputs.held : gRealInputs.pressed; + } + + dpadDiagonal &= DPAD_ANY; + dpadSimple &= DPAD_ANY; + directionNew = -1; + if (dpadDiagonal == (DPAD_UP | DPAD_RIGHT)) + directionNew = DIRECTION_NORTHEAST; + if (dpadDiagonal == (DPAD_UP | DPAD_LEFT)) + directionNew = DIRECTION_NORTHWEST; + if (dpadDiagonal == (DPAD_DOWN | DPAD_RIGHT)) + directionNew = DIRECTION_SOUTHEAST; + if (dpadDiagonal == (DPAD_DOWN | DPAD_LEFT)) + directionNew = DIRECTION_SOUTHWEST; + + if (dpadSimple == DPAD_UP) + directionNew = DIRECTION_NORTH; + if (dpadSimple == DPAD_DOWN) + directionNew = DIRECTION_SOUTH; + if (dpadSimple == DPAD_RIGHT) + directionNew = DIRECTION_EAST; + if (dpadSimple == DPAD_LEFT) + directionNew = DIRECTION_WEST; + + if (directionNew >= 0 && (!sInDiagonalMode || (directionNew & 1))) { + bool32 directionChanged = (leaderInfo->action.direction != directionNew); + leaderInfo->action.direction = directionNew & DIRECTION_MASK; + if (sInRotateMode) { + unkPtr->unk1821B = directionNew; + sub_806CDD4(leader, sub_806CEBC(leader), directionNew); + } + else { + u8 canMoveFlags = 0; + const u8 *immobilizedMsg = NULL; + + if (sub_805EC4C(leader, 1)) + break; + + if (leaderInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) { + immobilizedMsg = gUnknown_80F8A84, canMoveFlags |= 1; + } + else if (leaderInfo->frozenClassStatus.status == STATUS_CONSTRICTION) { + immobilizedMsg = gUnknown_80F8A6C, canMoveFlags |= 1; + } + else if (leaderInfo->frozenClassStatus.status == STATUS_INGRAIN) { + immobilizedMsg = gUnknown_80F8AB0, canMoveFlags |= 1; + } + else if (leaderInfo->frozenClassStatus.status == STATUS_WRAP) { + immobilizedMsg = gUnknown_80F8ADC, canMoveFlags |= 1; + } + else if (leaderInfo->frozenClassStatus.status == STATUS_WRAPPED) { + immobilizedMsg = gUnknown_80F8B0C, canMoveFlags |= 1; + } + + if (!CanMoveInDirection(leader, directionNew)) + canMoveFlags |= 2; + + if (directionChanged) { + sub_806CDD4(leader, sub_806CEBC(leader), directionNew); + } + + if (!(canMoveFlags & 2)) { + if (canMoveFlags & 1) { + if (immobilizedMsg != NULL) { + LogMessageByIdWithPopupCheckUser(leader, immobilizedMsg); + } + sub_8044C50(ACTION_PASS_TURN); + gDungeon->unk644.unk2F = 1; + } + else { + sub_8044C50(ACTION_WALK); + if ((gRealInputs.held & B_BUTTON || bPress) && FixedPointToInt(leaderInfo->belly) != 0) { + if (GetEntInfo(leader)->cringeClassStatus.status != STATUS_CONFUSED) { + gDungeon->unk644.unk28 = 1; + } + leaderInfo->action.actionParameters[0].actionUseIndex = 0; + } + else { + leaderInfo->action.actionParameters[0].actionUseIndex = 1; + } + } + break; + } + else if (canMoveFlags & 1) { + sub_803E724(0x23); + } + + } + } + DungeonRunFrameActions(0xF); + } + + if (unkPtr->unk1821A != 0) { + sub_804AA60(); + } + + if (leaderInfo->action.action == 0x2D || leaderInfo->action.action == 0x13) { + HandleTalkFieldAction(leader); + if (sub_8044B28()) + break; + sub_8044C50(ACTION_NOTHING); + } + else if ((r6.a0_8) == 0) { + gDungeon->unk644.unk29 = 0; + if (leaderInfo->action.action != 0) { + if (!IsNotAttacking(leader, FALSE)) { + DungeonRunFrameActions(0xF); + } + break; + } + DungeonRunFrameActions(0xF); + } + else { + DungeonRunFrameActions(0xF); + sub_8047158(); + ShowMainMenu((r6.a0_16 == 0), r6.a0_24); + ResetRepeatTimers(); + ResetUnusedInputStruct(); + sInRotateMode = FALSE; + unkPtr->unk1821A = 0; + sub_804AA60(); + if (sub_8044B28()) + break; + if (leaderInfo->action.action != 0) { + if (leaderInfo->action.action == 0x2B) { + gDungeon->unk4 = 1; + gDungeon->unk3 = 1; + } + if (leaderInfo->action.action == 0x2E) { + gDungeon->unk4 = 1; + gDungeon->unk3 = 0; + } + break; + } + DungeonRunFrameActions(0xF); + if (gDungeon->unk4 != 0) + break; + } + } +} + +struct UnkStruct_8106AC8 +{ + s16 unk0; + s16 unk2; + u8 unk4; + u8 unk5; +}; + +extern const struct UnkStruct_8106AC8 gUnknown_8106AC8[]; + +struct UnkStruct_8106AE8 +{ + s16 unk0; + s16 unk2; + u32 unk4; + u8 unk8; + u8 unk9; + u8 unkA; +}; + +extern const struct UnkStruct_8106AE8 gUnknown_8106AE8[]; + +// Creates arrow sprites which are used when in rotate or diagonal modes. +static void TryCreateModeArrows(Entity *leader) +{ + UnkDungeonGlobal_unk181E8_sub *unkPtr = &gDungeon->unk181e8; + + if (sInDiagonalMode) { + s32 i; + SpriteOAM sprite; + + for (i = 0; i < 4; i++) { + u32 matrixNum; + s32 x, xMul, x2; + s32 y, yMul, y2; + + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 1); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 0); + + matrixNum = (gUnknown_8106AC8[i].unk4 != 0) ? 8 : 0; + + if (gUnknown_8106AC8[i].unk5) + matrixNum += 16; + + SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum); + SpriteSetSize(&sprite, 0); + + SpriteSetTileNum(&sprite, 0x213); + SpriteSetPriority(&sprite, 2); + SpriteSetPalNum(&sprite, 0); + + SpriteSetUnk6_0(&sprite, 0); + SpriteSetUnk6_1(&sprite, 0); + + xMul = gUnknown_8106AC8[i].unk0 * 10; + x2 = (sArrowsFrames / 2) & 7; + x = (x2 * gUnknown_8106AC8[i].unk0) + xMul + 116; + SpriteSetX(&sprite, x); + + yMul = gUnknown_8106AC8[i].unk2 * 10; + y2 = (sArrowsFrames / 2) & 7; + y = (y2 * gUnknown_8106AC8[i].unk2) + yMul + 82; + SpriteSetY(&sprite, y); + + AddSprite(&sprite, 0x100, NULL, NULL); + } + } + + else if (unkPtr->unk1821A) { + s32 i; + SpriteOAM sprite; + s32 var_2C = unkPtr->unk1821B; + + if (unkPtr->unk1821B < 8) { + s32 x, xMul, x2; + s32 y, yMul, y2; + s32 to = (sShowThreeArrows2 != FALSE && sShowThreeArrows1 != FALSE) ? 3 : 1; + + xMul = gUnknown_8106AE8[var_2C].unk0 * 10; + x2 = (sArrowsFrames / 2) & 7; + x = (gUnknown_8106AE8[var_2C].unk0 * x2) + xMul + 116; + + yMul = gUnknown_8106AE8[var_2C].unk2 * 10; + y2 = (sArrowsFrames / 2) & 7; + y = (y2 * gUnknown_8106AE8[var_2C].unk2) + yMul + 82; + for (i = 0; i < to; i++) { + u32 matrixNum; + + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 1); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 0); + + matrixNum = (gUnknown_8106AE8[var_2C].unk8 != 0) ? 8 : 0; + + if (gUnknown_8106AE8[var_2C].unk9) + matrixNum += 16; + + SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum); + SpriteSetSize(&sprite, 0); + + SpriteSetTileNum(&sprite, gUnknown_8106AE8[var_2C].unk4); + SpriteSetPriority(&sprite, 2); + SpriteSetPalNum(&sprite, 0); + + SpriteSetUnk6_0(&sprite, 0); + SpriteSetUnk6_1(&sprite, 0); + + SpriteSetX(&sprite, x); + SpriteSetY(&sprite, y); + + AddSprite(&sprite, 0x100, NULL, NULL); + x += gUnknown_8106AE8[var_2C].unk0 * 4; + y += gUnknown_8106AE8[var_2C].unk2 * 4; + } + } + } + + if (sInRotateMode && unkPtr->unk1821C != unkPtr->unk1821B) { + unkPtr->unk1821C = unkPtr->unk1821B; + ChangeDungeonCameraPos(&leader->pos, unkPtr->unk1821B, 0, sInRotateMode); + } +} + +static void sub_805E738(Entity *a0) +{ + const Tile *tile; + s32 i, j; + EntityInfo *entityInfo = GetEntInfo(a0); + if (entityInfo->blinkerClassStatus.status != 1 && entityInfo->blinkerClassStatus.status != 2) { + // What??? + for (i = 0; i < 1; i++) { + bool8 r9 = FALSE; + u32 direction = entityInfo->action.direction; + direction++; + for (j = 1; j < 8; j++, direction++) { + direction &= DIRECTION_MASK; + tile = GetTile(a0->pos.x + gAdjacentTileOffsets[direction].x, a0->pos.y + gAdjacentTileOffsets[direction].y); + if (tile->monster != NULL && GetEntityType(tile->monster) == ENTITY_MONSTER) { + EntityInfo *tileMonsterInfo = GetEntInfo(tile->monster); + if (CanSeeTarget(a0, tile->monster)) { + if (i != 0 || tileMonsterInfo->isNotTeamMember) { + r9 = TRUE; + break; + } + } + } + } + if (r9) { + GetEntInfo(a0)->action.direction = direction & DIRECTION_MASK; + sub_806CDD4(a0, sub_806CEBC(a0), direction); + break; + } + } + } +} + +void sub_805E804(void) +{ + gDungeon->unk644.unk29 |= gDungeon->unk644.unk28; + gDungeon->unk644.unk28 = 0; + while (gDungeon->unk644.unk29 != 0 && gRealInputs.held & R_BUTTON) { + DungeonRunFrameActions(0x54); + } +} + +static bool8 sub_805E874(void) +{ + u8 r7, r8, r0; + s32 i, j, k; + s32 xArray[3]; + s32 yArray[3]; + Dungeon *dungeon = gDungeon; + Entity *leader = GetLeader(); + s32 direction = GetEntInfo(leader)->action.direction; + s32 x = leader->pos.x; + s32 y = leader->pos.y; + const Tile *leaderTile = GetTile(x, y); + s32 xAdjacent = x + gAdjacentTileOffsets[direction].x; + s32 yAdjacent = y + gAdjacentTileOffsets[direction].y; + s32 room; + + if (dungeon->unk644.unk28 == 0) + return FALSE; + if (leaderTile->object != NULL) + return FALSE; + if (sub_805EC2C(leader, x, y)) + return FALSE; + if (!sub_8070F14(leader, direction)) + return FALSE; + + room = leaderTile->room; + if (room == 0xFF) { + if (GetTile(xAdjacent, yAdjacent)->room != 0xFF) + return FALSE; + } + else { + if (leaderTile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION) + return FALSE; + } + + for (j = -1; j < 2; j++) { + const Tile *tile = GetTile(x + gAdjacentTileOffsets[(direction + j) & 7].x, y + gAdjacentTileOffsets[(direction + j) & 7].y); + if (tile->monster != NULL) + return FALSE; + if (tile->terrainType & TERRAIN_TYPE_STAIRS) + return FALSE; + } + + xArray[0] = x + gAdjacentTileOffsets[(direction + 3) & 7].x; + xArray[1] = x + gAdjacentTileOffsets[(direction + 4) & 7].x; + xArray[2] = x + gAdjacentTileOffsets[(direction + 5) & 7].x; + + yArray[0] = y + gAdjacentTileOffsets[(direction + 3) & 7].y; + yArray[1] = y + gAdjacentTileOffsets[(direction + 4) & 7].y; + yArray[2] = y + gAdjacentTileOffsets[(direction + 5) & 7].y; + + for (i = -1; i < 2; i++) { + for (j = -1; j < 2; j++) { + const Tile *tile = GetTile(x + i, y + j); + if (tile->object != NULL) { + for (k = 0; k < 3; k++) { + if (x + i == xArray[k] && y + j == yArray[k]) + break; + } + if (k == 3 && GetEntityType(tile->object) == ENTITY_ITEM) + return FALSE; + } + + if (direction & 1) { + // This doesn't really have to be called two times... + if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP && GetEntityType(tile->object) == ENTITY_TRAP) { + if (tile->object->isVisible) + return FALSE; + if (gDungeon->unk181e8.unk1820F) + return FALSE; + } + } + else if (i == 0 || j == 0) { + if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP) { + if (tile->object->isVisible) + return FALSE; + if (gDungeon->unk181e8.unk1820F) + return FALSE; + } + } + + if (i != 0 && j != 0) continue; + if (i == 0 && j == 0) continue; + + if ((xArray[1] != x + i || yArray[1] != y + j) && !sub_805EC2C(leader, x + i, y + j) && room != 0xFF && room != tile->room) + return FALSE; + } + } + + if (!(direction & 1)) { + if (direction == 0 || direction == 4) { + r8 = sub_805EC2C(leader, x - 1, y - 1); + r7 = sub_805EC2C(leader, x - 1, y); + r0 = sub_805EC2C(leader, x - 1, y + 1); + if (r7 == 0) { + if (r8 != 0 || r7 != r0) + return FALSE; + } + + r8 = sub_805EC2C(leader, x + 1, y - 1); + r7 = sub_805EC2C(leader, x + 1, y); + r0 = sub_805EC2C(leader, x + 1, y + 1); + if (r7 == 0) { + if (r8 != 0 || r7 != r0) + return FALSE; + } + } + else { + r8 = sub_805EC2C(leader, x - 1, y - 1); + r7 = sub_805EC2C(leader, x, y - 1); + r0 = sub_805EC2C(leader, x + 1, y - 1); + if (r7 == 0) { + if (r8 != 0 || r7 != r0) + return FALSE; + } + + r8 = sub_805EC2C(leader, x - 1, y + 1); + r7 = sub_805EC2C(leader, x, y + 1); + r0 = sub_805EC2C(leader, x + 1, y + 1); + if (r7 == 0) { + if (r8 != 0 || r7 != r0) + return FALSE; + } + } + } + + return TRUE; +} + +static bool8 sub_805EC2C(Entity *a0, s32 x, s32 y) +{ + DungeonPos pos = {.x = x, .y = y}; + return sub_8070564(a0, &pos); +} + +static bool8 sub_805EC4C(Entity *a0, u8 a1) +{ + DungeonPos pos; + const Tile *tile; + EntityInfo *tileMonsterInfo; + Entity *tileMonster; + EntityInfo *entityInfo = GetEntInfo(a0); + + pos.x = a0->pos.x + gAdjacentTileOffsets[entityInfo->action.direction].x; + pos.y = a0->pos.y + gAdjacentTileOffsets[entityInfo->action.direction].y; + tile = GetTile(pos.x, pos.y); + tileMonster = tile->monster; + + if (tileMonster == NULL) return FALSE; + if (GetEntityType(tileMonster) != ENTITY_MONSTER) return FALSE; + + tileMonsterInfo = GetEntInfo(tileMonster); + if (tileMonsterInfo->isNotTeamMember + && (tileMonsterInfo->shopkeeper != 1 && tileMonsterInfo->shopkeeper != 2) + && !IsExperienceLocked(tileMonsterInfo->joinedAt.id) + && tileMonsterInfo->monsterBehavior != BEHAVIOR_RESCUE_TARGET) { + return FALSE; + } + + if (entityInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) return FALSE; + if (entityInfo->frozenClassStatus.status == STATUS_FROZEN) return FALSE; + if (entityInfo->frozenClassStatus.status == STATUS_CONSTRICTION) return FALSE; + if (entityInfo->frozenClassStatus.status == STATUS_INGRAIN) return FALSE; + if (entityInfo->frozenClassStatus.status == STATUS_WRAP) return FALSE; + if (entityInfo->frozenClassStatus.status == STATUS_WRAPPED) return FALSE; + + if (tileMonsterInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) return FALSE; + if (tileMonsterInfo->frozenClassStatus.status == STATUS_FROZEN) return FALSE; + if (tileMonsterInfo->frozenClassStatus.status == STATUS_CONSTRICTION) return FALSE; + if (tileMonsterInfo->frozenClassStatus.status == STATUS_INGRAIN) return FALSE; + if (tileMonsterInfo->frozenClassStatus.status == STATUS_WRAP) return FALSE; + if (tileMonsterInfo->frozenClassStatus.status == STATUS_WRAPPED) return FALSE; + + if (entityInfo->cringeClassStatus.status == STATUS_CONFUSED) return FALSE; + if (tileMonsterInfo->cringeClassStatus.status == STATUS_CONFUSED) return FALSE; + + if (tileMonsterInfo->sleepClassStatus.status != STATUS_NONE && tileMonsterInfo->sleepClassStatus.status != STATUS_SLEEPLESS && tileMonsterInfo->sleepClassStatus.status != STATUS_YAWNING) return FALSE; + if (entityInfo->sleepClassStatus.status != STATUS_NONE && entityInfo->sleepClassStatus.status != STATUS_SLEEPLESS && entityInfo->sleepClassStatus.status != STATUS_YAWNING) return FALSE; + + if (IsChargingAnyTwoTurnMove(tileMonster, FALSE)) return FALSE; + if (!sub_8070F80(a0, entityInfo->action.direction)) return FALSE; + + if (a1 != 0 && sub_807049C(tileMonster, &a0->pos) && !DisplayDungeonYesNoMessage(0, gUnknown_8100208, 0)) return FALSE; + + SetMonsterActionFields(&entityInfo->action, ACTION_WALK); + if (gRealInputs.held & B_BUTTON) { + entityInfo->action.actionParameters[0].actionUseIndex = 0; + } + else { + entityInfo->action.actionParameters[0].actionUseIndex = 1; + } + entityInfo->flags |= 0x8000; + + SetMonsterActionFields(&tileMonsterInfo->action, ACTION_WALK); + tileMonsterInfo->action.actionParameters[0].actionUseIndex = 0; + tileMonsterInfo->action.direction = (entityInfo->action.direction + 4) & 7; + tileMonsterInfo->flags |= 0x8000; + tileMonsterInfo->targetPos.x = tileMonster->pos.x; + tileMonsterInfo->targetPos.y = tileMonster->pos.y; + gDungeon->unkE = 1; + return TRUE; +} + +void sub_805EE30(void) +{ + Entity *tileObject; + Tile *tile; + Entity *leader = GetLeader(); + if (leader == NULL) + return; + if (sub_8044B28()) + return; + + tile = GetTileAtEntitySafe(leader); + if (IQSkillIsEnabled(leader, IQ_SUPER_MOBILE) && GetEntInfo(leader)->invisibleClassStatus.status != STATUS_MOBILE && !HasHeldItem(leader, ITEM_MOBILE_SCARF)) + sub_804AE84(&leader->pos); + if (tile->terrainType & TERRAIN_TYPE_STAIRS) + gDungeon->unk1 = 1; + + tileObject = tile->object; + if (tileObject == NULL) + return; + switch (GetEntityType(tileObject)) + { + case ENTITY_TRAP: { + Trap *trap = GetTrapData(tileObject); + bool32 r8 = FALSE; + bool32 r7 = FALSE; + if (IQSkillIsEnabled(leader, IQ_TRAP_SEER) && !tileObject->isVisible) { + tileObject->isVisible = TRUE; + sub_8049ED4(); + r7 = TRUE; + } + if (trap->unk1 != 0) { + if (trap->unk1 == 1) + break; + if (trap->unk1 == 2) + r8 = TRUE; + if (r8 == FALSE) + break; + } + if (!r7) { + HandleTrap(leader, &leader->pos, 0, 1); + } + } + break; + case ENTITY_ITEM: { + Item *item = GetItemData(tileObject); + if (!(item->flags & ITEM_FLAG_IN_SHOP)) { + sub_8045DB4(&leader->pos, 1); + } + else { + gDungeon->unk5C0 = 4; + } + } + break; + case ENTITY_NOTHING: + case ENTITY_MONSTER: + case ENTITY_UNK_4: + case ENTITY_UNK_5: + default: + break; + } +} + +static bool8 sub_805EF60(Entity *a0, EntityInfo *a1) +{ + Entity *r4 = sub_80696A8(a0); + + if (r4 == NULL) + return FALSE; + if (GetEntityType(r4) != ENTITY_MONSTER) + return FALSE; + if (!sub_8070BC0(a0)) + return FALSE; + if (GetEntInfo(r4)->isNotTeamMember && GetEntInfo(r4)->monsterBehavior != BEHAVIOR_RESCUE_TARGET && GetEntInfo(r4)->shopkeeper != 1) + return FALSE; + + SetMonsterActionFields(&a1->action, ACTION_TALK_FIELD); + return TRUE; +} + +void sub_805EFB4(Entity *a0, bool8 a1) +{ + s32 i; + EntityInfo *leaderInfo = GetLeaderInfo(); + if (a1 && leaderInfo->cringeClassStatus.status == STATUS_COWERING) { + leaderInfo->action.direction += 4; + leaderInfo->action.direction &= 7; + } + else if (leaderInfo->cringeClassStatus.status == STATUS_CONFUSED) { + s32 rnd = DungeonRandInt(8); + for (i = 0; i < 8; i++) { + if (a1 || CanMoveInDirection(a0, rnd)) { + leaderInfo->action.direction = rnd & 7; + return; + } + rnd = (rnd + 1) & 7; + } + } +} + +void sub_805F02C(void) +{ + s32 i; + Entity *r7 = gDungeon->unkBC; + Entity *leader = GetLeader(); + EntityInfo *r8 = GetEntInfo(r7); + EntityInfo *leaderInfo = GetEntInfo(leader); + + if (r8->isTeamLeader) { + DisplayDungeonLoggableMessageTrue(r7, gUnknown_80F9BD8); + } + else if (sub_8047084(ITEM_FLAG_IN_SHOP) || sub_807EF48()) { + DisplayDungeonLoggableMessageTrue(r7, gUnknown_80F9C08); + } + else if (gDungeon->unk644.unk2A) { + DisplayDungeonLoggableMessageTrue(r7, gUnknown_80F9C2C); + } + else { + gDungeon->unk644.unk35 = 0; + r8->isTeamLeader = TRUE; + leaderInfo->isTeamLeader = FALSE; + for (i = 0; i < 4; i++) { + PokemonStruct2 *mon = &gRecruitedPokemonRef->pokemon2[i]; + PokemonStruct1 *r5 = NULL; + + if ((u8)mon->unk0 & 1) { + if (!sub_806A538(mon->unkA)) { + r5 = &gRecruitedPokemonRef->pokemon[mon->unkA]; + } + if (i == r8->teamIndex) { + mon->isTeamLeader = TRUE; + if (r5 != NULL) { + r5->isTeamLeader = TRUE; + } + } + else { + mon->isTeamLeader = FALSE; + if (r5 != NULL) { + r5->isTeamLeader = FALSE; + } + } + } + } + gLeaderPointer = NULL; + r8->action = leaderInfo->action; + sub_803F508(r7); + sub_8041AD0(leader); + sub_8041AE0(GetLeader()); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], r7, 0); + LogMessageByIdWithPopupCheckUser(r7, gUnknown_80F9BB0); + sub_807EC28(FALSE); + r8->unk64 = 0; + leaderInfo->unk64 = 0; + sub_806A6E8(leader); + sub_806A6E8(r7); + } +} + +ActionContainer *GetLeaderActionContainer(void) +{ + return &GetLeaderInfo()->action; +} + +u16 GetLeaderActionId(void) +{ + return GetLeaderInfo()->action.action; +} + +enum +{ + MAIN_MENU_MOVES, + MAIN_MENU_ITEMS, + MAIN_MENU_TEAM, + MAIN_MENU_OTHERS, + MAIN_MENU_GROUND, +}; + +static void ShowMainMenu(bool8 fromBPress, bool8 a1) +{ + Item *item; + s32 r10; + bool8 printAll = fromBPress; + s32 chosenOption; + s32 var_24; + struct UnkMenuBitsStruct var_30; + struct UnkMenuBitsStruct var_34; + + r10 = gDungeon->unk5C0; + chosenOption = 0; + var_24 = (gDungeon->unk5C0 > - 1); + gDungeon->unk5C0 = -1; + if (r10 >= 0) { + chosenOption = r10; + } + + if (a1) { + PlayFanfareSE(0x137, 0x100); + } + else { + PlayDungeonStartButtonSE(); + } + + while (1) { + if (r10 < 0) { + SetLeaderActionToNothing(1); + gTeamMenuChosenId = -1; + PrintOnMainMenu(printAll); + sub_806A2BC(GetLeader(), 0); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1D); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + if ((gRealInputs.pressed & A_BUTTON || gDungeonMenu.unk28.a_button)) { + if (gUnknown_202749A[gDungeonMenu.menuIndex + 1] == 7) { + PlayDungeonConfirmationSE(); + chosenOption = gDungeonMenu.menuIndex; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + chosenOption = -1; + break; + } + } + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1D); + printAll = TRUE; + } + + r10 = chosenOption; + if (chosenOption == MAIN_MENU_ITEMS) { + u16 action; + + SetLeaderActionToNothing(1); + var_34.a0_8 = 0; + var_34.a0_16 = 1; + var_34.a0_24 = 0; + var_34.a0_32 = 0; + if (ShowDungeonItemsMenu(GetLeader(), &var_34)) { + r10 = -1; + } + if (sub_805FD3C(&var_34) && ShowDungeonItemsMenu(GetLeader(), &var_34)) { + SetLeaderActionToNothing(1); + } + action = GetLeaderActionId(); + if (action == 12) { + sub_8044D90(GetLeader(), 0, 12)->flags |= ITEM_FLAG_UNPAID; + sub_8060D24(GetLeaderActionContainer()); + SetLeaderActionToNothing(1); + } + else if (action == 53) { + item = sub_8044D90(GetLeader(), 0, 13); + if (!sub_8048A68(GetLeader(), item)) { + SetLeaderActionToNothing(1); + } + } + else if (action == 16) { + item = sub_8044D90(GetLeader(), 0, 14); + if (!sub_8048950(GetLeader(), item)) { + SetLeaderActionToNothing(1); + } + } + else if (action == 44) { + item = sub_8044D90(GetLeader(), 0, 15); + if (!sub_8048B9C(GetLeader(), item)) { + SetLeaderActionToNothing(1); + } + } + else if (action == 60) { + HandleSetItemAction(GetLeader(), TRUE); + SetLeaderActionToNothing(1); + sub_803E708(0x50, 0x4D); + sub_8052210(0); + break; + } + else if (action == 61) { + HandleUnsetItemAction(GetLeader(), TRUE); + SetLeaderActionToNothing(1); + sub_803E708(0x50, 0x4D); + sub_8052210(0); + break; + } + + if (GetLeaderActionId() != 0) + break; + } + else if (chosenOption == MAIN_MENU_TEAM) { + SetLeaderActionToNothing(1); + if (ShowDungeonTeamMenu(GetLeader())) { + r10 = -1; + } + + if (GetLeaderActionId() == ACTION_CHECK_SUMMARY) { + sub_8061A38(GetLeaderActionContainer(), FALSE); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == ACTION_TALK_MENU) { + sub_806752C(GetLeaderActionContainer()); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == 0x34) { + sub_8067768(GetLeaderActionContainer()); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == ACTION_CHANGE_TACTICS) { + ShowTacticsMenu(GetLeaderActionContainer()); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == ACTION_VIEW_IQ) { + sub_8061A38(GetLeaderActionContainer(), TRUE); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == ACTION_CHECK_MOVES) { + s32 i, count; + + sub_8062D8C(GetLeaderActionContainer()); + count = 0; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + Entity *teamMon = gDungeon->teamPokemon[i]; + if (EntityIsValid(teamMon)) { + if (i == GetLeaderActionContainer()->actionParameters[0].actionUseIndex) { + gTeamMenuChosenId = count; + if (GetLeaderActionId() != 0) { + sub_806A2BC(teamMon, 0); + } + break; + } + count++; + } + } + } + + if (GetLeaderActionId() != 0) + break; + } + else if (chosenOption == MAIN_MENU_MOVES) { + s32 i, currMonId, teamMonsCount, r9; + Entity *currEntity; + + currMonId = 0; + SetLeaderActionToNothing(1); + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + Entity *teamMon = gDungeon->teamPokemon[i]; + if (EntityIsValid(teamMon)) { + if (GetEntInfo(teamMon)->isTeamLeader) { + currMonId = i; + break; + } + } + } + + + while (1) { + SetLeaderActionToNothing(0); + LOOP_START_NO_CALL: // Actions 6 and 7 don't call SetLeaderActionToNothing + currEntity = NULL; + r9 = 0; + teamMonsCount = 0; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + Entity *teamMon = gDungeon->teamPokemon[i]; + if (sub_8071A8C(teamMon)) { + if (i == currMonId) { + r9 = teamMonsCount; + currEntity = teamMon; + } + teamMonsCount++; + } + } + if (currEntity == NULL) { + currEntity = GetLeader(); + } + + sub_806A2BC(currEntity, 0); + ChangeDungeonCameraPos(&currEntity->pos, 0, 1, 1); + GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; + SetLeaderActionToNothing(FALSE); + if (ShowDungeonMovesMenu(currEntity, 0, 1, r9, teamMonsCount)) { + r10 = -1; + } + + if (GetLeaderActionId() == ACTION_MOVES_MENU_NEXT_MON) { + s32 prevMonId = currMonId; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (++currMonId >= MAX_TEAM_MEMBERS) { + currMonId = 0; + } + currEntity = gDungeon->teamPokemon[currMonId]; + if (sub_8071A8C(currEntity)) + break; + } + GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; + if (prevMonId != currMonId) { + PlayDungeonCursorSE(0); + } + goto LOOP_START_NO_CALL; + } + else if (GetLeaderActionId() == ACTION_MOVES_MENU_PREV_MON) { + s32 prevMonId = currMonId; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (--currMonId < 0) { + currMonId = MAX_TEAM_MEMBERS - 1; + } + currEntity = gDungeon->teamPokemon[currMonId]; + if (sub_8071A8C(currEntity)) + break; + } + GetLeaderInfo()->action.actionParameters[0].actionUseIndex = currMonId; + if (prevMonId != currMonId) { + PlayDungeonCursorSE(0); + } + goto LOOP_START_NO_CALL; + } + else if (GetLeaderActionId() == ACTION_UNK1D) { + sub_80637E8(GetLeaderActionContainer()); + } + else if (GetLeaderActionId() == ACTION_SET_MOVE || GetLeaderActionId() == ACTION_UNSET_MOVE) { + sub_8063A70(GetLeaderActionContainer(), FALSE); + } + else if (GetLeaderActionId() == ACTION_UNK1F) { + sub_8063B54(GetLeaderActionContainer()); + } + else if (GetLeaderActionId() == ACTION_UNK20) { + sub_8063BB4(GetLeaderActionContainer()); + } + else if (GetLeaderActionId() == ACTION_UNK21) { + sub_8063CF0(GetLeaderActionContainer(), FALSE); + } + else { + break; + } + } + sub_806A2BC(GetLeader(), 0); + ChangeDungeonCameraPos(&GetLeader()->pos, 0, 1, 1); + if (GetLeaderActionId() != 0) + break; + } + else if (chosenOption == MAIN_MENU_GROUND) { + Entity *leader = GetLeader(); + const Tile *tile = GetTile(leader->pos.x, leader->pos.y); + Entity *tileObject = tile->object; + if (tileObject != NULL) { + if (GetEntityType(tileObject) == ENTITY_ITEM) { + u16 action; + + SetLeaderActionToNothing(1); + var_30.a0_8 = 0; + var_30.a0_16 = 1; + var_30.a0_24 = 1; + var_30.a0_32 = 1; + if (ShowDungeonItemsMenu(GetLeader(), &var_30)) { + // This actually doesn't do anything, it's just there to make the code match as the compiler does a `lsl r0, r0, #0x10, mov r0, r4` + ASM_MATCH_TRICK(leader); + } + if (sub_805FD3C(&var_30) && ShowDungeonItemsMenu(GetLeader(), &var_30)) { + SetLeaderActionToNothing(1); + } + + action = GetLeaderActionId(); + if (action == 0xC) { + sub_8044D90(GetLeader(), 0, 0x10)->flags |= ITEM_FLAG_UNPAID; + sub_8060D24(GetLeaderActionContainer()); + SetLeaderActionToNothing(1); + } + else if (action == 0x35) { + item = sub_8044D90(GetLeader(), 0, 0x11); + if (!sub_8048A68(GetLeader(), item)) { + SetLeaderActionToNothing(1); + } + } + else if (action == 0x10) { + item = sub_8044D90(GetLeader(), 0, 0x12); + if (!sub_8048950(GetLeader(), item)) { + SetLeaderActionToNothing(1); + } + } + else if (action == 0x2C) { + item = sub_8044D90(GetLeader(), 0, 0x13); + if (!sub_8048B9C(GetLeader(), item)) { + SetLeaderActionToNothing(1); + } + } + if (GetLeaderActionId() != 0) + break; + } + else if (GetEntityType(tileObject) == ENTITY_TRAP) { + SetLeaderActionToNothing(1); + sub_80643AC(GetLeader()); + if (GetLeaderActionId() != 0) + break; + } + } + else + { + if (tile->terrainType & TERRAIN_TYPE_STAIRS) { + SetLeaderActionToNothing(1); + ShowDungeonStairsMenu(GetLeader()); + if (GetLeaderActionId() != 0) + break; + } + else { + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], GetLeader(), 0); + DisplayDungeonMessage(0, gUnknown_80FDE18, 1); + } + } + r10 = -1; + } + else if (chosenOption == MAIN_MENU_OTHERS) { + ShowDungeonOthersMenu(); + if (gDungeon->unk4) + break; + if (GetLeaderActionId() != 0) + break; + r10 = -1; + } + + // B button + if (chosenOption < 0) + break; + + if (var_24 == 0) { + ResetRepeatTimers(); + ResetUnusedInputStruct(); + } + else { + sub_806A2BC(GetLeader(), 0); + break; + } + } + + sub_803EAF0(0, NULL); + ResetRepeatTimers(); + ResetUnusedInputStruct(); +} + +static void PrintOnMainMenu(bool8 printAll) +{ + s32 i, x, y, yLoop; + + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1A = 5; + gDungeonMenu.unk1C = 5; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 2; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk0 = 0; + gDungeonMenu.unk14.x = 0; + sub_801317C(&gDungeonMenu.unk28); + sub_80137B0(&gDungeonMenu, 0x38); + if (printAll) { + sub_803EAF0(7, NULL); + } + else { + sub_803EAF0(6, NULL); + } + + sub_80073B8(0); + if (ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) { + gUnknown_202749A[1] = 2; + gUnknown_202749A[2] = 2; + gUnknown_202749A[3] = 2; + gUnknown_202749A[4] = 7; + gUnknown_202749A[5] = 2; + } + else + { + gUnknown_202749A[1] = 7; + gUnknown_202749A[2] = 7; + gUnknown_202749A[3] = 7; + gUnknown_202749A[4] = 7; + gUnknown_202749A[5] = 7; + } + + y = GetMenuEntryYCoord(&gDungeonMenu, 0); + PrintStringOnWindow(8, y, gFieldMenuMovesPtr, 0, 0); + + y = GetMenuEntryYCoord(&gDungeonMenu, 1); + PrintStringOnWindow(8, y, gFieldMenuItemsPtr, 0, 0); + + y = GetMenuEntryYCoord(&gDungeonMenu, 2); + PrintStringOnWindow(8, y, gFieldMenuTeamPtr, 0, 0); + + y = GetMenuEntryYCoord(&gDungeonMenu, 3); + PrintStringOnWindow(8, y, gFieldMenuOthersPtr, 0, 0); + + y = GetMenuEntryYCoord(&gDungeonMenu, 4); + PrintStringOnWindow(8, y, gFieldMenuGroundPtr, 0, 0); + + sub_80073E0(0); + if (printAll) { + u32 hours, minutes, seconds; + EntityInfo *leaderInfo = GetEntInfo(GetLeader()); + const u8 *dungeonName = GetCurrentDungeonName(); + + x = (136 - sub_8008ED0(dungeonName)) / 2; + sub_80073B8(1); + PrintStringOnWindow(x, 2, dungeonName, 1, 0); + sub_80073E0(1); + sub_80073B8(2); + DeconstructPlayTime(gPlayTimeRef, &hours, &minutes, &seconds); + + gFormatArgs[0] = FixedPointToInt(leaderInfo->belly); + gFormatArgs[1] = FixedPointToInt(leaderInfo->maxBelly); + PrintFormattedStringOnWindow(0x73, 0, gUnknown_80F9174, 2, 0); + + gFormatArgs[0] = gTeamInventoryRef->teamMoney; + PrintFormattedStringOnWindow(0x73, 12, gUnknown_80F9190, 2, 0); + + GetWeatherName(gFormatBuffer_Monsters[0], GetApparentWeather(NULL)); + PrintFormattedStringOnWindow(0x73, 24, gUnknown_80F91A8, 2, 0); + + gFormatArgs[0] = hours; + gFormatArgs[1] = minutes; + gFormatArgs[2] = seconds; + PrintFormattedStringOnWindow(0x73, 36, gUnknown_80F91C8, 2, 0); + for (yLoop = 0, i = 0; i < MAX_TEAM_MEMBERS; i++) { + Entity *teamMon = gDungeon->teamPokemon[i]; + if (EntityIsValid(teamMon)) { + EntityInfo *monInfo = GetEntInfo(teamMon); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], teamMon, 0); + gFormatArgs[0] = monInfo->HP; + gFormatArgs[1] = monInfo->maxHPStat; + PrintFormattedStringOnWindow(4, yLoop, gUnknown_80F91E0, 2, 0); + yLoop += 12; + if (yLoop >= 12 * MAX_TEAM_MEMBERS) + break; + } + } + sub_80073E0(2); + } +} + +bool8 sub_805FBE8(u8 *a0) +{ + s32 r4; + sub_803EAF0(8, a0); + do + { + DungeonRunFrameActions(0xE); + DrawDialogueBoxString(); + r4 = sub_8016080(); + } while (r4 == 0); + CleanConfirmNameMenu(); + DungeonRunFrameActions(0xE); + sub_803EAF0(0, NULL); + if (r4 == 3 && *a0 != 0) + return TRUE; + + return FALSE; +} + +void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX) +{ + s32 i; + Windows windows = { + .id = { + [0] = WINDOW_DUMMY, + [1] = { + .type = WINDOW_TYPE_NORMAL, + .pos = {22, 4}, + .width = 6, + .height = 4, + .unk10 = 4, + }, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + windows.id[0] = *mainWindow; + windows.id[0].unk0 = 0x80; + + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1C = gDungeonSubMenuItemsCount; + gDungeonMenu.unk1A = gDungeonSubMenuItemsCount; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 0; + gDungeonMenu.unk0 = 1; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14 = gDungeonMenu.unk8; + + sub_801317C(&gDungeonMenu.unk28); + + windows.id[1].pos.x = subWindowX; + windows.id[1].width = 28 - subWindowX; + windows.id[1].height = windows.id[1].unk10 = sub_80095E4(gDungeonMenu.unk1C, 0); + DungeonShowWindows(&windows, FALSE); + sub_80137B0(&gDungeonMenu, windows.id[1].height * 8); + sub_80073B8(1); + + for (i = 0; i < gDungeonSubMenuItemsCount; i++) { + s32 colorId, y; + u8 text[20]; + + colorId = (CanSubMenuItemBeChosen(i) != FALSE) ? 7 : 2; + sprintfStatic(text, gUnknown_8106B50, colorId, GetDungeonSubMenuItemString(i)); + y = GetMenuEntryYCoord(&gDungeonMenu, i); + PrintStringOnWindow(8, y, text, 1, 0); + } + sub_80073E0(1); +} + +static bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0) +{ + u16 action = GetLeaderActionId(); + + a0->a0_8 = 0; + a0->a0_16 = 0; + a0->a0_24 = 0; + a0->a0_32 = 0; + if (action == 0xA) { + a0->a0_8 = 1; + a0->a0_32 = 1; + } + if (action == 0x3E) { + a0->a0_8 = 1; + a0->a0_16 = 0; + a0->a0_32 = 1; + } + return a0->a0_8; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 03fbfb149..18bb55d20 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -136,7 +136,7 @@ gUnknown_202EE3A: /* 202EE3A (sub_8060E38 - sub_8065DBC) */ gUnknown_202EE44: /* 202EE44 (sub_8044EC8 - sub_80647F0) */ .space 0x28 -gUnknown_202EE6C: /* 202EE6C (sub_8044F5C - sub_8067A80) */ +gDungeonSubMenuItemsCount: /* 202EE6C (sub_8044F5C - sub_8067A80) */ .space 0x4 gUnknown_202EE70: /* 202EE70 (sub_804513C - sub_80828E0) */ @@ -148,7 +148,8 @@ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */ .include "src/dungeon_generation.o" .include "src/dungeon_message.o" .include "src/dungeon_move.o" - .include "src/code_805D8C8_1.o" + .include "src/dungeon_main.o" + .include "src/code_805D8C8_2.o" gUnknown_202F268: /* 202F268 (sub_8062500) */ .space 0x8 diff --git a/sym_ewram_init.txt b/sym_ewram_init.txt index 39685f199..4881ca4e9 100644 --- a/sym_ewram_init.txt +++ b/sym_ewram_init.txt @@ -114,7 +114,8 @@ .include "src/dungeon_map_access.o" .include "src/dungeon_message.o" .include "src/dungeon_move.o" -.include "src/code_805D8C8_1.o" +.include "src/dungeon_main.o" +.include "src/code_805D8C8_2.o" .include "src/dungeon_ai_items.o" .include "src/code_807CD9C.o" .include "src/dungeon_leader.o" From ee1abc183664d9373acdcb493a8f64ff672d8df3 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 1 Mar 2025 23:49:41 +0100 Subject: [PATCH 09/31] file splits --- data/data_8106A4C.s | 59 +- data/data_8106A4C_0.s | 44 + include/dungeon_main.h | 10 +- include/dungeon_submenu.h | 8 + include/structs/str_dungeon.h | 4 +- ld_script.txt | 7 + src/code_803E724.c | 4 +- src/code_805D8C8_2.c | 2113 +------------------------------ src/code_805D8C8_3.c | 2253 +++++++++++++++++++++++++++++++++ src/code_806FDF4.c | 6 +- src/dungeon_main.c | 187 +-- src/dungeon_submenu.c | 69 + sym_ewram.txt | 1 + sym_ewram_init.txt | 2 +- 14 files changed, 2494 insertions(+), 2273 deletions(-) create mode 100644 data/data_8106A4C_0.s create mode 100644 include/dungeon_submenu.h create mode 100644 src/code_805D8C8_3.c create mode 100644 src/dungeon_submenu.c diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index 002a4b90d..ac925c300 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -1,67 +1,10 @@ .section .rodata -@ sub_8048E04 - sub_805FC30 - .align 2,0 - .string "pksdir0\0" - - - .global gUnknown_8106A4C -gUnknown_8106A4C: @ 8106A4C - .4byte 0 - - .global gUnknown_8106A50 -gUnknown_8106A50: @ 8106A50 - .4byte 1 - - .global gUnknown_8106A54 -gUnknown_8106A54: @ 8106A54 -.byte 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 -.byte 0x80, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00 -.byte 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 -.byte 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 - - .global gUnknown_8106A8C -gUnknown_8106A8C: @ 8106A8C -.byte 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 -.byte 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64 -.byte 0x69, 0x72, 0x30, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00, 0x70, 0x6b, 0x73, 0x64 -.byte 0x69, 0x72, 0x30, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 - - .global gUnknown_8106AC8 -gUnknown_8106AC8: @ 8106AC8 -.byte 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00 -.byte 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_8106AE8 -gUnknown_8106AE8: @ 8106AE8 -.byte 0x00, 0x00, 0x01, 0x00 -.byte 0x12, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x13, 0x02, 0x00, 0x00 -.byte 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -.byte 0x01, 0x00, 0xff, 0xff, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff -.byte 0x12, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x13, 0x02, 0x00, 0x00 -.byte 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00 -.byte 0xff, 0xff, 0x01, 0x00, 0x13, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64 -.byte 0x69, 0x72, 0x30, 0x00 - - .global gUnknown_8106B50 -gUnknown_8106B50: @ 8106B50 - .string "{COLOR}%c%s\0" - - @ CreateFieldItemMenu - sub_8062CA8 - .align 2,0 - .string "pksdir0\0" - .align 2,0 - .global gUnknown_8106B60 -gUnknown_8106B60: @ 8106B60 - .byte 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00 - .global gUnknown_8106B6C -gUnknown_8106B6C: @ 8106B6C -.byte 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x06, 0x00, 0x02, 0x00 -.byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 + .global gUnknown_8106B8C gUnknown_8106B8C: @ 8106B8C diff --git a/data/data_8106A4C_0.s b/data/data_8106A4C_0.s new file mode 100644 index 000000000..fba5034bd --- /dev/null +++ b/data/data_8106A4C_0.s @@ -0,0 +1,44 @@ + .section .rodata + +@ sub_8048E04 - sub_805FC30 + .align 2,0 + .string "pksdir0\0" + + + .global gUnknown_8106A4C +gUnknown_8106A4C: @ 8106A4C + .4byte 0 + + .global gUnknown_8106A50 +gUnknown_8106A50: @ 8106A50 + .4byte 1 + + .global gUnknown_8106A54 +gUnknown_8106A54: @ 8106A54 +.byte 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 +.byte 0x80, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00 +.byte 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00 + +.align 2,0 +.string "pksdir0\0" +.align 2,0 + +.align 2,0 +.string "pksdir0\0" +.align 2,0 + + .global gUnknown_8106A8C +gUnknown_8106A8C: @ 8106A8C +.byte 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 +.byte 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64 +.byte 0x69, 0x72, 0x30, 0x00 + +.align 2,0 +.string "pksdir0\0" +.align 2,0 + +.align 2,0 +.string "pksdir0\0" +.align 2,0 + + diff --git a/include/dungeon_main.h b/include/dungeon_main.h index 232533bdc..033a67d42 100644 --- a/include/dungeon_main.h +++ b/include/dungeon_main.h @@ -2,6 +2,14 @@ #define GUARD_DUNGEON_MAIN_H #include "structs/str_text.h" +#include "structs/dungeon_entity.h" + +struct UnkMenuBitsStruct { + u8 a0_8; + u8 a0_16; + u8 a0_24; + u8 a0_32; +}; void DungeonHandlePlayerInput(void); void sub_805E804(void); @@ -10,7 +18,7 @@ void sub_805EFB4(Entity *a0, bool8 a1); void sub_805F02C(void); ActionContainer *GetLeaderActionContainer(void); u16 GetLeaderActionId(void); -bool8 sub_805FBE8(u8 *a0); +bool8 DungeonGiveNameToRecruitedMon(u8 *a0); void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX); #endif diff --git a/include/dungeon_submenu.h b/include/dungeon_submenu.h new file mode 100644 index 000000000..bdabc762f --- /dev/null +++ b/include/dungeon_submenu.h @@ -0,0 +1,8 @@ +#ifndef GUARD_DUNGEON_SUBMENU_H +#define GUARD_DUNGEON_SUBMENU_H + +#include "structs/str_text.h" + +void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX); + +#endif diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index c5e73164e..a06ec3155 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -98,8 +98,8 @@ typedef struct UnkDungeonGlobal_unk181E8_sub u8 unk18218; // x30 u8 unk18219; // x31 u8 unk1821A; // x32 - u8 unk1821B; // x33 - u8 unk1821C; // x34 + u8 rotateModeDirection; // x33 + u8 prevRotateModeDirection; // x34 u8 fill1821D; // x35 s16 unk36; // x36 s16 unk38; // x38 diff --git a/ld_script.txt b/ld_script.txt index e3b4ce6b9..948551853 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -227,7 +227,9 @@ SECTIONS { src/status_actions.o(.text); src/move_checks.o(.text); src/dungeon_main.o(.text); + src/dungeon_submenu.o(.text); src/code_805D8C8_2.o(.text); + src/code_805D8C8_3.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); src/code_805D8C8.o(.text); @@ -541,6 +543,11 @@ SECTIONS { data/data_80F59C8.o(.rodata); src/dungeon_message.o(.rodata); src/dungeon_move.o(.rodata); + data/data_8106A4C_0.o(.rodata); + src/dungeon_main.o(.rodata); + src/dungeon_submenu.o(.rodata); + src/code_805D8C8_2.o(.rodata); + src/code_805D8C8_3.o(.rodata); data/data_8106A4C.o(.rodata); src/code_8066D04.o(.rodata); data/data_8106A4C_2.o(.rodata); diff --git a/src/code_803E724.c b/src/code_803E724.c index 87a51c1f6..5d47fb436 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -698,8 +698,8 @@ void sub_803F27C(bool8 a0) strPtr->priority = 3; strPtr->unk1821A = 0; strPtr->unk18212 = 0; - strPtr->unk1821B = 0; - strPtr->unk1821C = 0; + strPtr->rotateModeDirection = 0; + strPtr->prevRotateModeDirection = 0; strPtr->unk18214 = 0; strPtr->unk18215 = 1; sub_803F38C(); diff --git a/src/code_805D8C8_2.c b/src/code_805D8C8_2.c index e2648ba2b..133e5f7fc 100644 --- a/src/code_805D8C8_2.c +++ b/src/code_805D8C8_2.c @@ -1,4 +1,5 @@ #include "global.h" +#include "globaldata.h" #include "structs/str_dungeon.h" #include "number_util.h" #include "input.h" @@ -50,13 +51,6 @@ #include "structs/struct_sub80095e4.h" #include "structs/str_text.h" -struct UnkMenuBitsStruct { - u8 a0_8; - u8 a0_16; - u8 a0_24; - u8 a0_32; -}; - extern void HandleSetItemAction(Entity *,bool8); extern void HandleUnsetItemAction(Entity *,bool8); extern bool8 sub_8048A68(Entity *param_1,Item *item); @@ -100,7 +94,6 @@ s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); void PrintOnMainMenu(bool8 printAll); bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); -bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0); void sub_8060D24(UNUSED ActionContainer *a0); bool8 ShowDungeonTeamMenu(Entity *a0); void sub_8062D8C(ActionContainer *a0); @@ -187,12 +180,29 @@ static EWRAM_DATA s32 sUnknown_202F240 = 0; static UNUSED EWRAM_DATA u8 sUnused2[4] = {0}; static EWRAM_DATA s16 sUnknown_202F248[8] = {0}; static EWRAM_DATA s32 sUnknown_202F258 = 0; -static UNUSED EWRAM_DATA u8 sUnused3[4] = {0}; -EWRAM_DATA s32 gTeamMenuChosenId = 0; -static UNUSED EWRAM_DATA u8 sUnused4[4] = {0}; static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); +bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0) +{ + u16 action = GetLeaderActionId(); + + a0->a0_8 = 0; + a0->a0_16 = 0; + a0->a0_24 = 0; + a0->a0_32 = 0; + if (action == 0xA) { + a0->a0_8 = 1; + a0->a0_32 = 1; + } + if (action == 0x3E) { + a0->a0_8 = 1; + a0->a0_16 = 0; + a0->a0_32 = 1; + } + return a0->a0_8; +} + bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) { s32 i, i_r6; @@ -465,19 +475,25 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) return r9; } -extern const struct Window gUnknown_8106B6C; -extern const struct unkStruct_8090F58 gUnknown_8106B60; +static const struct unkStruct_8090F58 gUnknown_8106B60 = {1, 1, 0, 80, 1}; -static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *windows, WindowHeader *a5) +static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, bool8 a3, Windows *windows, WindowHeader *a5) { s32 i, x, y; s32 r10; UnkTextStruct1 *txtStrPtr; - Window var_94; + Window whichWindow = { + .type = WINDOW_TYPE_NORMAL, + .pos = {2, 4}, + .width = 6, + .height = 2, + .unk10 = 2, + .unk12 = 0, + .unk14 = NULL, + }; u8 txtBuff[80]; EntityInfo *a1Info; - var_94 = gUnknown_8106B6C; a1Info = GetEntInfo(a1); r10 = sub_8060800(a5, a0); gDungeonMenu.menuIndex = sUnknown_202F240; @@ -516,10 +532,10 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind break; } - if (a2) { + if (showWhichWindow) { gDungeonMenu.unkC += 0x40; windows->id[0].pos.x = 0xA; - windows->id[1] = var_94; + windows->id[1] = whichWindow; } else { windows->id[0].pos.x = 2; @@ -612,7 +628,7 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Wind gDungeonMenu.menuIndex = 0; } sub_80073E0(0); - if (a2) { + if (showWhichWindow) { sub_80073B8(1); PrintFormattedStringOnWindow(4, 2, gWhichTextPtr1, 1, 0); sub_80073E0(1); @@ -928,2064 +944,5 @@ s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4) return count; } -extern WindowHeader gUnknown_202F270; -struct UnkFieldTeamMenuStruct -{ - s32 unk0; - s32 unk4[MAX_TEAM_MEMBERS]; - u8 unk14[MAX_TEAM_MEMBERS]; -}; -void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *a1, bool8 a2); -void sub_806145C(struct UnkFieldTeamMenuStruct *a0); -void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); - -extern u8 gUnknown_202EE39; - -bool8 ShowDungeonTeamMenu(Entity *a0) -{ - s32 i; - bool32 r10, ret; - struct UnkFieldTeamMenuStruct sp; - Windows windows = { - .id = { - [0] = { - .type = WINDOW_TYPE_WITH_HEADER, - .pos = {2, 2}, - .width = 14, - .height = 16, - .unk10 = 16, - .unk12 = 0, - .unk14 = &gUnknown_202F270, - }, - [1] = WINDOW_DUMMY, - [2] = WINDOW_DUMMY, - [3] = WINDOW_DUMMY, - } - }; - - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - Entity *teamMon = gDungeon->teamPokemon[i]; - if (EntityIsValid(teamMon)) { - GetEntInfo(teamMon)->unk157 = TRUE; - } - } - - if (!gDungeon->unk644.unk17) { - windows.id[0].type = WINDOW_TYPE_NORMAL; - windows.id[0].pos.y++; - } - - while (1) { - s32 id; - bool32 r4; - - ret = FALSE; - PrintOnDungeonTeamMenu(&sp, &windows, TRUE); - r10 = FALSE; - while (1) { - s32 id = sp.unk4[gDungeonMenu.menuIndex]; - if (id >= 0) { - Entity *teamMon = gDungeon->teamPokemon[id]; - sub_806A2BC(teamMon, 0); - ChangeDungeonCameraPos(&teamMon->pos, 0, 1, 1); - } - - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.pressed & START_BUTTON) { - if (sp.unk14[gDungeonMenu.menuIndex] != 0) { - PlayDungeonStartButtonSE(); - r10 = TRUE; - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) - { - if (sp.unk14[gDungeonMenu.menuIndex] != 0) { - PlayDungeonConfirmationSE(); - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - ret = TRUE; - break; - } - } - - id = sp.unk4[gDungeonMenu.menuIndex]; - if (id >= 0) { - Entity *teamMon = gDungeon->teamPokemon[id]; - sub_806A2BC(teamMon, 0); - ChangeDungeonCameraPos(&teamMon->pos, 0, 1, 1); - } - - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - sub_804AA60(); - if (ret) { - break; - } - - sp.unk0 = gDungeonMenu.menuIndex; - gTeamMenuChosenId = gDungeonMenu.menuIndex; - sub_806145C(&sp); - if (r10) { - EntityInfo *info = GetEntInfo(a0); - SetMonsterActionFields(&info->action, 0x1B); - info->action.actionParameters[0].actionUseIndex = sp.unk4[sp.unk0]; - ret = FALSE; - break; - } - - CreateDungeonMenuSubWindow(&windows.id[0], 0x12); - while (1) { - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { - sub_80615B4(&GetEntInfo(a0)->action, &sp); - PlayDungeonConfirmationSE(); - r4 = FALSE; - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - r4 = TRUE; - break; - } - } - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - if (r4 != TRUE) { - ret = FALSE; - break; - } - } - - if (ret) { - sub_806A2BC(GetLeader(), 0); - } - sub_803EAF0(0, NULL); - return ret; -} - -bool32 sub_8069D18(DungeonPos *a0, Entity *a1); - -extern const u8 gTeamFormat[]; -extern const u8 gHeartRedTiny[]; -extern const u8 gHeartRedSmall[]; -extern const u8 gHeartRedMedium[]; -extern const u8 gHeartRedLarge[]; -extern const u8 gHeartYellowTiny[]; -extern const u8 gHeartYellowSmall[]; -extern const u8 gHeartYellowMedium[]; -extern const u8 gHeartYellowLarge[]; -extern const u8 gUnknown_8106BD4[]; -extern const u8 gUnknown_8106BE0[]; -extern const u8 gUnknown_8106BEC[]; -extern const u8 gUnknown_8106BF4[]; - -extern void sub_8070968(u8 *buffer, EntityInfo *entityInfo, s32 colorNum); - -void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2) -{ - s32 r0; - DungeonPos pos; - s32 i; - - s32 count = 0; - bool8 r10 = (windows->id[0].type == WINDOW_TYPE_WITH_HEADER); - - sub_8069D18(&pos, GetLeader()); - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - EntityInfo *monInfo; - Entity *teamMon = gDungeon->teamPokemon[i]; - if (EntityIsValid(teamMon)) { - a0->unk4[count] = i; - monInfo = GetEntInfo(teamMon); - a0->unk14[count] = monInfo->unk157; - if (pos.x == teamMon->pos.x && pos.y == teamMon->pos.y && gTeamMenuChosenId < 0) { - gTeamMenuChosenId = count; - } - count++; - } - } - - if (gTeamMenuChosenId >= count) { - gTeamMenuChosenId = count - 1; - } - if (gTeamMenuChosenId < 0) { - gTeamMenuChosenId = 0; - } - - for (i = count; i < MAX_TEAM_MEMBERS; i++) { - a0->unk4[i] = -1; - a0->unk14[i] = 0; - } - - gUnknown_202F270.f0 = 1; - gUnknown_202F270.f1 = 0; - gUnknown_202F270.f3 = 0; - gDungeonMenu.menuIndex = gTeamMenuChosenId; - gDungeonMenu.unk1A = count; - gDungeonMenu.unk1C = count; - gDungeonMenu.unk1E = 0; - gDungeonMenu.unk20 = 0; - gDungeonMenu.unk4 = 0; - gDungeonMenu.firstEntryY = (r10 != FALSE) * 16; - gDungeonMenu.unkC = 0; - gDungeonMenu.unkE = 0; - gDungeonMenu.unk14.x = 0; - gDungeonMenu.unk0 = 0; - sub_801317C(&gDungeonMenu.unk28); - r0 = sub_80095E4(count, 0); - if (r10) { - r0 += 2; - } - windows->id[0].unk10 = r0; - windows->id[0].height = r0; - gUnknown_202F270.f2 = 8; - if (a2) { - windows->id[1] = windows->id[3]; - } - - DungeonShowWindows(windows, 1); - sub_80137B0(&gDungeonMenu, 0); - sub_80073B8(0); - if (r10) { - PrintFormattedStringOnWindow(0xC, 0, gTeamFormat, 0, 0); - } - - // Print hp/max hp - for (i = 0; i < count; i++) { - s32 y; - s32 id = a0->unk4[i]; - if (id >= 0) { - Entity *teamMon = gDungeon->teamPokemon[id]; - if (EntityIsValid(teamMon)) - { - EntityInfo *monInfo = GetEntInfo(teamMon); - s32 color = (a0->unk14[i] != 0) ? 6 : 2; - - sub_8070968(gFormatBuffer_Monsters[0], monInfo, color); - if (sub_806A538(gRecruitedPokemonRef->pokemon2[monInfo->teamIndex].unkA)) { - if (monInfo->HP <= monInfo->maxHPStat / 4) { - strcpy(gFormatBuffer_Monsters[1], gHeartRedTiny); - } - else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 2) { - strcpy(gFormatBuffer_Monsters[1], gHeartRedSmall); - } - else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 3) { - strcpy(gFormatBuffer_Monsters[1], gHeartRedMedium); - } - else { - strcpy(gFormatBuffer_Monsters[1], gHeartRedLarge); - } - } - else { - if (monInfo->HP <= monInfo->maxHPStat / 4) { - strcpy(gFormatBuffer_Monsters[1], gHeartYellowTiny); - } - else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 2) { - strcpy(gFormatBuffer_Monsters[1], gHeartYellowSmall); - } - else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 3) { - strcpy(gFormatBuffer_Monsters[1], gHeartYellowMedium); - } - else { - strcpy(gFormatBuffer_Monsters[1], gHeartYellowLarge); - } - } - - gFormatArgs[0] = monInfo->HP; - gFormatArgs[1] = monInfo->maxHPStat; - y = GetMenuEntryYCoord(&gDungeonMenu, i); - if (monInfo->isTeamLeader) { - PrintFormattedStringOnWindow(9, y, gUnknown_8106BD4, 0, 0); - } - else { - PrintFormattedStringOnWindow(9, y, gUnknown_8106BE0, 0, 0); - } - } - } - } - - sub_80073E0(0); -} - -extern bool8 CanLeaderSwitch(u8 dungeon); - -void sub_806145C(struct UnkFieldTeamMenuStruct *a0) -{ - Entity *teamMon; - EntityInfo *monInfo; - - gDungeonSubMenuItemsCount = 0; - teamMon = gDungeon->teamPokemon[a0->unk4[gDungeonMenu.menuIndex]]; - monInfo = GetEntInfo(teamMon); - sub_8044F5C(0x1B, 0); - sub_8044F5C(0x19, 0); - if (!monInfo->isTeamLeader) { - if (!gDungeon->unk644.unk19 && (monInfo->joinedAt.id != DUNGEON_JOIN_LOCATION_PARTNER || gDungeon->unk644.unk18)) { - sub_8044F5C(0x34, 0); - } - sub_8044F5C(0x1C, 0); - } - sub_8044F5C(0x30, 0); - if (!monInfo->isTeamLeader) { - sub_8044F5C(0x1A, 0); - } - if (!monInfo->isTeamLeader && gDungeon->unk644.unk18 && CanLeaderSwitch(gDungeon->unk644.dungeonLocation.id)) { - bool32 r5; - - sub_8044F5C(0x3B, 0); - r5 = TRUE; - if (monInfo->teamIndex >= MAX_TEAM_MEMBERS) { - r5 = FALSE; - } - else { - PokemonStruct2 *mon = &gRecruitedPokemonRef->pokemon2[monInfo->teamIndex]; - if (sub_806A538(mon->unkA)) { - r5 = FALSE; - } - } - - if (CheckVariousStatuses2(teamMon, FALSE)) { - r5 = FALSE; - } - if (!r5) { - sub_8044FF0(0x3B); - } - } - - if (IsExperienceLocked(monInfo->joinedAt.id)) { - sub_8044FF0(0x19); - sub_8044FF0(0x3B); - sub_8044FF0(0x1A); - sub_8044FF0(0x30); - sub_8044FF0(0x34); - } - - sub_8045064(); -} - -void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1) -{ - SetMonsterActionFields(a0, gUnknown_202EE44[gDungeonMenu.menuIndex].unk0); - a0->actionParameters[0].actionUseIndex = a1->unk4[a1->unk0]; -} - -void PrintMonTactics(s32 a0, u8 *tacticIds, EntityInfo *mon, s32 windowId); -void sub_80623B0(void); -void sub_8062D68(void); -void sub_8062230(void); -void sub_8062748(u8 a0); - -void ShowTacticsMenu(ActionContainer *a0) -{ - Windows windows = { - .id = { - [0] = { - .type = WINDOW_TYPE_WITH_HEADER, - .pos = {2, 2}, - .width = 18, - .height = 14, - .unk10 = 18, - .unk12 = 2, - .unk14 = &gUnknown_202F270, - }, - [1] = WINDOW_DUMMY, - [2] = WINDOW_DUMMY, - [3] = WINDOW_DUMMY, - } - }; - EntityInfo *monInfo; - u8 tacticIds[NUM_TACTICS]; - s32 scrollFirstId; - s32 menuIndex; - Entity *teamMon; - - teamMon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; - monInfo = GetEntInfo(teamMon); - menuIndex = 0; - scrollFirstId = 0; - while (1) { - s32 i; - bool32 addCursor = TRUE; - bool32 loopBreak = FALSE; - - gUnknown_202F270.f0 = 1; - gUnknown_202F270.f1 = 0; - gUnknown_202F270.f2 = 10; - gUnknown_202F270.f3 = 0; - DungeonShowWindows(&windows, 1); - PrintMonTactics(scrollFirstId, tacticIds, monInfo, 0); - for (i = 0; i < 8; i++) { - if (tacticIds[i] == TACTIC_UNUSED) - break; - } - gDungeonMenu.unk1A = i; - gDungeonMenu.unk1C = 8; - gDungeonMenu.unk1E = 0; - gDungeonMenu.unk20 = 0; - gDungeonMenu.unk4 = 0; - gDungeonMenu.firstEntryY = 16; - gDungeonMenu.unkC = 0; - gDungeonMenu.unkE = 0; - gDungeonMenu.unk14.x = 0; - gDungeonMenu.unk0 = 0; - sub_801317C(&gDungeonMenu.unk28); - sub_80137B0(&gDungeonMenu, 0); - gDungeonMenu.menuIndex = menuIndex; - while (1) { - s32 i; - - AddMenuCursorSprite(&gDungeonMenu); - if (tacticIds[8] != TACTIC_UNUSED) { - sub_80623B0(); - } - if (scrollFirstId != 0) { - sub_8062230(); - } - DungeonRunFrameActions(0x3D); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - if (gDungeonMenu.menuIndex == 7) { - if (tacticIds[8] != TACTIC_UNUSED) { - for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); - DungeonRunFrameActions(0x3D); - } - scrollFirstId++; - } - menuIndex = 7; - break; - } - MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - if (gDungeonMenu.menuIndex == 0) { - if (scrollFirstId != 0) { - for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); - DungeonRunFrameActions(0x3D); - } - scrollFirstId--; - } - menuIndex = 0; - break; - } - MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); - } - if (gRealInputs.pressed & START_BUTTON) { - u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; - menuIndex = gDungeonMenu.menuIndex; - PlayDungeonStartButtonSE(); - sub_8062748(tacticId); - loopBreak = FALSE; - break; - } - if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - bool32 changed; - - u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; - menuIndex = gDungeonMenu.menuIndex; - sub_8062D68(); - PlayDungeonConfirmationSE(); - gDungeonSubMenuItemsCount = 0; - sub_8044F5C(0x2F, 0); - sub_8044F5C(0xC, 0); - if (CheckVariousStatuses2(teamMon, TRUE)) { - sub_8044FF0(0x2F); - } - CreateDungeonMenuSubWindow(&windows.id[0], 0x16); - while (1) { - changed = FALSE; - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x3D); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { - changed = TRUE; - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - changed = FALSE; - break; - } - } - if (changed) { - PlayDungeonConfirmationSE(); - if (gDungeonMenu.menuIndex == 0) { - PlaySoundEffect(0x133); - monInfo->tactic = tacticId; - monInfo->aiTarget.aiObjective = 6; - monInfo->aiTarget.aiTarget = NULL; - monInfo->aiTarget.unkC = 0; - monInfo->aiTarget.aiTargetSpawnGenID = 0; - if (!monInfo->isTeamLeader) { - AIMovement(teamMon, TRUE); - } - } - else { - sub_8062748(tacticId); - addCursor = FALSE; - } - } - loopBreak = FALSE; - break; - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - loopBreak = TRUE; - break; - } - } - - if (addCursor) { - AddMenuCursorSprite(&gDungeonMenu); - } - DungeonRunFrameActions(0x3D); - if (loopBreak) - break; - } - sub_803EAF0(0, NULL); -} - -extern void GetAvailTacticsforLvl(u8 *tacticsBuffer, s32 pokeLevel); - -void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId) -{ - u8 tacticsBuffer[NUM_TACTICS]; - u32 tactic; - s32 y, i, j; - - firstId--; - sub_80073B8(windowId); - PrintStringOnWindow(0x10, 0, gUnknown_80FE954, windowId, 0); - y = 0x14; - for (j = 0; j < 9; j++) { - tacticIds[j] = TACTIC_UNUSED; - } - GetAvailTacticsforLvl(tacticsBuffer, GetLeaderInfo()->level); - for (i = -1; i < 10; i++, y += 12, firstId++) { - if (firstId < 0) - continue; - if (firstId >= NUM_TACTICS) - continue; - - tactic = tacticsBuffer[firstId]; - if (i >= 0 && i < 9) { - tacticIds[i] = tactic; - } - if (tactic == TACTIC_UNUSED) - break; - - CopyTacticsNameToBuffer(gFormatBuffer_Monsters[0], tactic); - if (mon->tactic == tactic) { - PrintFormattedStringOnWindow(0x10, y, gUnknown_8106BEC, windowId, 0); - } - else { - PrintFormattedStringOnWindow(0x10, y, gUnknown_8106BF4, windowId, 0); - } - } - - sub_80073E0(windowId); -} - -EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better file and figure out the array count. Apparently it's only written to. - -extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target); -extern u32 sub_8014140(s32 a0, const void *a1); -void sub_806285C(s32 a0); -void sub_806262C(u8 iqSkillId); - -extern const u8 gUnknown_8106B8C[]; - -void sub_8061A38(ActionContainer *a0, bool8 a1) -{ - s32 spArr[6]; - struct unkStruct_808FF20 unkMonStruct; - struct UnkInfoTabStruct unkInfoTabStruct; - Windows windows = { - .id = { - [0] = { - .type = WINDOW_TYPE_WITH_HEADER, - .pos = {2, 2}, - .width = 18, - .height = 14, - .unk10 = 18, - .unk12 = 2, - .unk14 = &gUnknown_202F270, - }, - [1] = WINDOW_DUMMY, - [2] = WINDOW_DUMMY, - [3] = WINDOW_DUMMY, - } - }; - s32 r8; - Entity *entity; - s32 var_3C; - s32 var_38; - EntityInfo *entityInfo; - - var_3C = 0; - r8 = 0; - entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; - entityInfo = GetEntInfo(entity); - - if (IsExperienceLocked(entityInfo->joinedAt.id)) { - spArr[0] = 1; - spArr[1] = 0; - spArr[2] = 0; - spArr[3] = 0; - spArr[4] = 0; - spArr[5] = 0; - var_38 = 1; - } - else if (a1) { - spArr[0] = 4; - spArr[1] = 0; - spArr[2] = 0; - spArr[3] = 0; - spArr[4] = 0; - spArr[5] = 0; - var_38 = 1; - } - else { - spArr[0] = 2; - spArr[1] = 1; - spArr[2] = 3; - spArr[3] = 5; - spArr[4] = 0; - spArr[5] = 0; - var_38 = 4; - } - - unkMonStruct.unk40 = 0; - unkMonStruct.unk56 = 0; - gDungeonMenu.menuIndex = 0; - - while (1) { - bool8 loopBreak = FALSE; - s32 var_30 = 0; - s32 var_2C = 0; - s32 var_28 = 1; - UnkTextStruct1 *unkTxtStr1Ptr = &gUnknown_2027370[0]; - - gUnknown_202F270.f0 = var_38; - gUnknown_202F270.f1 = var_3C; - gUnknown_202F270.f2 = 10; - gUnknown_202F270.f3 = 0; - DungeonShowWindows(&windows, TRUE); - sub_8069844(&unkMonStruct, entity); - CreatePokemonInfoTabScreen(spArr[var_3C], var_3C, &unkMonStruct, &unkInfoTabStruct, 0); - gDungeonMenu.unk1E = var_3C; - gDungeonMenu.unk20 = var_38; - gDungeonMenu.unkC = (unkTxtStr1Ptr->unk0 + 15) * 8; - gDungeonMenu.unkE = ((unkTxtStr1Ptr->unk2 + 1) * 8) - 2; - gDungeonMenu.unk14.x = 0; - gDungeonMenu.unk4 = 0; - gDungeonMenu.firstEntryY = 16; - gDungeonMenu.unk0 = 0; - sub_801317C(&gDungeonMenu.unk28); - gDungeonMenu.menuIndex = 0; - gDungeonMenu.unk1A = 0; - gDungeonMenu.unk1C = 0; - - if (spArr[var_3C] == 1) { - s32 i; - - for (i = 0; i < 8; i++) { - if (unkInfoTabStruct.unkC[i] == 0) { - break; - } - } - - if (i != 0) { - var_2C = 1; - gDungeonMenu.unk1A = i; - gDungeonMenu.unk1C = 8; - sub_80137B0(&gDungeonMenu, 0); - } - gDungeonMenu.menuIndex = r8; - } - else if (spArr[var_3C] == 4) { - s32 i; - - for (i = 0; i < 8; i++) { - if (unkInfoTabStruct.unk0[i] == 0) { - break; - } - } - - if (i != 0) { - var_30 = 1; - gDungeonMenu.unk1A = i; - gDungeonMenu.unk1C = 8; - sub_80137B0(&gDungeonMenu, 0); - } - gDungeonMenu.menuIndex = r8; - } - - while (1) { - s32 unkVar; - bool8 r5, r6; - - AddMenuCursorSprite(&gDungeonMenu); - unkVar = sub_8014140(0, gUnknown_8106B8C); - r5 = FALSE; - r6 = FALSE; - if (var_30) { - if (unkInfoTabStruct.unk0[8] != 0) { - r5 = TRUE; - sub_80623B0(); - } - if (unkMonStruct.unk40 != 0) { - r6 = TRUE; - sub_8062230(); - } - } - if (var_2C) { - if (unkInfoTabStruct.unkC[8] != 0) { - r5 = TRUE; - sub_80623B0(); - } - if (unkMonStruct.unk56 != 0) { - r6 = TRUE; - sub_8062230(); - } - } - - DungeonRunFrameActions(0x1C); - if (gUnknown_202F270.f0 > 1 && !sub_80048C8()) { - if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { - PlayDungeonCursorSE(0); - var_3C++; - if (spArr[var_3C] == 0) { - var_3C = 0; - } - break; - } - if ((gRealInputs.pressed & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { - PlayDungeonCursorSE(0); - var_3C--; - if (var_3C == -1) { - var_3C = 5; - while (spArr[var_3C] == 0) { - var_3C--; - } - } - break; - } - } - - if (var_2C) { - if (unkVar == 2 && r5) { - PlayDungeonCursorSE(0); - if (unkInfoTabStruct.unkC[8] != 0) { - s32 i; - for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); - DungeonRunFrameActions(28); - } - unkMonStruct.unk56++; - } - r8 = 7; - break; - } - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(0); - if (gDungeonMenu.menuIndex == 7) { - if (unkInfoTabStruct.unkC[8] != 0) { - s32 i; - for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); - DungeonRunFrameActions(28); - } - unkMonStruct.unk56++; - } - r8 = 7; - break; - } - else { - MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); - } - } - - if (unkVar == 1 && r6) { - if (unkMonStruct.unk56 != 0) { - s32 i; - for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); - DungeonRunFrameActions(28); - } - unkMonStruct.unk56--; - } - r8 = 0; - break; - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - if (gDungeonMenu.menuIndex == 0) { - if (unkMonStruct.unk56 != 0) { - s32 i; - for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); - DungeonRunFrameActions(28); - } - unkMonStruct.unk56--; - } - r8 = 0; - break; - } - else { - MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); - } - } - } - else if (var_30) { - if (unkVar == 2 && r5) { - if (unkInfoTabStruct.unk0[8] != 0) { - s32 i; - for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); - DungeonRunFrameActions(28); - } - unkMonStruct.unk40++; - } - r8 = 7; - break; - } - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - if (gDungeonMenu.menuIndex == 7) { - if (unkInfoTabStruct.unk0[8] != 0) { - s32 i; - for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); - DungeonRunFrameActions(28); - } - unkMonStruct.unk40++; - } - r8 = 7; - break; - } - else { - MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); - } - } - - if (unkVar == 1 && r6) { - if (unkMonStruct.unk40 != 0) { - s32 i; - for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); - DungeonRunFrameActions(28); - } - unkMonStruct.unk40--; - } - r8 = 0; - break; - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - if (gDungeonMenu.menuIndex == 0) { - if (unkMonStruct.unk40 != 0) { - s32 i; - for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); - DungeonRunFrameActions(28); - } - unkMonStruct.unk40--; - } - r8 = 0; - break; - } - else { - MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); - } - } - } - - if (sub_80048C8()) - continue; - - if (gRealInputs.pressed & START_BUTTON) { - if (var_2C) { - s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; - - r8 = gDungeonMenu.menuIndex; - PlayDungeonStartButtonSE(); - sub_806285C(var); - var_28 = 0; - loopBreak = FALSE; - break; - } - else if (var_30) { - s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; - - r8 = gDungeonMenu.menuIndex; - PlayDungeonStartButtonSE(); - sub_806262C(var); - var_28 = 0; - loopBreak = FALSE; - break; - } - } - - if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (var_2C) { - s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; - - r8 = gDungeonMenu.menuIndex; - sub_8062D68(); - gDungeonSubMenuItemsCount = 0; - PlayDungeonConfirmationSE(); - sub_8044F5C(0xC, 0); - CreateDungeonMenuSubWindow(&windows.id[0], 0x16); - while (1) { - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1C); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - - if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - PlayDungeonConfirmationSE(); - sub_806285C(var); - var_28 = 0; - loopBreak = FALSE; - break; - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - loopBreak = FALSE; - break; - } - } - } - else if (var_30) { - bool8 aPress = FALSE; - s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; - - r8 = gDungeonMenu.menuIndex; - sub_8062D68(); - gDungeonSubMenuItemsCount = var_2C; - PlayDungeonConfirmationSE(); - sub_8044F5C(0x28, 0); - sub_8044F5C(0xC, 0); - if (CheckVariousStatuses2(entity, TRUE)) { - sub_8044FF0(0x28); - } - CreateDungeonMenuSubWindow(&windows.id[0], 0x16); - while (1) { - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1C); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - - if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { - PlayDungeonConfirmationSE(); - aPress = TRUE; - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - loopBreak = FALSE; - aPress = FALSE; - break; - } - } - - if (aPress) { - if (gDungeonMenu.menuIndex == 0) { - PlaySoundEffect(0x133); - ToggleIQSkill(&entityInfo->IQSkillMenuFlags, var); - } - else { - sub_806262C(var); - var_28 = 0; - } - loopBreak = FALSE; - break; - } - } - else { - PlayDungeonConfirmationSE(); - loopBreak = TRUE; - } - break; - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - loopBreak = TRUE; - break; - } - } - - if (var_28) { - if (var_30 != 0 || var_2C != 0) { - AddMenuCursorSprite(&gDungeonMenu); - } - DungeonRunFrameActions(0x1C); - } - - if (loopBreak) { - break; - } - } - - sub_803EAF0(0, NULL); - LoadIQSkills(entity); -} - -extern s32 gUnknown_202EDCC; - -// The same as sub_8068344 -void sub_8062230(void) -{ - if ((gUnknown_202EDCC & 8) != 0) { - UnkTextStruct1 *txtStrPtr = &gUnknown_2027370[0]; - SpriteOAM sprite = {0}; - - SpriteSetAffine1(&sprite, 0); - SpriteSetAffine2(&sprite, 0); - SpriteSetObjMode(&sprite, 0); - SpriteSetMosaic(&sprite, 0); - SpriteSetBpp(&sprite, 0); - SpriteSetShape(&sprite, 1); - SpriteSetMatrixNum(&sprite, 16); - SpriteSetSize(&sprite, 0); - SpriteSetTileNum(&sprite, 0x3F0); - SpriteSetPriority(&sprite, 0); - SpriteSetPalNum(&sprite, 15); - SpriteSetY(&sprite, (txtStrPtr->unk2 * 8) + 0x8); - SpriteSetX(&sprite, (txtStrPtr->unk0 * 8) + 0x40); - - AddSprite(&sprite, 0x100, NULL, NULL); - } -} - -// The same as sub_80684C4 -void sub_80623B0(void) -{ - if ((gUnknown_202EDCC & 8) != 0) { - UnkTextStruct1 *ptr = &gUnknown_2027370[0]; - SpriteOAM sprite = {0}; - - SpriteSetAffine1(&sprite, 0); - SpriteSetAffine2(&sprite, 0); - SpriteSetObjMode(&sprite, 0); - SpriteSetMosaic(&sprite, 0); - SpriteSetBpp(&sprite, 0); - SpriteSetShape(&sprite, 1); - SpriteSetMatrixNum(&sprite, 0); - SpriteSetSize(&sprite, 0); - SpriteSetTileNum(&sprite, 0x3F0); - SpriteSetPriority(&sprite, 0); - SpriteSetPalNum(&sprite, 15); - SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x70); - SpriteSetX(&sprite, (ptr->unk0 * 8) + 0x40); - AddSprite(&sprite,0x100,NULL,NULL); - } -} - -extern SpriteOAM gUnknown_202F268; - -void sub_8062500(void) -{ - if ((gUnknown_202EDCC & 8) != 0) { - UnkTextStruct1 *ptr = &gUnknown_2027370[0]; - - SpriteSetAffine1(&gUnknown_202F268, 0); - SpriteSetAffine2(&gUnknown_202F268, 0); - SpriteSetObjMode(&gUnknown_202F268, 0); - SpriteSetMosaic(&gUnknown_202F268, 0); - SpriteSetBpp(&gUnknown_202F268, 0); - SpriteSetShape(&gUnknown_202F268, 1); - SpriteSetMatrixNum(&gUnknown_202F268, 0); - SpriteSetSize(&gUnknown_202F268, 0); - SpriteSetTileNum(&gUnknown_202F268, 0x3F0); - SpriteSetPriority(&gUnknown_202F268, 0); - SpriteSetPalNum(&gUnknown_202F268, 15); - SpriteSetY(&gUnknown_202F268, (ptr->unk2 * 8) + 0x60); - SpriteSetX(&gUnknown_202F268, 0x70); - AddSprite(&gUnknown_202F268,0x100,NULL,NULL); - } -} - -void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); - -void sub_80625A4(s32 count, struct subStruct_203B240 **strings) -{ - s32 i; - MenuInputStructSub menuSub; - - sub_801317C(&menuSub); - for (i = 0; i < count; i++) { - sub_80639E4(strings[i], &menuSub); - while (1) { - if (i < count - 1) { - sub_8062500(); - } - nullsub_34(&menuSub, 0); - DungeonRunFrameActions(0x16); - if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { - PlayDungeonConfirmationSE(); - break; - } - if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { - PlayDungeonCancelSE(); - break; - } - } - } -} - -#include "code_8097DD0.h" -#include "move_util.h" -#include "move_util.h" - -extern const u8 *const gUnknown_80FE95C; -extern const u8 *const gUnknown_80FE960; -extern const u8 *const gUnknown_80FE964; -extern const u8 *const gUnknown_80FE978; -extern const u8 gUnknown_8106C90[]; -extern const u8 gUnknown_8106C98[]; -extern const u8 gUnknown_8106C9C[]; -extern const u8 *const gWhichTextPtr2; -extern char* sub_808E4FC(s32 a1); -extern char* sub_808E51C(s32 a1); -extern void sub_8062B74(Entity *entity); -extern void sub_8062CA8(Entity *entity); -extern void sub_8045C18(u8 *buffer, Item *item); - -void sub_806262C(u8 iqSkillId) -{ - MenuInputStructSub menuSub; - Windows windows; - WindowHeader header; - struct subStruct_203B240 *result[4]; - - while (1) { - s32 count; - bool8 bPress; - - sub_801317C(&menuSub); - sub_80140B4(&windows); - windows.id[0].unk14 = &header; - header.f0 = 1; - header.f1 = 0; - header.f2 = 16; - header.f3 = 0; - DungeonShowWindows(&windows, TRUE); - sub_80073B8(0); - - strcpy(gFormatBuffer_Items[0], GetIQSkillName(iqSkillId)); - PrintFormattedStringOnWindow(16, 0, gUnknown_80FE95C, 0, '\0'); - PrintFormattedStringOnWindow(8, 16, GetIQSkillDescription(iqSkillId), 0, '\0'); - sub_80073E0(0); - count = sub_8097DF0(GetIQSkillDescription(iqSkillId), result); - while (1) { - if (count != 0) { - sub_8062500(); - } - nullsub_34(&menuSub, 0); - DungeonRunFrameActions(0x16); - if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { - bPress = FALSE; - PlayDungeonConfirmationSE(); - break; - } - if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { - bPress = TRUE; - PlayDungeonCancelSE(); - break; - } - } - - if (bPress || count == 0) - break; - - sub_80625A4(count, result); - } - - sub_803E708(4, 0x3E); -} - -void sub_8062748(u8 tacticId) -{ - MenuInputStructSub menuSub; - Windows windows; - WindowHeader header; - struct subStruct_203B240 *result[4]; - - while (1) { - s32 count; - bool8 bPress; - - sub_801317C(&menuSub); - sub_80140B4(&windows); - windows.id[0].unk14 = &header; - header.f0 = 1; - header.f1 = 0; - header.f2 = 16; - header.f3 = 0; - DungeonShowWindows(&windows, TRUE); - sub_80073B8(0); - - CopyTacticsNameToBuffer(gFormatBuffer_Items[0], tacticId); - PrintFormattedStringOnWindow(16, 0, gUnknown_80FE960, 0, '\0'); - PrintFormattedStringOnWindow(8, 16, GetTacticsDescription(tacticId), 0, '\0'); - sub_80073E0(0); - count = sub_8097DF0(GetTacticsDescription(tacticId), result); - while (1) { - if (count != 0) { - sub_8062500(); - } - nullsub_34(&menuSub, 0); - DungeonRunFrameActions(62); - if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { - bPress = FALSE; - PlayDungeonConfirmationSE(); - break; - } - if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { - bPress = TRUE; - PlayDungeonCancelSE(); - break; - } - } - - if (bPress || count == 0) - break; - - sub_80625A4(count, result); - } - - sub_803E708(4, 0x3E); -} - -void sub_806285C(s32 a0) -{ - const u8 *str; - MenuInputStructSub menuSub; - WindowHeader header; - Windows windows = { - .id = { - [0] = { - .type = WINDOW_TYPE_WITH_HEADER, - .pos = {2, 2}, - .width = 26, - .height = 12, - .unk10 = 12, - .unk12 = 0, - .unk14 = &header, - }, - [1] = WINDOW_DUMMY, - [2] = WINDOW_DUMMY, - [3] = WINDOW_DUMMY, - } - }; - - sub_801317C(&menuSub); - header.f0 = 1; - header.f1 = 0; - header.f2 = 16; - header.f3 = 0; - DungeonShowWindows(&windows, TRUE); - sub_80073B8(0); - str = sub_808E4FC(a0); - strcpy(gFormatBuffer_Items[0], str); - PrintFormattedStringOnWindow(16, 0, gUnknown_80FE964, 0, '\0'); - PrintFormattedStringOnWindow(8, 16, sub_808E51C(a0), 0, '\0'); - sub_80073E0(0); - - while (1) { - nullsub_34(&menuSub, 0); - DungeonRunFrameActions(22); - if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { - PlayDungeonConfirmationSE(); - break; - } - if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { - PlayDungeonCancelSE(); - break; - } - } - - sub_803E708(4, 0x3E); -} - -extern const Windows gUnknown_8106C30; -extern const Window gUnknown_8106C00; -extern const Window gUnknown_8106C18; - -Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) -{ - struct UnkFieldTeamMenuStruct unkStruct; - Windows windows = gUnknown_8106C30; - bool8 bPress = FALSE; - s32 prevId, currId; - - if (teamId != NULL) { - *teamId = -1; - } - - if (a1 == 1) { - windows.id[2] = gUnknown_8106C00; - } - else if (a1 == 2) { - windows.id[2] = gUnknown_8106C18; - } - - PrintOnDungeonTeamMenu(&unkStruct, &windows, FALSE); - sub_80073B8(1); - PrintStringOnWindow(4, 3, gWhichTextPtr2, 1, '\0'); - sub_80073E0(1); - prevId = -985; // Magic number or does it actually mean anything? - - while (1) { - currId = unkStruct.unk4[gDungeonMenu.menuIndex]; - - if (currId >= 0) { - Entity *entity = gDungeon->teamPokemon[currId]; - - if (EntityIsValid(entity) && prevId != currId) { - if (a1 == 1) { - sub_8062B74(entity); - } - else if (a1 == 2) { - sub_8062CA8(entity); - } - } - prevId = currId; - sub_806A2BC(entity, 0); - ChangeDungeonCameraPos(&entity->pos, 0, 1, 1); - } - - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - - if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (unkStruct.unk14[gDungeonMenu.menuIndex] != 0) { - PlayDungeonConfirmationSE(); - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - bPress = TRUE; - break; - } - } - - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - sub_804AA60(); - sub_806A2BC(GetLeader(), 0); - sub_803EAF0(0, 0); - sub_803E708(4, 0x3E); - if (bPress) { - return NULL; - } - currId = unkStruct.unk4[gDungeonMenu.menuIndex]; - if (teamId != NULL) { - *teamId = currId; - } - if (currId >= 0) { - return gDungeon->teamPokemon[currId]; - } - - return NULL; -} - -void sub_8062B74(Entity *entity) -{ - s32 x, y; - EntityInfo *entInfo = GetEntInfo(entity); - - CallPrepareTextbox_8008C54(2); - sub_80073B8(2); - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); - PrintFormattedStringOnWindow(12, 0, gUnknown_80FE978, 2, '\0'); - y = 16; - - if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) { - PrintFormattedStringOnWindow(12, y, gUnknown_8106C90, 2, '\0'); - } - else { - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) { - unkStruct_80928C0 movStruct = {0, 106, 0, 0}; - Move *move = &entInfo->moves.moves[i]; - - if (MoveFlagExists(move)) { - if (entInfo->isTeamLeader) { - movStruct.unk0 = 2; - } - else { - movStruct.unk0 = 4; - } - - movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); - BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); - - if (MoveFlagLinkChain(move)) { - x = 13; - } - else { - x = 8; - if (i != 0) { - sub_80078A4(2, 12, y - 2, 120, 7); - } - } - PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0'); - y += 12; - } - } - } - - sub_80073E0(2); -} - -void sub_8062CA8(Entity *entity) -{ - s32 x, y; - EntityInfo *entInfo = GetEntInfo(entity); - - CallPrepareTextbox_8008C54(2); - sub_80073B8(2); - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); - PrintFormattedStringOnWindow(12, 0, gUnknown_80FE940, 2, '\0'); - x = 8; - y = 18; - - if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) { - PrintFormattedStringOnWindow(8, y, gUnknown_8106C90, 2, '\0'); - } - else { - Item *item = &entInfo->heldItem; - if (!ItemExists(item)) { - PrintFormattedStringOnWindow(x, y, gUnknown_8106C9C, 2, '\0'); - } - else { - sub_8045C18(gFormatBuffer_Items[0], item); - PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0'); - } - } - - sub_80073E0(2); -} - -void sub_8062D68(void) -{ - gDungeonMenu.unk1E = 0; - gDungeonMenu.unk20 = 0; - gDungeonMenu.unkC = 0; - gDungeonMenu.unkE = 0; - gDungeonMenu.unk14.x = 0; - sub_801317C(&gDungeonMenu.unk28); -} - -u32 sub_8062D88(void) -{ - return A_BUTTON; -} - -void sub_8062D8C(ActionContainer *a0) -{ - s32 id = a0->actionParameters[0].actionUseIndex; - Entity *entityOrg = gDungeon->teamPokemon[id]; - Entity *entityNew = entityOrg; - - while (1) { - s32 i, count, countUntilId; - - countUntilId = 0; - count = 0; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (sub_8071A8C(gDungeon->teamPokemon[i])) { - if (i == id) { - countUntilId = count; - } - count++; - } - } - - sub_806A2BC(entityNew, 0); - ChangeDungeonCameraPos(&entityNew->pos, 0, 1, 1); - SetLeaderActionToNothing(1); - if (ShowDungeonMovesMenu(entityNew, 0, 1, countUntilId, count)) { - return; - } - - if (GetLeaderActionId() == 6) { - s32 idBefore = id; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (++id >= MAX_TEAM_MEMBERS) { - id = 0; - } - entityNew = gDungeon->teamPokemon[id]; - if (sub_8071A8C(entityNew)) { - break; - } - } - - a0->actionParameters[0].actionUseIndex = id; - if (idBefore != id) { - PlayDungeonCursorSE(0); - } - SetLeaderActionToNothing(1); - } - // Everything is the same as in the above if except for add/sub difference. - else if (GetLeaderActionId() == 7) { - s32 idBefore = id; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (--id < 0) { - id = MAX_TEAM_MEMBERS - 1; - } - entityNew = gDungeon->teamPokemon[id]; - if (sub_8071A8C(entityNew)) { - break; - } - } - - a0->actionParameters[0].actionUseIndex = id; - if (idBefore != id) { - PlayDungeonCursorSE(0); - } - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 29) { - sub_80637E8(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 30) { - sub_803EAF0(0, NULL); - sub_8063A70(GetLeaderActionContainer(), TRUE); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 51) { - sub_803EAF0(0, NULL); - sub_8063A70(GetLeaderActionContainer(), FALSE); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 31) { - sub_803EAF0(0, NULL); - sub_8063B54(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 33) { - sub_803EAF0(0, NULL); - sub_8063CF0(GetLeaderActionContainer(), TRUE); - SetLeaderActionToNothing(1); - } - - if (GetLeaderActionId() != 0) - break; - } - - sub_806A2BC(entityOrg, 0); - ChangeDungeonCameraPos(&entityOrg->pos, 0, 1, 1); -} - -extern s32 gUnknown_202F2D8; -extern s32 sub_8044FB4(u16 param_1); - -void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); -void sub_8063698(Entity *entity, u8 a1, u8 a2); -void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); -void sub_80637A4(ActionContainer *a0, s32 a1); - -bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) -{ - s32 i; - bool8 ret; - EntityInfo *entInfo = GetEntInfo(entity); - bool8 unkBool = TRUE; - EntityInfo *leaderInfo = GetEntInfo(GetLeader()); - WindowHeader header; - Windows windows = { - .id = { - [0] = { - .type = WINDOW_TYPE_WITH_HEADER, - .pos = {2, 2}, - .width = 18, - .height = 16, - .unk10 = 16, - .unk12 = 0, - .unk14 = &header, - }, - [1] = WINDOW_DUMMY, - [2] = WINDOW_DUMMY, - [3] = WINDOW_DUMMY, - } - }; - u8 unk[4]; - bool8 r10; - s32 r5; - bool8 bPress; - - gUnknown_202F2D8 = 0; - for (i = 0; i < MAX_MON_MOVES; i++) { - Move *move = &entInfo->moves.moves[i]; - - if (MoveFlagExists(move) && move->moveFlags2 & 2) { - move->moveFlags2 &= ~(2); - gUnknown_202F2D8 = i; - } - } - - while (1) { - r5 = 0; - ret = FALSE; - r10 = FALSE; - sub_80633E4(entity, entInfo, a1, &windows, &header, unk, a3, a4); - while (1) { - AddMenuCursorSprite_(&gDungeonMenu, unk); - DungeonRunFrameActions(0x1E); - if (gRealInputs.repeated & DPAD_DOWN) { - bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; - s32 id = gDungeonMenu.menuIndex; - - if (rHeld) { - gUnknown_202F2D8 = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); - if (id != gUnknown_202F2D8) { - PlayDungeonCursorSE(0); - } - else { - PlayDungeonCancelSE(); - } - r10 = TRUE; - break; - } - else { - sub_8013780(&gDungeonMenu, unk_FindMoveEnabledForAIAfter4(entInfo->moves.moves, id)); - if (id != gDungeonMenu.menuIndex) { - PlayDungeonCursorSE(0); - } - } - } - if (gRealInputs.repeated & DPAD_UP) { - bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; - s32 id = gDungeonMenu.menuIndex; - - if (rHeld) { - gUnknown_202F2D8 = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); - if (id != gUnknown_202F2D8) { - PlayDungeonCursorSE(0); - } - else { - PlayDungeonCancelSE(); - } - r10 = TRUE; - break; - } - else { - sub_8013780(&gDungeonMenu, sub_8092DB8(entInfo->moves.moves, id)); - if (id != gDungeonMenu.menuIndex) { - PlayDungeonCursorSE(0); - } - } - } - - if ((gRealInputs.repeated & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { - SetMonsterActionFields(&leaderInfo->action, 6); - break; - } - if ((gRealInputs.repeated & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { - SetMonsterActionFields(&leaderInfo->action, 7); - break; - } - - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { - if (a1) { - bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; - if (rHeld) { - r5 = 3; - } - } - PlayDungeonConfirmationSE(); - break; - } - - if (gRealInputs.pressed & START_BUTTON) { - r5 = 1; - PlayDungeonStartButtonSE(); - break; - } - if (gRealInputs.pressed & SELECT_BUTTON) { - r5 = 2; - PlayDungeonStartButtonSE(); - break; - } - // Fixme: r0/r1 regswap... - { - u32 bPressed = B_BUTTON; - bPressed &= gRealInputs.pressed; - if ((bPressed) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - ret = TRUE; - break; - } - } - } - - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1E); - if (leaderInfo->action.action == 6 || leaderInfo->action.action == 7) { - unkBool = FALSE; - break; - } - - if (r10) - continue; - if (ret) - break; - - gUnknown_202F2D8 = gDungeonMenu.menuIndex; - if (r5 == 1) { - SetMonsterActionFields(&leaderInfo->action, 0x1D); - leaderInfo->action.actionParameters[0].actionUseIndex = entity->unk24; - leaderInfo->action.actionParameters[1].actionUseIndex = gUnknown_202F2D8; - sub_803EAF0(0, NULL); - sub_803E708(8, 0x1B); - ret = FALSE; - break; - } - - sub_8063698(entity, a1, a2); - if (r5 == 3) { - s32 r6 = sub_8044FB4(0x20); - if (!CanSubMenuItemBeChosen(r6)) { - r6 = sub_8044FB4(0x21); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - else { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - else if (r5 == 2) { - if (entInfo->isTeamLeader) { - s32 r6 = sub_8044FB4(0x1E); - if (!CanSubMenuItemBeChosen(r6)) { - r6 = sub_8044FB4(0x33); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - else { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - else { - s32 r6 = sub_8044FB4(0x1F); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - } - - sub_8009524(2); - CreateDungeonMenuSubWindow(&windows.id[0], 0x16); - while (1) { - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { - if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { - sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); - if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { - PlayDungeonConfirmationSE(); - } - bPress = FALSE; - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - bPress = TRUE; - break; - } - } - - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - if (bPress != TRUE) { - ret = 0; - break; - } - } - - if (unkBool) { - sub_803EAF0(0, NULL); - sub_803E708(8, 0x1E); - } - - return ret; -} - -extern const Window gUnknown_8106CAC; -void sub_8063578(s32 a0, Entity *entity, Moves *moves, s32 a3, u8 a4, s32 a5); -extern const u8 *const gUnknown_80FDFE8; - -void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) -{ - s32 i, movesCount; - Window windowNew = gUnknown_8106CAC; - - header->f0 = arg7; - header->f1 = arg6; - header->f3 = 0; - - movesCount = 0; - for (i = 0; i < MAX_MON_MOVES; i++) { - Move *move = &entInfo->moves.moves[i]; - if (MoveFlagExists(move)) { - movesCount++; - } - } - - gDungeonMenu.menuIndex = gUnknown_202F2D8; - gDungeonMenu.unk1A = movesCount; - gDungeonMenu.unk1C = 4; - gDungeonMenu.unk1E = arg6; - gDungeonMenu.unk20 = arg7; - gDungeonMenu.unk4 = 0; - gDungeonMenu.firstEntryY = 16; - gDungeonMenu.unk14.x = 0; - gDungeonMenu.unk0 = 0; - sub_801317C(&gDungeonMenu.unk28); - - windows->id[0].height = windows->id[0].unk10 = sub_80095E4(4, 0xC) + 2; - header->f2 = 13; - windows->id[0].pos.x = 2; - windows->id[1] = windows->id[3]; - windows->id[2] = windowNew; - DungeonShowWindows(windows, TRUE); - sub_80137B0(&gDungeonMenu, 0); - gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 16) * 8; - gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; - SetMessageArgument_2(gFormatBuffer_Monsters[0], entInfo, 0); - for (i = 0; i < MAX_MON_MOVES; i++) { - Move *move = &entInfo->moves.moves[i]; - - arg5[i] = 0; - if (!MoveFlagExists(move)) { - if (gDungeonMenu.menuIndex == i) { - gDungeonMenu.menuIndex = 0; - } - } - else if (MoveFlagLinkChain(move)) { - arg5[i] = 1; - } - } - - sub_8063578(4, entity, &entInfo->moves, 0, a2, arg6); - sub_80073B8(2); - PrintFormattedStringOnWindow(4, 0, gUnknown_80FDFE8, 2, '\0'); - sub_80073E0(2); -} - -extern const u8 gUnknown_8106CC4[]; - -void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s32 a5) -{ - s32 i; - EntityInfo *entInfo = GetEntInfo(entity); - - sub_80073B8(windowId); - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); - PrintFormattedStringOnWindow((a5 * 8) + 10, 0, gUnknown_80FE978, windowId, '\0'); - for (i = 0; i < count; i++) { - s32 x, y; - unkStruct_80928C0 movStruct = {0, 106, 0, a4}; - Move *move = &moves->moves[i]; - - if (MoveFlagExists(move)) { - if (entInfo->isTeamLeader) { - movStruct.unk0 = 2; - } - else { - movStruct.unk0 = 4; - } - - movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); - BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); - y = GetMenuEntryYCoord(&gDungeonMenu, i); - if (MoveFlagLinkChain(move)) { - x = 13; - } - else { - x = 8; - if (i != 0) { - sub_80078A4(windowId, 12, y - 2, 120, 7); - } - } - PrintFormattedStringOnWindow(x, y, gUnknown_8106CC4, windowId, '\0'); - } - } - - sub_80073E0(windowId); -} - -bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); -bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); - -void sub_8063698(Entity *entity, u8 a1, u8 a2) -{ - EntityInfo *entInfo = GetEntInfo(entity); - Move *move = &entInfo->moves.moves[gUnknown_202F2D8]; - - gDungeonSubMenuItemsCount = 0; - if (entInfo->isTeamLeader) { - if (a2) { - sub_8044F5C(0x14, 0); - } - if (MoveFlagExists(move)) { - if (MoveFlagSet(move)) { - sub_8044F5C(0x33, 0); - } - else { - sub_8044F5C(0x1E, 0); - } - } - } - else { - sub_8044F5C(0x1F, 0); - } - - if (a1) { - sub_8044F5C(0x20, 0); - sub_8044F5C(0x21, 0); - } - sub_8044F5C(0x1D, 0); - if (!a1) { - sub_8044FF0(0x20); - } - else { - if (!sub_8063C88(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x20); - } - if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x21); - } - } - - if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x21); - } - - if (a2) { - bool8 unkBool = FALSE; - if (gUnknown_202F2D8 < MAX_MON_MOVES) { - unkBool = CanAIUseMove(entity, gUnknown_202F2D8, TRUE) != FALSE; - } - if (!unkBool) { - sub_8044FF0(0x14); - } - } - - sub_8045064(); -} - -void sub_80637A4(ActionContainer *a0, s32 a1) -{ - sub_80637BC(a0, gDungeonMenu.menuIndex, a1); -} - -void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2) -{ - SetMonsterActionFields(a0, gUnknown_202EE44[a1].unk0); - a0->actionParameters[0].actionUseIndex = a2; - a0->actionParameters[1].actionUseIndex = gUnknown_202F2D8; -} - -void sub_8063834(Move *moves, s32 a1, s32 a2); - -void sub_80637E8(ActionContainer *a0) -{ - Entity *mon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; - EntityInfo *monInfo = GetEntInfo(mon); - - monInfo->moves.moves[a0->actionParameters[1].actionUseIndex].moveFlags2 |= 2; - sub_8063834(monInfo->moves.moves, a0->actionParameters[1].actionUseIndex, 4); -} - -// diff --git a/src/code_805D8C8_3.c b/src/code_805D8C8_3.c new file mode 100644 index 000000000..a5dfa4b40 --- /dev/null +++ b/src/code_805D8C8_3.c @@ -0,0 +1,2253 @@ +#include "global.h" +#include "globaldata.h" +#include "structs/str_dungeon.h" +#include "number_util.h" +#include "input.h" +#include "structs/map.h" +#include "dungeon_main.h" +#include "dungeon_message.h" +#include "dungeon_action.h" +#include "dungeon_ai_targeting.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_random.h" +#include "dungeon_util.h" +#include "pokemon.h" +#include "moves.h" +#include "items.h" +#include "dungeon_music.h" +#include "dungeon_ai_movement.h" +#include "code_8045A00.h" +#include "string_format.h" +#include "code_803E46C.h" +#include "code_801602C.h" +#include "code_800D090.h" +#include "trap.h" +#include "charge_move.h" +#include "dungeon_map_access.h" +#include "status_checks_1.h" +#include "game_options.h" +#include "weather.h" +#include "dungeon_items.h" +#include "dungeon_leader.h" +#include "tile_types.h" +#include "dungeon_visibility.h" +#include "dungeon_movement.h" +#include "bg_control.h" +#include "menu_input.h" +#include "music.h" +#include "items.h" +#include "play_time.h" +#include "pokemon_3.h" +#include "text.h" +#include "code_806CD90.h" +#include "code_8044CC8.h" +#include "code_801B3C0.h" +#include "dungeon_capabilities.h" +#include "constants/dungeon.h" +#include "constants/status.h" +#include "constants/tactic.h" +#include "constants/iq_skill.h" +#include "constants/dungeon_action.h" +#include "structs/struct_sub80095e4.h" +#include "structs/str_text.h" + +extern void HandleSetItemAction(Entity *,bool8); +extern void HandleUnsetItemAction(Entity *,bool8); +extern bool8 sub_8048A68(Entity *param_1,Item *item); +extern bool8 sub_8048950(Entity *param_1,Item *item); +extern bool8 sub_8048B9C(Entity *param_1,Item *item); +extern Item *sub_8044D90(Entity *, s32, u32); +extern void PlayDungeonStartButtonSE(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); +extern void sub_806A6E8(Entity *); +extern bool8 sub_8047084(s32 itemFlag); +extern void HandleTrap(Entity *pokemon, DungeonPos *pos, int param_3, char param_4); +extern void sub_8045DB4(DungeonPos *, u32); +bool8 sub_807EF48(void); +void sub_806A2BC(Entity *a0, u8 a1); +bool8 sub_805E874(void); +bool8 sub_80701A4(Entity *a0); +void ShowDungeonStairsMenu(Entity *a0); +void sub_805E738(Entity *a0); +void sub_803E708(s32 a0, s32 a1); +void sub_8040A78(void); +void sub_805E804(void); +void ShowDungeonOthersMenu(void); +void sub_8075680(u32); +void sub_8094C88(void); +void sub_8040A84(void); +void sub_8047158(void); +void sub_806A914(u8 a0, u8 a1, u8 a2); +void SetLeaderActionToNothing(u8 a0); +u16 GetLeaderActionId(void); +void sub_80978C8(s16 a0); +bool8 sub_8094C48(void); +bool8 sub_805EC4C(Entity *a0, u8 a1); +void sub_803E724(s32 a0); +void HandleTalkFieldAction(Entity *); +bool8 sub_8044B28(void); +bool8 IsNotAttacking(Entity *param_1, bool8 param_2); +void ShowMainMenu(bool8 fromBPress, bool8 a1); +bool8 sub_805EF60(Entity *a0, EntityInfo *a1); +s32 GetTeamMemberEntityIndex(Entity *pokemon); +bool8 sub_8070F80(Entity * pokemon, s32 direction); +void PrintOnMainMenu(bool8 printAll); +bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); +void sub_8060D24(UNUSED ActionContainer *a0); +bool8 ShowDungeonTeamMenu(Entity *a0); +void sub_8062D8C(ActionContainer *a0); +void sub_80637E8(ActionContainer *a0); +void sub_8063B54(ActionContainer *a0); +void sub_8063BB4(ActionContainer *a0); +void sub_806752C(ActionContainer *a0); +void sub_8061A38(ActionContainer *a0, bool8 a1); +void sub_8063A70(ActionContainer *a0, bool8 a1); +void sub_8063CF0(ActionContainer *a0, bool8 a1); +void sub_8067768(ActionContainer *a0); +void ShowTacticsMenu(ActionContainer *a0); +void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); +extern bool8 sub_8071A8C(Entity *pokemon); +extern void sub_80643AC(Entity *pokemon); +extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); + +extern u8 gUnknown_202EE00; +extern Entity *gLeaderPointer; + +extern const u8 *gUnknown_80F8A84; +extern const u8 *gUnknown_80F8A6C; +extern const u8 *gUnknown_80F8ADC; +extern const u8 *gUnknown_80F8AB0; +extern const u8 *gUnknown_80F8B0C; +extern const u8 *gUnknown_80FD4B0; +extern const u8 *gUnknown_80F8A4C; +extern const u8 *gUnknown_80F8A28; +extern const u8 *gUnknown_8100208; +extern const u8 *gUnknown_80F9BD8; +extern const u8 *gUnknown_80F9C08; +extern const u8 *gUnknown_80F9C2C; +extern const u8 *gUnknown_80F9BB0; +extern const u8 *gUnknown_80FDE18; +extern const u8 *gUnknown_80F8B24; +extern const u8 *gTeamToolboxAPtr; +extern const u8 *gTeamToolboxBPtr; +extern const u8 *gFieldItemMenuGroundTextPtr; +extern const u8 *gUnknown_80FE940; +extern const u8 *gWhichTextPtr1; +extern const u8 *const gFieldMenuMovesPtr; +extern const u8 *const gFieldMenuItemsPtr; +extern const u8 *const gFieldMenuTeamPtr; +extern const u8 *const gFieldMenuOthersPtr; +extern const u8 *const gFieldMenuGroundPtr; +extern const u8 *const gUnknown_80F9174; +extern const u8 *const gUnknown_80F9190; +extern const u8 *const gUnknown_80F91C8; +extern const u8 *const gUnknown_80F91E0; +extern const u8 *const gUnknown_80F91A8; +extern const u8 *const gUnknown_80FE954; + +extern bool8 sub_8070F14(Entity * pokemon, s32 direction); +bool8 sub_805EC2C(Entity *a0, s32 x, s32 y); +extern Entity *sub_80696A8(Entity *a0); +extern u8 sub_806A538(s32); +extern void sub_803EAF0(u32, u8 *); +extern void sub_803F508(Entity *); +extern void sub_8041AD0(Entity *pokemon); +extern void sub_8041AE0(Entity *pokemon); +extern void sub_807EC28(bool8); +extern void PlayDungeonCursorSE(u8 param_1); +extern u8 *GetDungeonSubMenuItemString(s32 param_1); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern s32 gDungeonSubMenuItemsCount; +extern const u8 gUnknown_8106B50[]; +extern void DungeonShowWindows(Windows *a0, u8 a1); +extern Item * sub_8044CC8(Entity *param_1, ActionParameter *param_2, UNUSED s32 a3); +extern void sub_8044F5C(u16 param_1, u8 param_2); +extern void sub_8044FF0(u16 param_1); +extern u16 sub_8044DC8(Item *param_1); +extern bool8 sub_8046F00(Item *item); +extern void sub_8045064(void); + +void PrintMonTactics(s32 a0, u8 *tacticIds, EntityInfo *mon, s32 windowId); +void sub_80623B0(void); +void sub_8062D68(void); +void sub_8062230(void); +void sub_8062748(u8 a0); + +extern MenuInputStruct gDungeonMenu; +extern WindowHeader gUnknown_202F270; + +s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4); + +void sub_8060890(DungeonPos *a0); +bool8 sub_8060860(s32 a0); +void sub_8060900(Entity *a0); +s32 sub_8060800(WindowHeader *a0, s32 a1); +void ChosenSubMenuToAction(ActionContainer *a0); +Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); + +static UNUSED EWRAM_DATA u8 sUnused3[4] = {0}; +EWRAM_DATA s32 gTeamMenuChosenId = 0; +static UNUSED EWRAM_DATA u8 sUnused4[4] = {0}; + +EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better file and figure out the array count. Apparently it's only written to. + +extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target); +extern u32 sub_8014140(s32 a0, const void *a1); +void sub_806285C(s32 a0); +void sub_806262C(u8 iqSkillId); + +extern const u8 gUnknown_8106B8C[]; + +extern WindowHeader gUnknown_202F270; + +struct UnkFieldTeamMenuStruct +{ + s32 unk0; + s32 unk4[MAX_TEAM_MEMBERS]; + u8 unk14[MAX_TEAM_MEMBERS]; +}; + +void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *a1, bool8 a2); +void sub_806145C(struct UnkFieldTeamMenuStruct *a0); +void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); + +extern u8 gUnknown_202EE39; + +bool8 ShowDungeonTeamMenu(Entity *a0) +{ + s32 i; + bool32 r10, ret; + struct UnkFieldTeamMenuStruct sp; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 14, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .unk14 = &gUnknown_202F270, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + Entity *teamMon = gDungeon->teamPokemon[i]; + if (EntityIsValid(teamMon)) { + GetEntInfo(teamMon)->unk157 = TRUE; + } + } + + if (!gDungeon->unk644.unk17) { + windows.id[0].type = WINDOW_TYPE_NORMAL; + windows.id[0].pos.y++; + } + + while (1) { + s32 id; + bool32 r4; + + ret = FALSE; + PrintOnDungeonTeamMenu(&sp, &windows, TRUE); + r10 = FALSE; + while (1) { + s32 id = sp.unk4[gDungeonMenu.menuIndex]; + if (id >= 0) { + Entity *teamMon = gDungeon->teamPokemon[id]; + sub_806A2BC(teamMon, 0); + ChangeDungeonCameraPos(&teamMon->pos, 0, 1, 1); + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.pressed & START_BUTTON) { + if (sp.unk14[gDungeonMenu.menuIndex] != 0) { + PlayDungeonStartButtonSE(); + r10 = TRUE; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) + { + if (sp.unk14[gDungeonMenu.menuIndex] != 0) { + PlayDungeonConfirmationSE(); + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + ret = TRUE; + break; + } + } + + id = sp.unk4[gDungeonMenu.menuIndex]; + if (id >= 0) { + Entity *teamMon = gDungeon->teamPokemon[id]; + sub_806A2BC(teamMon, 0); + ChangeDungeonCameraPos(&teamMon->pos, 0, 1, 1); + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + sub_804AA60(); + if (ret) { + break; + } + + sp.unk0 = gDungeonMenu.menuIndex; + gTeamMenuChosenId = gDungeonMenu.menuIndex; + sub_806145C(&sp); + if (r10) { + EntityInfo *info = GetEntInfo(a0); + SetMonsterActionFields(&info->action, 0x1B); + info->action.actionParameters[0].actionUseIndex = sp.unk4[sp.unk0]; + ret = FALSE; + break; + } + + CreateDungeonMenuSubWindow(&windows.id[0], 0x12); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { + sub_80615B4(&GetEntInfo(a0)->action, &sp); + PlayDungeonConfirmationSE(); + r4 = FALSE; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + r4 = TRUE; + break; + } + } + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + if (r4 != TRUE) { + ret = FALSE; + break; + } + } + + if (ret) { + sub_806A2BC(GetLeader(), 0); + } + sub_803EAF0(0, NULL); + return ret; +} + +bool32 sub_8069D18(DungeonPos *a0, Entity *a1); + +extern const u8 gTeamFormat[]; +extern const u8 gHeartRedTiny[]; +extern const u8 gHeartRedSmall[]; +extern const u8 gHeartRedMedium[]; +extern const u8 gHeartRedLarge[]; +extern const u8 gHeartYellowTiny[]; +extern const u8 gHeartYellowSmall[]; +extern const u8 gHeartYellowMedium[]; +extern const u8 gHeartYellowLarge[]; +extern const u8 gUnknown_8106BD4[]; +extern const u8 gUnknown_8106BE0[]; +extern const u8 gUnknown_8106BEC[]; +extern const u8 gUnknown_8106BF4[]; + +extern void sub_8070968(u8 *buffer, EntityInfo *entityInfo, s32 colorNum); + +void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2) +{ + s32 r0; + DungeonPos pos; + s32 i; + + s32 count = 0; + bool8 r10 = (windows->id[0].type == WINDOW_TYPE_WITH_HEADER); + + sub_8069D18(&pos, GetLeader()); + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + EntityInfo *monInfo; + Entity *teamMon = gDungeon->teamPokemon[i]; + if (EntityIsValid(teamMon)) { + a0->unk4[count] = i; + monInfo = GetEntInfo(teamMon); + a0->unk14[count] = monInfo->unk157; + if (pos.x == teamMon->pos.x && pos.y == teamMon->pos.y && gTeamMenuChosenId < 0) { + gTeamMenuChosenId = count; + } + count++; + } + } + + if (gTeamMenuChosenId >= count) { + gTeamMenuChosenId = count - 1; + } + if (gTeamMenuChosenId < 0) { + gTeamMenuChosenId = 0; + } + + for (i = count; i < MAX_TEAM_MEMBERS; i++) { + a0->unk4[i] = -1; + a0->unk14[i] = 0; + } + + gUnknown_202F270.f0 = 1; + gUnknown_202F270.f1 = 0; + gUnknown_202F270.f3 = 0; + gDungeonMenu.menuIndex = gTeamMenuChosenId; + gDungeonMenu.unk1A = count; + gDungeonMenu.unk1C = count; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = (r10 != FALSE) * 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + r0 = sub_80095E4(count, 0); + if (r10) { + r0 += 2; + } + windows->id[0].unk10 = r0; + windows->id[0].height = r0; + gUnknown_202F270.f2 = 8; + if (a2) { + windows->id[1] = windows->id[3]; + } + + DungeonShowWindows(windows, 1); + sub_80137B0(&gDungeonMenu, 0); + sub_80073B8(0); + if (r10) { + PrintFormattedStringOnWindow(0xC, 0, gTeamFormat, 0, 0); + } + + // Print hp/max hp + for (i = 0; i < count; i++) { + s32 y; + s32 id = a0->unk4[i]; + if (id >= 0) { + Entity *teamMon = gDungeon->teamPokemon[id]; + if (EntityIsValid(teamMon)) + { + EntityInfo *monInfo = GetEntInfo(teamMon); + s32 color = (a0->unk14[i] != 0) ? 6 : 2; + + sub_8070968(gFormatBuffer_Monsters[0], monInfo, color); + if (sub_806A538(gRecruitedPokemonRef->pokemon2[monInfo->teamIndex].unkA)) { + if (monInfo->HP <= monInfo->maxHPStat / 4) { + strcpy(gFormatBuffer_Monsters[1], gHeartRedTiny); + } + else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 2) { + strcpy(gFormatBuffer_Monsters[1], gHeartRedSmall); + } + else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 3) { + strcpy(gFormatBuffer_Monsters[1], gHeartRedMedium); + } + else { + strcpy(gFormatBuffer_Monsters[1], gHeartRedLarge); + } + } + else { + if (monInfo->HP <= monInfo->maxHPStat / 4) { + strcpy(gFormatBuffer_Monsters[1], gHeartYellowTiny); + } + else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 2) { + strcpy(gFormatBuffer_Monsters[1], gHeartYellowSmall); + } + else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 3) { + strcpy(gFormatBuffer_Monsters[1], gHeartYellowMedium); + } + else { + strcpy(gFormatBuffer_Monsters[1], gHeartYellowLarge); + } + } + + gFormatArgs[0] = monInfo->HP; + gFormatArgs[1] = monInfo->maxHPStat; + y = GetMenuEntryYCoord(&gDungeonMenu, i); + if (monInfo->isTeamLeader) { + PrintFormattedStringOnWindow(9, y, gUnknown_8106BD4, 0, 0); + } + else { + PrintFormattedStringOnWindow(9, y, gUnknown_8106BE0, 0, 0); + } + } + } + } + + sub_80073E0(0); +} + +extern bool8 CanLeaderSwitch(u8 dungeon); + +void sub_806145C(struct UnkFieldTeamMenuStruct *a0) +{ + Entity *teamMon; + EntityInfo *monInfo; + + gDungeonSubMenuItemsCount = 0; + teamMon = gDungeon->teamPokemon[a0->unk4[gDungeonMenu.menuIndex]]; + monInfo = GetEntInfo(teamMon); + sub_8044F5C(0x1B, 0); + sub_8044F5C(0x19, 0); + if (!monInfo->isTeamLeader) { + if (!gDungeon->unk644.unk19 && (monInfo->joinedAt.id != DUNGEON_JOIN_LOCATION_PARTNER || gDungeon->unk644.unk18)) { + sub_8044F5C(0x34, 0); + } + sub_8044F5C(0x1C, 0); + } + sub_8044F5C(0x30, 0); + if (!monInfo->isTeamLeader) { + sub_8044F5C(0x1A, 0); + } + if (!monInfo->isTeamLeader && gDungeon->unk644.unk18 && CanLeaderSwitch(gDungeon->unk644.dungeonLocation.id)) { + bool32 r5; + + sub_8044F5C(0x3B, 0); + r5 = TRUE; + if (monInfo->teamIndex >= MAX_TEAM_MEMBERS) { + r5 = FALSE; + } + else { + PokemonStruct2 *mon = &gRecruitedPokemonRef->pokemon2[monInfo->teamIndex]; + if (sub_806A538(mon->unkA)) { + r5 = FALSE; + } + } + + if (CheckVariousStatuses2(teamMon, FALSE)) { + r5 = FALSE; + } + if (!r5) { + sub_8044FF0(0x3B); + } + } + + if (IsExperienceLocked(monInfo->joinedAt.id)) { + sub_8044FF0(0x19); + sub_8044FF0(0x3B); + sub_8044FF0(0x1A); + sub_8044FF0(0x30); + sub_8044FF0(0x34); + } + + sub_8045064(); +} + +void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1) +{ + SetMonsterActionFields(a0, gUnknown_202EE44[gDungeonMenu.menuIndex].unk0); + a0->actionParameters[0].actionUseIndex = a1->unk4[a1->unk0]; +} + +void PrintMonTactics(s32 a0, u8 *tacticIds, EntityInfo *mon, s32 windowId); +void sub_80623B0(void); +void sub_8062D68(void); +void sub_8062230(void); +void sub_8062748(u8 a0); + +void ShowTacticsMenu(ActionContainer *a0) +{ + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 14, + .unk10 = 18, + .unk12 = 2, + .unk14 = &gUnknown_202F270, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + EntityInfo *monInfo; + u8 tacticIds[NUM_TACTICS]; + s32 scrollFirstId; + s32 menuIndex; + Entity *teamMon; + + teamMon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + monInfo = GetEntInfo(teamMon); + menuIndex = 0; + scrollFirstId = 0; + while (1) { + s32 i; + bool32 addCursor = TRUE; + bool32 loopBreak = FALSE; + + gUnknown_202F270.f0 = 1; + gUnknown_202F270.f1 = 0; + gUnknown_202F270.f2 = 10; + gUnknown_202F270.f3 = 0; + DungeonShowWindows(&windows, 1); + PrintMonTactics(scrollFirstId, tacticIds, monInfo, 0); + for (i = 0; i < 8; i++) { + if (tacticIds[i] == TACTIC_UNUSED) + break; + } + gDungeonMenu.unk1A = i; + gDungeonMenu.unk1C = 8; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + sub_80137B0(&gDungeonMenu, 0); + gDungeonMenu.menuIndex = menuIndex; + while (1) { + s32 i; + + AddMenuCursorSprite(&gDungeonMenu); + if (tacticIds[8] != TACTIC_UNUSED) { + sub_80623B0(); + } + if (scrollFirstId != 0) { + sub_8062230(); + } + DungeonRunFrameActions(0x3D); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + if (gDungeonMenu.menuIndex == 7) { + if (tacticIds[8] != TACTIC_UNUSED) { + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + DungeonRunFrameActions(0x3D); + } + scrollFirstId++; + } + menuIndex = 7; + break; + } + MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + if (gDungeonMenu.menuIndex == 0) { + if (scrollFirstId != 0) { + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + DungeonRunFrameActions(0x3D); + } + scrollFirstId--; + } + menuIndex = 0; + break; + } + MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); + } + if (gRealInputs.pressed & START_BUTTON) { + u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; + menuIndex = gDungeonMenu.menuIndex; + PlayDungeonStartButtonSE(); + sub_8062748(tacticId); + loopBreak = FALSE; + break; + } + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + bool32 changed; + + u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; + menuIndex = gDungeonMenu.menuIndex; + sub_8062D68(); + PlayDungeonConfirmationSE(); + gDungeonSubMenuItemsCount = 0; + sub_8044F5C(0x2F, 0); + sub_8044F5C(0xC, 0); + if (CheckVariousStatuses2(teamMon, TRUE)) { + sub_8044FF0(0x2F); + } + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); + while (1) { + changed = FALSE; + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x3D); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { + changed = TRUE; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + changed = FALSE; + break; + } + } + if (changed) { + PlayDungeonConfirmationSE(); + if (gDungeonMenu.menuIndex == 0) { + PlaySoundEffect(0x133); + monInfo->tactic = tacticId; + monInfo->aiTarget.aiObjective = 6; + monInfo->aiTarget.aiTarget = NULL; + monInfo->aiTarget.unkC = 0; + monInfo->aiTarget.aiTargetSpawnGenID = 0; + if (!monInfo->isTeamLeader) { + AIMovement(teamMon, TRUE); + } + } + else { + sub_8062748(tacticId); + addCursor = FALSE; + } + } + loopBreak = FALSE; + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + loopBreak = TRUE; + break; + } + } + + if (addCursor) { + AddMenuCursorSprite(&gDungeonMenu); + } + DungeonRunFrameActions(0x3D); + if (loopBreak) + break; + } + sub_803EAF0(0, NULL); +} + +extern void GetAvailTacticsforLvl(u8 *tacticsBuffer, s32 pokeLevel); + +void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId) +{ + u8 tacticsBuffer[NUM_TACTICS]; + u32 tactic; + s32 y, i, j; + + firstId--; + sub_80073B8(windowId); + PrintStringOnWindow(0x10, 0, gUnknown_80FE954, windowId, 0); + y = 0x14; + for (j = 0; j < 9; j++) { + tacticIds[j] = TACTIC_UNUSED; + } + GetAvailTacticsforLvl(tacticsBuffer, GetLeaderInfo()->level); + for (i = -1; i < 10; i++, y += 12, firstId++) { + if (firstId < 0) + continue; + if (firstId >= NUM_TACTICS) + continue; + + tactic = tacticsBuffer[firstId]; + if (i >= 0 && i < 9) { + tacticIds[i] = tactic; + } + if (tactic == TACTIC_UNUSED) + break; + + CopyTacticsNameToBuffer(gFormatBuffer_Monsters[0], tactic); + if (mon->tactic == tactic) { + PrintFormattedStringOnWindow(0x10, y, gUnknown_8106BEC, windowId, 0); + } + else { + PrintFormattedStringOnWindow(0x10, y, gUnknown_8106BF4, windowId, 0); + } + } + + sub_80073E0(windowId); +} + +void sub_8061A38(ActionContainer *a0, bool8 a1) +{ + s32 spArr[6]; + struct unkStruct_808FF20 unkMonStruct; + struct UnkInfoTabStruct unkInfoTabStruct; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 14, + .unk10 = 18, + .unk12 = 2, + .unk14 = &gUnknown_202F270, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + s32 r8; + Entity *entity; + s32 var_3C; + s32 var_38; + EntityInfo *entityInfo; + + var_3C = 0; + r8 = 0; + entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + entityInfo = GetEntInfo(entity); + + if (IsExperienceLocked(entityInfo->joinedAt.id)) { + spArr[0] = 1; + spArr[1] = 0; + spArr[2] = 0; + spArr[3] = 0; + spArr[4] = 0; + spArr[5] = 0; + var_38 = 1; + } + else if (a1) { + spArr[0] = 4; + spArr[1] = 0; + spArr[2] = 0; + spArr[3] = 0; + spArr[4] = 0; + spArr[5] = 0; + var_38 = 1; + } + else { + spArr[0] = 2; + spArr[1] = 1; + spArr[2] = 3; + spArr[3] = 5; + spArr[4] = 0; + spArr[5] = 0; + var_38 = 4; + } + + unkMonStruct.unk40 = 0; + unkMonStruct.unk56 = 0; + gDungeonMenu.menuIndex = 0; + + while (1) { + bool8 loopBreak = FALSE; + s32 var_30 = 0; + s32 var_2C = 0; + s32 var_28 = 1; + UnkTextStruct1 *unkTxtStr1Ptr = &gUnknown_2027370[0]; + + gUnknown_202F270.f0 = var_38; + gUnknown_202F270.f1 = var_3C; + gUnknown_202F270.f2 = 10; + gUnknown_202F270.f3 = 0; + DungeonShowWindows(&windows, TRUE); + sub_8069844(&unkMonStruct, entity); + CreatePokemonInfoTabScreen(spArr[var_3C], var_3C, &unkMonStruct, &unkInfoTabStruct, 0); + gDungeonMenu.unk1E = var_3C; + gDungeonMenu.unk20 = var_38; + gDungeonMenu.unkC = (unkTxtStr1Ptr->unk0 + 15) * 8; + gDungeonMenu.unkE = ((unkTxtStr1Ptr->unk2 + 1) * 8) - 2; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1A = 0; + gDungeonMenu.unk1C = 0; + + if (spArr[var_3C] == 1) { + s32 i; + + for (i = 0; i < 8; i++) { + if (unkInfoTabStruct.unkC[i] == 0) { + break; + } + } + + if (i != 0) { + var_2C = 1; + gDungeonMenu.unk1A = i; + gDungeonMenu.unk1C = 8; + sub_80137B0(&gDungeonMenu, 0); + } + gDungeonMenu.menuIndex = r8; + } + else if (spArr[var_3C] == 4) { + s32 i; + + for (i = 0; i < 8; i++) { + if (unkInfoTabStruct.unk0[i] == 0) { + break; + } + } + + if (i != 0) { + var_30 = 1; + gDungeonMenu.unk1A = i; + gDungeonMenu.unk1C = 8; + sub_80137B0(&gDungeonMenu, 0); + } + gDungeonMenu.menuIndex = r8; + } + + while (1) { + s32 unkVar; + bool8 r5, r6; + + AddMenuCursorSprite(&gDungeonMenu); + unkVar = sub_8014140(0, gUnknown_8106B8C); + r5 = FALSE; + r6 = FALSE; + if (var_30) { + if (unkInfoTabStruct.unk0[8] != 0) { + r5 = TRUE; + sub_80623B0(); + } + if (unkMonStruct.unk40 != 0) { + r6 = TRUE; + sub_8062230(); + } + } + if (var_2C) { + if (unkInfoTabStruct.unkC[8] != 0) { + r5 = TRUE; + sub_80623B0(); + } + if (unkMonStruct.unk56 != 0) { + r6 = TRUE; + sub_8062230(); + } + } + + DungeonRunFrameActions(0x1C); + if (gUnknown_202F270.f0 > 1 && !sub_80048C8()) { + if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { + PlayDungeonCursorSE(0); + var_3C++; + if (spArr[var_3C] == 0) { + var_3C = 0; + } + break; + } + if ((gRealInputs.pressed & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { + PlayDungeonCursorSE(0); + var_3C--; + if (var_3C == -1) { + var_3C = 5; + while (spArr[var_3C] == 0) { + var_3C--; + } + } + break; + } + } + + if (var_2C) { + if (unkVar == 2 && r5) { + PlayDungeonCursorSE(0); + if (unkInfoTabStruct.unkC[8] != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + DungeonRunFrameActions(28); + } + unkMonStruct.unk56++; + } + r8 = 7; + break; + } + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(0); + if (gDungeonMenu.menuIndex == 7) { + if (unkInfoTabStruct.unkC[8] != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + DungeonRunFrameActions(28); + } + unkMonStruct.unk56++; + } + r8 = 7; + break; + } + else { + MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); + } + } + + if (unkVar == 1 && r6) { + if (unkMonStruct.unk56 != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + DungeonRunFrameActions(28); + } + unkMonStruct.unk56--; + } + r8 = 0; + break; + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + if (gDungeonMenu.menuIndex == 0) { + if (unkMonStruct.unk56 != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + DungeonRunFrameActions(28); + } + unkMonStruct.unk56--; + } + r8 = 0; + break; + } + else { + MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); + } + } + } + else if (var_30) { + if (unkVar == 2 && r5) { + if (unkInfoTabStruct.unk0[8] != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + DungeonRunFrameActions(28); + } + unkMonStruct.unk40++; + } + r8 = 7; + break; + } + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + if (gDungeonMenu.menuIndex == 7) { + if (unkInfoTabStruct.unk0[8] != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc1(0); + DungeonRunFrameActions(28); + } + unkMonStruct.unk40++; + } + r8 = 7; + break; + } + else { + MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); + } + } + + if (unkVar == 1 && r6) { + if (unkMonStruct.unk40 != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + DungeonRunFrameActions(28); + } + unkMonStruct.unk40--; + } + r8 = 0; + break; + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + if (gDungeonMenu.menuIndex == 0) { + if (unkMonStruct.unk40 != 0) { + s32 i; + for (i = 0; i < 6; i++) { + gIwramTextFunc2(0); + DungeonRunFrameActions(28); + } + unkMonStruct.unk40--; + } + r8 = 0; + break; + } + else { + MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); + } + } + } + + if (sub_80048C8()) + continue; + + if (gRealInputs.pressed & START_BUTTON) { + if (var_2C) { + s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; + + r8 = gDungeonMenu.menuIndex; + PlayDungeonStartButtonSE(); + sub_806285C(var); + var_28 = 0; + loopBreak = FALSE; + break; + } + else if (var_30) { + s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; + + r8 = gDungeonMenu.menuIndex; + PlayDungeonStartButtonSE(); + sub_806262C(var); + var_28 = 0; + loopBreak = FALSE; + break; + } + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (var_2C) { + s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; + + r8 = gDungeonMenu.menuIndex; + sub_8062D68(); + gDungeonSubMenuItemsCount = 0; + PlayDungeonConfirmationSE(); + sub_8044F5C(0xC, 0); + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1C); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + PlayDungeonConfirmationSE(); + sub_806285C(var); + var_28 = 0; + loopBreak = FALSE; + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + loopBreak = FALSE; + break; + } + } + } + else if (var_30) { + bool8 aPress = FALSE; + s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; + + r8 = gDungeonMenu.menuIndex; + sub_8062D68(); + gDungeonSubMenuItemsCount = var_2C; + PlayDungeonConfirmationSE(); + sub_8044F5C(0x28, 0); + sub_8044F5C(0xC, 0); + if (CheckVariousStatuses2(entity, TRUE)) { + sub_8044FF0(0x28); + } + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1C); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { + PlayDungeonConfirmationSE(); + aPress = TRUE; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + loopBreak = FALSE; + aPress = FALSE; + break; + } + } + + if (aPress) { + if (gDungeonMenu.menuIndex == 0) { + PlaySoundEffect(0x133); + ToggleIQSkill(&entityInfo->IQSkillMenuFlags, var); + } + else { + sub_806262C(var); + var_28 = 0; + } + loopBreak = FALSE; + break; + } + } + else { + PlayDungeonConfirmationSE(); + loopBreak = TRUE; + } + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + loopBreak = TRUE; + break; + } + } + + if (var_28) { + if (var_30 != 0 || var_2C != 0) { + AddMenuCursorSprite(&gDungeonMenu); + } + DungeonRunFrameActions(0x1C); + } + + if (loopBreak) { + break; + } + } + + sub_803EAF0(0, NULL); + LoadIQSkills(entity); +} + +extern s32 gUnknown_202EDCC; + +// The same as sub_8068344 +void sub_8062230(void) +{ + if ((gUnknown_202EDCC & 8) != 0) { + UnkTextStruct1 *txtStrPtr = &gUnknown_2027370[0]; + SpriteOAM sprite = {0}; + + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 0); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 1); + SpriteSetMatrixNum(&sprite, 16); + SpriteSetSize(&sprite, 0); + SpriteSetTileNum(&sprite, 0x3F0); + SpriteSetPriority(&sprite, 0); + SpriteSetPalNum(&sprite, 15); + SpriteSetY(&sprite, (txtStrPtr->unk2 * 8) + 0x8); + SpriteSetX(&sprite, (txtStrPtr->unk0 * 8) + 0x40); + + AddSprite(&sprite, 0x100, NULL, NULL); + } +} + +// The same as sub_80684C4 +void sub_80623B0(void) +{ + if ((gUnknown_202EDCC & 8) != 0) { + UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + SpriteOAM sprite = {0}; + + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 0); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 1); + SpriteSetMatrixNum(&sprite, 0); + SpriteSetSize(&sprite, 0); + SpriteSetTileNum(&sprite, 0x3F0); + SpriteSetPriority(&sprite, 0); + SpriteSetPalNum(&sprite, 15); + SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x70); + SpriteSetX(&sprite, (ptr->unk0 * 8) + 0x40); + AddSprite(&sprite,0x100,NULL,NULL); + } +} + +extern SpriteOAM gUnknown_202F268; + +void sub_8062500(void) +{ + if ((gUnknown_202EDCC & 8) != 0) { + UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + + SpriteSetAffine1(&gUnknown_202F268, 0); + SpriteSetAffine2(&gUnknown_202F268, 0); + SpriteSetObjMode(&gUnknown_202F268, 0); + SpriteSetMosaic(&gUnknown_202F268, 0); + SpriteSetBpp(&gUnknown_202F268, 0); + SpriteSetShape(&gUnknown_202F268, 1); + SpriteSetMatrixNum(&gUnknown_202F268, 0); + SpriteSetSize(&gUnknown_202F268, 0); + SpriteSetTileNum(&gUnknown_202F268, 0x3F0); + SpriteSetPriority(&gUnknown_202F268, 0); + SpriteSetPalNum(&gUnknown_202F268, 15); + SpriteSetY(&gUnknown_202F268, (ptr->unk2 * 8) + 0x60); + SpriteSetX(&gUnknown_202F268, 0x70); + AddSprite(&gUnknown_202F268,0x100,NULL,NULL); + } +} + +void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); + +void sub_80625A4(s32 count, struct subStruct_203B240 **strings) +{ + s32 i; + MenuInputStructSub menuSub; + + sub_801317C(&menuSub); + for (i = 0; i < count; i++) { + sub_80639E4(strings[i], &menuSub); + while (1) { + if (i < count - 1) { + sub_8062500(); + } + nullsub_34(&menuSub, 0); + DungeonRunFrameActions(0x16); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + PlayDungeonCancelSE(); + break; + } + } + } +} + +#include "code_8097DD0.h" +#include "move_util.h" +#include "move_util.h" + +extern const u8 *const gUnknown_80FE95C; +extern const u8 *const gUnknown_80FE960; +extern const u8 *const gUnknown_80FE964; +extern const u8 *const gUnknown_80FE978; +extern const u8 gUnknown_8106C90[]; +extern const u8 gUnknown_8106C98[]; +extern const u8 gUnknown_8106C9C[]; +extern const u8 *const gWhichTextPtr2; +extern char* sub_808E4FC(s32 a1); +extern char* sub_808E51C(s32 a1); +extern void sub_8062B74(Entity *entity); +extern void sub_8062CA8(Entity *entity); +extern void sub_8045C18(u8 *buffer, Item *item); + +void sub_806262C(u8 iqSkillId) +{ + MenuInputStructSub menuSub; + Windows windows; + WindowHeader header; + struct subStruct_203B240 *result[4]; + + while (1) { + s32 count; + bool8 bPress; + + sub_801317C(&menuSub); + sub_80140B4(&windows); + windows.id[0].unk14 = &header; + header.f0 = 1; + header.f1 = 0; + header.f2 = 16; + header.f3 = 0; + DungeonShowWindows(&windows, TRUE); + sub_80073B8(0); + + strcpy(gFormatBuffer_Items[0], GetIQSkillName(iqSkillId)); + PrintFormattedStringOnWindow(16, 0, gUnknown_80FE95C, 0, '\0'); + PrintFormattedStringOnWindow(8, 16, GetIQSkillDescription(iqSkillId), 0, '\0'); + sub_80073E0(0); + count = sub_8097DF0(GetIQSkillDescription(iqSkillId), result); + while (1) { + if (count != 0) { + sub_8062500(); + } + nullsub_34(&menuSub, 0); + DungeonRunFrameActions(0x16); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + bPress = FALSE; + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + bPress = TRUE; + PlayDungeonCancelSE(); + break; + } + } + + if (bPress || count == 0) + break; + + sub_80625A4(count, result); + } + + sub_803E708(4, 0x3E); +} + +void sub_8062748(u8 tacticId) +{ + MenuInputStructSub menuSub; + Windows windows; + WindowHeader header; + struct subStruct_203B240 *result[4]; + + while (1) { + s32 count; + bool8 bPress; + + sub_801317C(&menuSub); + sub_80140B4(&windows); + windows.id[0].unk14 = &header; + header.f0 = 1; + header.f1 = 0; + header.f2 = 16; + header.f3 = 0; + DungeonShowWindows(&windows, TRUE); + sub_80073B8(0); + + CopyTacticsNameToBuffer(gFormatBuffer_Items[0], tacticId); + PrintFormattedStringOnWindow(16, 0, gUnknown_80FE960, 0, '\0'); + PrintFormattedStringOnWindow(8, 16, GetTacticsDescription(tacticId), 0, '\0'); + sub_80073E0(0); + count = sub_8097DF0(GetTacticsDescription(tacticId), result); + while (1) { + if (count != 0) { + sub_8062500(); + } + nullsub_34(&menuSub, 0); + DungeonRunFrameActions(62); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + bPress = FALSE; + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + bPress = TRUE; + PlayDungeonCancelSE(); + break; + } + } + + if (bPress || count == 0) + break; + + sub_80625A4(count, result); + } + + sub_803E708(4, 0x3E); +} + +void sub_806285C(s32 a0) +{ + const u8 *str; + MenuInputStructSub menuSub; + WindowHeader header; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 26, + .height = 12, + .unk10 = 12, + .unk12 = 0, + .unk14 = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + sub_801317C(&menuSub); + header.f0 = 1; + header.f1 = 0; + header.f2 = 16; + header.f3 = 0; + DungeonShowWindows(&windows, TRUE); + sub_80073B8(0); + str = sub_808E4FC(a0); + strcpy(gFormatBuffer_Items[0], str); + PrintFormattedStringOnWindow(16, 0, gUnknown_80FE964, 0, '\0'); + PrintFormattedStringOnWindow(8, 16, sub_808E51C(a0), 0, '\0'); + sub_80073E0(0); + + while (1) { + nullsub_34(&menuSub, 0); + DungeonRunFrameActions(22); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + PlayDungeonCancelSE(); + break; + } + } + + sub_803E708(4, 0x3E); +} + +extern const Windows gUnknown_8106C30; +extern const Window gUnknown_8106C00; +extern const Window gUnknown_8106C18; + +Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) +{ + struct UnkFieldTeamMenuStruct unkStruct; + Windows windows = gUnknown_8106C30; + bool8 bPress = FALSE; + s32 prevId, currId; + + if (teamId != NULL) { + *teamId = -1; + } + + if (a1 == 1) { + windows.id[2] = gUnknown_8106C00; + } + else if (a1 == 2) { + windows.id[2] = gUnknown_8106C18; + } + + PrintOnDungeonTeamMenu(&unkStruct, &windows, FALSE); + sub_80073B8(1); + PrintStringOnWindow(4, 3, gWhichTextPtr2, 1, '\0'); + sub_80073E0(1); + prevId = -985; // Magic number or does it actually mean anything? + + while (1) { + currId = unkStruct.unk4[gDungeonMenu.menuIndex]; + + if (currId >= 0) { + Entity *entity = gDungeon->teamPokemon[currId]; + + if (EntityIsValid(entity) && prevId != currId) { + if (a1 == 1) { + sub_8062B74(entity); + } + else if (a1 == 2) { + sub_8062CA8(entity); + } + } + prevId = currId; + sub_806A2BC(entity, 0); + ChangeDungeonCameraPos(&entity->pos, 0, 1, 1); + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (unkStruct.unk14[gDungeonMenu.menuIndex] != 0) { + PlayDungeonConfirmationSE(); + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + sub_804AA60(); + sub_806A2BC(GetLeader(), 0); + sub_803EAF0(0, 0); + sub_803E708(4, 0x3E); + if (bPress) { + return NULL; + } + currId = unkStruct.unk4[gDungeonMenu.menuIndex]; + if (teamId != NULL) { + *teamId = currId; + } + if (currId >= 0) { + return gDungeon->teamPokemon[currId]; + } + + return NULL; +} + +void sub_8062B74(Entity *entity) +{ + s32 x, y; + EntityInfo *entInfo = GetEntInfo(entity); + + CallPrepareTextbox_8008C54(2); + sub_80073B8(2); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); + PrintFormattedStringOnWindow(12, 0, gUnknown_80FE978, 2, '\0'); + y = 16; + + if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) { + PrintFormattedStringOnWindow(12, y, gUnknown_8106C90, 2, '\0'); + } + else { + s32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) { + unkStruct_80928C0 movStruct = {0, 106, 0, 0}; + Move *move = &entInfo->moves.moves[i]; + + if (MoveFlagExists(move)) { + if (entInfo->isTeamLeader) { + movStruct.unk0 = 2; + } + else { + movStruct.unk0 = 4; + } + + movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); + BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); + + if (MoveFlagLinkChain(move)) { + x = 13; + } + else { + x = 8; + if (i != 0) { + sub_80078A4(2, 12, y - 2, 120, 7); + } + } + PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0'); + y += 12; + } + } + } + + sub_80073E0(2); +} + +void sub_8062CA8(Entity *entity) +{ + s32 x, y; + EntityInfo *entInfo = GetEntInfo(entity); + + CallPrepareTextbox_8008C54(2); + sub_80073B8(2); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); + PrintFormattedStringOnWindow(12, 0, gUnknown_80FE940, 2, '\0'); + x = 8; + y = 18; + + if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) { + PrintFormattedStringOnWindow(8, y, gUnknown_8106C90, 2, '\0'); + } + else { + Item *item = &entInfo->heldItem; + if (!ItemExists(item)) { + PrintFormattedStringOnWindow(x, y, gUnknown_8106C9C, 2, '\0'); + } + else { + sub_8045C18(gFormatBuffer_Items[0], item); + PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0'); + } + } + + sub_80073E0(2); +} + +void sub_8062D68(void) +{ + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + sub_801317C(&gDungeonMenu.unk28); +} + +u32 sub_8062D88(void) +{ + return A_BUTTON; +} + +void sub_8062D8C(ActionContainer *a0) +{ + s32 id = a0->actionParameters[0].actionUseIndex; + Entity *entityOrg = gDungeon->teamPokemon[id]; + Entity *entityNew = entityOrg; + + while (1) { + s32 i, count, countUntilId; + + countUntilId = 0; + count = 0; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (sub_8071A8C(gDungeon->teamPokemon[i])) { + if (i == id) { + countUntilId = count; + } + count++; + } + } + + sub_806A2BC(entityNew, 0); + ChangeDungeonCameraPos(&entityNew->pos, 0, 1, 1); + SetLeaderActionToNothing(1); + if (ShowDungeonMovesMenu(entityNew, 0, 1, countUntilId, count)) { + return; + } + + if (GetLeaderActionId() == 6) { + s32 idBefore = id; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (++id >= MAX_TEAM_MEMBERS) { + id = 0; + } + entityNew = gDungeon->teamPokemon[id]; + if (sub_8071A8C(entityNew)) { + break; + } + } + + a0->actionParameters[0].actionUseIndex = id; + if (idBefore != id) { + PlayDungeonCursorSE(0); + } + SetLeaderActionToNothing(1); + } + // Everything is the same as in the above if except for add/sub difference. + else if (GetLeaderActionId() == 7) { + s32 idBefore = id; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (--id < 0) { + id = MAX_TEAM_MEMBERS - 1; + } + entityNew = gDungeon->teamPokemon[id]; + if (sub_8071A8C(entityNew)) { + break; + } + } + + a0->actionParameters[0].actionUseIndex = id; + if (idBefore != id) { + PlayDungeonCursorSE(0); + } + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == 29) { + sub_80637E8(GetLeaderActionContainer()); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == 30) { + sub_803EAF0(0, NULL); + sub_8063A70(GetLeaderActionContainer(), TRUE); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == 51) { + sub_803EAF0(0, NULL); + sub_8063A70(GetLeaderActionContainer(), FALSE); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == 31) { + sub_803EAF0(0, NULL); + sub_8063B54(GetLeaderActionContainer()); + SetLeaderActionToNothing(1); + } + else if (GetLeaderActionId() == 33) { + sub_803EAF0(0, NULL); + sub_8063CF0(GetLeaderActionContainer(), TRUE); + SetLeaderActionToNothing(1); + } + + if (GetLeaderActionId() != 0) + break; + } + + sub_806A2BC(entityOrg, 0); + ChangeDungeonCameraPos(&entityOrg->pos, 0, 1, 1); +} + +extern s32 gUnknown_202F2D8; +extern s32 sub_8044FB4(u16 param_1); + +void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); +void sub_8063698(Entity *entity, u8 a1, u8 a2); +void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); +void sub_80637A4(ActionContainer *a0, s32 a1); + +bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) +{ + s32 i; + bool8 ret; + EntityInfo *entInfo = GetEntInfo(entity); + bool8 unkBool = TRUE; + EntityInfo *leaderInfo = GetEntInfo(GetLeader()); + WindowHeader header; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .unk14 = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + u8 unk[4]; + bool8 r10; + s32 r5; + bool8 bPress; + + gUnknown_202F2D8 = 0; + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + + if (MoveFlagExists(move) && move->moveFlags2 & 2) { + move->moveFlags2 &= ~(2); + gUnknown_202F2D8 = i; + } + } + + while (1) { + r5 = 0; + ret = FALSE; + r10 = FALSE; + sub_80633E4(entity, entInfo, a1, &windows, &header, unk, a3, a4); + while (1) { + AddMenuCursorSprite_(&gDungeonMenu, unk); + DungeonRunFrameActions(0x1E); + if (gRealInputs.repeated & DPAD_DOWN) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + s32 id = gDungeonMenu.menuIndex; + + if (rHeld) { + gUnknown_202F2D8 = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); + if (id != gUnknown_202F2D8) { + PlayDungeonCursorSE(0); + } + else { + PlayDungeonCancelSE(); + } + r10 = TRUE; + break; + } + else { + sub_8013780(&gDungeonMenu, unk_FindMoveEnabledForAIAfter4(entInfo->moves.moves, id)); + if (id != gDungeonMenu.menuIndex) { + PlayDungeonCursorSE(0); + } + } + } + if (gRealInputs.repeated & DPAD_UP) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + s32 id = gDungeonMenu.menuIndex; + + if (rHeld) { + gUnknown_202F2D8 = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); + if (id != gUnknown_202F2D8) { + PlayDungeonCursorSE(0); + } + else { + PlayDungeonCancelSE(); + } + r10 = TRUE; + break; + } + else { + sub_8013780(&gDungeonMenu, sub_8092DB8(entInfo->moves.moves, id)); + if (id != gDungeonMenu.menuIndex) { + PlayDungeonCursorSE(0); + } + } + } + + if ((gRealInputs.repeated & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { + SetMonsterActionFields(&leaderInfo->action, 6); + break; + } + if ((gRealInputs.repeated & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { + SetMonsterActionFields(&leaderInfo->action, 7); + break; + } + + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if (a1) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + if (rHeld) { + r5 = 3; + } + } + PlayDungeonConfirmationSE(); + break; + } + + if (gRealInputs.pressed & START_BUTTON) { + r5 = 1; + PlayDungeonStartButtonSE(); + break; + } + if (gRealInputs.pressed & SELECT_BUTTON) { + r5 = 2; + PlayDungeonStartButtonSE(); + break; + } + // Fixme: r0/r1 regswap... + { + u32 bPressed = B_BUTTON; + bPressed &= gRealInputs.pressed; + if ((bPressed) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + ret = TRUE; + break; + } + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1E); + if (leaderInfo->action.action == 6 || leaderInfo->action.action == 7) { + unkBool = FALSE; + break; + } + + if (r10) + continue; + if (ret) + break; + + gUnknown_202F2D8 = gDungeonMenu.menuIndex; + if (r5 == 1) { + SetMonsterActionFields(&leaderInfo->action, 0x1D); + leaderInfo->action.actionParameters[0].actionUseIndex = entity->unk24; + leaderInfo->action.actionParameters[1].actionUseIndex = gUnknown_202F2D8; + sub_803EAF0(0, NULL); + sub_803E708(8, 0x1B); + ret = FALSE; + break; + } + + sub_8063698(entity, a1, a2); + if (r5 == 3) { + s32 r6 = sub_8044FB4(0x20); + if (!CanSubMenuItemBeChosen(r6)) { + r6 = sub_8044FB4(0x21); + if (CanSubMenuItemBeChosen(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else if (r5 == 2) { + if (entInfo->isTeamLeader) { + s32 r6 = sub_8044FB4(0x1E); + if (!CanSubMenuItemBeChosen(r6)) { + r6 = sub_8044FB4(0x33); + if (CanSubMenuItemBeChosen(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + s32 r6 = sub_8044FB4(0x1F); + if (CanSubMenuItemBeChosen(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + } + + sub_8009524(2); + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { + sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); + if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { + PlayDungeonConfirmationSE(); + } + bPress = FALSE; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + if (bPress != TRUE) { + ret = 0; + break; + } + } + + if (unkBool) { + sub_803EAF0(0, NULL); + sub_803E708(8, 0x1E); + } + + return ret; +} + +extern const Window gUnknown_8106CAC; +void sub_8063578(s32 a0, Entity *entity, Moves *moves, s32 a3, u8 a4, s32 a5); +extern const u8 *const gUnknown_80FDFE8; + +void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) +{ + s32 i, movesCount; + Window windowNew = gUnknown_8106CAC; + + header->f0 = arg7; + header->f1 = arg6; + header->f3 = 0; + + movesCount = 0; + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + if (MoveFlagExists(move)) { + movesCount++; + } + } + + gDungeonMenu.menuIndex = gUnknown_202F2D8; + gDungeonMenu.unk1A = movesCount; + gDungeonMenu.unk1C = 4; + gDungeonMenu.unk1E = arg6; + gDungeonMenu.unk20 = arg7; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + + windows->id[0].height = windows->id[0].unk10 = sub_80095E4(4, 0xC) + 2; + header->f2 = 13; + windows->id[0].pos.x = 2; + windows->id[1] = windows->id[3]; + windows->id[2] = windowNew; + DungeonShowWindows(windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 16) * 8; + gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + SetMessageArgument_2(gFormatBuffer_Monsters[0], entInfo, 0); + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + + arg5[i] = 0; + if (!MoveFlagExists(move)) { + if (gDungeonMenu.menuIndex == i) { + gDungeonMenu.menuIndex = 0; + } + } + else if (MoveFlagLinkChain(move)) { + arg5[i] = 1; + } + } + + sub_8063578(4, entity, &entInfo->moves, 0, a2, arg6); + sub_80073B8(2); + PrintFormattedStringOnWindow(4, 0, gUnknown_80FDFE8, 2, '\0'); + sub_80073E0(2); +} + +extern const u8 gUnknown_8106CC4[]; + +void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s32 a5) +{ + s32 i; + EntityInfo *entInfo = GetEntInfo(entity); + + sub_80073B8(windowId); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); + PrintFormattedStringOnWindow((a5 * 8) + 10, 0, gUnknown_80FE978, windowId, '\0'); + for (i = 0; i < count; i++) { + s32 x, y; + unkStruct_80928C0 movStruct = {0, 106, 0, a4}; + Move *move = &moves->moves[i]; + + if (MoveFlagExists(move)) { + if (entInfo->isTeamLeader) { + movStruct.unk0 = 2; + } + else { + movStruct.unk0 = 4; + } + + movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); + BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); + y = GetMenuEntryYCoord(&gDungeonMenu, i); + if (MoveFlagLinkChain(move)) { + x = 13; + } + else { + x = 8; + if (i != 0) { + sub_80078A4(windowId, 12, y - 2, 120, 7); + } + } + PrintFormattedStringOnWindow(x, y, gUnknown_8106CC4, windowId, '\0'); + } + } + + sub_80073E0(windowId); +} + +bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); +bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); + +void sub_8063698(Entity *entity, u8 a1, u8 a2) +{ + EntityInfo *entInfo = GetEntInfo(entity); + Move *move = &entInfo->moves.moves[gUnknown_202F2D8]; + + gDungeonSubMenuItemsCount = 0; + if (entInfo->isTeamLeader) { + if (a2) { + sub_8044F5C(0x14, 0); + } + if (MoveFlagExists(move)) { + if (MoveFlagSet(move)) { + sub_8044F5C(0x33, 0); + } + else { + sub_8044F5C(0x1E, 0); + } + } + } + else { + sub_8044F5C(0x1F, 0); + } + + if (a1) { + sub_8044F5C(0x20, 0); + sub_8044F5C(0x21, 0); + } + sub_8044F5C(0x1D, 0); + if (!a1) { + sub_8044FF0(0x20); + } + else { + if (!sub_8063C88(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x20); + } + if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x21); + } + } + + if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x21); + } + + if (a2) { + bool8 unkBool = FALSE; + if (gUnknown_202F2D8 < MAX_MON_MOVES) { + unkBool = CanAIUseMove(entity, gUnknown_202F2D8, TRUE) != FALSE; + } + if (!unkBool) { + sub_8044FF0(0x14); + } + } + + sub_8045064(); +} + +void sub_80637A4(ActionContainer *a0, s32 a1) +{ + sub_80637BC(a0, gDungeonMenu.menuIndex, a1); +} + +void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2) +{ + SetMonsterActionFields(a0, gUnknown_202EE44[a1].unk0); + a0->actionParameters[0].actionUseIndex = a2; + a0->actionParameters[1].actionUseIndex = gUnknown_202F2D8; +} + +void sub_8063834(Move *moves, s32 a1, s32 a2); + +void sub_80637E8(ActionContainer *a0) +{ + Entity *mon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + EntityInfo *monInfo = GetEntInfo(mon); + + monInfo->moves.moves[a0->actionParameters[1].actionUseIndex].moveFlags2 |= 2; + sub_8063834(monInfo->moves.moves, a0->actionParameters[1].actionUseIndex, 4); +} + +// diff --git a/src/code_806FDF4.c b/src/code_806FDF4.c index 1df01e6f7..964cce8c9 100644 --- a/src/code_806FDF4.c +++ b/src/code_806FDF4.c @@ -40,7 +40,7 @@ extern u8 *gUnknown_80FA090[]; void sub_8068FE0(Entity *, u32, Entity *); u8 sub_806B8CC(); -bool8 sub_805FBE8(u8 *a0); +bool8 DungeonGiveNameToRecruitedMon(u8 *a0); void sub_8083D88(); u8 sub_808529C(s32); void nullsub_96(Entity *pokemon,Entity *target); @@ -450,7 +450,7 @@ bool8 sub_806FA5C(Entity *entity1, Entity *entity2, struct unkStruct_8069D4C *pa sub_8083D88(); sub_803E708(0xa0,0x46); if (DisplayDungeonYesNoMessage(0,*gUnknown_80FA090,1) == 1) { - while (sub_805FBE8(pokeStruct2->name) == 0) { + while (DungeonGiveNameToRecruitedMon(pokeStruct2->name) == 0) { DisplayDungeonMessage(0,*gUnknown_80FA0C8,1); } } @@ -583,7 +583,7 @@ bool8 sub_806FDF4(Entity *entity1,Entity *entity2,Entity **entityPtr) } else { if (DisplayDungeonYesNoMessage(0,*gUnknown_80FA090,1) == 1) { - while (!sub_805FBE8(buffer)) { + while (!DungeonGiveNameToRecruitedMon(buffer)) { DisplayDungeonMessage(0,*gUnknown_80FA0C8,1); } } diff --git a/src/dungeon_main.c b/src/dungeon_main.c index c775ce053..d40f0799b 100644 --- a/src/dungeon_main.c +++ b/src/dungeon_main.c @@ -1,9 +1,10 @@ #include "global.h" +#include "globaldata.h" +#include "dungeon_main.h" #include "structs/str_dungeon.h" #include "number_util.h" #include "input.h" #include "structs/map.h" -#include "dungeon_main.h" #include "dungeon_message.h" #include "dungeon_action.h" #include "dungeon_ai_targeting.h" @@ -50,13 +51,6 @@ #include "structs/struct_sub80095e4.h" #include "structs/str_text.h" -struct UnkMenuBitsStruct { - u8 a0_8; - u8 a0_16; - u8 a0_24; - u8 a0_32; -}; - extern void HandleSetItemAction(Entity *,bool8); extern void HandleUnsetItemAction(Entity *,bool8); extern bool8 sub_8048A68(Entity *param_1,Item *item); @@ -90,6 +84,7 @@ bool8 sub_8094C48(void); void sub_803E724(s32 a0); void HandleTalkFieldAction(Entity *); bool8 sub_8044B28(void); +bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0); bool8 IsNotAttacking(Entity *param_1, bool8 param_2); s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); @@ -149,12 +144,6 @@ extern const u8 *const gUnknown_80FE954; const u8 *GetCurrentDungeonName(void); void GetWeatherName(u8 *dst, u8 weatherId); -extern u8 *GetDungeonSubMenuItemString(s32 param_1); -extern bool8 CanSubMenuItemBeChosen(s32 param_1); -extern s32 gDungeonSubMenuItemsCount; -extern const u8 gUnknown_8106B50[]; - -extern void DungeonShowWindows(Windows *a0, u8 a1); extern bool8 sub_8070F14(Entity * pokemon, s32 direction); extern Entity *sub_80696A8(Entity *a0); @@ -184,12 +173,11 @@ static bool8 sub_805EC4C(Entity *a0, u8 a1); static bool8 sub_805EF60(Entity *a0, EntityInfo *a1); static void ShowMainMenu(bool8 fromBPress, bool8 a1); static void PrintOnMainMenu(bool8 printAll); -static bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0); void DungeonHandlePlayerInput(void) { struct UnkMenuBitsStruct r6; - bool8 triggers[5]; // Always FALSE, if one of these is TRUE - they can open various menus or cause an item throw. Most likely used for debugging/testing. + bool8 triggers[5]; // Always FALSE, if one of these is TRUE - they can open various menus or cause an item throw. Used in Blue's touch screen. s32 frames; s32 var_38; UnkDungeonGlobal_unk181E8_sub *unkPtr; @@ -254,7 +242,7 @@ void DungeonHandlePlayerInput(void) while (r6.a0_8 == 0) { u32 dpadDiagonal, dpadSimple; bool32 highlightTiles, tryItemThrow; - bool32 bPress, rPress, unkBool; // Always FALSE, might've been used as debug variables. + bool32 bPress, rPress, unkBool; // Always FALSE, might've been used in Blue. s32 directionNew; sArrowsFrames++; @@ -432,8 +420,8 @@ void DungeonHandlePlayerInput(void) if (highlightTiles) { sub_805E738(leader); sInRotateMode = TRUE; - unkPtr->unk1821B = leaderInfo->action.direction; - unkPtr->unk1821C = 0xFF; + unkPtr->rotateModeDirection = leaderInfo->action.direction; + unkPtr->prevRotateModeDirection = 0xFF; ResetRepeatTimers(); } @@ -525,7 +513,7 @@ void DungeonHandlePlayerInput(void) bool32 directionChanged = (leaderInfo->action.direction != directionNew); leaderInfo->action.direction = directionNew & DIRECTION_MASK; if (sInRotateMode) { - unkPtr->unk1821B = directionNew; + unkPtr->rotateModeDirection = directionNew; sub_806CDD4(leader, sub_806CEBC(leader), directionNew); } else { @@ -638,27 +626,42 @@ void DungeonHandlePlayerInput(void) } } -struct UnkStruct_8106AC8 +struct DiagonalArrowInfo { - s16 unk0; - s16 unk2; - u8 unk4; - u8 unk5; + s16 x; + s16 y; + bool8 unk4; + bool8 unk5; }; -extern const struct UnkStruct_8106AC8 gUnknown_8106AC8[]; - -struct UnkStruct_8106AE8 +static const struct DiagonalArrowInfo sDiagonalArrowsInfo[] = { - s16 unk0; - s16 unk2; - u32 unk4; - u8 unk8; - u8 unk9; - u8 unkA; + {-1, -1, TRUE, FALSE}, + {-1, 1, TRUE, TRUE}, + {1, 1, FALSE, TRUE}, + {1, -1, FALSE, FALSE}, }; -extern const struct UnkStruct_8106AE8 gUnknown_8106AE8[]; +struct RotateArrowInfo +{ + s16 x; + s16 y; + u32 tilemapNum; + bool8 unk8; + bool8 unk9; +}; + +static const struct RotateArrowInfo sRotateArrowsInfo[] = +{ + {0, 1, 0x212, FALSE, TRUE}, + {1, 1, 0x213, FALSE, TRUE}, + {1, 0, 0x214, FALSE, FALSE}, + {1, -1, 0x213, FALSE, FALSE}, + {0, -1, 0x212, TRUE, FALSE}, + {-1, -1, 0x213, TRUE, FALSE}, + {-1, 0, 0x214, TRUE, TRUE}, + {-1, 1, 0x213, TRUE, TRUE}, +}; // Creates arrow sprites which are used when in rotate or diagonal modes. static void TryCreateModeArrows(Entity *leader) @@ -681,9 +684,9 @@ static void TryCreateModeArrows(Entity *leader) SpriteSetBpp(&sprite, 0); SpriteSetShape(&sprite, 0); - matrixNum = (gUnknown_8106AC8[i].unk4 != 0) ? 8 : 0; + matrixNum = (sDiagonalArrowsInfo[i].unk4) ? 8 : 0; - if (gUnknown_8106AC8[i].unk5) + if (sDiagonalArrowsInfo[i].unk5) matrixNum += 16; SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum); @@ -696,14 +699,14 @@ static void TryCreateModeArrows(Entity *leader) SpriteSetUnk6_0(&sprite, 0); SpriteSetUnk6_1(&sprite, 0); - xMul = gUnknown_8106AC8[i].unk0 * 10; + xMul = sDiagonalArrowsInfo[i].x * 10; x2 = (sArrowsFrames / 2) & 7; - x = (x2 * gUnknown_8106AC8[i].unk0) + xMul + 116; + x = (x2 * sDiagonalArrowsInfo[i].x) + xMul + 116; SpriteSetX(&sprite, x); - yMul = gUnknown_8106AC8[i].unk2 * 10; + yMul = sDiagonalArrowsInfo[i].y * 10; y2 = (sArrowsFrames / 2) & 7; - y = (y2 * gUnknown_8106AC8[i].unk2) + yMul + 82; + y = (y2 * sDiagonalArrowsInfo[i].y) + yMul + 82; SpriteSetY(&sprite, y); AddSprite(&sprite, 0x100, NULL, NULL); @@ -713,20 +716,20 @@ static void TryCreateModeArrows(Entity *leader) else if (unkPtr->unk1821A) { s32 i; SpriteOAM sprite; - s32 var_2C = unkPtr->unk1821B; + s32 direction = unkPtr->rotateModeDirection; - if (unkPtr->unk1821B < 8) { + if (unkPtr->rotateModeDirection < NUM_DIRECTIONS) { s32 x, xMul, x2; s32 y, yMul, y2; s32 to = (sShowThreeArrows2 != FALSE && sShowThreeArrows1 != FALSE) ? 3 : 1; - xMul = gUnknown_8106AE8[var_2C].unk0 * 10; + xMul = sRotateArrowsInfo[direction].x * 10; x2 = (sArrowsFrames / 2) & 7; - x = (gUnknown_8106AE8[var_2C].unk0 * x2) + xMul + 116; + x = (sRotateArrowsInfo[direction].x * x2) + xMul + 116; - yMul = gUnknown_8106AE8[var_2C].unk2 * 10; + yMul = sRotateArrowsInfo[direction].y * 10; y2 = (sArrowsFrames / 2) & 7; - y = (y2 * gUnknown_8106AE8[var_2C].unk2) + yMul + 82; + y = (y2 * sRotateArrowsInfo[direction].y) + yMul + 82; for (i = 0; i < to; i++) { u32 matrixNum; @@ -737,15 +740,15 @@ static void TryCreateModeArrows(Entity *leader) SpriteSetBpp(&sprite, 0); SpriteSetShape(&sprite, 0); - matrixNum = (gUnknown_8106AE8[var_2C].unk8 != 0) ? 8 : 0; + matrixNum = (sRotateArrowsInfo[direction].unk8 != 0) ? 8 : 0; - if (gUnknown_8106AE8[var_2C].unk9) + if (sRotateArrowsInfo[direction].unk9) matrixNum += 16; SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum); SpriteSetSize(&sprite, 0); - SpriteSetTileNum(&sprite, gUnknown_8106AE8[var_2C].unk4); + SpriteSetTileNum(&sprite, sRotateArrowsInfo[direction].tilemapNum); SpriteSetPriority(&sprite, 2); SpriteSetPalNum(&sprite, 0); @@ -756,15 +759,15 @@ static void TryCreateModeArrows(Entity *leader) SpriteSetY(&sprite, y); AddSprite(&sprite, 0x100, NULL, NULL); - x += gUnknown_8106AE8[var_2C].unk0 * 4; - y += gUnknown_8106AE8[var_2C].unk2 * 4; + x += sRotateArrowsInfo[direction].x * 4; + y += sRotateArrowsInfo[direction].y * 4; } } } - if (sInRotateMode && unkPtr->unk1821C != unkPtr->unk1821B) { - unkPtr->unk1821C = unkPtr->unk1821B; - ChangeDungeonCameraPos(&leader->pos, unkPtr->unk1821B, 0, sInRotateMode); + if (sInRotateMode && unkPtr->prevRotateModeDirection != unkPtr->rotateModeDirection) { + unkPtr->prevRotateModeDirection = unkPtr->rotateModeDirection; + ChangeDungeonCameraPos(&leader->pos, unkPtr->rotateModeDirection, 0, sInRotateMode); } } @@ -1654,7 +1657,7 @@ static void PrintOnMainMenu(bool8 printAll) } } -bool8 sub_805FBE8(u8 *a0) +bool8 DungeonGiveNameToRecruitedMon(u8 *a0) { s32 r4; sub_803EAF0(8, a0); @@ -1673,76 +1676,4 @@ bool8 sub_805FBE8(u8 *a0) return FALSE; } -void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX) -{ - s32 i; - Windows windows = { - .id = { - [0] = WINDOW_DUMMY, - [1] = { - .type = WINDOW_TYPE_NORMAL, - .pos = {22, 4}, - .width = 6, - .height = 4, - .unk10 = 4, - }, - [2] = WINDOW_DUMMY, - [3] = WINDOW_DUMMY, - } - }; - windows.id[0] = *mainWindow; - windows.id[0].unk0 = 0x80; - - gDungeonMenu.menuIndex = 0; - gDungeonMenu.unk1C = gDungeonSubMenuItemsCount; - gDungeonMenu.unk1A = gDungeonSubMenuItemsCount; - gDungeonMenu.unk1E = 0; - gDungeonMenu.unk20 = 0; - gDungeonMenu.unk4 = 0; - gDungeonMenu.firstEntryY = 0; - gDungeonMenu.unk0 = 1; - gDungeonMenu.unkC = 0; - gDungeonMenu.unkE = 0; - gDungeonMenu.unk14 = gDungeonMenu.unk8; - - sub_801317C(&gDungeonMenu.unk28); - - windows.id[1].pos.x = subWindowX; - windows.id[1].width = 28 - subWindowX; - windows.id[1].height = windows.id[1].unk10 = sub_80095E4(gDungeonMenu.unk1C, 0); - DungeonShowWindows(&windows, FALSE); - sub_80137B0(&gDungeonMenu, windows.id[1].height * 8); - sub_80073B8(1); - - for (i = 0; i < gDungeonSubMenuItemsCount; i++) { - s32 colorId, y; - u8 text[20]; - - colorId = (CanSubMenuItemBeChosen(i) != FALSE) ? 7 : 2; - sprintfStatic(text, gUnknown_8106B50, colorId, GetDungeonSubMenuItemString(i)); - y = GetMenuEntryYCoord(&gDungeonMenu, i); - PrintStringOnWindow(8, y, text, 1, 0); - } - sub_80073E0(1); -} - -static bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0) -{ - u16 action = GetLeaderActionId(); - - a0->a0_8 = 0; - a0->a0_16 = 0; - a0->a0_24 = 0; - a0->a0_32 = 0; - if (action == 0xA) { - a0->a0_8 = 1; - a0->a0_32 = 1; - } - if (action == 0x3E) { - a0->a0_8 = 1; - a0->a0_16 = 0; - a0->a0_32 = 1; - } - return a0->a0_8; -} diff --git a/src/dungeon_submenu.c b/src/dungeon_submenu.c new file mode 100644 index 000000000..92a90afd6 --- /dev/null +++ b/src/dungeon_submenu.c @@ -0,0 +1,69 @@ +#include "global.h" +#include "globaldata.h" +#include "dungeon_submenu.h" +#include "menu_input.h" +#include "text.h" +#include "code_800D090.h" + +// The reason this short file(just 1 function) exists is because of the pksdir string which usually signifies the file's beginning. + +extern MenuInputStruct gDungeonMenu; +extern s32 gDungeonSubMenuItemsCount; + +extern u8 *GetDungeonSubMenuItemString(s32 param_1); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern void DungeonShowWindows(Windows *a0, u8 a1); + +void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX) +{ + s32 i; + Windows windows = { + .id = { + [0] = WINDOW_DUMMY, + [1] = { + .type = WINDOW_TYPE_NORMAL, + .pos = {22, 4}, + .width = 6, + .height = 4, + .unk10 = 4, + }, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + windows.id[0] = *mainWindow; + windows.id[0].unk0 = 0x80; + + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1C = gDungeonSubMenuItemsCount; + gDungeonMenu.unk1A = gDungeonSubMenuItemsCount; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 0; + gDungeonMenu.unk0 = 1; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14 = gDungeonMenu.unk8; + + sub_801317C(&gDungeonMenu.unk28); + + windows.id[1].pos.x = subWindowX; + windows.id[1].width = 28 - subWindowX; + windows.id[1].height = windows.id[1].unk10 = sub_80095E4(gDungeonMenu.unk1C, 0); + DungeonShowWindows(&windows, FALSE); + sub_80137B0(&gDungeonMenu, windows.id[1].height * 8); + sub_80073B8(1); + + for (i = 0; i < gDungeonSubMenuItemsCount; i++) { + s32 colorId, y; + u8 text[20]; + + colorId = (CanSubMenuItemBeChosen(i) != FALSE) ? 7 : 2; + sprintfStatic(text, _("{COLOR}%c%s"), colorId, GetDungeonSubMenuItemString(i)); + y = GetMenuEntryYCoord(&gDungeonMenu, i); + PrintStringOnWindow(8, y, text, 1, 0); + } + sub_80073E0(1); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 18bb55d20..0e53d74a9 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -150,6 +150,7 @@ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */ .include "src/dungeon_move.o" .include "src/dungeon_main.o" .include "src/code_805D8C8_2.o" + .include "src/code_805D8C8_3.o" gUnknown_202F268: /* 202F268 (sub_8062500) */ .space 0x8 diff --git a/sym_ewram_init.txt b/sym_ewram_init.txt index 4881ca4e9..50b3fe815 100644 --- a/sym_ewram_init.txt +++ b/sym_ewram_init.txt @@ -115,7 +115,7 @@ .include "src/dungeon_message.o" .include "src/dungeon_move.o" .include "src/dungeon_main.o" -.include "src/code_805D8C8_2.o" +.include "src/code_805D8C8_3.o" .include "src/dungeon_ai_items.o" .include "src/code_807CD9C.o" .include "src/dungeon_leader.o" From f3cda6d2f462b3b26cf9a41776ab937d00db8552 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 00:28:16 +0100 Subject: [PATCH 10/31] more dungeon menu file splits --- include/dungeon_menu_items.h | 11 + ld_script.txt | 5 +- src/code_805D8C8_3.c | 448 +-------------- src/dungeon_main.c | 31 +- ...{code_805D8C8_2.c => dungeon_menu_items.c} | 181 ++---- src/dungeon_menu_moves.c | 515 ++++++++++++++++++ sym_ewram.txt | 4 +- 7 files changed, 581 insertions(+), 614 deletions(-) create mode 100644 include/dungeon_menu_items.h rename src/{code_805D8C8_2.c => dungeon_menu_items.c} (85%) create mode 100644 src/dungeon_menu_moves.c diff --git a/include/dungeon_menu_items.h b/include/dungeon_menu_items.h new file mode 100644 index 000000000..ee8424def --- /dev/null +++ b/include/dungeon_menu_items.h @@ -0,0 +1,11 @@ +#ifndef GUARD_DUNGEON_MENU_ITEMS_H +#define GUARD_DUNGEON_MENU_ITEMS_H + +#include "dungeon_main.h" +#include "structs/dungeon_entity.h" + +bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0); +bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); +void sub_8060D24(UNUSED ActionContainer *a0); + +#endif diff --git a/ld_script.txt b/ld_script.txt index 948551853..00d58f768 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -228,8 +228,9 @@ SECTIONS { src/move_checks.o(.text); src/dungeon_main.o(.text); src/dungeon_submenu.o(.text); - src/code_805D8C8_2.o(.text); + src/dungeon_menu_items.o(.text); src/code_805D8C8_3.o(.text); + src/dungeon_menu_moves.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); src/code_805D8C8.o(.text); @@ -546,7 +547,7 @@ SECTIONS { data/data_8106A4C_0.o(.rodata); src/dungeon_main.o(.rodata); src/dungeon_submenu.o(.rodata); - src/code_805D8C8_2.o(.rodata); + src/dungeon_menu_items.o(.rodata); src/code_805D8C8_3.o(.rodata); data/data_8106A4C.o(.rodata); src/code_8066D04.o(.rodata); diff --git a/src/code_805D8C8_3.c b/src/code_805D8C8_3.c index a5dfa4b40..3942d0f6d 100644 --- a/src/code_805D8C8_3.c +++ b/src/code_805D8C8_3.c @@ -90,7 +90,6 @@ bool8 sub_8044B28(void); bool8 IsNotAttacking(Entity *param_1, bool8 param_2); void ShowMainMenu(bool8 fromBPress, bool8 a1); bool8 sub_805EF60(Entity *a0, EntityInfo *a1); -s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); void PrintOnMainMenu(bool8 printAll); bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); @@ -179,16 +178,13 @@ extern WindowHeader gUnknown_202F270; s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4); -void sub_8060890(DungeonPos *a0); -bool8 sub_8060860(s32 a0); void sub_8060900(Entity *a0); s32 sub_8060800(WindowHeader *a0, s32 a1); void ChosenSubMenuToAction(ActionContainer *a0); Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); -static UNUSED EWRAM_DATA u8 sUnused3[4] = {0}; EWRAM_DATA s32 gTeamMenuChosenId = 0; -static UNUSED EWRAM_DATA u8 sUnused4[4] = {0}; +static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better file and figure out the array count. Apparently it's only written to. @@ -1355,7 +1351,6 @@ void sub_80625A4(s32 count, struct subStruct_203B240 **strings) #include "code_8097DD0.h" #include "move_util.h" -#include "move_util.h" extern const u8 *const gUnknown_80FE95C; extern const u8 *const gUnknown_80FE960; @@ -1810,444 +1805,3 @@ void sub_8062D8C(ActionContainer *a0) sub_806A2BC(entityOrg, 0); ChangeDungeonCameraPos(&entityOrg->pos, 0, 1, 1); } - -extern s32 gUnknown_202F2D8; -extern s32 sub_8044FB4(u16 param_1); - -void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); -void sub_8063698(Entity *entity, u8 a1, u8 a2); -void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); -void sub_80637A4(ActionContainer *a0, s32 a1); - -bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) -{ - s32 i; - bool8 ret; - EntityInfo *entInfo = GetEntInfo(entity); - bool8 unkBool = TRUE; - EntityInfo *leaderInfo = GetEntInfo(GetLeader()); - WindowHeader header; - Windows windows = { - .id = { - [0] = { - .type = WINDOW_TYPE_WITH_HEADER, - .pos = {2, 2}, - .width = 18, - .height = 16, - .unk10 = 16, - .unk12 = 0, - .unk14 = &header, - }, - [1] = WINDOW_DUMMY, - [2] = WINDOW_DUMMY, - [3] = WINDOW_DUMMY, - } - }; - u8 unk[4]; - bool8 r10; - s32 r5; - bool8 bPress; - - gUnknown_202F2D8 = 0; - for (i = 0; i < MAX_MON_MOVES; i++) { - Move *move = &entInfo->moves.moves[i]; - - if (MoveFlagExists(move) && move->moveFlags2 & 2) { - move->moveFlags2 &= ~(2); - gUnknown_202F2D8 = i; - } - } - - while (1) { - r5 = 0; - ret = FALSE; - r10 = FALSE; - sub_80633E4(entity, entInfo, a1, &windows, &header, unk, a3, a4); - while (1) { - AddMenuCursorSprite_(&gDungeonMenu, unk); - DungeonRunFrameActions(0x1E); - if (gRealInputs.repeated & DPAD_DOWN) { - bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; - s32 id = gDungeonMenu.menuIndex; - - if (rHeld) { - gUnknown_202F2D8 = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); - if (id != gUnknown_202F2D8) { - PlayDungeonCursorSE(0); - } - else { - PlayDungeonCancelSE(); - } - r10 = TRUE; - break; - } - else { - sub_8013780(&gDungeonMenu, unk_FindMoveEnabledForAIAfter4(entInfo->moves.moves, id)); - if (id != gDungeonMenu.menuIndex) { - PlayDungeonCursorSE(0); - } - } - } - if (gRealInputs.repeated & DPAD_UP) { - bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; - s32 id = gDungeonMenu.menuIndex; - - if (rHeld) { - gUnknown_202F2D8 = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); - if (id != gUnknown_202F2D8) { - PlayDungeonCursorSE(0); - } - else { - PlayDungeonCancelSE(); - } - r10 = TRUE; - break; - } - else { - sub_8013780(&gDungeonMenu, sub_8092DB8(entInfo->moves.moves, id)); - if (id != gDungeonMenu.menuIndex) { - PlayDungeonCursorSE(0); - } - } - } - - if ((gRealInputs.repeated & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { - SetMonsterActionFields(&leaderInfo->action, 6); - break; - } - if ((gRealInputs.repeated & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { - SetMonsterActionFields(&leaderInfo->action, 7); - break; - } - - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { - if (a1) { - bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; - if (rHeld) { - r5 = 3; - } - } - PlayDungeonConfirmationSE(); - break; - } - - if (gRealInputs.pressed & START_BUTTON) { - r5 = 1; - PlayDungeonStartButtonSE(); - break; - } - if (gRealInputs.pressed & SELECT_BUTTON) { - r5 = 2; - PlayDungeonStartButtonSE(); - break; - } - // Fixme: r0/r1 regswap... - { - u32 bPressed = B_BUTTON; - bPressed &= gRealInputs.pressed; - if ((bPressed) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - ret = TRUE; - break; - } - } - } - - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1E); - if (leaderInfo->action.action == 6 || leaderInfo->action.action == 7) { - unkBool = FALSE; - break; - } - - if (r10) - continue; - if (ret) - break; - - gUnknown_202F2D8 = gDungeonMenu.menuIndex; - if (r5 == 1) { - SetMonsterActionFields(&leaderInfo->action, 0x1D); - leaderInfo->action.actionParameters[0].actionUseIndex = entity->unk24; - leaderInfo->action.actionParameters[1].actionUseIndex = gUnknown_202F2D8; - sub_803EAF0(0, NULL); - sub_803E708(8, 0x1B); - ret = FALSE; - break; - } - - sub_8063698(entity, a1, a2); - if (r5 == 3) { - s32 r6 = sub_8044FB4(0x20); - if (!CanSubMenuItemBeChosen(r6)) { - r6 = sub_8044FB4(0x21); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - else { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - else if (r5 == 2) { - if (entInfo->isTeamLeader) { - s32 r6 = sub_8044FB4(0x1E); - if (!CanSubMenuItemBeChosen(r6)) { - r6 = sub_8044FB4(0x33); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - else { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - else { - s32 r6 = sub_8044FB4(0x1F); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); - break; - } - } - } - - sub_8009524(2); - CreateDungeonMenuSubWindow(&windows.id[0], 0x16); - while (1) { - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - if (gRealInputs.repeated & DPAD_DOWN) { - PlayDungeonCursorSE(1); - MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); - } - if (gRealInputs.repeated & DPAD_UP) { - PlayDungeonCursorSE(1); - MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); - } - - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { - if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { - sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); - if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { - PlayDungeonConfirmationSE(); - } - bPress = FALSE; - break; - } - PlayDungeonCancelSE(); - } - if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - bPress = TRUE; - break; - } - } - - AddMenuCursorSprite(&gDungeonMenu); - DungeonRunFrameActions(0x1B); - if (bPress != TRUE) { - ret = 0; - break; - } - } - - if (unkBool) { - sub_803EAF0(0, NULL); - sub_803E708(8, 0x1E); - } - - return ret; -} - -extern const Window gUnknown_8106CAC; -void sub_8063578(s32 a0, Entity *entity, Moves *moves, s32 a3, u8 a4, s32 a5); -extern const u8 *const gUnknown_80FDFE8; - -void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) -{ - s32 i, movesCount; - Window windowNew = gUnknown_8106CAC; - - header->f0 = arg7; - header->f1 = arg6; - header->f3 = 0; - - movesCount = 0; - for (i = 0; i < MAX_MON_MOVES; i++) { - Move *move = &entInfo->moves.moves[i]; - if (MoveFlagExists(move)) { - movesCount++; - } - } - - gDungeonMenu.menuIndex = gUnknown_202F2D8; - gDungeonMenu.unk1A = movesCount; - gDungeonMenu.unk1C = 4; - gDungeonMenu.unk1E = arg6; - gDungeonMenu.unk20 = arg7; - gDungeonMenu.unk4 = 0; - gDungeonMenu.firstEntryY = 16; - gDungeonMenu.unk14.x = 0; - gDungeonMenu.unk0 = 0; - sub_801317C(&gDungeonMenu.unk28); - - windows->id[0].height = windows->id[0].unk10 = sub_80095E4(4, 0xC) + 2; - header->f2 = 13; - windows->id[0].pos.x = 2; - windows->id[1] = windows->id[3]; - windows->id[2] = windowNew; - DungeonShowWindows(windows, TRUE); - sub_80137B0(&gDungeonMenu, 0); - gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 16) * 8; - gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; - SetMessageArgument_2(gFormatBuffer_Monsters[0], entInfo, 0); - for (i = 0; i < MAX_MON_MOVES; i++) { - Move *move = &entInfo->moves.moves[i]; - - arg5[i] = 0; - if (!MoveFlagExists(move)) { - if (gDungeonMenu.menuIndex == i) { - gDungeonMenu.menuIndex = 0; - } - } - else if (MoveFlagLinkChain(move)) { - arg5[i] = 1; - } - } - - sub_8063578(4, entity, &entInfo->moves, 0, a2, arg6); - sub_80073B8(2); - PrintFormattedStringOnWindow(4, 0, gUnknown_80FDFE8, 2, '\0'); - sub_80073E0(2); -} - -extern const u8 gUnknown_8106CC4[]; - -void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s32 a5) -{ - s32 i; - EntityInfo *entInfo = GetEntInfo(entity); - - sub_80073B8(windowId); - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); - PrintFormattedStringOnWindow((a5 * 8) + 10, 0, gUnknown_80FE978, windowId, '\0'); - for (i = 0; i < count; i++) { - s32 x, y; - unkStruct_80928C0 movStruct = {0, 106, 0, a4}; - Move *move = &moves->moves[i]; - - if (MoveFlagExists(move)) { - if (entInfo->isTeamLeader) { - movStruct.unk0 = 2; - } - else { - movStruct.unk0 = 4; - } - - movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); - BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); - y = GetMenuEntryYCoord(&gDungeonMenu, i); - if (MoveFlagLinkChain(move)) { - x = 13; - } - else { - x = 8; - if (i != 0) { - sub_80078A4(windowId, 12, y - 2, 120, 7); - } - } - PrintFormattedStringOnWindow(x, y, gUnknown_8106CC4, windowId, '\0'); - } - } - - sub_80073E0(windowId); -} - -bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); -bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); - -void sub_8063698(Entity *entity, u8 a1, u8 a2) -{ - EntityInfo *entInfo = GetEntInfo(entity); - Move *move = &entInfo->moves.moves[gUnknown_202F2D8]; - - gDungeonSubMenuItemsCount = 0; - if (entInfo->isTeamLeader) { - if (a2) { - sub_8044F5C(0x14, 0); - } - if (MoveFlagExists(move)) { - if (MoveFlagSet(move)) { - sub_8044F5C(0x33, 0); - } - else { - sub_8044F5C(0x1E, 0); - } - } - } - else { - sub_8044F5C(0x1F, 0); - } - - if (a1) { - sub_8044F5C(0x20, 0); - sub_8044F5C(0x21, 0); - } - sub_8044F5C(0x1D, 0); - if (!a1) { - sub_8044FF0(0x20); - } - else { - if (!sub_8063C88(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x20); - } - if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x21); - } - } - - if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x21); - } - - if (a2) { - bool8 unkBool = FALSE; - if (gUnknown_202F2D8 < MAX_MON_MOVES) { - unkBool = CanAIUseMove(entity, gUnknown_202F2D8, TRUE) != FALSE; - } - if (!unkBool) { - sub_8044FF0(0x14); - } - } - - sub_8045064(); -} - -void sub_80637A4(ActionContainer *a0, s32 a1) -{ - sub_80637BC(a0, gDungeonMenu.menuIndex, a1); -} - -void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2) -{ - SetMonsterActionFields(a0, gUnknown_202EE44[a1].unk0); - a0->actionParameters[0].actionUseIndex = a2; - a0->actionParameters[1].actionUseIndex = gUnknown_202F2D8; -} - -void sub_8063834(Move *moves, s32 a1, s32 a2); - -void sub_80637E8(ActionContainer *a0) -{ - Entity *mon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; - EntityInfo *monInfo = GetEntInfo(mon); - - monInfo->moves.moves[a0->actionParameters[1].actionUseIndex].moveFlags2 |= 2; - sub_8063834(monInfo->moves.moves, a0->actionParameters[1].actionUseIndex, 4); -} - -// diff --git a/src/dungeon_main.c b/src/dungeon_main.c index d40f0799b..087d0b500 100644 --- a/src/dungeon_main.c +++ b/src/dungeon_main.c @@ -43,6 +43,7 @@ #include "code_8044CC8.h" #include "code_801B3C0.h" #include "dungeon_capabilities.h" +#include "dungeon_menu_items.h" #include "constants/dungeon.h" #include "constants/status.h" #include "constants/tactic.h" @@ -84,12 +85,9 @@ bool8 sub_8094C48(void); void sub_803E724(s32 a0); void HandleTalkFieldAction(Entity *); bool8 sub_8044B28(void); -bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0); bool8 IsNotAttacking(Entity *param_1, bool8 param_2); s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); -bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); -void sub_8060D24(UNUSED ActionContainer *a0); bool8 ShowDungeonTeamMenu(Entity *a0); void sub_8062D8C(ActionContainer *a0); void sub_80637E8(ActionContainer *a0); @@ -105,6 +103,17 @@ void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern bool8 sub_8071A8C(Entity *pokemon); extern void sub_80643AC(Entity *pokemon); extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); +extern void GetWeatherName(u8 *dst, u8 weatherId); +extern bool8 sub_8070F14(Entity * pokemon, s32 direction); +extern Entity *sub_80696A8(Entity *a0); +extern u8 sub_806A538(s32); +extern void sub_803EAF0(u32, u8 *); +extern void sub_803F508(Entity *); +extern void sub_8041AD0(Entity *pokemon); +extern void sub_8041AE0(Entity *pokemon); +extern void sub_807EC28(bool8); +extern void PlayDungeonCursorSE(u8 param_1); +extern const u8 *GetCurrentDungeonName(void); extern u8 gUnknown_202EE00; extern Entity *gLeaderPointer; @@ -129,7 +138,6 @@ extern const u8 *gTeamToolboxBPtr; extern const u8 *gFieldItemMenuGroundTextPtr; extern const u8 *gUnknown_80FE940; extern const u8 *gWhichTextPtr1; - extern const u8 *const gFieldMenuMovesPtr; extern const u8 *const gFieldMenuItemsPtr; extern const u8 *const gFieldMenuTeamPtr; @@ -142,19 +150,6 @@ extern const u8 *const gUnknown_80F91E0; extern const u8 *const gUnknown_80F91A8; extern const u8 *const gUnknown_80FE954; -const u8 *GetCurrentDungeonName(void); -void GetWeatherName(u8 *dst, u8 weatherId); - -extern bool8 sub_8070F14(Entity * pokemon, s32 direction); -extern Entity *sub_80696A8(Entity *a0); -extern u8 sub_806A538(s32); -extern void sub_803EAF0(u32, u8 *); -extern void sub_803F508(Entity *); -extern void sub_8041AD0(Entity *pokemon); -extern void sub_8041AE0(Entity *pokemon); -extern void sub_807EC28(bool8); -extern void PlayDungeonCursorSE(u8 param_1); - extern MenuInputStruct gDungeonMenu; extern s32 gTeamMenuChosenId; @@ -1675,5 +1670,3 @@ bool8 DungeonGiveNameToRecruitedMon(u8 *a0) return FALSE; } - - diff --git a/src/code_805D8C8_2.c b/src/dungeon_menu_items.c similarity index 85% rename from src/code_805D8C8_2.c rename to src/dungeon_menu_items.c index 133e5f7fc..4dbfae777 100644 --- a/src/code_805D8C8_2.c +++ b/src/dungeon_menu_items.c @@ -1,151 +1,41 @@ #include "global.h" #include "globaldata.h" +#include "dungeon_menu_items.h" #include "structs/str_dungeon.h" -#include "number_util.h" #include "input.h" #include "structs/map.h" #include "dungeon_main.h" #include "dungeon_message.h" #include "dungeon_action.h" -#include "dungeon_ai_targeting.h" #include "dungeon_pokemon_attributes.h" -#include "dungeon_random.h" #include "dungeon_util.h" #include "pokemon.h" -#include "moves.h" #include "items.h" #include "dungeon_music.h" #include "dungeon_ai_movement.h" #include "code_8045A00.h" #include "string_format.h" #include "code_803E46C.h" -#include "code_801602C.h" -#include "code_800D090.h" #include "trap.h" -#include "charge_move.h" #include "dungeon_map_access.h" #include "status_checks_1.h" -#include "game_options.h" -#include "weather.h" #include "dungeon_items.h" #include "dungeon_leader.h" #include "tile_types.h" -#include "dungeon_visibility.h" -#include "dungeon_movement.h" -#include "bg_control.h" #include "menu_input.h" -#include "music.h" -#include "items.h" -#include "play_time.h" -#include "pokemon_3.h" #include "text.h" -#include "code_806CD90.h" #include "code_8044CC8.h" #include "code_801B3C0.h" #include "dungeon_capabilities.h" -#include "constants/dungeon.h" -#include "constants/status.h" -#include "constants/tactic.h" -#include "constants/iq_skill.h" -#include "constants/dungeon_action.h" -#include "structs/struct_sub80095e4.h" -#include "structs/str_text.h" -extern void HandleSetItemAction(Entity *,bool8); -extern void HandleUnsetItemAction(Entity *,bool8); -extern bool8 sub_8048A68(Entity *param_1,Item *item); -extern bool8 sub_8048950(Entity *param_1,Item *item); -extern bool8 sub_8048B9C(Entity *param_1,Item *item); -extern Item *sub_8044D90(Entity *, s32, u32); extern void PlayDungeonStartButtonSE(void); extern void PlayDungeonCancelSE(void); extern void PlayDungeonConfirmationSE(void); -extern void sub_806A6E8(Entity *); -extern bool8 sub_8047084(s32 itemFlag); -extern void HandleTrap(Entity *pokemon, DungeonPos *pos, int param_3, char param_4); -extern void sub_8045DB4(DungeonPos *, u32); -bool8 sub_807EF48(void); -void sub_806A2BC(Entity *a0, u8 a1); -bool8 sub_805E874(void); -bool8 sub_80701A4(Entity *a0); -void ShowDungeonStairsMenu(Entity *a0); -void sub_805E738(Entity *a0); -void sub_803E708(s32 a0, s32 a1); -void sub_8040A78(void); -void sub_805E804(void); -void ShowDungeonOthersMenu(void); -void sub_8075680(u32); -void sub_8094C88(void); -void sub_8040A84(void); -void sub_8047158(void); -void sub_806A914(u8 a0, u8 a1, u8 a2); -void SetLeaderActionToNothing(u8 a0); -u16 GetLeaderActionId(void); -void sub_80978C8(s16 a0); -bool8 sub_8094C48(void); -bool8 sub_805EC4C(Entity *a0, u8 a1); -void sub_803E724(s32 a0); -void HandleTalkFieldAction(Entity *); -bool8 sub_8044B28(void); -bool8 IsNotAttacking(Entity *param_1, bool8 param_2); -void ShowMainMenu(bool8 fromBPress, bool8 a1); -bool8 sub_805EF60(Entity *a0, EntityInfo *a1); -s32 GetTeamMemberEntityIndex(Entity *pokemon); -bool8 sub_8070F80(Entity * pokemon, s32 direction); -void PrintOnMainMenu(bool8 printAll); -bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); -void sub_8060D24(UNUSED ActionContainer *a0); -bool8 ShowDungeonTeamMenu(Entity *a0); -void sub_8062D8C(ActionContainer *a0); -void sub_80637E8(ActionContainer *a0); -void sub_8063B54(ActionContainer *a0); -void sub_8063BB4(ActionContainer *a0); -void sub_806752C(ActionContainer *a0); -void sub_8061A38(ActionContainer *a0, bool8 a1); -void sub_8063A70(ActionContainer *a0, bool8 a1); -void sub_8063CF0(ActionContainer *a0, bool8 a1); -void sub_8067768(ActionContainer *a0); -void ShowTacticsMenu(ActionContainer *a0); -void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); -extern bool8 sub_8071A8C(Entity *pokemon); -extern void sub_80643AC(Entity *pokemon); -extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); - -extern u8 gUnknown_202EE00; -extern Entity *gLeaderPointer; - -extern const u8 *gUnknown_80F8A84; -extern const u8 *gUnknown_80F8A6C; -extern const u8 *gUnknown_80F8ADC; -extern const u8 *gUnknown_80F8AB0; -extern const u8 *gUnknown_80F8B0C; -extern const u8 *gUnknown_80FD4B0; -extern const u8 *gUnknown_80F8A4C; -extern const u8 *gUnknown_80F8A28; -extern const u8 *gUnknown_8100208; -extern const u8 *gUnknown_80F9BD8; -extern const u8 *gUnknown_80F9C08; -extern const u8 *gUnknown_80F9C2C; -extern const u8 *gUnknown_80F9BB0; -extern const u8 *gUnknown_80FDE18; -extern const u8 *gUnknown_80F8B24; -extern const u8 *gTeamToolboxAPtr; -extern const u8 *gTeamToolboxBPtr; -extern const u8 *gFieldItemMenuGroundTextPtr; -extern const u8 *gUnknown_80FE940; -extern const u8 *gWhichTextPtr1; -extern const u8 *const gFieldMenuMovesPtr; -extern const u8 *const gFieldMenuItemsPtr; -extern const u8 *const gFieldMenuTeamPtr; -extern const u8 *const gFieldMenuOthersPtr; -extern const u8 *const gFieldMenuGroundPtr; -extern const u8 *const gUnknown_80F9174; -extern const u8 *const gUnknown_80F9190; -extern const u8 *const gUnknown_80F91C8; -extern const u8 *const gUnknown_80F91E0; -extern const u8 *const gUnknown_80F91A8; -extern const u8 *const gUnknown_80FE954; - +extern void sub_806A2BC(Entity *a0, u8 a1); +extern void SetLeaderActionToNothing(u8 a0); +extern void sub_803E708(s32 a0, s32 a1); +extern void sub_8047158(void); +extern Item *sub_8044D90(Entity *, s32, u32); extern bool8 sub_8070F14(Entity * pokemon, s32 direction); bool8 sub_805EC2C(Entity *a0, s32 x, s32 y); extern Entity *sub_80696A8(Entity *a0); @@ -161,27 +51,40 @@ extern bool8 CanSubMenuItemBeChosen(s32 param_1); extern s32 gDungeonSubMenuItemsCount; extern const u8 gUnknown_8106B50[]; extern void DungeonShowWindows(Windows *a0, u8 a1); +extern Item * sub_8044CC8(Entity *param_1, ActionParameter *param_2, UNUSED s32 a3); +extern void sub_8044F5C(u16 param_1, u8 param_2); +extern void sub_8044FF0(u16 param_1); +extern u16 sub_8044DC8(Item *param_1); +extern bool8 sub_8046F00(Item *item); +extern void sub_8045064(void); +extern bool8 PosHasItem(DungeonPos *pos); +Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); + +extern u8 gUnknown_202EE00; +extern Entity *gLeaderPointer; extern MenuInputStruct gDungeonMenu; -s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4); +extern const u8 *gUnknown_80F8B24; +extern const u8 *gTeamToolboxAPtr; +extern const u8 *gTeamToolboxBPtr; +extern const u8 *gFieldItemMenuGroundTextPtr; +extern const u8 *gUnknown_80FE940; +extern const u8 *gWhichTextPtr1; -void sub_8060890(DungeonPos *a0); -bool8 sub_8060860(s32 a0); -void sub_8060900(Entity *a0); -s32 sub_8060800(WindowHeader *a0, s32 a1); -void ChosenSubMenuToAction(ActionContainer *a0); -Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); - -// Could this be a start of a new file? -static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; static EWRAM_DATA ActionParameter sUnknownActionUnk4 = {0}; static EWRAM_DATA s32 sUnknown_202F240 = 0; -static UNUSED EWRAM_DATA u8 sUnused2[4] = {0}; +static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; static EWRAM_DATA s16 sUnknown_202F248[8] = {0}; static EWRAM_DATA s32 sUnknown_202F258 = 0; static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); +static s32 sub_8060800(WindowHeader *a0, s32 a1); +static bool8 sub_8060860(s32 a0); +static void sub_8060890(DungeonPos *a0); +static void sub_8060900(Entity *a0); +static void ChosenSubMenuToAction(ActionContainer *a0); +static s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4); bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0) { @@ -635,7 +538,7 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, b } } -s32 sub_8060800(WindowHeader *a0, s32 a1) +static s32 sub_8060800(WindowHeader *a0, s32 a1) { s32 i, r1, r2, r3; @@ -665,7 +568,7 @@ s32 sub_8060800(WindowHeader *a0, s32 a1) return r1; } -bool8 sub_8060860(s32 a0) +static bool8 sub_8060860(s32 a0) { if (gDungeonMenu.unk1A <= 1 || sUnknown_202F248[a0] > 1) return FALSE; @@ -673,7 +576,7 @@ bool8 sub_8060860(s32 a0) return TRUE; } -void sub_8060890(DungeonPos *a0) +static void sub_8060890(DungeonPos *a0) { s32 var = sUnknown_202F248[gDungeonMenu.unk1E]; switch (var) @@ -696,14 +599,7 @@ void sub_8060890(DungeonPos *a0) sUnknownActionUnk4.itemPos.y = a0->y; } -extern Item * sub_8044CC8(Entity *param_1, ActionParameter *param_2, UNUSED s32 a3); -extern void sub_8044F5C(u16 param_1, u8 param_2); -extern void sub_8044FF0(u16 param_1); -extern u16 sub_8044DC8(Item *param_1); -extern bool8 sub_8046F00(Item *item); -extern void sub_8045064(void); - -void sub_8060900(Entity *a0) +static void sub_8060900(Entity *a0) { u16 val_sub8044DC8; Item *item = sub_8044CC8(a0, &sUnknownActionUnk4, 0xA); @@ -889,7 +785,7 @@ void sub_8060900(Entity *a0) sub_8045064(); } -void ChosenSubMenuToAction(ActionContainer *a0) +static void ChosenSubMenuToAction(ActionContainer *a0) { SetMonsterActionFields(a0, gUnknown_202EE44[gDungeonMenu.menuIndex].unk0); a0->actionParameters[0] = sUnknownActionUnk4; @@ -912,9 +808,7 @@ void sub_8060D24(UNUSED ActionContainer *a0) sub_803EAF0(0, NULL); } -extern bool8 PosHasItem(DungeonPos *pos); - -s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4) +static s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4) { s32 i; s32 count = 0; @@ -943,6 +837,3 @@ s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4) return count; } - - - diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c new file mode 100644 index 000000000..128fbc91c --- /dev/null +++ b/src/dungeon_menu_moves.c @@ -0,0 +1,515 @@ +#include "global.h" +#include "globaldata.h" +#include "structs/str_dungeon.h" +#include "number_util.h" +#include "input.h" +#include "structs/map.h" +#include "dungeon_main.h" +#include "dungeon_message.h" +#include "dungeon_action.h" +#include "dungeon_ai_targeting.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_random.h" +#include "dungeon_util.h" +#include "pokemon.h" +#include "moves.h" +#include "items.h" +#include "dungeon_music.h" +#include "dungeon_ai_movement.h" +#include "code_8045A00.h" +#include "string_format.h" +#include "code_803E46C.h" +#include "code_801602C.h" +#include "code_800D090.h" +#include "trap.h" +#include "charge_move.h" +#include "dungeon_map_access.h" +#include "status_checks_1.h" +#include "game_options.h" +#include "weather.h" +#include "dungeon_items.h" +#include "dungeon_leader.h" +#include "tile_types.h" +#include "dungeon_visibility.h" +#include "dungeon_movement.h" +#include "bg_control.h" +#include "menu_input.h" +#include "music.h" +#include "items.h" +#include "play_time.h" +#include "pokemon_3.h" +#include "text.h" +#include "code_806CD90.h" +#include "code_8044CC8.h" +#include "code_801B3C0.h" +#include "move_util.h" +#include "dungeon_capabilities.h" +#include "constants/dungeon.h" +#include "constants/status.h" +#include "constants/tactic.h" +#include "constants/iq_skill.h" +#include "constants/dungeon_action.h" +#include "structs/struct_sub80095e4.h" +#include "structs/str_text.h" + +extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); +extern void PlayDungeonStartButtonSE(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); +extern void PlayDungeonCursorSE(u8 param_1); +extern u8 *GetDungeonSubMenuItemString(s32 param_1); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern void sub_8045064(void); +extern void sub_803EAF0(u32, u8 *); +extern void sub_803E708(s32 a0, s32 a1); +extern void sub_8044F5C(u16 param_1, u8 param_2); +extern void sub_8044FF0(u16 param_1); +extern void DungeonShowWindows(Windows *a0, u8 a1); +extern s32 GetTeamMemberEntityIndex(Entity *pokemon); +extern u32 sub_8062D88(void); + +extern s32 gDungeonSubMenuItemsCount; +extern MenuInputStruct gDungeonMenu; +extern WindowHeader gUnknown_202F270; +extern s32 gUnknown_202F2D8; +extern s32 sub_8044FB4(u16 param_1); + +extern const u8 *const gUnknown_80FE978; + +void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); +void sub_8063698(Entity *entity, u8 a1, u8 a2); +void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); +void sub_80637A4(ActionContainer *a0, s32 a1); + +bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) +{ + s32 i; + bool8 ret; + EntityInfo *entInfo = GetEntInfo(entity); + bool8 unkBool = TRUE; + EntityInfo *leaderInfo = GetEntInfo(GetLeader()); + WindowHeader header; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .unk14 = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + u8 unk[4]; + bool8 r10; + s32 r5; + bool8 bPress; + + gUnknown_202F2D8 = 0; + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + + if (MoveFlagExists(move) && move->moveFlags2 & 2) { + move->moveFlags2 &= ~(2); + gUnknown_202F2D8 = i; + } + } + + while (1) { + r5 = 0; + ret = FALSE; + r10 = FALSE; + sub_80633E4(entity, entInfo, a1, &windows, &header, unk, a3, a4); + while (1) { + AddMenuCursorSprite_(&gDungeonMenu, unk); + DungeonRunFrameActions(0x1E); + if (gRealInputs.repeated & DPAD_DOWN) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + s32 id = gDungeonMenu.menuIndex; + + if (rHeld) { + gUnknown_202F2D8 = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); + if (id != gUnknown_202F2D8) { + PlayDungeonCursorSE(0); + } + else { + PlayDungeonCancelSE(); + } + r10 = TRUE; + break; + } + else { + sub_8013780(&gDungeonMenu, unk_FindMoveEnabledForAIAfter4(entInfo->moves.moves, id)); + if (id != gDungeonMenu.menuIndex) { + PlayDungeonCursorSE(0); + } + } + } + if (gRealInputs.repeated & DPAD_UP) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + s32 id = gDungeonMenu.menuIndex; + + if (rHeld) { + gUnknown_202F2D8 = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); + if (id != gUnknown_202F2D8) { + PlayDungeonCursorSE(0); + } + else { + PlayDungeonCancelSE(); + } + r10 = TRUE; + break; + } + else { + sub_8013780(&gDungeonMenu, sub_8092DB8(entInfo->moves.moves, id)); + if (id != gDungeonMenu.menuIndex) { + PlayDungeonCursorSE(0); + } + } + } + + if ((gRealInputs.repeated & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { + SetMonsterActionFields(&leaderInfo->action, 6); + break; + } + if ((gRealInputs.repeated & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { + SetMonsterActionFields(&leaderInfo->action, 7); + break; + } + + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if (a1) { + bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; + if (rHeld) { + r5 = 3; + } + } + PlayDungeonConfirmationSE(); + break; + } + + if (gRealInputs.pressed & START_BUTTON) { + r5 = 1; + PlayDungeonStartButtonSE(); + break; + } + if (gRealInputs.pressed & SELECT_BUTTON) { + r5 = 2; + PlayDungeonStartButtonSE(); + break; + } + // Fixme: r0/r1 regswap... + { + u32 bPressed = B_BUTTON; + bPressed &= gRealInputs.pressed; + if ((bPressed) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + ret = TRUE; + break; + } + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1E); + if (leaderInfo->action.action == 6 || leaderInfo->action.action == 7) { + unkBool = FALSE; + break; + } + + if (r10) + continue; + if (ret) + break; + + gUnknown_202F2D8 = gDungeonMenu.menuIndex; + if (r5 == 1) { + SetMonsterActionFields(&leaderInfo->action, 0x1D); + leaderInfo->action.actionParameters[0].actionUseIndex = entity->unk24; + leaderInfo->action.actionParameters[1].actionUseIndex = gUnknown_202F2D8; + sub_803EAF0(0, NULL); + sub_803E708(8, 0x1B); + ret = FALSE; + break; + } + + sub_8063698(entity, a1, a2); + if (r5 == 3) { + s32 r6 = sub_8044FB4(0x20); + if (!CanSubMenuItemBeChosen(r6)) { + r6 = sub_8044FB4(0x21); + if (CanSubMenuItemBeChosen(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else if (r5 == 2) { + if (entInfo->isTeamLeader) { + s32 r6 = sub_8044FB4(0x1E); + if (!CanSubMenuItemBeChosen(r6)) { + r6 = sub_8044FB4(0x33); + if (CanSubMenuItemBeChosen(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + else { + s32 r6 = sub_8044FB4(0x1F); + if (CanSubMenuItemBeChosen(r6)) { + sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + break; + } + } + } + + sub_8009524(2); + CreateDungeonMenuSubWindow(&windows.id[0], 0x16); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(1); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(1); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { + sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); + if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { + PlayDungeonConfirmationSE(); + } + bPress = FALSE; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + if (bPress != TRUE) { + ret = 0; + break; + } + } + + if (unkBool) { + sub_803EAF0(0, NULL); + sub_803E708(8, 0x1E); + } + + return ret; +} + +extern const Window gUnknown_8106CAC; +void sub_8063578(s32 a0, Entity *entity, Moves *moves, s32 a3, u8 a4, s32 a5); +extern const u8 *const gUnknown_80FDFE8; + +void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) +{ + s32 i, movesCount; + Window windowNew = gUnknown_8106CAC; + + header->f0 = arg7; + header->f1 = arg6; + header->f3 = 0; + + movesCount = 0; + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + if (MoveFlagExists(move)) { + movesCount++; + } + } + + gDungeonMenu.menuIndex = gUnknown_202F2D8; + gDungeonMenu.unk1A = movesCount; + gDungeonMenu.unk1C = 4; + gDungeonMenu.unk1E = arg6; + gDungeonMenu.unk20 = arg7; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + + windows->id[0].height = windows->id[0].unk10 = sub_80095E4(4, 0xC) + 2; + header->f2 = 13; + windows->id[0].pos.x = 2; + windows->id[1] = windows->id[3]; + windows->id[2] = windowNew; + DungeonShowWindows(windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 16) * 8; + gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + SetMessageArgument_2(gFormatBuffer_Monsters[0], entInfo, 0); + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[i]; + + arg5[i] = 0; + if (!MoveFlagExists(move)) { + if (gDungeonMenu.menuIndex == i) { + gDungeonMenu.menuIndex = 0; + } + } + else if (MoveFlagLinkChain(move)) { + arg5[i] = 1; + } + } + + sub_8063578(4, entity, &entInfo->moves, 0, a2, arg6); + sub_80073B8(2); + PrintFormattedStringOnWindow(4, 0, gUnknown_80FDFE8, 2, '\0'); + sub_80073E0(2); +} + +extern const u8 gUnknown_8106CC4[]; + +void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s32 a5) +{ + s32 i; + EntityInfo *entInfo = GetEntInfo(entity); + + sub_80073B8(windowId); + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); + PrintFormattedStringOnWindow((a5 * 8) + 10, 0, gUnknown_80FE978, windowId, '\0'); + for (i = 0; i < count; i++) { + s32 x, y; + unkStruct_80928C0 movStruct = {0, 106, 0, a4}; + Move *move = &moves->moves[i]; + + if (MoveFlagExists(move)) { + if (entInfo->isTeamLeader) { + movStruct.unk0 = 2; + } + else { + movStruct.unk0 = 4; + } + + movStruct.unk8 = (CanMonsterUseMove(entity, move, TRUE) == FALSE); + BufferMoveName(gFormatBuffer_Items[0], move, &movStruct); + y = GetMenuEntryYCoord(&gDungeonMenu, i); + if (MoveFlagLinkChain(move)) { + x = 13; + } + else { + x = 8; + if (i != 0) { + sub_80078A4(windowId, 12, y - 2, 120, 7); + } + } + PrintFormattedStringOnWindow(x, y, gUnknown_8106CC4, windowId, '\0'); + } + } + + sub_80073E0(windowId); +} + +bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); +bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); + +void sub_8063698(Entity *entity, u8 a1, u8 a2) +{ + EntityInfo *entInfo = GetEntInfo(entity); + Move *move = &entInfo->moves.moves[gUnknown_202F2D8]; + + gDungeonSubMenuItemsCount = 0; + if (entInfo->isTeamLeader) { + if (a2) { + sub_8044F5C(0x14, 0); + } + if (MoveFlagExists(move)) { + if (MoveFlagSet(move)) { + sub_8044F5C(0x33, 0); + } + else { + sub_8044F5C(0x1E, 0); + } + } + } + else { + sub_8044F5C(0x1F, 0); + } + + if (a1) { + sub_8044F5C(0x20, 0); + sub_8044F5C(0x21, 0); + } + sub_8044F5C(0x1D, 0); + if (!a1) { + sub_8044FF0(0x20); + } + else { + if (!sub_8063C88(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x20); + } + if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x21); + } + } + + if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { + sub_8044FF0(0x21); + } + + if (a2) { + bool8 unkBool = FALSE; + if (gUnknown_202F2D8 < MAX_MON_MOVES) { + unkBool = CanAIUseMove(entity, gUnknown_202F2D8, TRUE) != FALSE; + } + if (!unkBool) { + sub_8044FF0(0x14); + } + } + + sub_8045064(); +} + +void sub_80637A4(ActionContainer *a0, s32 a1) +{ + sub_80637BC(a0, gDungeonMenu.menuIndex, a1); +} + +void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2) +{ + SetMonsterActionFields(a0, gUnknown_202EE44[a1].unk0); + a0->actionParameters[0].actionUseIndex = a2; + a0->actionParameters[1].actionUseIndex = gUnknown_202F2D8; +} + +void sub_8063834(Move *moves, s32 a1, s32 a2); + +void sub_80637E8(ActionContainer *a0) +{ + Entity *mon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + EntityInfo *monInfo = GetEntInfo(mon); + + monInfo->moves.moves[a0->actionParameters[1].actionUseIndex].moveFlags2 |= 2; + sub_8063834(monInfo->moves.moves, a0->actionParameters[1].actionUseIndex, 4); +} + +// diff --git a/sym_ewram.txt b/sym_ewram.txt index 0e53d74a9..e569ad142 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -149,7 +149,9 @@ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */ .include "src/dungeon_message.o" .include "src/dungeon_move.o" .include "src/dungeon_main.o" - .include "src/code_805D8C8_2.o" + .space 0x4 + .include "src/dungeon_menu_items.o" + .space 0x4 .include "src/code_805D8C8_3.o" gUnknown_202F268: /* 202F268 (sub_8062500) */ From 5916b9cd4017871d4cb980148c5f854eb1a40e87 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 11:03:19 +0100 Subject: [PATCH 11/31] morea clean-up dung menus --- charmap.txt | 10 +- data/data_8106A4C.s | 43 --- include/dungeon_menu_moves.h | 8 + include/dungeon_menu_team.h | 6 + ld_script.txt | 4 +- src/dungeon_main.c | 5 +- src/dungeon_menu_moves.c | 160 ++++++--- src/{code_805D8C8_3.c => dungeon_menu_team.c} | 328 ++++-------------- sym_ewram.txt | 8 +- sym_ewram_init.txt | 2 +- 10 files changed, 223 insertions(+), 351 deletions(-) create mode 100644 include/dungeon_menu_moves.h create mode 100644 include/dungeon_menu_team.h rename src/{code_805D8C8_3.c => dungeon_menu_team.c} (88%) diff --git a/charmap.txt b/charmap.txt index eab6e4360..c97711df1 100644 --- a/charmap.txt +++ b/charmap.txt @@ -465,8 +465,14 @@ STAR_BULLET = 87 42 @ = 87 43 @ Star with E ICON_STICKY = 87 44 SPEECH_BUBBLE = 87 45 -@ 87 46..49 - red hearts -@ 87 4a..4d - yellow hearts - appears in team list +HEART_RED_TINY = 87 46 +HEART_RED_SMALL = 87 47 +HEART_RED_MEDIUM = 87 48 +HEART_RED_LARGE = 87 49 +HEART_YELLOW_TINY = 87 4A +HEART_YELLOW_SMALL = 87 4B +HEART_YELLOW_MEDIUM = 87 4C +HEART_YELLOW_LARGE = 87 4D TM = 87 4E ORB = 87 4F A_BUTTON = 87 50 diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index ac925c300..b301843ee 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -6,50 +6,7 @@ - .global gUnknown_8106B8C -gUnknown_8106B8C: @ 8106B8C -.byte 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x38, 0x00 -.byte 0x68, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -.byte 0x00, 0x00, 0x00, 0x00 - .global gTeamFormat -gTeamFormat: @ 8106BB0 - .string "$t\0" - .align 2,0 - -@ Red Heart Symbols - .global gHeartRedTiny -gHeartRedTiny: @ 8106BB4 - .byte 0x87, 0x46, 0x00, 0x00 - - .global gHeartRedSmall -gHeartRedSmall: @ 8106BB8 - .byte 0x87, 0x47, 0x00, 0x00 - - .global gHeartRedMedium -gHeartRedMedium: @ 8106BBC - .byte 0x87, 0x48, 0x00, 0x00 - - .global gHeartRedLarge -gHeartRedLarge: @ 8106BC0 - .byte 0x87, 0x49, 0x00, 0x00 - -@ Yellow Heart Symbols - .global gHeartYellowTiny -gHeartYellowTiny: @ 8106BC4 - .byte 0x87, 0x4A, 0x00, 0x00 - - .global gHeartYellowSmall -gHeartYellowSmall: @ 8106BC8 - .byte 0x87, 0x4B, 0x00, 0x00 - - .global gHeartYellowMedium -gHeartYellowMedium: @ 8106BCC - .byte 0x87, 0x4C, 0x00, 0x00 - - .global gHeartYellowLarge -gHeartYellowLarge: @ 8106BD0 - .byte 0x87, 0x4D, 0x00, 0x00 .global gUnknown_8106BD4 gUnknown_8106BD4: @ 8106BD4 diff --git a/include/dungeon_menu_moves.h b/include/dungeon_menu_moves.h new file mode 100644 index 000000000..c7737d876 --- /dev/null +++ b/include/dungeon_menu_moves.h @@ -0,0 +1,8 @@ +#ifndef GUARD_DUNGEON_MENU_MOVES_H +#define GUARD_DUNGEON_MENU_MOVES_H + +#include "structs/dungeon_entity.h" + +void ShowMovesFromTeamMenu(ActionContainer *a0); + +#endif diff --git a/include/dungeon_menu_team.h b/include/dungeon_menu_team.h new file mode 100644 index 000000000..dfd4819b9 --- /dev/null +++ b/include/dungeon_menu_team.h @@ -0,0 +1,6 @@ +#ifndef GUARD_DUNGEON_MENU_TEAM_H +#define GUARD_DUNGEON_MENU_TEAM_H + +#include "structs/dungeon_entity.h" + +#endif diff --git a/ld_script.txt b/ld_script.txt index 00d58f768..b7b49b7e5 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -229,7 +229,7 @@ SECTIONS { src/dungeon_main.o(.text); src/dungeon_submenu.o(.text); src/dungeon_menu_items.o(.text); - src/code_805D8C8_3.o(.text); + src/dungeon_menu_team.o(.text); src/dungeon_menu_moves.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); @@ -548,7 +548,7 @@ SECTIONS { src/dungeon_main.o(.rodata); src/dungeon_submenu.o(.rodata); src/dungeon_menu_items.o(.rodata); - src/code_805D8C8_3.o(.rodata); + src/dungeon_menu_team.o(.rodata); data/data_8106A4C.o(.rodata); src/code_8066D04.o(.rodata); data/data_8106A4C_2.o(.rodata); diff --git a/src/dungeon_main.c b/src/dungeon_main.c index 087d0b500..adfea448d 100644 --- a/src/dungeon_main.c +++ b/src/dungeon_main.c @@ -44,6 +44,8 @@ #include "code_801B3C0.h" #include "dungeon_capabilities.h" #include "dungeon_menu_items.h" +#include "dungeon_menu_team.h" +#include "dungeon_menu_moves.h" #include "constants/dungeon.h" #include "constants/status.h" #include "constants/tactic.h" @@ -89,7 +91,6 @@ bool8 IsNotAttacking(Entity *param_1, bool8 param_2); s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); bool8 ShowDungeonTeamMenu(Entity *a0); -void sub_8062D8C(ActionContainer *a0); void sub_80637E8(ActionContainer *a0); void sub_8063B54(ActionContainer *a0); void sub_8063BB4(ActionContainer *a0); @@ -1334,7 +1335,7 @@ static void ShowMainMenu(bool8 fromBPress, bool8 a1) else if (GetLeaderActionId() == ACTION_CHECK_MOVES) { s32 i, count; - sub_8062D8C(GetLeaderActionContainer()); + ShowMovesFromTeamMenu(GetLeaderActionContainer()); count = 0; for (i = 0; i < MAX_TEAM_MEMBERS; i++) { Entity *teamMon = gDungeon->teamPokemon[i]; diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index 128fbc91c..effd8531c 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -1,56 +1,29 @@ #include "global.h" #include "globaldata.h" #include "structs/str_dungeon.h" -#include "number_util.h" #include "input.h" #include "structs/map.h" #include "dungeon_main.h" #include "dungeon_message.h" #include "dungeon_action.h" -#include "dungeon_ai_targeting.h" -#include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" #include "pokemon.h" #include "moves.h" -#include "items.h" #include "dungeon_music.h" -#include "dungeon_ai_movement.h" #include "code_8045A00.h" #include "string_format.h" #include "code_803E46C.h" -#include "code_801602C.h" -#include "code_800D090.h" -#include "trap.h" -#include "charge_move.h" -#include "dungeon_map_access.h" #include "status_checks_1.h" -#include "game_options.h" -#include "weather.h" -#include "dungeon_items.h" #include "dungeon_leader.h" #include "tile_types.h" #include "dungeon_visibility.h" #include "dungeon_movement.h" -#include "bg_control.h" #include "menu_input.h" #include "music.h" -#include "items.h" -#include "play_time.h" -#include "pokemon_3.h" #include "text.h" -#include "code_806CD90.h" #include "code_8044CC8.h" -#include "code_801B3C0.h" #include "move_util.h" -#include "dungeon_capabilities.h" -#include "constants/dungeon.h" -#include "constants/status.h" -#include "constants/tactic.h" -#include "constants/iq_skill.h" -#include "constants/dungeon_action.h" -#include "structs/struct_sub80095e4.h" -#include "structs/str_text.h" extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); extern void PlayDungeonStartButtonSE(void); @@ -67,19 +40,139 @@ extern void sub_8044FF0(u16 param_1); extern void DungeonShowWindows(Windows *a0, u8 a1); extern s32 GetTeamMemberEntityIndex(Entity *pokemon); extern u32 sub_8062D88(void); +extern void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); +extern void SetLeaderActionToNothing(u8 a0); +extern void sub_80637E8(ActionContainer *a0); +extern void sub_8063B54(ActionContainer *a0); +extern void sub_8063BB4(ActionContainer *a0); +extern void sub_806752C(ActionContainer *a0); +extern void sub_8061A38(ActionContainer *a0, bool8 a1); +extern void sub_8063A70(ActionContainer *a0, bool8 a1); +extern void sub_8063CF0(ActionContainer *a0, bool8 a1); +extern void sub_8067768(ActionContainer *a0); +extern void sub_806A2BC(Entity *a0, u8 a1); +extern bool8 sub_8071A8C(Entity *pokemon); extern s32 gDungeonSubMenuItemsCount; extern MenuInputStruct gDungeonMenu; -extern WindowHeader gUnknown_202F270; extern s32 gUnknown_202F2D8; extern s32 sub_8044FB4(u16 param_1); extern const u8 *const gUnknown_80FE978; +extern const Window gUnknown_8106CAC; +extern const u8 *const gUnknown_80FDFE8; +extern const u8 gUnknown_8106CC4[]; void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); void sub_8063698(Entity *entity, u8 a1, u8 a2); void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); void sub_80637A4(ActionContainer *a0, s32 a1); +void sub_8063578(s32 a0, Entity *entity, Moves *moves, s32 a3, u8 a4, s32 a5); +bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); +bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); +void sub_8063834(Move *moves, s32 a1, s32 a2); + +u32 sub_8062D88(void) +{ + return A_BUTTON; +} + +void ShowMovesFromTeamMenu(ActionContainer *a0) +{ + s32 id = a0->actionParameters[0].actionUseIndex; + Entity *entityOrg = gDungeon->teamPokemon[id]; + Entity *entityNew = entityOrg; + + while (1) { + s32 i, count, countUntilId; + + countUntilId = 0; + count = 0; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (sub_8071A8C(gDungeon->teamPokemon[i])) { + if (i == id) { + countUntilId = count; + } + count++; + } + } + + sub_806A2BC(entityNew, 0); + ChangeDungeonCameraPos(&entityNew->pos, 0, 1, 1); + SetLeaderActionToNothing(1); + if (ShowDungeonMovesMenu(entityNew, 0, 1, countUntilId, count)) { + return; + } + + if (GetLeaderActionId() == ACTION_MOVES_MENU_NEXT_MON) { + s32 idBefore = id; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (++id >= MAX_TEAM_MEMBERS) { + id = 0; + } + entityNew = gDungeon->teamPokemon[id]; + if (sub_8071A8C(entityNew)) { + break; + } + } + + a0->actionParameters[0].actionUseIndex = id; + if (idBefore != id) { + PlayDungeonCursorSE(0); + } + SetLeaderActionToNothing(TRUE); + } + // Everything is the same as in the above if except for add/sub difference. + else if (GetLeaderActionId() == ACTION_MOVES_MENU_PREV_MON) { + s32 idBefore = id; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) { + if (--id < 0) { + id = MAX_TEAM_MEMBERS - 1; + } + entityNew = gDungeon->teamPokemon[id]; + if (sub_8071A8C(entityNew)) { + break; + } + } + + a0->actionParameters[0].actionUseIndex = id; + if (idBefore != id) { + PlayDungeonCursorSE(0); + } + SetLeaderActionToNothing(TRUE); + } + else if (GetLeaderActionId() == ACTION_UNK1D) { + sub_80637E8(GetLeaderActionContainer()); + SetLeaderActionToNothing(TRUE); + } + else if (GetLeaderActionId() == ACTION_SET_MOVE) { + sub_803EAF0(0, NULL); + sub_8063A70(GetLeaderActionContainer(), TRUE); + SetLeaderActionToNothing(TRUE); + } + else if (GetLeaderActionId() == ACTION_UNSET_MOVE) { + sub_803EAF0(0, NULL); + sub_8063A70(GetLeaderActionContainer(), FALSE); + SetLeaderActionToNothing(TRUE); + } + else if (GetLeaderActionId() == ACTION_UNK1F) { + sub_803EAF0(0, NULL); + sub_8063B54(GetLeaderActionContainer()); + SetLeaderActionToNothing(TRUE); + } + else if (GetLeaderActionId() == ACTION_UNK21) { + sub_803EAF0(0, NULL); + sub_8063CF0(GetLeaderActionContainer(), TRUE); + SetLeaderActionToNothing(TRUE); + } + + if (GetLeaderActionId() != ACTION_NOTHING) + break; + } + + sub_806A2BC(entityOrg, 0); + ChangeDungeonCameraPos(&entityOrg->pos, 0, 1, 1); +} bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) { @@ -325,10 +418,6 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) return ret; } -extern const Window gUnknown_8106CAC; -void sub_8063578(s32 a0, Entity *entity, Moves *moves, s32 a3, u8 a4, s32 a5); -extern const u8 *const gUnknown_80FDFE8; - void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) { s32 i, movesCount; @@ -387,8 +476,6 @@ void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, W sub_80073E0(2); } -extern const u8 gUnknown_8106CC4[]; - void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s32 a5) { s32 i; @@ -429,9 +516,6 @@ void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s sub_80073E0(windowId); } -bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); -bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); - void sub_8063698(Entity *entity, u8 a1, u8 a2) { EntityInfo *entInfo = GetEntInfo(entity); @@ -501,8 +585,6 @@ void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2) a0->actionParameters[1].actionUseIndex = gUnknown_202F2D8; } -void sub_8063834(Move *moves, s32 a1, s32 a2); - void sub_80637E8(ActionContainer *a0) { Entity *mon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; diff --git a/src/code_805D8C8_3.c b/src/dungeon_menu_team.c similarity index 88% rename from src/code_805D8C8_3.c rename to src/dungeon_menu_team.c index 3942d0f6d..d5df59caf 100644 --- a/src/code_805D8C8_3.c +++ b/src/dungeon_menu_team.c @@ -1,5 +1,6 @@ #include "global.h" #include "globaldata.h" +#include "dungeon_menu_team.h" #include "structs/str_dungeon.h" #include "number_util.h" #include "input.h" @@ -7,7 +8,6 @@ #include "dungeon_main.h" #include "dungeon_message.h" #include "dungeon_action.h" -#include "dungeon_ai_targeting.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" @@ -21,38 +21,29 @@ #include "code_803E46C.h" #include "code_801602C.h" #include "code_800D090.h" -#include "trap.h" -#include "charge_move.h" #include "dungeon_map_access.h" #include "status_checks_1.h" -#include "game_options.h" #include "weather.h" #include "dungeon_items.h" #include "dungeon_leader.h" #include "tile_types.h" #include "dungeon_visibility.h" #include "dungeon_movement.h" -#include "bg_control.h" #include "menu_input.h" #include "music.h" #include "items.h" -#include "play_time.h" #include "pokemon_3.h" #include "text.h" #include "code_806CD90.h" #include "code_8044CC8.h" #include "code_801B3C0.h" #include "dungeon_capabilities.h" -#include "constants/dungeon.h" -#include "constants/status.h" #include "constants/tactic.h" -#include "constants/iq_skill.h" -#include "constants/dungeon_action.h" #include "structs/struct_sub80095e4.h" #include "structs/str_text.h" +#include "code_8097DD0.h" +#include "move_util.h" -extern void HandleSetItemAction(Entity *,bool8); -extern void HandleUnsetItemAction(Entity *,bool8); extern bool8 sub_8048A68(Entity *param_1,Item *item); extern bool8 sub_8048950(Entity *param_1,Item *item); extern bool8 sub_8048B9C(Entity *param_1,Item *item); @@ -68,7 +59,6 @@ bool8 sub_807EF48(void); void sub_806A2BC(Entity *a0, u8 a1); bool8 sub_805E874(void); bool8 sub_80701A4(Entity *a0); -void ShowDungeonStairsMenu(Entity *a0); void sub_805E738(Entity *a0); void sub_803E708(s32 a0, s32 a1); void sub_8040A78(void); @@ -95,7 +85,6 @@ void PrintOnMainMenu(bool8 printAll); bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); void sub_8060D24(UNUSED ActionContainer *a0); bool8 ShowDungeonTeamMenu(Entity *a0); -void sub_8062D8C(ActionContainer *a0); void sub_80637E8(ActionContainer *a0); void sub_8063B54(ActionContainer *a0); void sub_8063BB4(ActionContainer *a0); @@ -106,45 +95,8 @@ void sub_8063CF0(ActionContainer *a0, bool8 a1); void sub_8067768(ActionContainer *a0); void ShowTacticsMenu(ActionContainer *a0); void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); -extern bool8 sub_8071A8C(Entity *pokemon); extern void sub_80643AC(Entity *pokemon); extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); - -extern u8 gUnknown_202EE00; -extern Entity *gLeaderPointer; - -extern const u8 *gUnknown_80F8A84; -extern const u8 *gUnknown_80F8A6C; -extern const u8 *gUnknown_80F8ADC; -extern const u8 *gUnknown_80F8AB0; -extern const u8 *gUnknown_80F8B0C; -extern const u8 *gUnknown_80FD4B0; -extern const u8 *gUnknown_80F8A4C; -extern const u8 *gUnknown_80F8A28; -extern const u8 *gUnknown_8100208; -extern const u8 *gUnknown_80F9BD8; -extern const u8 *gUnknown_80F9C08; -extern const u8 *gUnknown_80F9C2C; -extern const u8 *gUnknown_80F9BB0; -extern const u8 *gUnknown_80FDE18; -extern const u8 *gUnknown_80F8B24; -extern const u8 *gTeamToolboxAPtr; -extern const u8 *gTeamToolboxBPtr; -extern const u8 *gFieldItemMenuGroundTextPtr; -extern const u8 *gUnknown_80FE940; -extern const u8 *gWhichTextPtr1; -extern const u8 *const gFieldMenuMovesPtr; -extern const u8 *const gFieldMenuItemsPtr; -extern const u8 *const gFieldMenuTeamPtr; -extern const u8 *const gFieldMenuOthersPtr; -extern const u8 *const gFieldMenuGroundPtr; -extern const u8 *const gUnknown_80F9174; -extern const u8 *const gUnknown_80F9190; -extern const u8 *const gUnknown_80F91C8; -extern const u8 *const gUnknown_80F91E0; -extern const u8 *const gUnknown_80F91A8; -extern const u8 *const gUnknown_80FE954; - extern bool8 sub_8070F14(Entity * pokemon, s32 direction); bool8 sub_805EC2C(Entity *a0, s32 x, s32 y); extern Entity *sub_80696A8(Entity *a0); @@ -166,37 +118,48 @@ extern void sub_8044FF0(u16 param_1); extern u16 sub_8044DC8(Item *param_1); extern bool8 sub_8046F00(Item *item); extern void sub_8045064(void); +extern void sub_8070968(u8 *buffer, EntityInfo *entityInfo, s32 colorNum); +extern bool8 CanLeaderSwitch(u8 dungeon); +extern void GetAvailTacticsforLvl(u8 *tacticsBuffer, s32 pokeLevel); +extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target); +extern u32 sub_8014140(s32 a0, const void *a1); +extern char* sub_808E4FC(s32 a1); +extern char* sub_808E51C(s32 a1); +extern void sub_8062B74(Entity *entity); +extern void sub_8062CA8(Entity *entity); +extern void sub_8045C18(u8 *buffer, Item *item); -void PrintMonTactics(s32 a0, u8 *tacticIds, EntityInfo *mon, s32 windowId); -void sub_80623B0(void); -void sub_8062D68(void); -void sub_8062230(void); -void sub_8062748(u8 a0); - +extern u8 gUnknown_202EE00; +extern Entity *gLeaderPointer; extern MenuInputStruct gDungeonMenu; -extern WindowHeader gUnknown_202F270; +extern s32 gUnknown_202EDCC; +extern u8 gUnknown_202EE39; -s32 sub_8060D64(s16 *a0, bool8 a1, bool8 a2, bool8 a3, Entity *a4); - -void sub_8060900(Entity *a0); -s32 sub_8060800(WindowHeader *a0, s32 a1); -void ChosenSubMenuToAction(ActionContainer *a0); -Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); +extern const u8 *gUnknown_80FE940; +extern const u8 *const gUnknown_80FE954; +extern const u8 gUnknown_8106BD4[]; +extern const u8 gUnknown_8106BE0[]; +extern const u8 gUnknown_8106BEC[]; +extern const u8 gUnknown_8106BF4[]; +extern const u8 *const gUnknown_80FE95C; +extern const u8 *const gUnknown_80FE960; +extern const u8 *const gUnknown_80FE964; +extern const u8 *const gUnknown_80FE978; +extern const u8 gUnknown_8106C90[]; +extern const u8 gUnknown_8106C98[]; +extern const u8 gUnknown_8106C9C[]; +extern const u8 *const gWhichTextPtr2; +extern const Windows gUnknown_8106C30; +extern const Window gUnknown_8106C00; +extern const Window gUnknown_8106C18; EWRAM_DATA s32 gTeamMenuChosenId = 0; static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; +EWRAM_DATA static SpriteOAM gUnknown_202F268 = {0}; +EWRAM_DATA static WindowHeader sTeamWindowHeader = {0}; EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better file and figure out the array count. Apparently it's only written to. -extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target); -extern u32 sub_8014140(s32 a0, const void *a1); -void sub_806285C(s32 a0); -void sub_806262C(u8 iqSkillId); - -extern const u8 gUnknown_8106B8C[]; - -extern WindowHeader gUnknown_202F270; - struct UnkFieldTeamMenuStruct { s32 unk0; @@ -204,11 +167,21 @@ struct UnkFieldTeamMenuStruct u8 unk14[MAX_TEAM_MEMBERS]; }; +void PrintMonTactics(s32 a0, u8 *tacticIds, EntityInfo *mon, s32 windowId); void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *a1, bool8 a2); void sub_806145C(struct UnkFieldTeamMenuStruct *a0); void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); +void sub_80623B0(void); +void sub_8062D68(void); +void sub_8062230(void); +void sub_8062748(u8 a0); +bool32 sub_8069D18(DungeonPos *a0, Entity *a1); +void sub_806285C(s32 a0); +void sub_806262C(u8 iqSkillId); +void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); -extern u8 gUnknown_202EE39; +// Struct only used in Blue maybe? +static const u8 gUnknown_8106B8C[] = {1, 0, 56, 0, 0, 0, 24, 0, 24, 0, 0, 0, 2, 0, 56, 0, 104, 0, 24, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; bool8 ShowDungeonTeamMenu(Entity *a0) { @@ -224,7 +197,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) .height = 16, .unk10 = 16, .unk12 = 0, - .unk14 = &gUnknown_202F270, + .unk14 = &sTeamWindowHeader, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -359,24 +332,6 @@ bool8 ShowDungeonTeamMenu(Entity *a0) return ret; } -bool32 sub_8069D18(DungeonPos *a0, Entity *a1); - -extern const u8 gTeamFormat[]; -extern const u8 gHeartRedTiny[]; -extern const u8 gHeartRedSmall[]; -extern const u8 gHeartRedMedium[]; -extern const u8 gHeartRedLarge[]; -extern const u8 gHeartYellowTiny[]; -extern const u8 gHeartYellowSmall[]; -extern const u8 gHeartYellowMedium[]; -extern const u8 gHeartYellowLarge[]; -extern const u8 gUnknown_8106BD4[]; -extern const u8 gUnknown_8106BE0[]; -extern const u8 gUnknown_8106BEC[]; -extern const u8 gUnknown_8106BF4[]; - -extern void sub_8070968(u8 *buffer, EntityInfo *entityInfo, s32 colorNum); - void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2) { s32 r0; @@ -413,9 +368,9 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, a0->unk14[i] = 0; } - gUnknown_202F270.f0 = 1; - gUnknown_202F270.f1 = 0; - gUnknown_202F270.f3 = 0; + sTeamWindowHeader.f0 = 1; + sTeamWindowHeader.f1 = 0; + sTeamWindowHeader.f3 = 0; gDungeonMenu.menuIndex = gTeamMenuChosenId; gDungeonMenu.unk1A = count; gDungeonMenu.unk1C = count; @@ -434,7 +389,7 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, } windows->id[0].unk10 = r0; windows->id[0].height = r0; - gUnknown_202F270.f2 = 8; + sTeamWindowHeader.f2 = 8; if (a2) { windows->id[1] = windows->id[3]; } @@ -443,7 +398,7 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, sub_80137B0(&gDungeonMenu, 0); sub_80073B8(0); if (r10) { - PrintFormattedStringOnWindow(0xC, 0, gTeamFormat, 0, 0); + PrintFormattedStringOnWindow(0xC, 0, _("$t"), 0, 0); } // Print hp/max hp @@ -460,30 +415,30 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, sub_8070968(gFormatBuffer_Monsters[0], monInfo, color); if (sub_806A538(gRecruitedPokemonRef->pokemon2[monInfo->teamIndex].unkA)) { if (monInfo->HP <= monInfo->maxHPStat / 4) { - strcpy(gFormatBuffer_Monsters[1], gHeartRedTiny); + InlineStrcpy(gFormatBuffer_Monsters[1], _("{HEART_RED_TINY}")); } else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 2) { - strcpy(gFormatBuffer_Monsters[1], gHeartRedSmall); + InlineStrcpy(gFormatBuffer_Monsters[1], _("{HEART_RED_SMALL}")); } else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 3) { - strcpy(gFormatBuffer_Monsters[1], gHeartRedMedium); + InlineStrcpy(gFormatBuffer_Monsters[1], _("{HEART_RED_MEDIUM}")); } else { - strcpy(gFormatBuffer_Monsters[1], gHeartRedLarge); + InlineStrcpy(gFormatBuffer_Monsters[1], _("{HEART_RED_LARGE}")); } } else { if (monInfo->HP <= monInfo->maxHPStat / 4) { - strcpy(gFormatBuffer_Monsters[1], gHeartYellowTiny); + InlineStrcpy(gFormatBuffer_Monsters[1], _("{HEART_YELLOW_TINY}")); } else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 2) { - strcpy(gFormatBuffer_Monsters[1], gHeartYellowSmall); + InlineStrcpy(gFormatBuffer_Monsters[1], _("{HEART_YELLOW_SMALL}")); } else if (monInfo->HP <= (monInfo->maxHPStat / 4) * 3) { - strcpy(gFormatBuffer_Monsters[1], gHeartYellowMedium); + InlineStrcpy(gFormatBuffer_Monsters[1], _("{HEART_YELLOW_MEDIUM}")); } else { - strcpy(gFormatBuffer_Monsters[1], gHeartYellowLarge); + InlineStrcpy(gFormatBuffer_Monsters[1], _("{HEART_YELLOW_LARGE}")); } } @@ -503,8 +458,6 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, sub_80073E0(0); } -extern bool8 CanLeaderSwitch(u8 dungeon); - void sub_806145C(struct UnkFieldTeamMenuStruct *a0) { Entity *teamMon; @@ -565,12 +518,6 @@ void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1) a0->actionParameters[0].actionUseIndex = a1->unk4[a1->unk0]; } -void PrintMonTactics(s32 a0, u8 *tacticIds, EntityInfo *mon, s32 windowId); -void sub_80623B0(void); -void sub_8062D68(void); -void sub_8062230(void); -void sub_8062748(u8 a0); - void ShowTacticsMenu(ActionContainer *a0) { Windows windows = { @@ -582,7 +529,7 @@ void ShowTacticsMenu(ActionContainer *a0) .height = 14, .unk10 = 18, .unk12 = 2, - .unk14 = &gUnknown_202F270, + .unk14 = &sTeamWindowHeader, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -604,10 +551,10 @@ void ShowTacticsMenu(ActionContainer *a0) bool32 addCursor = TRUE; bool32 loopBreak = FALSE; - gUnknown_202F270.f0 = 1; - gUnknown_202F270.f1 = 0; - gUnknown_202F270.f2 = 10; - gUnknown_202F270.f3 = 0; + sTeamWindowHeader.f0 = 1; + sTeamWindowHeader.f1 = 0; + sTeamWindowHeader.f2 = 10; + sTeamWindowHeader.f3 = 0; DungeonShowWindows(&windows, 1); PrintMonTactics(scrollFirstId, tacticIds, monInfo, 0); for (i = 0; i < 8; i++) { @@ -753,8 +700,6 @@ void ShowTacticsMenu(ActionContainer *a0) sub_803EAF0(0, NULL); } -extern void GetAvailTacticsforLvl(u8 *tacticsBuffer, s32 pokeLevel); - void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId) { u8 tacticsBuffer[NUM_TACTICS]; @@ -808,7 +753,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) .height = 14, .unk10 = 18, .unk12 = 2, - .unk14 = &gUnknown_202F270, + .unk14 = &sTeamWindowHeader, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -865,10 +810,10 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 var_28 = 1; UnkTextStruct1 *unkTxtStr1Ptr = &gUnknown_2027370[0]; - gUnknown_202F270.f0 = var_38; - gUnknown_202F270.f1 = var_3C; - gUnknown_202F270.f2 = 10; - gUnknown_202F270.f3 = 0; + sTeamWindowHeader.f0 = var_38; + sTeamWindowHeader.f1 = var_3C; + sTeamWindowHeader.f2 = 10; + sTeamWindowHeader.f3 = 0; DungeonShowWindows(&windows, TRUE); sub_8069844(&unkMonStruct, entity); CreatePokemonInfoTabScreen(spArr[var_3C], var_3C, &unkMonStruct, &unkInfoTabStruct, 0); @@ -950,7 +895,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } DungeonRunFrameActions(0x1C); - if (gUnknown_202F270.f0 > 1 && !sub_80048C8()) { + if (sTeamWindowHeader.f0 > 1 && !sub_80048C8()) { if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { PlayDungeonCursorSE(0); var_3C++; @@ -1246,8 +1191,6 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) LoadIQSkills(entity); } -extern s32 gUnknown_202EDCC; - // The same as sub_8068344 void sub_8062230(void) { @@ -1297,8 +1240,6 @@ void sub_80623B0(void) } } -extern SpriteOAM gUnknown_202F268; - void sub_8062500(void) { if ((gUnknown_202EDCC & 8) != 0) { @@ -1321,8 +1262,6 @@ void sub_8062500(void) } } -void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); - void sub_80625A4(s32 count, struct subStruct_203B240 **strings) { s32 i; @@ -1349,23 +1288,6 @@ void sub_80625A4(s32 count, struct subStruct_203B240 **strings) } } -#include "code_8097DD0.h" -#include "move_util.h" - -extern const u8 *const gUnknown_80FE95C; -extern const u8 *const gUnknown_80FE960; -extern const u8 *const gUnknown_80FE964; -extern const u8 *const gUnknown_80FE978; -extern const u8 gUnknown_8106C90[]; -extern const u8 gUnknown_8106C98[]; -extern const u8 gUnknown_8106C9C[]; -extern const u8 *const gWhichTextPtr2; -extern char* sub_808E4FC(s32 a1); -extern char* sub_808E51C(s32 a1); -extern void sub_8062B74(Entity *entity); -extern void sub_8062CA8(Entity *entity); -extern void sub_8045C18(u8 *buffer, Item *item); - void sub_806262C(u8 iqSkillId) { MenuInputStructSub menuSub; @@ -1523,10 +1445,6 @@ void sub_806285C(s32 a0) sub_803E708(4, 0x3E); } -extern const Windows gUnknown_8106C30; -extern const Window gUnknown_8106C00; -extern const Window gUnknown_8106C18; - Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) { struct UnkFieldTeamMenuStruct unkStruct; @@ -1703,105 +1621,3 @@ void sub_8062D68(void) gDungeonMenu.unk14.x = 0; sub_801317C(&gDungeonMenu.unk28); } - -u32 sub_8062D88(void) -{ - return A_BUTTON; -} - -void sub_8062D8C(ActionContainer *a0) -{ - s32 id = a0->actionParameters[0].actionUseIndex; - Entity *entityOrg = gDungeon->teamPokemon[id]; - Entity *entityNew = entityOrg; - - while (1) { - s32 i, count, countUntilId; - - countUntilId = 0; - count = 0; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (sub_8071A8C(gDungeon->teamPokemon[i])) { - if (i == id) { - countUntilId = count; - } - count++; - } - } - - sub_806A2BC(entityNew, 0); - ChangeDungeonCameraPos(&entityNew->pos, 0, 1, 1); - SetLeaderActionToNothing(1); - if (ShowDungeonMovesMenu(entityNew, 0, 1, countUntilId, count)) { - return; - } - - if (GetLeaderActionId() == 6) { - s32 idBefore = id; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (++id >= MAX_TEAM_MEMBERS) { - id = 0; - } - entityNew = gDungeon->teamPokemon[id]; - if (sub_8071A8C(entityNew)) { - break; - } - } - - a0->actionParameters[0].actionUseIndex = id; - if (idBefore != id) { - PlayDungeonCursorSE(0); - } - SetLeaderActionToNothing(1); - } - // Everything is the same as in the above if except for add/sub difference. - else if (GetLeaderActionId() == 7) { - s32 idBefore = id; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) { - if (--id < 0) { - id = MAX_TEAM_MEMBERS - 1; - } - entityNew = gDungeon->teamPokemon[id]; - if (sub_8071A8C(entityNew)) { - break; - } - } - - a0->actionParameters[0].actionUseIndex = id; - if (idBefore != id) { - PlayDungeonCursorSE(0); - } - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 29) { - sub_80637E8(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 30) { - sub_803EAF0(0, NULL); - sub_8063A70(GetLeaderActionContainer(), TRUE); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 51) { - sub_803EAF0(0, NULL); - sub_8063A70(GetLeaderActionContainer(), FALSE); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 31) { - sub_803EAF0(0, NULL); - sub_8063B54(GetLeaderActionContainer()); - SetLeaderActionToNothing(1); - } - else if (GetLeaderActionId() == 33) { - sub_803EAF0(0, NULL); - sub_8063CF0(GetLeaderActionContainer(), TRUE); - SetLeaderActionToNothing(1); - } - - if (GetLeaderActionId() != 0) - break; - } - - sub_806A2BC(entityOrg, 0); - ChangeDungeonCameraPos(&entityOrg->pos, 0, 1, 1); -} diff --git a/sym_ewram.txt b/sym_ewram.txt index e569ad142..c12c9623c 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -152,12 +152,8 @@ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */ .space 0x4 .include "src/dungeon_menu_items.o" .space 0x4 - .include "src/code_805D8C8_3.o" - -gUnknown_202F268: /* 202F268 (sub_8062500) */ - .space 0x8 -gUnknown_202F270: /* 202F270 (sub_8060E38 - sub_8061A38) */ - .space 0x8 + .include "src/dungeon_menu_team.o" + .space 0x4 gUnknown_202F278: /* 202F278 (sub_80639E4) */ .space 0x60 diff --git a/sym_ewram_init.txt b/sym_ewram_init.txt index 50b3fe815..64ee09983 100644 --- a/sym_ewram_init.txt +++ b/sym_ewram_init.txt @@ -115,7 +115,7 @@ .include "src/dungeon_message.o" .include "src/dungeon_move.o" .include "src/dungeon_main.o" -.include "src/code_805D8C8_3.o" +.include "src/dungeon_menu_team.o" .include "src/dungeon_ai_items.o" .include "src/code_807CD9C.o" .include "src/dungeon_leader.o" From 0f62647e511542c187817ade69002a1b6da57b81 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 11:42:12 +0100 Subject: [PATCH 12/31] more dung menus --- data/data_8106A4C.s | 83 ---------------------------- include/dungeon_menu_team.h | 4 ++ ld_script.txt | 1 + src/code_8048480.c | 8 +-- src/dungeon_menu_items.c | 6 +- src/dungeon_menu_team.c | 107 ++++++++++++++++++++++++------------ 6 files changed, 83 insertions(+), 126 deletions(-) diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index b301843ee..184a94538 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -4,89 +4,6 @@ @ CreateFieldItemMenu - sub_8062CA8 - - - - - .global gUnknown_8106BD4 -gUnknown_8106BD4: @ 8106BD4 - .byte 0x87, 0x42, 0x24, 0x6d, 0x30, 0x23, 0x3d, 0x59, 0x24, 0x6d, 0x31, 0x00 - - .global gUnknown_8106BE0 -gUnknown_8106BE0: @ 8106BE0 - .byte 0x87, 0x40, 0x24, 0x6d, 0x30, 0x23, 0x3d, 0x59, 0x24, 0x6d, 0x31, 0x00 - - .global gUnknown_8106BEC -gUnknown_8106BEC: @ 8106BEC - .byte 0x87, 0x42, 0x24, 0x6d, 0x30, 0x00, 0x00, 0x00 - - .global gUnknown_8106BF4 -gUnknown_8106BF4: @ 8106BF4 - .byte 0x87, 0x40, 0x24, 0x6d, 0x30, 0x00, 0x00, 0x00 - .global gUnknown_8106BFC - gUnknown_8106BFC: - .byte 0x01, 0x00, 0x0f, 0x00 - - .global gUnknown_8106C00 -gUnknown_8106C00: @ 8106C00 - .byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00 - .4byte gUnknown_8106BFC - - .global gUnknown_8106C18 -gUnknown_8106C18: @ 8106C18 - .byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00 - .4byte gUnknown_8106BFC - - .global gUnknown_8106C30 -gUnknown_8106C30: @ 8106C30 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x0e, 0x00, 0x02, 0x00 - .byte 0x0e, 0x00, 0x10, 0x00 - .byte 0x10, 0x00, 0x00, 0x00 - .byte 0x70, 0xf2, 0x02, 0x02 - - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x02, 0x00 - .byte 0x0a, 0x00, 0x02, 0x00 - .byte 0x02, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_8106C90 -gUnknown_8106C90: @ 8106C90 - .string "????\0" - .align 2,0 - - .global gUnknown_8106C98 -gUnknown_8106C98: @ 8106C98 - .string "{MOVE_ITEM_0}\0" - .align 2,0 - - .global gUnknown_8106C9C -gUnknown_8106C9C: @ 8106C9C - .string "None\0" - - -@ sub_80633E4 - sub_80639E4 - .align 2,0 - .string "pksdir0\0" - .align 2,0 - .global gUnknown_8106CAC gUnknown_8106CAC: @ 8106CAC .byte 0x00, 0x00, 0x00, 0x00 diff --git a/include/dungeon_menu_team.h b/include/dungeon_menu_team.h index dfd4819b9..bc8ee0da2 100644 --- a/include/dungeon_menu_team.h +++ b/include/dungeon_menu_team.h @@ -3,4 +3,8 @@ #include "structs/dungeon_entity.h" +#define WHICH_MENU_MOVES 1 +#define WHICH_MENU_ITEMS 2 +Entity *ShowDungeonToWhichMonMenu(s32 *teamId, s32 caseId); + #endif diff --git a/ld_script.txt b/ld_script.txt index b7b49b7e5..3718d7a2b 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -549,6 +549,7 @@ SECTIONS { src/dungeon_submenu.o(.rodata); src/dungeon_menu_items.o(.rodata); src/dungeon_menu_team.o(.rodata); + src/dungeon_menu_moves.o(.rodata); data/data_8106A4C.o(.rodata); src/code_8066D04.o(.rodata); data/data_8106A4C_2.o(.rodata); diff --git a/src/code_8048480.c b/src/code_8048480.c index 4d23c6d38..3cb277df8 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -27,6 +27,7 @@ #include "structs/str_dungeon.h" #include "structs/str_position.h" #include "dungeon_config.h" +#include "dungeon_menu_team.h" extern s16 gTypeGummiIQBoost[NUM_TYPES][NUMBER_OF_GUMMIS]; @@ -77,7 +78,6 @@ extern u8 ShowDungeonMovesMenu(Entity *, u32, u32, u32, u32); extern void sub_8044DF0(Entity *, u32, u32); extern void sub_803EAF0(u32, u32); extern void SetLeaderActionToNothing(bool8); -Entity *DrawFieldGiveItemMenu(u32, u32); extern void sub_8044E24(Entity *, u32, u32); extern void sub_804245C(Entity *, Item *); extern u8 sub_8072938(Entity *, u16); @@ -813,7 +813,7 @@ bool8 sub_8048950(Entity *param_1,Item *item) entityInfo->unk157 = flag; } } - entity2 = DrawFieldGiveItemMenu(0,1); + entity2 = ShowDungeonToWhichMonMenu(NULL,WHICH_MENU_MOVES); if (!EntityIsValid(entity2)) { return FALSE; } @@ -878,7 +878,7 @@ bool8 sub_8048A68(Entity *param_1,Item *item) pEVar6->unk157 = flag; } } - entity2 = DrawFieldGiveItemMenu(0,1); + entity2 = ShowDungeonToWhichMonMenu(NULL,WHICH_MENU_MOVES); if (!EntityIsValid(entity2)) { return FALSE; } @@ -924,7 +924,7 @@ bool8 sub_8048B9C(Entity *entity, Item *item) } } - entity2 = DrawFieldGiveItemMenu(0,1); + entity2 = ShowDungeonToWhichMonMenu(NULL,WHICH_MENU_MOVES); if (!EntityIsValid(entity2)) { return FALSE; } diff --git a/src/dungeon_menu_items.c b/src/dungeon_menu_items.c index 4dbfae777..e389eb61d 100644 --- a/src/dungeon_menu_items.c +++ b/src/dungeon_menu_items.c @@ -1,6 +1,7 @@ #include "global.h" #include "globaldata.h" #include "dungeon_menu_items.h" +#include "dungeon_menu_team.h" #include "structs/str_dungeon.h" #include "input.h" #include "structs/map.h" @@ -58,7 +59,6 @@ extern u16 sub_8044DC8(Item *param_1); extern bool8 sub_8046F00(Item *item); extern void sub_8045064(void); extern bool8 PosHasItem(DungeonPos *pos); -Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1); extern u8 gUnknown_202EE00; extern Entity *gLeaderPointer; @@ -351,9 +351,9 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) r9 = 0; break; } - else if (a0Info->action.action == 0x36) { + else if (a0Info->action.action == ACTION_GIVE_ITEM) { s32 teamId; - if (DrawFieldGiveItemMenu(&teamId, 2) != NULL) { + if (ShowDungeonToWhichMonMenu(&teamId, WHICH_MENU_ITEMS) != NULL) { a0Info->action.actionParameters[1].actionUseIndex = teamId; sub_803EAF0(0, 0); r9 = 0; diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index d5df59caf..f40b138a0 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -125,8 +125,6 @@ extern void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target); extern u32 sub_8014140(s32 a0, const void *a1); extern char* sub_808E4FC(s32 a1); extern char* sub_808E51C(s32 a1); -extern void sub_8062B74(Entity *entity); -extern void sub_8062CA8(Entity *entity); extern void sub_8045C18(u8 *buffer, Item *item); extern u8 gUnknown_202EE00; @@ -137,21 +135,13 @@ extern u8 gUnknown_202EE39; extern const u8 *gUnknown_80FE940; extern const u8 *const gUnknown_80FE954; -extern const u8 gUnknown_8106BD4[]; -extern const u8 gUnknown_8106BE0[]; extern const u8 gUnknown_8106BEC[]; extern const u8 gUnknown_8106BF4[]; extern const u8 *const gUnknown_80FE95C; extern const u8 *const gUnknown_80FE960; extern const u8 *const gUnknown_80FE964; extern const u8 *const gUnknown_80FE978; -extern const u8 gUnknown_8106C90[]; -extern const u8 gUnknown_8106C98[]; -extern const u8 gUnknown_8106C9C[]; extern const u8 *const gWhichTextPtr2; -extern const Windows gUnknown_8106C30; -extern const Window gUnknown_8106C00; -extern const Window gUnknown_8106C18; EWRAM_DATA s32 gTeamMenuChosenId = 0; static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; @@ -172,13 +162,15 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *a1, bool void sub_806145C(struct UnkFieldTeamMenuStruct *a0); void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); void sub_80623B0(void); -void sub_8062D68(void); void sub_8062230(void); void sub_8062748(u8 a0); bool32 sub_8069D18(DungeonPos *a0, Entity *a1); void sub_806285C(s32 a0); void sub_806262C(u8 iqSkillId); void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); +static void PrintMoveNamesOnBottomWindow(Entity *entity); +static void PrintItemNameOnBottomWindow(Entity *entity); +static void ResetDungeonMenu(void); // Struct only used in Blue maybe? static const u8 gUnknown_8106B8C[] = {1, 0, 56, 0, 0, 0, 24, 0, 24, 0, 0, 0, 2, 0, 56, 0, 104, 0, 24, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -446,10 +438,10 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, gFormatArgs[1] = monInfo->maxHPStat; y = GetMenuEntryYCoord(&gDungeonMenu, i); if (monInfo->isTeamLeader) { - PrintFormattedStringOnWindow(9, y, gUnknown_8106BD4, 0, 0); + PrintFormattedStringOnWindow(9, y, _("{STAR_BULLET}{POKEMON_0}{UNK_MACRO_3D}{0x59}{POKEMON_1}"), 0, 0); } else { - PrintFormattedStringOnWindow(9, y, gUnknown_8106BE0, 0, 0); + PrintFormattedStringOnWindow(9, y, _("{ICON_BLANK}{POKEMON_0}{UNK_MACRO_3D}{0x59}{POKEMON_1}"), 0, 0); } } } @@ -628,7 +620,7 @@ void ShowTacticsMenu(ActionContainer *a0) u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; menuIndex = gDungeonMenu.menuIndex; - sub_8062D68(); + ResetDungeonMenu(); PlayDungeonConfirmationSE(); gDungeonSubMenuItemsCount = 0; sub_8044F5C(0x2F, 0); @@ -729,10 +721,10 @@ void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId) CopyTacticsNameToBuffer(gFormatBuffer_Monsters[0], tactic); if (mon->tactic == tactic) { - PrintFormattedStringOnWindow(0x10, y, gUnknown_8106BEC, windowId, 0); + PrintFormattedStringOnWindow(0x10, y, _("{STAR_BULLET}{POKEMON_0}"), windowId, 0); } else { - PrintFormattedStringOnWindow(0x10, y, gUnknown_8106BF4, windowId, 0); + PrintFormattedStringOnWindow(0x10, y, _("{ICON_BLANK}{POKEMON_0}"), windowId, 0); } } @@ -1076,7 +1068,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; r8 = gDungeonMenu.menuIndex; - sub_8062D68(); + ResetDungeonMenu(); gDungeonSubMenuItemsCount = 0; PlayDungeonConfirmationSE(); sub_8044F5C(0xC, 0); @@ -1112,7 +1104,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; r8 = gDungeonMenu.menuIndex; - sub_8062D68(); + ResetDungeonMenu(); gDungeonSubMenuItemsCount = var_2C; PlayDungeonConfirmationSE(); sub_8044F5C(0x28, 0); @@ -1445,10 +1437,53 @@ void sub_806285C(s32 a0) sub_803E708(4, 0x3E); } -Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) +static const WindowHeader sBottomWindowHeader = {1, 0, 15, 0}; +static const Window sMovesSubMenu = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 10}, + .width = 18, + .height = 8, + .unk10 = 8, + .unk12 = 0, + .unk14 = &sBottomWindowHeader, +}; +static const Window sItemSubMenu = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 10}, + .width = 18, + .height = 4, + .unk10 = 4, + .unk12 = 0, + .unk14 = &sBottomWindowHeader, +}; + +Entity *ShowDungeonToWhichMonMenu(s32 *teamId, s32 caseId) { struct UnkFieldTeamMenuStruct unkStruct; - Windows windows = gUnknown_8106C30; + Windows windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_NORMAL, // Since the window has a header, it should probably be WINDOW_TYPE_WTIH_HEADER. + .pos = {14, 2}, + .width = 14, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .unk14 = &sTeamWindowHeader, + }, + [1] = { + .type = WINDOW_TYPE_NORMAL, + .pos = {2, 2}, + .width = 10, + .height = 2, + .unk10 = 2, + .unk12 = 0, + .unk14 = NULL, + }, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; bool8 bPress = FALSE; s32 prevId, currId; @@ -1456,11 +1491,11 @@ Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) *teamId = -1; } - if (a1 == 1) { - windows.id[2] = gUnknown_8106C00; + if (caseId == WHICH_MENU_MOVES) { + windows.id[2] = sMovesSubMenu; } - else if (a1 == 2) { - windows.id[2] = gUnknown_8106C18; + else if (caseId == WHICH_MENU_ITEMS) { + windows.id[2] = sItemSubMenu; } PrintOnDungeonTeamMenu(&unkStruct, &windows, FALSE); @@ -1476,11 +1511,11 @@ Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) Entity *entity = gDungeon->teamPokemon[currId]; if (EntityIsValid(entity) && prevId != currId) { - if (a1 == 1) { - sub_8062B74(entity); + if (caseId == WHICH_MENU_MOVES) { + PrintMoveNamesOnBottomWindow(entity); } - else if (a1 == 2) { - sub_8062CA8(entity); + else if (caseId == WHICH_MENU_ITEMS) { + PrintItemNameOnBottomWindow(entity); } } prevId = currId; @@ -1533,7 +1568,7 @@ Entity *DrawFieldGiveItemMenu(s32 *teamId, s32 a1) return NULL; } -void sub_8062B74(Entity *entity) +static void PrintMoveNamesOnBottomWindow(Entity *entity) { s32 x, y; EntityInfo *entInfo = GetEntInfo(entity); @@ -1545,7 +1580,7 @@ void sub_8062B74(Entity *entity) y = 16; if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) { - PrintFormattedStringOnWindow(12, y, gUnknown_8106C90, 2, '\0'); + PrintFormattedStringOnWindow(12, y, _("????"), 2, '\0'); } else { s32 i; @@ -1574,7 +1609,7 @@ void sub_8062B74(Entity *entity) sub_80078A4(2, 12, y - 2, 120, 7); } } - PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0'); + PrintFormattedStringOnWindow(x, y, _("{MOVE_ITEM_0}"), 2, '\0'); y += 12; } } @@ -1583,7 +1618,7 @@ void sub_8062B74(Entity *entity) sub_80073E0(2); } -void sub_8062CA8(Entity *entity) +static void PrintItemNameOnBottomWindow(Entity *entity) { s32 x, y; EntityInfo *entInfo = GetEntInfo(entity); @@ -1596,23 +1631,23 @@ void sub_8062CA8(Entity *entity) y = 18; if (entInfo->monsterBehavior == 1 || IsExperienceLocked(entInfo->joinedAt.id)) { - PrintFormattedStringOnWindow(8, y, gUnknown_8106C90, 2, '\0'); + PrintFormattedStringOnWindow(8, y, _("????"), 2, '\0'); } else { Item *item = &entInfo->heldItem; if (!ItemExists(item)) { - PrintFormattedStringOnWindow(x, y, gUnknown_8106C9C, 2, '\0'); + PrintFormattedStringOnWindow(x, y, _("None"), 2, '\0'); } else { sub_8045C18(gFormatBuffer_Items[0], item); - PrintFormattedStringOnWindow(x, y, gUnknown_8106C98, 2, '\0'); + PrintFormattedStringOnWindow(x, y, _("{MOVE_ITEM_0}"), 2, '\0'); } } sub_80073E0(2); } -void sub_8062D68(void) +static void ResetDungeonMenu(void) { gDungeonMenu.unk1E = 0; gDungeonMenu.unk20 = 0; From abbf389ffdc94e1cea0835f6831420b916cc4fab Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 12:34:10 +0100 Subject: [PATCH 13/31] more menus --- asm/code_805D8C8.s | 8 ++-- include/code_8044CC8.h | 6 +-- include/dungeon_menu_team.h | 6 +++ include/global.h | 5 ++ include/text.h | 4 +- src/code_8044CC8.c | 64 ++++++++++--------------- src/code_8066D04.c | 12 ++--- src/dungeon_action.c | 29 +++++------- src/dungeon_main.c | 9 ++-- src/dungeon_menu_items.c | 2 +- src/dungeon_menu_moves.c | 4 +- src/dungeon_menu_team.c | 94 ++++++++++++++++++------------------- src/dungeon_message.c | 4 +- src/text.c | 28 +++++------ sym_ewram.txt | 2 +- 15 files changed, 132 insertions(+), 145 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 93f413c11..4da2c1a92 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -1647,7 +1647,7 @@ _080644D0: movs r4, 0 b _0806452A .align 2, 0 -_08064508: .4byte gUnknown_202EE44 +_08064508: .4byte gDungeonSubMenu _0806450C: bl PlayDungeonCancelSE _08064510: @@ -2174,7 +2174,7 @@ _08064914: movs r4, 0 b _0806496E .align 2, 0 -_0806494C: .4byte gUnknown_202EE44 +_0806494C: .4byte gDungeonSubMenu _08064950: bl PlayDungeonCancelSE _08064954: @@ -5384,7 +5384,7 @@ _0806633E: .align 2, 0 _08066348: .4byte gUnknown_8106D8C _0806634C: .4byte gFormatBuffer_Monsters -_08066350: .4byte gIwramTextFunc2 +_08066350: .4byte ScrollUpWindowFunc _08066354: .4byte gUnknown_202F2F8 thumb_func_end sub_8066288 @@ -5486,7 +5486,7 @@ _0806641A: .align 2, 0 _08066424: .4byte gUnknown_8106D8C _08066428: .4byte gFormatBuffer_Monsters -_0806642C: .4byte gIwramTextFunc1 +_0806642C: .4byte ScrollDownWindowFunc _08066430: .4byte gUnknown_202F2F8 thumb_func_end sub_8066358 diff --git a/include/code_8044CC8.h b/include/code_8044CC8.h index 1931c4c0a..b75cfe009 100644 --- a/include/code_8044CC8.h +++ b/include/code_8044CC8.h @@ -4,11 +4,11 @@ // size: 0x4 typedef struct unkStruct_202EE44 { - u16 unk0; + u16 actionId; u8 unk2; - bool8 unk3; + bool8 canBeChosen; } unkStruct_202EE44; -extern unkStruct_202EE44 gUnknown_202EE44[10]; +extern unkStruct_202EE44 gDungeonSubMenu[10]; #endif // GUARD_CODE_8044CC8_H diff --git a/include/dungeon_menu_team.h b/include/dungeon_menu_team.h index bc8ee0da2..485807cc5 100644 --- a/include/dungeon_menu_team.h +++ b/include/dungeon_menu_team.h @@ -2,7 +2,13 @@ #define GUARD_DUNGEON_MENU_TEAM_H #include "structs/dungeon_entity.h" +#include "structs/subStruct_203B240.h" +bool8 ShowDungeonTeamMenu(Entity *a0); +void ShowDungeonTacticsMenu(ActionContainer *a0); +void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 a1); +void sub_8062500(void); +void sub_80625A4(s32 count, struct subStruct_203B240 **strings); #define WHICH_MENU_MOVES 1 #define WHICH_MENU_ITEMS 2 Entity *ShowDungeonToWhichMonMenu(s32 *teamId, s32 caseId); diff --git a/include/global.h b/include/global.h index de3274263..4d2da7b0a 100644 --- a/include/global.h +++ b/include/global.h @@ -42,6 +42,11 @@ static inline void InlineStrncpy(u8 *dst, const u8 *src, s32 n) strncpy(dst, src, n); } +static inline bool8 AreStringsDifferent(const u8 *str1, const u8 *str2) +{ + return strcmp(str1, str2) != 0; +} + // Sometimes incrementing and decrementing a variable changes how registers are allocated, which helps with matching functions. Functionality-wise this doesn't do anything. #ifdef NONMATCHING #define ASM_MATCH_TRICK(a) {;} diff --git a/include/text.h b/include/text.h index eab07f382..4ee3844fb 100644 --- a/include/text.h +++ b/include/text.h @@ -53,8 +53,8 @@ extern UnkTextStruct1 gUnknown_2027370[4]; extern u8 gUnknown_202749A[11]; extern bool8 gUnknown_20274A5; extern u16 gUnknown_202B038[4][32][32]; // Usage points to these dimensions -extern void (*gIwramTextFunc1)(s32 a0); -extern void (*gIwramTextFunc2)(s32 a0); +extern void (*ScrollDownWindowFunc)(s32 windowId); +extern void (*ScrollUpWindowFunc)(s32 windowId); extern void (*gIwramTextFunc3)(s32 a0); extern void (*gIwramTextFunc4)(s32 a0); diff --git a/src/code_8044CC8.c b/src/code_8044CC8.c index 52423405f..6b7ea111e 100644 --- a/src/code_8044CC8.c +++ b/src/code_8044CC8.c @@ -2,6 +2,7 @@ #include "constants/dungeon_action.h" #include "dungeon_map_access.h" #include "dungeon_util.h" +#include "dungeon_generation.h" #include "code_8044CC8.h" #include "items.h" @@ -15,13 +16,13 @@ typedef struct ItemText // size: 0x8 typedef struct unkStr_80F7C54 { - u32 unk0; + s32 unk0; u8 *text; } unkStr_80F7C54; -EWRAM_DATA unkStruct_202EE44 gUnknown_202EE44[10] = {0}; +EWRAM_DATA unkStruct_202EE44 gDungeonSubMenu[10] = {0}; extern s32 gDungeonSubMenuItemsCount; @@ -161,36 +162,27 @@ void sub_8044E24(Entity *entity,int index,u32 unused) // Similar to sub_8044BA8 u8 *GetDungeonSubMenuItemString(s32 param_1) { - u16 uVar1; - u32 uVar3; - u32 uVar4; + u16 actionId = gDungeonSubMenu[param_1].actionId; - uVar1 = gUnknown_202EE44[param_1].unk0; - - if ((uVar1 == 0x26) && (GetFloorType() == 2)) { + if (actionId == ACTION_STAIRS && GetFloorType() == FLOOR_TYPE_RESCUE) { return *gUnknown_80F91EC; } else { - uVar3 = uVar4 = strcmp(gUnknown_80F7C50[uVar1 << 1], gUnknown_80F697C); - if (uVar3 != 0) { - uVar4 = 1; + if (!AreStringsDifferent(gUnknown_80F7C50[actionId << 1], gUnknown_80F697C)) { + return gActions[GetItemActionType(gDungeonSubMenu[param_1].unk2)].useText; } - if ((u8)(uVar4) == 0) { - return gActions[GetItemActionType(gUnknown_202EE44[param_1].unk2)].useText; - } - else - { - return gUnknown_80F7C50[uVar1 << 1]; + else { + return gUnknown_80F7C50[actionId << 1]; } } } -bool8 CanSubMenuItemBeChosen(s32 param_1) +bool8 CanSubMenuItemBeChosen(s32 itemId) { - if(param_1 < 0) + if (itemId < 0) return FALSE; else - return gUnknown_202EE44[param_1].unk3; + return gDungeonSubMenu[itemId].canBeChosen; } void sub_8044F5C(u16 param_1, u8 param_2) @@ -200,13 +192,13 @@ void sub_8044F5C(u16 param_1, u8 param_2) if (gDungeonSubMenuItemsCount < 10) { for(index = 0; index < gDungeonSubMenuItemsCount; index++) { - if (gUnknown_202EE44[index].unk0 == param_1) { + if (gDungeonSubMenu[index].actionId == param_1) { return; } } - gUnknown_202EE44[gDungeonSubMenuItemsCount].unk0 = param_1; - gUnknown_202EE44[gDungeonSubMenuItemsCount].unk2 = param_2; - gUnknown_202EE44[gDungeonSubMenuItemsCount].unk3 = TRUE; + gDungeonSubMenu[gDungeonSubMenuItemsCount].actionId = param_1; + gDungeonSubMenu[gDungeonSubMenuItemsCount].unk2 = param_2; + gDungeonSubMenu[gDungeonSubMenuItemsCount].canBeChosen = TRUE; gDungeonSubMenuItemsCount++; } } @@ -217,7 +209,7 @@ s32 sub_8044FB4(u16 param_1) for(index = 0; index < gDungeonSubMenuItemsCount; index++) { - if (gUnknown_202EE44[index].unk0 == param_1) { + if (gDungeonSubMenu[index].actionId == param_1) { return index; } } @@ -230,8 +222,8 @@ void sub_8044FF0(u16 param_1) for(index = 0; index < gDungeonSubMenuItemsCount; index++) { - if (gUnknown_202EE44[index].unk0 == param_1) { - gUnknown_202EE44[index].unk3 = FALSE; + if (gDungeonSubMenu[index].actionId == param_1) { + gDungeonSubMenu[index].canBeChosen = FALSE; return; } } @@ -263,20 +255,16 @@ bool8 IsNotAttacking(Entity *param_1, bool8 param_2) void sub_8045064(void) { - s32 i; - s32 j; - unkStruct_202EE44 *iPtr; - unkStruct_202EE44 *jPtr; - unkStruct_202EE44 temp; + s32 i, j; for (i = 0; i < gDungeonSubMenuItemsCount; i++) { for (j = i + 1; j < gDungeonSubMenuItemsCount; j++) { - iPtr = &gUnknown_202EE44[i]; - jPtr = &gUnknown_202EE44[j]; - if ((s32)gUnknown_80F7C54[iPtr->unk0].unk0 > (s32)gUnknown_80F7C54[jPtr->unk0].unk0) { - temp = *iPtr; - *iPtr = *jPtr; - *jPtr = temp; + unkStruct_202EE44 temp; + unkStruct_202EE44 *iPtr = &gDungeonSubMenu[i]; + unkStruct_202EE44 *jPtr = &gDungeonSubMenu[j]; + + if (gUnknown_80F7C54[iPtr->actionId].unk0 > gUnknown_80F7C54[jPtr->actionId].unk0) { + SWAP(*iPtr, *jPtr, temp); } } } diff --git a/src/code_8066D04.c b/src/code_8066D04.c index 5f0810331..abe76700b 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -1016,7 +1016,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) if (a2 - gUnknown_202F30C > 8) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(0x37); } gUnknown_202F30C++; @@ -1031,7 +1031,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) if (a2 - gUnknown_202F30C > 8) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(0x37); } gUnknown_202F30C++; @@ -1047,7 +1047,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) if (gUnknown_202F30C != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(0x37); } gUnknown_202F30C--; @@ -1062,7 +1062,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) if (gUnknown_202F30C != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(0x37); } gUnknown_202F30C--; @@ -1334,7 +1334,7 @@ void sub_806806C(PokemonStruct1 *a0) PlayDungeonCursorSE(0); for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(0x1C); } unkStruct.unk40++; @@ -1345,7 +1345,7 @@ void sub_806806C(PokemonStruct1 *a0) PlayDungeonCursorSE(0); for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(0x1C); } unkStruct.unk40--; diff --git a/src/dungeon_action.c b/src/dungeon_action.c index 7b148347b..54655c2fa 100644 --- a/src/dungeon_action.c +++ b/src/dungeon_action.c @@ -8,6 +8,7 @@ #include "structs/str_dungeon.h" #include "dungeon_leader.h" #include "dungeon_movement.h" +#include "dungeon_generation.h" #include "dungeon_util.h" #include "dungeon_pokemon_attributes.h" #include "pokemon.h" @@ -194,27 +195,19 @@ bool8 sub_8044B84(void) } } -u8 *sub_8044BA8(u16 param_1, u8 id) +u8 *sub_8044BA8(u16 actionId, u8 id) { - u32 uVar3; - u32 uVar4; - - if ((param_1 == 0x26) && (GetFloorType() == 2)) { - return *gUnknown_80F91EC; - } - else { - uVar3 = uVar4 = strcmp(gUnknown_80F7C50[param_1 << 1], gUnknown_80F697C); - if (uVar3 != 0) { - uVar4 = 1; + if (actionId == ACTION_STAIRS && GetFloorType() == FLOOR_TYPE_RESCUE) { + return *gUnknown_80F91EC; } - if ((u8)(uVar4) == 0) { - return gActions[GetItemActionType(id)].useText; + else { + if (!AreStringsDifferent(gUnknown_80F7C50[actionId << 1], gUnknown_80F697C)) { + return gActions[GetItemActionType(id)].useText; + } + else { + return gUnknown_80F7C50[actionId << 1]; + } } - else - { - return gUnknown_80F7C50[param_1 << 1]; - } - } } void SetLeaderActionToNothing(bool8 clearActionFields) diff --git a/src/dungeon_main.c b/src/dungeon_main.c index adfea448d..7f441c811 100644 --- a/src/dungeon_main.c +++ b/src/dungeon_main.c @@ -90,16 +90,13 @@ bool8 sub_8044B28(void); bool8 IsNotAttacking(Entity *param_1, bool8 param_2); s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); -bool8 ShowDungeonTeamMenu(Entity *a0); void sub_80637E8(ActionContainer *a0); void sub_8063B54(ActionContainer *a0); void sub_8063BB4(ActionContainer *a0); void sub_806752C(ActionContainer *a0); -void sub_8061A38(ActionContainer *a0, bool8 a1); void sub_8063A70(ActionContainer *a0, bool8 a1); void sub_8063CF0(ActionContainer *a0, bool8 a1); void sub_8067768(ActionContainer *a0); -void ShowTacticsMenu(ActionContainer *a0); void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern bool8 sub_8071A8C(Entity *pokemon); extern void sub_80643AC(Entity *pokemon); @@ -1313,7 +1310,7 @@ static void ShowMainMenu(bool8 fromBPress, bool8 a1) } if (GetLeaderActionId() == ACTION_CHECK_SUMMARY) { - sub_8061A38(GetLeaderActionContainer(), FALSE); + ShowDungeonSummaryOrIQMenu(GetLeaderActionContainer(), FALSE); SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == ACTION_TALK_MENU) { @@ -1325,11 +1322,11 @@ static void ShowMainMenu(bool8 fromBPress, bool8 a1) SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == ACTION_CHANGE_TACTICS) { - ShowTacticsMenu(GetLeaderActionContainer()); + ShowDungeonTacticsMenu(GetLeaderActionContainer()); SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == ACTION_VIEW_IQ) { - sub_8061A38(GetLeaderActionContainer(), TRUE); + ShowDungeonSummaryOrIQMenu(GetLeaderActionContainer(), TRUE); SetLeaderActionToNothing(1); } else if (GetLeaderActionId() == ACTION_CHECK_MOVES) { diff --git a/src/dungeon_menu_items.c b/src/dungeon_menu_items.c index e389eb61d..9de86df1f 100644 --- a/src/dungeon_menu_items.c +++ b/src/dungeon_menu_items.c @@ -787,7 +787,7 @@ static void sub_8060900(Entity *a0) static void ChosenSubMenuToAction(ActionContainer *a0) { - SetMonsterActionFields(a0, gUnknown_202EE44[gDungeonMenu.menuIndex].unk0); + SetMonsterActionFields(a0, gDungeonSubMenu[gDungeonMenu.menuIndex].actionId); a0->actionParameters[0] = sUnknownActionUnk4; a0->actionParameters[1].actionUseIndex = 0; a0->actionParameters[1].itemPos.x = 0; diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index effd8531c..9b976630e 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -46,7 +46,7 @@ extern void sub_80637E8(ActionContainer *a0); extern void sub_8063B54(ActionContainer *a0); extern void sub_8063BB4(ActionContainer *a0); extern void sub_806752C(ActionContainer *a0); -extern void sub_8061A38(ActionContainer *a0, bool8 a1); +extern void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 a1); extern void sub_8063A70(ActionContainer *a0, bool8 a1); extern void sub_8063CF0(ActionContainer *a0, bool8 a1); extern void sub_8067768(ActionContainer *a0); @@ -580,7 +580,7 @@ void sub_80637A4(ActionContainer *a0, s32 a1) void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2) { - SetMonsterActionFields(a0, gUnknown_202EE44[a1].unk0); + SetMonsterActionFields(a0, gDungeonSubMenu[a1].actionId); a0->actionParameters[0].actionUseIndex = a2; a0->actionParameters[1].actionUseIndex = gUnknown_202F2D8; } diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index f40b138a0..a8ef93d32 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -89,11 +89,9 @@ void sub_80637E8(ActionContainer *a0); void sub_8063B54(ActionContainer *a0); void sub_8063BB4(ActionContainer *a0); void sub_806752C(ActionContainer *a0); -void sub_8061A38(ActionContainer *a0, bool8 a1); void sub_8063A70(ActionContainer *a0, bool8 a1); void sub_8063CF0(ActionContainer *a0, bool8 a1); void sub_8067768(ActionContainer *a0); -void ShowTacticsMenu(ActionContainer *a0); void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern void sub_80643AC(Entity *pokemon); extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); @@ -126,6 +124,8 @@ extern u32 sub_8014140(s32 a0, const void *a1); extern char* sub_808E4FC(s32 a1); extern char* sub_808E51C(s32 a1); extern void sub_8045C18(u8 *buffer, Item *item); +extern bool32 sub_8069D18(DungeonPos *a0, Entity *a1); +extern void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); extern u8 gUnknown_202EE00; extern Entity *gLeaderPointer; @@ -157,17 +157,15 @@ struct UnkFieldTeamMenuStruct u8 unk14[MAX_TEAM_MEMBERS]; }; -void PrintMonTactics(s32 a0, u8 *tacticIds, EntityInfo *mon, s32 windowId); -void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *a1, bool8 a2); -void sub_806145C(struct UnkFieldTeamMenuStruct *a0); -void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); -void sub_80623B0(void); -void sub_8062230(void); -void sub_8062748(u8 a0); -bool32 sub_8069D18(DungeonPos *a0, Entity *a1); -void sub_806285C(s32 a0); -void sub_806262C(u8 iqSkillId); -void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); +static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2); +static void sub_806145C(struct UnkFieldTeamMenuStruct *a0); +static void ChosenSubMenuToAction(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); +static void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId); +static void sub_8062230(void); +static void sub_80623B0(void); +static void ShowIqDescriptionWindow(u8 iqSkillId); +static void ShowTacticDescriptionWindow(u8 tacticId); +static void sub_806285C(s32 a0); static void PrintMoveNamesOnBottomWindow(Entity *entity); static void PrintItemNameOnBottomWindow(Entity *entity); static void ResetDungeonMenu(void); @@ -296,7 +294,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) } if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { - sub_80615B4(&GetEntInfo(a0)->action, &sp); + ChosenSubMenuToAction(&GetEntInfo(a0)->action, &sp); PlayDungeonConfirmationSE(); r4 = FALSE; break; @@ -324,7 +322,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) return ret; } -void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2) +static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2) { s32 r0; DungeonPos pos; @@ -450,7 +448,7 @@ void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, sub_80073E0(0); } -void sub_806145C(struct UnkFieldTeamMenuStruct *a0) +static void sub_806145C(struct UnkFieldTeamMenuStruct *a0) { Entity *teamMon; EntityInfo *monInfo; @@ -504,13 +502,13 @@ void sub_806145C(struct UnkFieldTeamMenuStruct *a0) sub_8045064(); } -void sub_80615B4(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1) +static void ChosenSubMenuToAction(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1) { - SetMonsterActionFields(a0, gUnknown_202EE44[gDungeonMenu.menuIndex].unk0); + SetMonsterActionFields(a0, gDungeonSubMenu[gDungeonMenu.menuIndex].actionId); a0->actionParameters[0].actionUseIndex = a1->unk4[a1->unk0]; } -void ShowTacticsMenu(ActionContainer *a0) +void ShowDungeonTacticsMenu(ActionContainer *a0) { Windows windows = { .id = { @@ -582,7 +580,7 @@ void ShowTacticsMenu(ActionContainer *a0) if (gDungeonMenu.menuIndex == 7) { if (tacticIds[8] != TACTIC_UNUSED) { for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(0x3D); } scrollFirstId++; @@ -597,7 +595,7 @@ void ShowTacticsMenu(ActionContainer *a0) if (gDungeonMenu.menuIndex == 0) { if (scrollFirstId != 0) { for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(0x3D); } scrollFirstId--; @@ -611,7 +609,7 @@ void ShowTacticsMenu(ActionContainer *a0) u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; menuIndex = gDungeonMenu.menuIndex; PlayDungeonStartButtonSE(); - sub_8062748(tacticId); + ShowTacticDescriptionWindow(tacticId); loopBreak = FALSE; break; } @@ -668,7 +666,7 @@ void ShowTacticsMenu(ActionContainer *a0) } } else { - sub_8062748(tacticId); + ShowTacticDescriptionWindow(tacticId); addCursor = FALSE; } } @@ -692,7 +690,7 @@ void ShowTacticsMenu(ActionContainer *a0) sub_803EAF0(0, NULL); } -void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId) +static void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId) { u8 tacticsBuffer[NUM_TACTICS]; u32 tactic; @@ -731,7 +729,7 @@ void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId) sub_80073E0(windowId); } -void sub_8061A38(ActionContainer *a0, bool8 a1) +void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) { s32 spArr[6]; struct unkStruct_808FF20 unkMonStruct; @@ -755,7 +753,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 r8; Entity *entity; s32 var_3C; - s32 var_38; + s32 totalWindows; EntityInfo *entityInfo; var_3C = 0; @@ -770,16 +768,16 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) spArr[3] = 0; spArr[4] = 0; spArr[5] = 0; - var_38 = 1; + totalWindows = 1; } - else if (a1) { + else if (showIq) { spArr[0] = 4; spArr[1] = 0; spArr[2] = 0; spArr[3] = 0; spArr[4] = 0; spArr[5] = 0; - var_38 = 1; + totalWindows = 1; } else { spArr[0] = 2; @@ -788,7 +786,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) spArr[3] = 5; spArr[4] = 0; spArr[5] = 0; - var_38 = 4; + totalWindows = 4; } unkMonStruct.unk40 = 0; @@ -802,7 +800,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) s32 var_28 = 1; UnkTextStruct1 *unkTxtStr1Ptr = &gUnknown_2027370[0]; - sTeamWindowHeader.f0 = var_38; + sTeamWindowHeader.f0 = totalWindows; sTeamWindowHeader.f1 = var_3C; sTeamWindowHeader.f2 = 10; sTeamWindowHeader.f3 = 0; @@ -810,7 +808,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) sub_8069844(&unkMonStruct, entity); CreatePokemonInfoTabScreen(spArr[var_3C], var_3C, &unkMonStruct, &unkInfoTabStruct, 0); gDungeonMenu.unk1E = var_3C; - gDungeonMenu.unk20 = var_38; + gDungeonMenu.unk20 = totalWindows; gDungeonMenu.unkC = (unkTxtStr1Ptr->unk0 + 15) * 8; gDungeonMenu.unkE = ((unkTxtStr1Ptr->unk2 + 1) * 8) - 2; gDungeonMenu.unk14.x = 0; @@ -915,7 +913,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (unkInfoTabStruct.unkC[8] != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(28); } unkMonStruct.unk56++; @@ -929,7 +927,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (unkInfoTabStruct.unkC[8] != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(28); } unkMonStruct.unk56++; @@ -946,7 +944,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (unkMonStruct.unk56 != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(28); } unkMonStruct.unk56--; @@ -960,7 +958,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (unkMonStruct.unk56 != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(28); } unkMonStruct.unk56--; @@ -978,7 +976,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (unkInfoTabStruct.unk0[8] != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(28); } unkMonStruct.unk40++; @@ -992,7 +990,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (unkInfoTabStruct.unk0[8] != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(28); } unkMonStruct.unk40++; @@ -1009,7 +1007,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (unkMonStruct.unk40 != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(28); } unkMonStruct.unk40--; @@ -1023,7 +1021,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) if (unkMonStruct.unk40 != 0) { s32 i; for (i = 0; i < 6; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(28); } unkMonStruct.unk40--; @@ -1052,11 +1050,11 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) break; } else if (var_30) { - s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; + s32 iqSkillId = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; r8 = gDungeonMenu.menuIndex; PlayDungeonStartButtonSE(); - sub_806262C(var); + ShowIqDescriptionWindow(iqSkillId); var_28 = 0; loopBreak = FALSE; break; @@ -1147,7 +1145,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) ToggleIQSkill(&entityInfo->IQSkillMenuFlags, var); } else { - sub_806262C(var); + ShowIqDescriptionWindow(var); var_28 = 0; } loopBreak = FALSE; @@ -1184,7 +1182,7 @@ void sub_8061A38(ActionContainer *a0, bool8 a1) } // The same as sub_8068344 -void sub_8062230(void) +static void sub_8062230(void) { if ((gUnknown_202EDCC & 8) != 0) { UnkTextStruct1 *txtStrPtr = &gUnknown_2027370[0]; @@ -1209,7 +1207,7 @@ void sub_8062230(void) } // The same as sub_80684C4 -void sub_80623B0(void) +static void sub_80623B0(void) { if ((gUnknown_202EDCC & 8) != 0) { UnkTextStruct1 *ptr = &gUnknown_2027370[0]; @@ -1280,7 +1278,7 @@ void sub_80625A4(s32 count, struct subStruct_203B240 **strings) } } -void sub_806262C(u8 iqSkillId) +static void ShowIqDescriptionWindow(u8 iqSkillId) { MenuInputStructSub menuSub; Windows windows; @@ -1333,7 +1331,7 @@ void sub_806262C(u8 iqSkillId) sub_803E708(4, 0x3E); } -void sub_8062748(u8 tacticId) +static void ShowTacticDescriptionWindow(u8 tacticId) { MenuInputStructSub menuSub; Windows windows; @@ -1386,7 +1384,7 @@ void sub_8062748(u8 tacticId) sub_803E708(4, 0x3E); } -void sub_806285C(s32 a0) +static void sub_806285C(s32 a0) { const u8 *str; MenuInputStructSub menuSub; diff --git a/src/dungeon_message.c b/src/dungeon_message.c index 388de1883..1655a1c7a 100644 --- a/src/dungeon_message.c +++ b/src/dungeon_message.c @@ -986,7 +986,7 @@ static bool8 TryScrollLogUp(s32 a0) DungeonRunFrameActions(0xD); for (i = 0; i < 7; i++) { - gIwramTextFunc2(0); + ScrollUpWindowFunc(0); DungeonRunFrameActions(0xD); } @@ -1036,7 +1036,7 @@ static bool8 TryScrollLogDown(s32 a0) DungeonRunFrameActions(0xD); for (i = 0; i < 7; i++) { - gIwramTextFunc1(0); + ScrollDownWindowFunc(0); DungeonRunFrameActions(0xD); } diff --git a/src/text.c b/src/text.c index 8a2abacde..3a1960192 100644 --- a/src/text.c +++ b/src/text.c @@ -44,17 +44,17 @@ EWRAM_DATA ALIGNED(4) u16 gUnknown_202B038[4][32][32] = {0}; IWRAM_DATA static s16 gUnknown_3000E94[161] = {0}; // These text-related functions were deemed important as they're copied and run from IWRAM for improved performance. -static void sub_8272774(UnkTextStruct1 *txtStructs, s32 id); -static void sub_8272884(UnkTextStruct1 *txtStructs, s32 id); +static void ScrollDownWindowInternal(UnkTextStruct1 *txtStructs, s32 id); +static void ScrollUpWindowInternal(UnkTextStruct1 *txtStructs, s32 id); static void sub_82729B8(UnkTextStruct1 *txtStructs, s32 id); static void sub_8272A8C(UnkTextStruct1 *txtStructs, s32 id); -void sub_8272760(s32 id); -void sub_8272870(s32 id); +void ScrollDownWindow(s32 windowId); +void ScrollUpWindow(s32 windowId); void sub_82729A4(s32 id); void sub_8272A78(s32 id); -EWRAM_INIT void (*gIwramTextFunc1)(s32 a0) = sub_8272760; -EWRAM_INIT void (*gIwramTextFunc2)(s32 a0) = sub_8272870; +EWRAM_INIT void (*ScrollDownWindowFunc)(s32 windowId) = ScrollDownWindow; +EWRAM_INIT void (*ScrollUpWindowFunc)(s32 windowId) = ScrollUpWindow; EWRAM_INIT void (*gIwramTextFunc3)(s32 a0) = sub_82729A4; EWRAM_INIT void (*gIwramTextFunc4)(s32 a0) = sub_8272A78; @@ -3643,14 +3643,14 @@ void InitGraphics(void) } // These functions run from IWRAM for improved performance. -IWRAM_INIT void sub_8272760(s32 id) +IWRAM_INIT void ScrollDownWindow(s32 windowId) { - sub_8272774(gUnknown_2027370, id); + ScrollDownWindowInternal(gUnknown_2027370, windowId); } -IWRAM_INIT static void sub_8272774(UnkTextStruct1 *txtStructs, s32 id) +IWRAM_INIT static void ScrollDownWindowInternal(UnkTextStruct1 *txtStructs, s32 windowId) { - UnkTextStruct1 *txtStructPtr = &txtStructs[id]; + UnkTextStruct1 *txtStructPtr = &txtStructs[windowId]; if (txtStructPtr->unk8 > 0) { s32 i, j; @@ -3706,14 +3706,14 @@ IWRAM_INIT static void sub_8272774(UnkTextStruct1 *txtStructs, s32 id) } } -IWRAM_INIT void sub_8272870(s32 id) +IWRAM_INIT void ScrollUpWindow(s32 windowId) { - sub_8272884(gUnknown_2027370, id); + ScrollUpWindowInternal(gUnknown_2027370, windowId); } -IWRAM_INIT static void sub_8272884(UnkTextStruct1 *txtStructs, s32 id) +IWRAM_INIT static void ScrollUpWindowInternal(UnkTextStruct1 *txtStructs, s32 windowId) { - UnkTextStruct1 *txtStructPtr = &txtStructs[id]; + UnkTextStruct1 *txtStructPtr = &txtStructs[windowId]; if (txtStructPtr->unk8 > 0) { s32 i, j; diff --git a/sym_ewram.txt b/sym_ewram.txt index c12c9623c..2effcee14 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -134,7 +134,7 @@ gUnknown_202EE39: /* 202EE39 (sub_8060E38) */ gUnknown_202EE3A: /* 202EE3A (sub_8060E38 - sub_8065DBC) */ .space 0xA -gUnknown_202EE44: /* 202EE44 (sub_8044EC8 - sub_80647F0) */ +gDungeonSubMenu: /* 202EE44 (sub_8044EC8 - sub_80647F0) */ .space 0x28 gDungeonSubMenuItemsCount: /* 202EE6C (sub_8044F5C - sub_8067A80) */ .space 0x4 From 49b2c1911b39b0411fdce0f948ac6a90684c9332 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 13:33:28 +0100 Subject: [PATCH 14/31] more menus --- asm/code_805D8C8.s | 24 ++--- include/dungeon_menu_team.h | 4 +- src/code_803E46C.c | 6 +- src/code_803E724.c | 6 +- src/code_805D8C8.c | 6 +- src/code_8069E0C.c | 8 +- src/code_807CD9C.c | 6 +- src/dungeon_menu_team.c | 201 +++++++++++++++++++----------------- src/dungeon_message.c | 4 +- sym_ewram.txt | 2 +- 10 files changed, 139 insertions(+), 128 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 4da2c1a92..9d0812bc6 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -114,7 +114,7 @@ _080638FE: mov r0, r8 cmp r0, 0 beq _08063908 - bl sub_8062500 + bl ShowStatusDescriptionMenuArrow _08063908: ldr r5, _08063944 adds r0, r5, 0 @@ -213,7 +213,7 @@ _080639B8: _080639C0: mov r0, r8 mov r1, r10 - bl sub_80625A4 + bl ShowStatusesDescriptionMenu b _08063898 _080639CA: movs r0, 0 @@ -229,8 +229,8 @@ _080639CA: bx r0 thumb_func_end sub_8063834 - thumb_func_start sub_80639E4 -sub_80639E4: + thumb_func_start ShowStatusDescriptionMenu +ShowStatusDescriptionMenu: push {r4-r6,lr} sub sp, 0x4 adds r5, r0, 0 @@ -288,7 +288,7 @@ _08063A60: .4byte gUnknown_8106CC8 _08063A64: .4byte gFormatBuffer_Monsters _08063A68: .4byte gUnknown_8106CCC _08063A6C: .4byte gDungeonMenu - thumb_func_end sub_80639E4 + thumb_func_end ShowStatusDescriptionMenu thumb_func_start sub_8063A70 sub_8063A70: @@ -1919,7 +1919,7 @@ _08064732: _08064738: cmp r5, 0 beq _08064740 - bl sub_8062500 + bl ShowStatusDescriptionMenuArrow _08064740: adds r0, r6, 0 movs r1, 0 @@ -1952,7 +1952,7 @@ _08064774: adds r0, 0x4 ldr r0, [r0] adds r1, r6, 0 - bl sub_80639E4 + bl ShowStatusDescriptionMenu adds r7, r4, 0x1 b _080647A0 .align 2, 0 @@ -1971,7 +1971,7 @@ _0806479A: _080647A0: cmp r4, r8 bge _080647A8 - bl sub_8062500 + bl ShowStatusDescriptionMenuArrow _080647A8: adds r0, r6, 0 movs r1, 0 @@ -2411,7 +2411,7 @@ _08064B22: _08064B28: cmp r6, 0 beq _08064B30 - bl sub_8062500 + bl ShowStatusDescriptionMenuArrow _08064B30: adds r0, r5, 0 movs r1, 0 @@ -2444,7 +2444,7 @@ _08064B64: adds r0, 0x4 ldr r0, [r0] adds r1, r5, 0 - bl sub_80639E4 + bl ShowStatusDescriptionMenu adds r7, r4, 0x1 b _08064B90 .align 2, 0 @@ -2463,7 +2463,7 @@ _08064B8A: _08064B90: cmp r4, r8 bge _08064B98 - bl sub_8062500 + bl ShowStatusDescriptionMenuArrow _08064B98: adds r0, r5, 0 movs r1, 0 @@ -5567,7 +5567,7 @@ _080664C0: bx r0 .align 2, 0 _080664C8: .4byte gUnknown_2027370 -_080664CC: .4byte gUnknown_202EDCC +_080664CC: .4byte gDungeonFramesCounter _080664D0: .4byte gUnknown_202F300 _080664D4: .4byte 0x0000feff _080664D8: .4byte 0x0000fdff diff --git a/include/dungeon_menu_team.h b/include/dungeon_menu_team.h index 485807cc5..615091ce7 100644 --- a/include/dungeon_menu_team.h +++ b/include/dungeon_menu_team.h @@ -7,8 +7,8 @@ bool8 ShowDungeonTeamMenu(Entity *a0); void ShowDungeonTacticsMenu(ActionContainer *a0); void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 a1); -void sub_8062500(void); -void sub_80625A4(s32 count, struct subStruct_203B240 **strings); +void ShowStatusDescriptionMenuArrow(void); +void ShowStatusesDescriptionMenu(s32 count, struct subStruct_203B240 **strings); #define WHICH_MENU_MOVES 1 #define WHICH_MENU_ITEMS 2 Entity *ShowDungeonToWhichMonMenu(s32 *teamId, s32 caseId); diff --git a/src/code_803E46C.c b/src/code_803E46C.c index 6e3bd9f92..9234a02aa 100644 --- a/src/code_803E46C.c +++ b/src/code_803E46C.c @@ -20,7 +20,7 @@ EWRAM_INIT u8 gUnknown_203B40C = 0; EWRAM_INIT u8 gUnknown_203B40D = 0; extern s32 gDungeonBrightness; -extern s32 gUnknown_202EDCC; +extern s32 gDungeonFramesCounter; extern u32 gUnknown_202EDD0; extern s32 gUnknown_202EDD4; @@ -95,7 +95,7 @@ void sub_803E490(u32 unused) nullsub_12(); sub_80060EC(); - gUnknown_202EDCC++; + gDungeonFramesCounter++; IncrementPlayTime(gPlayTimeRef); sub_800CB20(); @@ -128,7 +128,7 @@ void sub_803E668(u32 unused) nullsub_12(); sub_8005838(NULL, 0); sub_80060EC(); - gUnknown_202EDCC++; + gDungeonFramesCounter++; IncrementPlayTime(gPlayTimeRef); sub_800CB20(); LoadBufferedInputs(); diff --git a/src/code_803E724.c b/src/code_803E724.c index 5d47fb436..42a795d6b 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -52,7 +52,7 @@ extern const u16 gUnknown_80F6544[][9]; extern u8 gUnknown_20274A5; -extern s32 gUnknown_202EDCC; +extern s32 gDungeonFramesCounter; extern void sub_8040A84(); extern void PlayDungeonStartButtonSE(void); @@ -1109,14 +1109,14 @@ void sub_803FB74(void) hungry = TRUE; } - if (lowHp && (gUnknown_202EDCC & 16) != 0) { + if (lowHp && (gDungeonFramesCounter & 16) != 0) { r5 = 32, r6 = 32; } else { r5 = 0, r6 = 0; } - if (hungry && (gUnknown_202EDCC & 16) != 0) { + if (hungry && (gDungeonFramesCounter & 16) != 0) { r5 = 48, r6 = 48; } diff --git a/src/code_805D8C8.c b/src/code_805D8C8.c index 8d7c71136..457d35ca1 100644 --- a/src/code_805D8C8.c +++ b/src/code_805D8C8.c @@ -15,7 +15,7 @@ extern const u8 gUnknown_8106E98[]; // palet // ??? extern s32 sprintf(char *, const char *, ...); -extern u32 gUnknown_202EDCC; +extern u32 gDungeonFramesCounter; static void EnsureCastformLoaded(void); static void EnsureDeoxysLoaded(void); @@ -38,7 +38,7 @@ void sub_8068310(s32 size, u16 **param_2) void sub_8068344(void) { - if ((gUnknown_202EDCC & 8) != 0) { + if ((gDungeonFramesCounter & 8) != 0) { UnkTextStruct1 *ptr = &gUnknown_2027370[0]; SpriteOAM sprite = {0}; @@ -62,7 +62,7 @@ void sub_8068344(void) // The same as sub_80623B0 void sub_80684C4(void) { - if ((gUnknown_202EDCC & 8) != 0) { + if ((gDungeonFramesCounter & 8) != 0) { UnkTextStruct1 *ptr = &gUnknown_2027370[0]; SpriteOAM sprite = {0}; diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index baea43318..b85148372 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -71,7 +71,7 @@ extern void DeletePokemonDungeonSprite(s32 id); extern void sub_80429E8(Entity *r0); extern s32 sub_803DA20(s32 param_1); extern void sub_80694C0(Entity *, s32, s32, u32); -extern s32 gUnknown_202EDCC; +extern s32 gDungeonFramesCounter; extern void sub_800F958(s32 dungeonSpriteID, DungeonPos *pos, DungeonPos *statusOffsets, u32 a3); extern void sub_8005700(DungeonPos *a0, struct axObject *a1); u32 EntityGetStatusSprites(Entity *entity); @@ -2008,7 +2008,7 @@ void sub_806C51C(Entity *entity) } else { if (entInfo->unk15D != 0) { - if (gUnknown_202EDCC & 4) { + if (gDungeonFramesCounter & 4) { x++; } else { @@ -2080,7 +2080,7 @@ void sub_806C51C(Entity *entity) s32 overworldPal; if (entInfo->frozenClassStatus.status == STATUS_PETRIFIED || entInfo->burnClassStatus.status == STATUS_PARALYSIS || entInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) { - x += gUnknown_202EDCC & 2; + x += gDungeonFramesCounter & 2; } if (decoySprite) { @@ -2093,7 +2093,7 @@ void sub_806C51C(Entity *entity) if (entity->unk22 == 0) { DoAxFrame_800558C(&entity->axObj.axdata, x, y, y2, overworldPal, &spriteMasks); } - else if (entity->unk22 == 1 && (gUnknown_202EDCC & 1)) { + else if (entity->unk22 == 1 && (gDungeonFramesCounter & 1)) { DoAxFrame_800558C(&entity->axObj.axdata, x, y, y2, overworldPal, &spriteMasks); } } diff --git a/src/code_807CD9C.c b/src/code_807CD9C.c index 0596c8e4f..e3d0c4069 100644 --- a/src/code_807CD9C.c +++ b/src/code_807CD9C.c @@ -25,7 +25,7 @@ #include "weather.h" #include "dungeon_config.h" -extern u32 gUnknown_202EDCC; +extern u32 gDungeonFramesCounter; extern u8 *gUnknown_80FCA10[]; extern u8 *gUnknown_80F8A0C[]; @@ -278,7 +278,7 @@ void WarpTarget(Entity *pokemon, Entity *target, u32 param_3, DungeonPos *pos) direction = (info->action).direction; target->unk1C.raw += + 0x800; while ( target->unk1C.raw < 0xa000) { - if ((gUnknown_202EDCC & 3) == 0) { + if ((gDungeonFramesCounter & 3) == 0) { direction = (direction + 1) & DIRECTION_MASK; info->action.direction = direction & DIRECTION_MASK; sub_806CE68(target,direction); @@ -324,7 +324,7 @@ void WarpTarget(Entity *pokemon, Entity *target, u32 param_3, DungeonPos *pos) direction = (info->action).direction; target->unk1C.raw = 0x9c00; do { - if ((gUnknown_202EDCC & 3) == 0) { + if ((gDungeonFramesCounter & 3) == 0) { direction = (direction + 1) & DIRECTION_MASK; info->action.direction = direction & DIRECTION_MASK; sub_806CE68(target,direction); diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index a8ef93d32..3d72a0a03 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -125,12 +125,12 @@ extern char* sub_808E4FC(s32 a1); extern char* sub_808E51C(s32 a1); extern void sub_8045C18(u8 *buffer, Item *item); extern bool32 sub_8069D18(DungeonPos *a0, Entity *a1); -extern void sub_80639E4(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); +extern void ShowStatusDescriptionMenu(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); extern u8 gUnknown_202EE00; extern Entity *gLeaderPointer; extern MenuInputStruct gDungeonMenu; -extern s32 gUnknown_202EDCC; +extern s32 gDungeonFramesCounter; extern u8 gUnknown_202EE39; extern const u8 *gUnknown_80FE940; @@ -161,11 +161,11 @@ static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *w static void sub_806145C(struct UnkFieldTeamMenuStruct *a0); static void ChosenSubMenuToAction(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); static void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId); -static void sub_8062230(void); -static void sub_80623B0(void); +static void ShowUpArrowSprite(void); +static void ShowDownArrowSprite(void); static void ShowIqDescriptionWindow(u8 iqSkillId); static void ShowTacticDescriptionWindow(u8 tacticId); -static void sub_806285C(s32 a0); +static void ShowStatusInfoWindow(s32 a0); static void PrintMoveNamesOnBottomWindow(Entity *entity); static void PrintItemNameOnBottomWindow(Entity *entity); static void ResetDungeonMenu(void); @@ -569,10 +569,10 @@ void ShowDungeonTacticsMenu(ActionContainer *a0) AddMenuCursorSprite(&gDungeonMenu); if (tacticIds[8] != TACTIC_UNUSED) { - sub_80623B0(); + ShowDownArrowSprite(); } if (scrollFirstId != 0) { - sub_8062230(); + ShowUpArrowSprite(); } DungeonRunFrameActions(0x3D); if (gRealInputs.repeated & DPAD_DOWN) { @@ -588,7 +588,7 @@ void ShowDungeonTacticsMenu(ActionContainer *a0) menuIndex = 7; break; } - MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); + MoveMenuCursorDownWrapAround(&gDungeonMenu, FALSE); } if (gRealInputs.repeated & DPAD_UP) { PlayDungeonCursorSE(1); @@ -603,7 +603,7 @@ void ShowDungeonTacticsMenu(ActionContainer *a0) menuIndex = 0; break; } - MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); + MoveMenuCursorUpWrapAround(&gDungeonMenu, FALSE); } if (gRealInputs.pressed & START_BUTTON) { u32 tacticId = tacticIds[gDungeonMenu.menuIndex]; @@ -729,9 +729,20 @@ static void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 win sub_80073E0(windowId); } +enum +{ + SUB_WINDOW_NONE, + SUB_WINDOW_STATUS, + SUB_WINDOW_STATS, + SUB_WINDOW_FEATUERS, + SUB_WINDOW_IQ, + SUB_WINDOW_INFO, +}; + +// The way this function was written, it seems that they planned to put IQ skills in the Summary Menu first, but later decided to create a separate menu for it. void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) { - s32 spArr[6]; + s32 subWindowIds[6]; struct unkStruct_808FF20 unkMonStruct; struct UnkInfoTabStruct unkInfoTabStruct; Windows windows = { @@ -752,41 +763,41 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) }; s32 r8; Entity *entity; - s32 var_3C; - s32 totalWindows; + s32 currSubWindowId; + s32 totalSubWindows; EntityInfo *entityInfo; - var_3C = 0; + currSubWindowId = 0; r8 = 0; entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; entityInfo = GetEntInfo(entity); if (IsExperienceLocked(entityInfo->joinedAt.id)) { - spArr[0] = 1; - spArr[1] = 0; - spArr[2] = 0; - spArr[3] = 0; - spArr[4] = 0; - spArr[5] = 0; - totalWindows = 1; + subWindowIds[0] = SUB_WINDOW_STATUS; + subWindowIds[1] = SUB_WINDOW_NONE; + subWindowIds[2] = SUB_WINDOW_NONE; + subWindowIds[3] = SUB_WINDOW_NONE; + subWindowIds[4] = SUB_WINDOW_NONE; + subWindowIds[5] = SUB_WINDOW_NONE; + totalSubWindows = 1; } else if (showIq) { - spArr[0] = 4; - spArr[1] = 0; - spArr[2] = 0; - spArr[3] = 0; - spArr[4] = 0; - spArr[5] = 0; - totalWindows = 1; + subWindowIds[0] = SUB_WINDOW_IQ; + subWindowIds[1] = SUB_WINDOW_NONE; + subWindowIds[2] = SUB_WINDOW_NONE; + subWindowIds[3] = SUB_WINDOW_NONE; + subWindowIds[4] = SUB_WINDOW_NONE; + subWindowIds[5] = SUB_WINDOW_NONE; + totalSubWindows = 1; } else { - spArr[0] = 2; - spArr[1] = 1; - spArr[2] = 3; - spArr[3] = 5; - spArr[4] = 0; - spArr[5] = 0; - totalWindows = 4; + subWindowIds[0] = SUB_WINDOW_STATS; + subWindowIds[1] = SUB_WINDOW_STATUS; + subWindowIds[2] = SUB_WINDOW_FEATUERS; + subWindowIds[3] = SUB_WINDOW_INFO; + subWindowIds[4] = SUB_WINDOW_NONE; + subWindowIds[5] = SUB_WINDOW_NONE; + totalSubWindows = 4; } unkMonStruct.unk40 = 0; @@ -795,20 +806,20 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) while (1) { bool8 loopBreak = FALSE; - s32 var_30 = 0; - s32 var_2C = 0; - s32 var_28 = 1; + bool8 hasIqSkills = FALSE; + bool8 hasStatusProblems = FALSE; + bool8 addCursorSprite = TRUE; UnkTextStruct1 *unkTxtStr1Ptr = &gUnknown_2027370[0]; - sTeamWindowHeader.f0 = totalWindows; - sTeamWindowHeader.f1 = var_3C; + sTeamWindowHeader.f0 = totalSubWindows; + sTeamWindowHeader.f1 = currSubWindowId; sTeamWindowHeader.f2 = 10; sTeamWindowHeader.f3 = 0; DungeonShowWindows(&windows, TRUE); sub_8069844(&unkMonStruct, entity); - CreatePokemonInfoTabScreen(spArr[var_3C], var_3C, &unkMonStruct, &unkInfoTabStruct, 0); - gDungeonMenu.unk1E = var_3C; - gDungeonMenu.unk20 = totalWindows; + CreatePokemonInfoTabScreen(subWindowIds[currSubWindowId], currSubWindowId, &unkMonStruct, &unkInfoTabStruct, 0); + gDungeonMenu.unk1E = currSubWindowId; + gDungeonMenu.unk20 = totalSubWindows; gDungeonMenu.unkC = (unkTxtStr1Ptr->unk0 + 15) * 8; gDungeonMenu.unkE = ((unkTxtStr1Ptr->unk2 + 1) * 8) - 2; gDungeonMenu.unk14.x = 0; @@ -820,7 +831,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) gDungeonMenu.unk1A = 0; gDungeonMenu.unk1C = 0; - if (spArr[var_3C] == 1) { + if (subWindowIds[currSubWindowId] == SUB_WINDOW_STATUS) { s32 i; for (i = 0; i < 8; i++) { @@ -830,14 +841,14 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) } if (i != 0) { - var_2C = 1; + hasStatusProblems = TRUE; gDungeonMenu.unk1A = i; gDungeonMenu.unk1C = 8; sub_80137B0(&gDungeonMenu, 0); } gDungeonMenu.menuIndex = r8; } - else if (spArr[var_3C] == 4) { + else if (subWindowIds[currSubWindowId] == SUB_WINDOW_IQ) { s32 i; for (i = 0; i < 8; i++) { @@ -847,7 +858,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) } if (i != 0) { - var_30 = 1; + hasIqSkills = TRUE; gDungeonMenu.unk1A = i; gDungeonMenu.unk1C = 8; sub_80137B0(&gDungeonMenu, 0); @@ -863,24 +874,24 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) unkVar = sub_8014140(0, gUnknown_8106B8C); r5 = FALSE; r6 = FALSE; - if (var_30) { + if (hasIqSkills) { if (unkInfoTabStruct.unk0[8] != 0) { r5 = TRUE; - sub_80623B0(); + ShowDownArrowSprite(); } if (unkMonStruct.unk40 != 0) { r6 = TRUE; - sub_8062230(); + ShowUpArrowSprite(); } } - if (var_2C) { + if (hasStatusProblems) { if (unkInfoTabStruct.unkC[8] != 0) { r5 = TRUE; - sub_80623B0(); + ShowDownArrowSprite(); } if (unkMonStruct.unk56 != 0) { r6 = TRUE; - sub_8062230(); + ShowUpArrowSprite(); } } @@ -888,26 +899,26 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) if (sTeamWindowHeader.f0 > 1 && !sub_80048C8()) { if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { PlayDungeonCursorSE(0); - var_3C++; - if (spArr[var_3C] == 0) { - var_3C = 0; + currSubWindowId++; + if (subWindowIds[currSubWindowId] == SUB_WINDOW_NONE) { + currSubWindowId = 0; } break; } if ((gRealInputs.pressed & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { PlayDungeonCursorSE(0); - var_3C--; - if (var_3C == -1) { - var_3C = 5; - while (spArr[var_3C] == 0) { - var_3C--; + currSubWindowId--; + if (currSubWindowId == -1) { + currSubWindowId = 5; + while (subWindowIds[currSubWindowId] == SUB_WINDOW_NONE) { + currSubWindowId--; } } break; } } - if (var_2C) { + if (hasStatusProblems) { if (unkVar == 2 && r5) { PlayDungeonCursorSE(0); if (unkInfoTabStruct.unkC[8] != 0) { @@ -936,7 +947,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) break; } else { - MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); + MoveMenuCursorDownWrapAround(&gDungeonMenu, FALSE); } } @@ -967,11 +978,11 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) break; } else { - MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); + MoveMenuCursorUpWrapAround(&gDungeonMenu, FALSE); } } } - else if (var_30) { + else if (hasIqSkills) { if (unkVar == 2 && r5) { if (unkInfoTabStruct.unk0[8] != 0) { s32 i; @@ -999,7 +1010,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) break; } else { - MoveMenuCursorDownWrapAround(&gDungeonMenu, 0); + MoveMenuCursorDownWrapAround(&gDungeonMenu, FALSE); } } @@ -1030,7 +1041,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) break; } else { - MoveMenuCursorUpWrapAround(&gDungeonMenu, 0); + MoveMenuCursorUpWrapAround(&gDungeonMenu, FALSE); } } } @@ -1039,30 +1050,30 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) continue; if (gRealInputs.pressed & START_BUTTON) { - if (var_2C) { + if (hasStatusProblems) { s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; r8 = gDungeonMenu.menuIndex; PlayDungeonStartButtonSE(); - sub_806285C(var); - var_28 = 0; + ShowStatusInfoWindow(var); + addCursorSprite = FALSE; loopBreak = FALSE; break; } - else if (var_30) { + else if (hasIqSkills) { s32 iqSkillId = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; r8 = gDungeonMenu.menuIndex; PlayDungeonStartButtonSE(); ShowIqDescriptionWindow(iqSkillId); - var_28 = 0; + addCursorSprite = FALSE; loopBreak = FALSE; break; } } if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (var_2C) { + if (hasStatusProblems) { s32 var = unkInfoTabStruct.unkC[gDungeonMenu.menuIndex]; r8 = gDungeonMenu.menuIndex; @@ -1085,8 +1096,8 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { PlayDungeonConfirmationSE(); - sub_806285C(var); - var_28 = 0; + ShowStatusInfoWindow(var); + addCursorSprite = FALSE; loopBreak = FALSE; break; } @@ -1097,13 +1108,13 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) } } } - else if (var_30) { + else if (hasIqSkills) { bool8 aPress = FALSE; s32 var = unkInfoTabStruct.unk0[gDungeonMenu.menuIndex]; r8 = gDungeonMenu.menuIndex; ResetDungeonMenu(); - gDungeonSubMenuItemsCount = var_2C; + gDungeonSubMenuItemsCount = 0; PlayDungeonConfirmationSE(); sub_8044F5C(0x28, 0); sub_8044F5C(0xC, 0); @@ -1146,7 +1157,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) } else { ShowIqDescriptionWindow(var); - var_28 = 0; + addCursorSprite = FALSE; } loopBreak = FALSE; break; @@ -1165,8 +1176,8 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) } } - if (var_28) { - if (var_30 != 0 || var_2C != 0) { + if (addCursorSprite) { + if (hasIqSkills || hasStatusProblems) { AddMenuCursorSprite(&gDungeonMenu); } DungeonRunFrameActions(0x1C); @@ -1182,9 +1193,9 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) } // The same as sub_8068344 -static void sub_8062230(void) +static void ShowUpArrowSprite(void) { - if ((gUnknown_202EDCC & 8) != 0) { + if ((gDungeonFramesCounter & 8) != 0) { UnkTextStruct1 *txtStrPtr = &gUnknown_2027370[0]; SpriteOAM sprite = {0}; @@ -1207,9 +1218,9 @@ static void sub_8062230(void) } // The same as sub_80684C4 -static void sub_80623B0(void) +static void ShowDownArrowSprite(void) { - if ((gUnknown_202EDCC & 8) != 0) { + if ((gDungeonFramesCounter & 8) != 0) { UnkTextStruct1 *ptr = &gUnknown_2027370[0]; SpriteOAM sprite = {0}; @@ -1230,9 +1241,9 @@ static void sub_80623B0(void) } } -void sub_8062500(void) +void ShowStatusDescriptionMenuArrow(void) { - if ((gUnknown_202EDCC & 8) != 0) { + if ((gDungeonFramesCounter & 8) != 0) { UnkTextStruct1 *ptr = &gUnknown_2027370[0]; SpriteSetAffine1(&gUnknown_202F268, 0); @@ -1252,17 +1263,17 @@ void sub_8062500(void) } } -void sub_80625A4(s32 count, struct subStruct_203B240 **strings) +void ShowStatusesDescriptionMenu(s32 count, struct subStruct_203B240 **strings) { s32 i; MenuInputStructSub menuSub; sub_801317C(&menuSub); for (i = 0; i < count; i++) { - sub_80639E4(strings[i], &menuSub); + ShowStatusDescriptionMenu(strings[i], &menuSub); while (1) { if (i < count - 1) { - sub_8062500(); + ShowStatusDescriptionMenuArrow(); } nullsub_34(&menuSub, 0); DungeonRunFrameActions(0x16); @@ -1306,7 +1317,7 @@ static void ShowIqDescriptionWindow(u8 iqSkillId) count = sub_8097DF0(GetIQSkillDescription(iqSkillId), result); while (1) { if (count != 0) { - sub_8062500(); + ShowStatusDescriptionMenuArrow(); } nullsub_34(&menuSub, 0); DungeonRunFrameActions(0x16); @@ -1325,7 +1336,7 @@ static void ShowIqDescriptionWindow(u8 iqSkillId) if (bPress || count == 0) break; - sub_80625A4(count, result); + ShowStatusesDescriptionMenu(count, result); } sub_803E708(4, 0x3E); @@ -1359,7 +1370,7 @@ static void ShowTacticDescriptionWindow(u8 tacticId) count = sub_8097DF0(GetTacticsDescription(tacticId), result); while (1) { if (count != 0) { - sub_8062500(); + ShowStatusDescriptionMenuArrow(); } nullsub_34(&menuSub, 0); DungeonRunFrameActions(62); @@ -1378,13 +1389,13 @@ static void ShowTacticDescriptionWindow(u8 tacticId) if (bPress || count == 0) break; - sub_80625A4(count, result); + ShowStatusesDescriptionMenu(count, result); } sub_803E708(4, 0x3E); } -static void sub_806285C(s32 a0) +static void ShowStatusInfoWindow(s32 statusId) { const u8 *str; MenuInputStructSub menuSub; @@ -1413,10 +1424,10 @@ static void sub_806285C(s32 a0) header.f3 = 0; DungeonShowWindows(&windows, TRUE); sub_80073B8(0); - str = sub_808E4FC(a0); + str = sub_808E4FC(statusId); strcpy(gFormatBuffer_Items[0], str); PrintFormattedStringOnWindow(16, 0, gUnknown_80FE964, 0, '\0'); - PrintFormattedStringOnWindow(8, 16, sub_808E51C(a0), 0, '\0'); + PrintFormattedStringOnWindow(8, 16, sub_808E51C(statusId), 0, '\0'); sub_80073E0(0); while (1) { diff --git a/src/dungeon_message.c b/src/dungeon_message.c index 1655a1c7a..208fa09b0 100644 --- a/src/dungeon_message.c +++ b/src/dungeon_message.c @@ -45,7 +45,7 @@ extern void PlayDungeonCursorSE(u8 param_1); extern u32 gUnknown_202EDD0; extern u8 gUnknown_203B40C; extern u8 gUnknown_202EE01; -extern s32 gUnknown_202EDCC; +extern s32 gDungeonFramesCounter; extern const u8 gUnknown_80F7AE8[]; extern const u8 gUnknown_80F7AF8[]; @@ -1047,7 +1047,7 @@ static bool8 TryScrollLogDown(s32 a0) static void CreateMessageLogArrow(bool8 upArrow, s32 y) { struct UnkTextStruct1 *unkStr = &gUnknown_2027370[0]; - if (!(gUnknown_202EDCC & 8)) { + if (!(gDungeonFramesCounter & 8)) { SpriteSetAffine1(&sMessageLogArrowSpriteOAM, 0); SpriteSetAffine2(&sMessageLogArrowSpriteOAM, 0); SpriteSetObjMode(&sMessageLogArrowSpriteOAM, 0); diff --git a/sym_ewram.txt b/sym_ewram.txt index 2effcee14..f81b0f6bb 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -94,7 +94,7 @@ gUnknown_202EDC0: /* 202EDC0 (sub_803E250 - sub_80462AC) */ .space 0x8 gDungeonBrightness: /* 202EDC8 (sub_803E250 - sub_8086794) */ .space 0x4 -gUnknown_202EDCC: /* 202EDCC (sub_803E490 - sub_807D148) */ +gDungeonFramesCounter: /* 202EDCC (sub_803E490 - sub_807D148) */ .space 0x4 gUnknown_202EDD0: /* 202EDD0 (sub_803E250 - sub_8052210) */ .space 0x4 From c0187982623ccd160aa9574fc1b30263262a3636 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 14:29:22 +0100 Subject: [PATCH 15/31] sub_8063834 --- asm/code_805D8C8.s | 222 --------------------------------------- include/dungeon_main.h | 2 - include/input.h | 2 +- src/dungeon_menu_items.c | 1 + src/dungeon_menu_moves.c | 127 ++++++++++++++++++++-- src/dungeon_menu_team.c | 1 + 6 files changed, 121 insertions(+), 234 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 9d0812bc6..ce6be2775 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -7,228 +7,6 @@ - - thumb_func_start sub_8063834 -sub_8063834: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x7C - str r0, [sp, 0x74] - str r1, [sp, 0x78] - adds r4, r2, 0 - mov r0, sp - bl sub_80140B4 - add r0, sp, 0x70 - str r0, [sp, 0x14] - movs r1, 0x1 - mov r9, r1 - ldr r3, [sp, 0x78] - adds r3, 0x1 - add r2, sp, 0x60 - mov r10, r2 - cmp r3, r4 - bge _08063894 - lsls r0, r3, 3 - ldr r1, [sp, 0x74] - adds r2, r0, r1 - ldrb r1, [r2] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - beq _08063894 - movs r6, 0x2 - movs r5, 0x1 -_08063874: - ldrb r1, [r2] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _08063894 - movs r0, 0x1 - add r9, r0 - adds r2, 0x8 - adds r3, 0x1 - cmp r3, r4 - bge _08063894 - ldrb r1, [r2] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _08063874 -_08063894: - movs r4, 0 - ldr r6, _0806393C -_08063898: - movs r7, 0 - mov r1, r9 - add r2, sp, 0x70 - strb r1, [r2] - adds r1, r2, 0 - strb r4, [r1, 0x1] - movs r0, 0xC - strb r0, [r1, 0x2] - strb r7, [r1, 0x3] - strh r4, [r6, 0x1E] - mov r0, r9 - strh r0, [r6, 0x20] - ldr r1, _08063940 - movs r2, 0 - ldrsh r0, [r1, r2] - adds r0, 0x17 - lsls r0, 3 - strh r0, [r6, 0xC] - movs r2, 0x2 - ldrsh r0, [r1, r2] - adds r0, 0x1 - lsls r0, 3 - subs r0, 0x2 - strh r0, [r6, 0xE] - strh r7, [r6, 0x14] - strh r7, [r6, 0x4] - movs r0, 0x10 - strh r0, [r6, 0x6] - str r7, [r6] - adds r0, r6, 0 - adds r0, 0x28 - bl sub_801317C - strh r7, [r6, 0x18] - strh r7, [r6, 0x1A] - strh r7, [r6, 0x1C] - mov r0, sp - movs r1, 0x1 - bl DungeonShowWindows - ldr r0, [sp, 0x78] - adds r1, r0, r4 - lsls r1, 3 - ldr r2, [sp, 0x74] - adds r1, r2, r1 - adds r0, r4, 0 - movs r2, 0 - mov r3, r10 - bl unk_PrintMoveDescription - mov r8, r0 -_080638FE: - mov r0, r8 - cmp r0, 0 - beq _08063908 - bl ShowStatusDescriptionMenuArrow -_08063908: - ldr r5, _08063944 - adds r0, r5, 0 - movs r1, 0 - bl nullsub_34 - movs r0, 0x1C - bl DungeonRunFrameActions - bl sub_8062D88 - ldr r1, _08063948 - ldrh r1, [r1, 0x2] - ands r0, r1 - cmp r0, 0 - bne _0806392C - ldrb r0, [r5, 0x1] - cmp r0, 0 - beq _0806394C -_0806392C: - bl PlayDungeonConfirmationSE - movs r7, 0x1 - mov r1, r8 - cmp r1, 0 - beq _080639AE - movs r7, 0x2 - b _080639AE - .align 2, 0 -_0806393C: .4byte gDungeonMenu -_08063940: .4byte gUnknown_2027370 -_08063944: .4byte gUnknown_202EE38 -_08063948: .4byte gRealInputs -_0806394C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0806395A - ldrb r0, [r5, 0x2] - cmp r0, 0 - beq _08063962 -_0806395A: - bl PlayDungeonCancelSE - movs r7, 0x1 - b _080639AE -_08063962: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08063970 - ldrb r0, [r5, 0x4] - cmp r0, 0 - beq _08063986 -_08063970: - adds r0, r4, 0 - cmp r4, 0 - bne _08063978 - mov r4, r9 -_08063978: - subs r4, 0x1 - cmp r0, r4 - beq _080639AE - movs r0, 0 - bl PlayDungeonCursorSE - b _080639AE -_08063986: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08063994 - ldrb r0, [r5, 0x3] - cmp r0, 0 - beq _080638FE -_08063994: - adds r1, r4, 0 - mov r0, r9 - subs r0, 0x1 - cmp r4, r0 - bne _080639A2 - movs r4, 0 - b _080639A4 -_080639A2: - adds r4, 0x1 -_080639A4: - cmp r1, r4 - beq _080639AE - movs r0, 0 - bl PlayDungeonCursorSE -_080639AE: - cmp r7, 0x1 - beq _080639CA - cmp r7, 0 - bne _080639B8 - b _08063898 -_080639B8: - mov r2, r8 - cmp r2, 0 - bne _080639C0 - b _08063898 -_080639C0: - mov r0, r8 - mov r1, r10 - bl ShowStatusesDescriptionMenu - b _08063898 -_080639CA: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - add sp, 0x7C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8063834 - thumb_func_start ShowStatusDescriptionMenu ShowStatusDescriptionMenu: push {r4-r6,lr} diff --git a/include/dungeon_main.h b/include/dungeon_main.h index 033a67d42..5067e39e3 100644 --- a/include/dungeon_main.h +++ b/include/dungeon_main.h @@ -1,7 +1,6 @@ #ifndef GUARD_DUNGEON_MAIN_H #define GUARD_DUNGEON_MAIN_H -#include "structs/str_text.h" #include "structs/dungeon_entity.h" struct UnkMenuBitsStruct { @@ -19,6 +18,5 @@ void sub_805F02C(void); ActionContainer *GetLeaderActionContainer(void); u16 GetLeaderActionId(void); bool8 DungeonGiveNameToRecruitedMon(u8 *a0); -void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX); #endif diff --git a/include/input.h b/include/input.h index 1dba6adad..2029913a8 100644 --- a/include/input.h +++ b/include/input.h @@ -59,4 +59,4 @@ void UpdateInput(void); bool8 sub_80048BC(void); bool8 sub_80048C8(void); -#endif // GUARD_INPUT_H \ No newline at end of file +#endif // GUARD_INPUT_H diff --git a/src/dungeon_menu_items.c b/src/dungeon_menu_items.c index 9de86df1f..199b88ca7 100644 --- a/src/dungeon_menu_items.c +++ b/src/dungeon_menu_items.c @@ -2,6 +2,7 @@ #include "globaldata.h" #include "dungeon_menu_items.h" #include "dungeon_menu_team.h" +#include "dungeon_submenu.h" #include "structs/str_dungeon.h" #include "input.h" #include "structs/map.h" diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index 9b976630e..a6a7a66b0 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -1,5 +1,8 @@ #include "global.h" #include "globaldata.h" +#include "dungeon_menu_moves.h" +#include "dungeon_menu_team.h" +#include "dungeon_submenu.h" #include "structs/str_dungeon.h" #include "input.h" #include "structs/map.h" @@ -72,6 +75,14 @@ bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); void sub_8063834(Move *moves, s32 a1, s32 a2); +// Needed to match some functions. +static inline u32 CheckPressed(u32 button) +{ + u32 check = button; + check &= gRealInputs.pressed; + return check; +} + u32 sub_8062D88(void) { return A_BUTTON; @@ -296,15 +307,11 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) PlayDungeonStartButtonSE(); break; } - // Fixme: r0/r1 regswap... - { - u32 bPressed = B_BUTTON; - bPressed &= gRealInputs.pressed; - if ((bPressed) || gDungeonMenu.unk28.b_button) { - PlayDungeonCancelSE(); - ret = TRUE; - break; - } + + if (CheckPressed(B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + ret = TRUE; + break; } } @@ -594,4 +601,106 @@ void sub_80637E8(ActionContainer *a0) sub_8063834(monInfo->moves.moves, a0->actionParameters[1].actionUseIndex, 4); } +void sub_8063834(Move *moves, s32 a1, s32 a2) +{ + Windows windows; + WindowHeader header; + struct subStruct_203B240 *statuses[4]; + s32 i, count, currId; + + sub_80140B4(&windows); + windows.id[0].unk14 = &header; + + count = 1; + for (i = a1 + 1; i < a2; i++) { + if (!MoveFlagExists(&moves[i])) + break; + if (!MoveFlagLinkChain(&moves[i])) + break; + count++; + } + + currId = 0; + while (1) { + s32 statusesCount; + s32 inputAction = 0; + + header.f0 = count; + header.f1 = currId; + header.f2 = 12; + header.f3 = 0; + + gDungeonMenu.unk1E = currId; + gDungeonMenu.unk20 = count; + gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 23) * 8; + gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1A = 0; + gDungeonMenu.unk1C = 0; + DungeonShowWindows(&windows, TRUE); + statusesCount = unk_PrintMoveDescription(currId, &moves[a1 + currId], 0, statuses); + while (1) { + if (statusesCount != 0) { + ShowStatusDescriptionMenuArrow(); + } + + nullsub_34(&gDungeonMenu.unk28, 0); + DungeonRunFrameActions(0x1C); + + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + PlayDungeonConfirmationSE(); + inputAction = 1; + if (statusesCount != 0) { + inputAction = 2; + } + } + else if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + inputAction = 1; + } + else if ((gRealInputs.pressed & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { + s32 prevId = currId; + if (currId == 0) { + currId = count; + } + currId--; + if (prevId != currId) { + PlayDungeonCursorSE(FALSE); + } + } + else if ((CheckPressed(DPAD_RIGHT)) || gDungeonMenu.unk28.dpad_right) { + s32 prevId = currId; + if (currId == count - 1) { + currId = 0; + } + else { + currId++; + } + if (prevId != currId) { + PlayDungeonCursorSE(FALSE); + } + } + else { + continue; + } + + break; + } + + if (inputAction == 1) + break; + + if (inputAction != 0 && statusesCount != 0) { + ShowStatusesDescriptionMenu(statusesCount, statuses); + } + } + + sub_803EAF0(0, 0); +} + // diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index 3d72a0a03..4e043346b 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -1,6 +1,7 @@ #include "global.h" #include "globaldata.h" #include "dungeon_menu_team.h" +#include "dungeon_submenu.h" #include "structs/str_dungeon.h" #include "number_util.h" #include "input.h" From 6cc3f98aaf9b9cd108d3e3f9e29d45f124b6d1ca Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 15:24:33 +0100 Subject: [PATCH 16/31] Use Window and WindowTemplate --- asm/code_805D8C8.s | 6 +- include/code_801B3C0.h | 2 +- include/code_801B60C.h | 2 +- include/code_801D014.h | 2 +- include/code_801EE10.h | 2 +- include/code_80227B8.h | 2 +- include/code_8024458.h | 4 +- include/code_802DB28.h | 2 +- include/code_802DE84.h | 4 +- include/credits1.h | 2 +- include/debug_menu1.h | 2 +- include/debug_menu2.h | 2 +- include/debug_menu3.h | 2 +- include/debug_menu4.h | 2 +- include/dungeon_submenu.h | 2 +- include/felicity_bank.h | 2 +- include/friend_area_action_menu.h | 2 +- include/friend_list_menu.h | 2 +- include/friend_rescue.h | 4 +- include/gulpin_shop.h | 2 +- include/gulpin_shop_801FB50.h | 2 +- include/iq_skill_info_menu.h | 2 +- include/iq_skill_menu.h | 2 +- include/kangaskhan_storage1.h | 2 +- include/kangaskhan_storage2.h | 2 +- include/kecleon_bros1.h | 2 +- include/luminous_cave.h | 2 +- include/mailbox.h | 2 +- include/main_menu1.h | 4 +- include/main_menu2.h | 2 +- include/makuhita_dojo1.h | 2 +- include/menu_input.h | 8 +- include/options_menu1.h | 2 +- include/options_menu2.h | 4 +- include/other_menus1.h | 2 +- include/party_list_menu.h | 2 +- include/pelipper_board.h | 2 +- include/pokemon_news2.h | 2 +- include/post_office_guide2.h | 4 +- include/rescue_password_menu.h | 4 +- include/save_menu.h | 2 +- include/structs/menu.h | 2 +- include/structs/str_text.h | 16 +- include/structs/struct_sub80095e4.h | 4 +- include/text.h | 6 +- include/thank_you_wonder_mail.h | 4 +- include/trade_items_menu.h | 4 +- include/wigglytuff_shop2.h | 4 +- include/wigglytuff_shop3.h | 2 +- include/wonder_mail.h | 4 +- include/wonder_mail_802C860.h | 2 +- include/wonder_mail_802D098.h | 2 +- src/code_8015080.c | 22 +-- src/code_801EE10.c | 6 +- src/code_801F428.c | 4 +- src/code_801F808.c | 6 +- src/code_8031D70.c | 8 +- src/code_803E724.c | 10 +- src/code_805D8C8.c | 4 +- src/code_8066D04.c | 14 +- src/code_8072F3C.c | 6 +- src/credits1.c | 4 +- src/data/adventure_log.h | 4 +- src/data/code_801602C.h | 2 +- src/data/code_801B60C.h | 6 +- src/data/code_801C8C4.h | 4 +- src/data/code_801D014.h | 6 +- src/data/code_801D9E4.h | 4 +- src/data/code_80227B8.h | 6 +- src/data/code_8023144.h | 4 +- src/data/code_8023868.h | 4 +- src/data/code_8024458.h | 4 +- src/data/code_802DB28.h | 2 +- src/data/code_802DE84.h | 4 +- src/data/debug_menu1.h | 4 +- src/data/debug_menu2.h | 6 +- src/data/debug_menu3.h | 4 +- src/data/debug_menu4.h | 6 +- src/data/felicity_bank.h | 6 +- src/data/friend_area_action_menu.h | 10 +- src/data/friend_list_menu.h | 8 +- src/data/friend_rescue_menus.h | 8 +- src/data/gulpin_shop.h | 6 +- src/data/gulpin_shop_801FB50.h | 10 +- src/data/hints_menu1.h | 4 +- src/data/hints_menu2.h | 4 +- src/data/iq_skill_list_menu.h | 4 +- src/data/iq_skill_menu.h | 4 +- src/data/kangaskhan_storage1.h | 8 +- src/data/kangaskhan_storage2.h | 10 +- src/data/kecleon_bros1.h | 8 +- src/data/kecleon_bros2.h | 4 +- src/data/kecleon_bros3.h | 4 +- src/data/kecleon_bros4.h | 4 +- src/data/luminous_cave.h | 4 +- src/data/main_menu1.h | 2 +- src/data/main_menu2.h | 18 +- src/data/makuhita_dojo1.h | 2 +- src/data/makuhita_dojo2.h | 4 +- src/data/options_menu1.h | 4 +- src/data/options_menu2.h | 4 +- src/data/other_menus1.h | 36 ++-- src/data/party_list_menu.h | 10 +- src/data/personality_test1.h | 2 +- src/data/personality_test2.h | 6 +- src/data/pokemon_news1.h | 4 +- src/data/pokemon_news2.h | 4 +- src/data/pokemon_news3.h | 4 +- src/data/post_office_guide2.h | 4 +- src/data/trade_items_menu.h | 6 +- src/data/wigglytuff_shop1.h | 4 +- src/data/wigglytuff_shop2.h | 4 +- src/data/wigglytuff_shop3.h | 6 +- src/data/wonder_mail_1.h | 4 +- src/data/wonder_mail_802C10C.h | 4 +- src/data/wonder_mail_802C4C8.h | 4 +- src/data/wonder_mail_802C860.h | 6 +- src/data/wonder_mail_802CDD4.h | 4 +- src/data/wonder_mail_802D098.h | 10 +- src/dungeon_menu_items.c | 14 +- src/dungeon_menu_moves.c | 22 +-- src/dungeon_menu_team.c | 32 ++-- src/dungeon_message.c | 2 +- src/dungeon_submenu.c | 6 +- src/friend_areas_map_util.c | 4 +- src/friend_rescue.c | 2 +- src/load_screen.c | 10 +- src/mailbox.c | 8 +- src/main_menu1.c | 8 +- src/menu_input.c | 42 ++-- src/mission_reward.c | 4 +- src/other_menus1.c | 2 +- src/pelipper_board.c | 8 +- src/personality_test1.c | 2 +- src/rescue_password_menu.c | 22 +-- src/save_menu.c | 4 +- src/string_format.c | 14 +- src/text.c | 284 ++++++++++++++-------------- src/thank_you_wonder_mail.c | 6 +- src/unk_menu_203B360.c | 6 +- src/wonder_mail_3_mid.c | 8 +- src/wonder_mail_4.c | 4 +- src/wonder_mail_5.c | 8 +- src/wonder_mail_6.c | 8 +- src/wonder_mail_main_menu.c | 2 +- src/world_map.c | 4 +- 146 files changed, 554 insertions(+), 554 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index ce6be2775..5a653821b 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -4653,7 +4653,7 @@ _08065F16: .align 2, 0 _08065F28: .4byte gGameOptionsRef _08065F2C: .4byte gDungeonMenu -_08065F30: .4byte gUnknown_2027370 +_08065F30: .4byte gWindows _08065F34: .4byte gUnknown_80FF774 _08065F38: .4byte gUnknown_80FF7EC _08065F3C: .4byte gRealInputs @@ -4910,7 +4910,7 @@ _08066134: .4byte gUnknown_203B43C _08066138: .4byte gUnknown_8106D08 _0806613C: .4byte gUnknown_202F2F8 _08066140: .4byte gUnknown_202F2FC -_08066144: .4byte gUnknown_2027370 +_08066144: .4byte gWindows _08066148: .4byte gUnknown_8106D68 _0806614C: .4byte gRealInputs _08066150: @@ -5344,7 +5344,7 @@ _080664C0: pop {r0} bx r0 .align 2, 0 -_080664C8: .4byte gUnknown_2027370 +_080664C8: .4byte gWindows _080664CC: .4byte gDungeonFramesCounter _080664D0: .4byte gUnknown_202F300 _080664D4: .4byte 0x0000feff diff --git a/include/code_801B3C0.h b/include/code_801B3C0.h index 116f9816e..76ad0b429 100644 --- a/include/code_801B3C0.h +++ b/include/code_801B3C0.h @@ -17,7 +17,7 @@ typedef struct unkStruct_203B230 u8 fill18[0x20 - 0x18]; u32 unk20; u32 unk24; - Windows unk28; + WindowTemplates unk28; MenuInputStructSub unk88; } unkStruct_203B230; diff --git a/include/code_801B60C.h b/include/code_801B60C.h index 4ef7556ea..b673b5934 100644 --- a/include/code_801B60C.h +++ b/include/code_801B60C.h @@ -20,7 +20,7 @@ typedef struct unkStruct_203B234 MenuStruct unk78; /* 0xC8 */ u32 menuAction; MenuItem unkCC[5]; - Windows windows; + WindowTemplates windows; } unkStruct_203B234; bool8 sub_801B60C(u32, u8 id, u8 quantity); diff --git a/include/code_801D014.h b/include/code_801D014.h index ef70e1780..a79d975e8 100644 --- a/include/code_801D014.h +++ b/include/code_801D014.h @@ -21,7 +21,7 @@ struct unk_203B250 MenuStruct unk18; MenuItem unk68[8]; u16 unkA8[8]; - Windows windows; + WindowTemplates windows; }; // size: 0x8 diff --git a/include/code_801EE10.h b/include/code_801EE10.h index 73aca6d6c..a519b0572 100644 --- a/include/code_801EE10.h +++ b/include/code_801EE10.h @@ -21,7 +21,7 @@ typedef struct unkStruct_203B270 /* 0x1C */ MenuInputStruct input; u32 unk50; u32 unk54; - Windows windows; + WindowTemplates windows; const u8 *text; } unkStruct_203B270; diff --git a/include/code_80227B8.h b/include/code_80227B8.h index 96accc32c..4e8d7658c 100644 --- a/include/code_80227B8.h +++ b/include/code_80227B8.h @@ -26,7 +26,7 @@ typedef struct unkStruct_203B294 /* 0xF4 */ u32 menuAction; MenuItem unkF8[8]; u16 unk138[8]; - Windows windows; + WindowTemplates windows; } unkStruct_203B294; bool8 sub_80227B8(PokemonStruct1 *pkmn); diff --git a/include/code_8024458.h b/include/code_8024458.h index 7c40da5d5..624120372 100644 --- a/include/code_8024458.h +++ b/include/code_8024458.h @@ -15,8 +15,8 @@ struct unkStruct_203B2AC struct unkStruct_808FF20 unk4C; struct UnkInfoTabStruct unkB0; u32 unkE0; - Window *unkE4; - Windows unkE8; + WindowTemplate *unkE4; + WindowTemplates unkE8; WindowHeader unk148; }; diff --git a/include/code_802DB28.h b/include/code_802DB28.h index e9f040ce9..ca94c97a7 100644 --- a/include/code_802DB28.h +++ b/include/code_802DB28.h @@ -15,7 +15,7 @@ struct unkStruct_203B2FC /* 0x30 */ u8 jobSlotIndex; /* 0x34 */ WonderMail *jobInfo; /* 0x38 */ struct MonPortraitMsg monPortrait; - Windows unk48; + WindowTemplates unk48; }; bool8 sub_802DB28(u8 jobSlotIndex, u8 dungeon); diff --git a/include/code_802DE84.h b/include/code_802DE84.h index efe8f24ed..c1492410e 100644 --- a/include/code_802DE84.h +++ b/include/code_802DE84.h @@ -11,8 +11,8 @@ struct unkStruct_203B300 MenuInputStructSub unk0; /* 0xC */ unkStruct_802C39C *mail; u32 unk10; - Window *unk14; - Windows unk18; + WindowTemplate *unk14; + WindowTemplates unk18; u8 unk78[4]; }; diff --git a/include/credits1.h b/include/credits1.h index 39c029595..5a1130ad0 100644 --- a/include/credits1.h +++ b/include/credits1.h @@ -6,7 +6,7 @@ // size: 0x6C typedef struct Credits1Work { - Windows unk0; + WindowTemplates unk0; s32 unk60; s32 unk64; /* 0x68 */ s32 creditsCategoryIndex; diff --git a/include/debug_menu1.h b/include/debug_menu1.h index 0fec0caaf..35912eb33 100644 --- a/include/debug_menu1.h +++ b/include/debug_menu1.h @@ -8,7 +8,7 @@ struct DebugMenu { MenuStruct unk0[4]; - Windows unk140; + WindowTemplates unk140; u32 fill1A0; }; diff --git a/include/debug_menu2.h b/include/debug_menu2.h index 39cbed18c..aaa5709db 100644 --- a/include/debug_menu2.h +++ b/include/debug_menu2.h @@ -14,7 +14,7 @@ typedef struct unkStruct_203B3F0 MenuStruct unk4C; unkStructFor8013AA0 unk9C; u8 fillCC[0xD8 - 0xCC]; - Windows unkD8; + WindowTemplates unkD8; } unkStruct_203B3F0; #endif // GUARD_DEBUG_MENU2_H diff --git a/include/debug_menu3.h b/include/debug_menu3.h index a5851b53a..0a5d923d6 100644 --- a/include/debug_menu3.h +++ b/include/debug_menu3.h @@ -12,7 +12,7 @@ typedef struct unkStruct_203B3F4 /* 0x8 */ u32 menuAction; /* 0xC */ MenuItem menuItems[8]; MenuStruct unk4C; - Windows unk9C; + WindowTemplates unk9C; } unkStruct_203B3F4; #endif // GUARD_DEBUG_MENU3_H diff --git a/include/debug_menu4.h b/include/debug_menu4.h index 7a886483a..9c78bd347 100644 --- a/include/debug_menu4.h +++ b/include/debug_menu4.h @@ -17,7 +17,7 @@ typedef struct unkStruct_203B3F8 unkStructFor8013AA0 unk60; MenuItem unk90[8]; u16 unkD0[8]; - Windows unkE0; + WindowTemplates unkE0; } unkStruct_203B3F8; #endif // GUARD_DEBUG_MENU4_H diff --git a/include/dungeon_submenu.h b/include/dungeon_submenu.h index bdabc762f..a9eead764 100644 --- a/include/dungeon_submenu.h +++ b/include/dungeon_submenu.h @@ -3,6 +3,6 @@ #include "structs/str_text.h" -void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX); +void CreateDungeonMenuSubWindow(WindowTemplate *mainWindow, s32 subWindowX); #endif diff --git a/include/felicity_bank.h b/include/felicity_bank.h index c4044d49d..7bf8b85b9 100644 --- a/include/felicity_bank.h +++ b/include/felicity_bank.h @@ -22,7 +22,7 @@ typedef struct FelicityBankWork unkStructFor8013AA0 unk64; /* 0x94 */ struct MonPortraitMsg monPortrait; struct MonPortraitMsg *monPortraitPtr; - Windows unkA8; + WindowTemplates unkA8; } FelicityBankWork; bool8 CreateFelicityBank(s32 mode); diff --git a/include/friend_area_action_menu.h b/include/friend_area_action_menu.h index 132d5d898..b95fb01a6 100644 --- a/include/friend_area_action_menu.h +++ b/include/friend_area_action_menu.h @@ -65,7 +65,7 @@ struct unkStruct_203B2BC MenuItem menuItems[4]; u8 fill120[0x16C - 0x13C]; u16 unk16C[10]; - Windows unk180; + WindowTemplates unk180; }; u32 sub_8027074(void); diff --git a/include/friend_list_menu.h b/include/friend_list_menu.h index a4c6d619f..d60b1af81 100644 --- a/include/friend_list_menu.h +++ b/include/friend_list_menu.h @@ -31,7 +31,7 @@ typedef struct unkStruct_203B2B4 MenuStruct unk78; MenuItem unkC8[8]; u16 unk108[8]; - Windows unk118; + WindowTemplates unk118; } unkStruct_203B2B4; bool8 CreateFriendListMenu(s32 param_1); diff --git a/include/friend_rescue.h b/include/friend_rescue.h index a349b7fad..95b8bbf8f 100644 --- a/include/friend_rescue.h +++ b/include/friend_rescue.h @@ -23,8 +23,8 @@ typedef struct WonderMailStruct_203B33C unkStruct_203B480 unk1E8; u8 unk218; MenuStruct unk21C[4]; - Windows unk35C; - Windows unk3BC; + WindowTemplates unk35C; + WindowTemplates unk3BC; /* 0x41C */ Item item; u32 unk420; // Is this supposed to be a File like 203B2C4? u8 unk424[0x100]; diff --git a/include/gulpin_shop.h b/include/gulpin_shop.h index 4f5ef9b9d..fb798ae74 100644 --- a/include/gulpin_shop.h +++ b/include/gulpin_shop.h @@ -27,7 +27,7 @@ typedef struct GulpinShopWork u8 fillC8[0x118 - 0xC8]; /* 0x118 */ struct MonPortraitMsg monPortrait; struct MonPortraitMsg *monPortraitPtr; - Windows unk12C; + WindowTemplates unk12C; } GulpinShopWork; bool8 CreateGulpinShop(u32 mode, s16 pokeSpecies, Move *moves); diff --git a/include/gulpin_shop_801FB50.h b/include/gulpin_shop_801FB50.h index f0237f115..a141f018d 100644 --- a/include/gulpin_shop_801FB50.h +++ b/include/gulpin_shop_801FB50.h @@ -35,7 +35,7 @@ typedef struct unkStruct_203B27C u8 fill11C[0x16C - 0x11C]; /* 0x16C */ struct MonPortraitMsg monPortrait; struct MonPortraitMsg *monPortraitPtr; - Windows unk180; + WindowTemplates unk180; } unkStruct_203B27C; bool8 sub_801FB50(u32 mode); diff --git a/include/iq_skill_info_menu.h b/include/iq_skill_info_menu.h index d6f9dd661..5efb2c2a6 100644 --- a/include/iq_skill_info_menu.h +++ b/include/iq_skill_info_menu.h @@ -16,7 +16,7 @@ struct IQSkillInfoMenu u8 fill14[0x20 - 0x18]; u32 unk20; u32 unk24; - Windows unk28; + WindowTemplates unk28; MenuInputStructSub unk88; }; diff --git a/include/iq_skill_menu.h b/include/iq_skill_menu.h index 6a39ff357..06acfe5e8 100644 --- a/include/iq_skill_menu.h +++ b/include/iq_skill_menu.h @@ -19,7 +19,7 @@ struct IQSkillMenu /* 0x30 */ s32 menuAction; MenuItem unk34[8]; MenuStruct unk74; - Windows unkC4; + WindowTemplates unkC4; }; bool8 CreateIQSkillMenu(s16 species); diff --git a/include/kangaskhan_storage1.h b/include/kangaskhan_storage1.h index ecb31853d..dbaf17aee 100644 --- a/include/kangaskhan_storage1.h +++ b/include/kangaskhan_storage1.h @@ -47,7 +47,7 @@ struct KangaskhanStorageWork unkStructFor8013AA0 unkA8; /* 0xD8 */ struct MonPortraitMsg monPortrait; struct MonPortraitMsg *monPortraitPtr; - Windows unkEC; + WindowTemplates unkEC; }; bool8 CreateKangaskhanStorage(u32 mode); diff --git a/include/kangaskhan_storage2.h b/include/kangaskhan_storage2.h index 8fea21f32..dc88a73d9 100644 --- a/include/kangaskhan_storage2.h +++ b/include/kangaskhan_storage2.h @@ -27,7 +27,7 @@ typedef struct unkStruct_203B20C u16 unk60[8]; MenuStruct unk70; unkStructFor8013AA0 unkC0; - Windows unkF0; + WindowTemplates unkF0; } unkStruct_203B20C; bool8 sub_8017E1C(void); diff --git a/include/kecleon_bros1.h b/include/kecleon_bros1.h index 054ad9a75..5219dcebb 100644 --- a/include/kecleon_bros1.h +++ b/include/kecleon_bros1.h @@ -65,7 +65,7 @@ typedef struct KecleonBrosWork1 /* 0x84 */ MenuStruct menu; /* 0xD4 */ struct MonPortraitMsg monPortrait; struct MonPortraitMsg *monPortraitPtr; - Windows unkE8; + WindowTemplates unkE8; } KecleonBrosWork1; // mode corresponds to the enum: KecleonBrosMode diff --git a/include/luminous_cave.h b/include/luminous_cave.h index b18f45210..d96fae220 100644 --- a/include/luminous_cave.h +++ b/include/luminous_cave.h @@ -33,7 +33,7 @@ typedef struct LuminousCaveWork u8 unk110; u8 unk111; u8 unk112; - Windows unk114; + WindowTemplates unk114; } LuminousCaveWork; void CleanLuminousCave(void); diff --git a/include/mailbox.h b/include/mailbox.h index 6c181fd09..138537de5 100644 --- a/include/mailbox.h +++ b/include/mailbox.h @@ -19,7 +19,7 @@ struct unkStruct_203B304 MenuStruct unk6C; MenuItem menuItems[8]; u16 unkFC[8]; - Windows unk10C; + WindowTemplates unk10C; }; extern void SetMailboxState(u32); diff --git a/include/main_menu1.h b/include/main_menu1.h index 1ebc93f99..5f26006b5 100644 --- a/include/main_menu1.h +++ b/include/main_menu1.h @@ -38,12 +38,12 @@ void CleanUpMenu(void); void DeleteMainMenu(void); MainMenu1Work *GetMainMenu(void); void InitMainMenu(void); -void SetMenuItems(MenuStruct *, Windows *, s32 index, const Window *, const MenuItem *menuItems, bool8, u32 menuAction, bool8 unused); +void SetMenuItems(MenuStruct *, WindowTemplates *, s32 index, const WindowTemplate *, const MenuItem *menuItems, bool8, u32 menuAction, bool8 unused); void SetUpMenu(void); s32 UpdateMenu(void); void sub_8035C1C(void); -void sub_8035CC0(Windows *dataArray, u32 index); +void sub_8035CC0(WindowTemplates *dataArray, u32 index); void sub_8035CF4(MenuStruct *menu, u32 index, bool8); void sub_8035D1C(void); s16 sub_8035D3C(void); diff --git a/include/main_menu2.h b/include/main_menu2.h index d53af187c..221488aed 100644 --- a/include/main_menu2.h +++ b/include/main_menu2.h @@ -9,7 +9,7 @@ typedef struct MainMenu2Work { u32 unk0; MenuStruct unk4[4]; - Windows unk144; + WindowTemplates unk144; /* 0x1A4 */ u32 currMenuChoice; } MainMenu2Work; diff --git a/include/makuhita_dojo1.h b/include/makuhita_dojo1.h index 8c1301bb5..3fc978859 100644 --- a/include/makuhita_dojo1.h +++ b/include/makuhita_dojo1.h @@ -30,7 +30,7 @@ typedef struct MakuhitaDojoWork1 u8 fill38[0x58 - 0x38]; /* 0x58 */ struct MonPortraitMsg monPortrait; struct MonPortraitMsg *monPortraitPtr; - Windows unk6C; + WindowTemplates unk6C; } MakuhitaDojoWork1; void MakuhitaDojo_Delete(void); diff --git a/include/menu_input.h b/include/menu_input.h index 3b28cc41c..615919427 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -9,9 +9,9 @@ s32 GetKeyPress(MenuInputStruct *r0); s32 sub_8012AE8(void); void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6); void sub_8012C60(u32 x, u32 y, u32 param_3, u32 color, u32 param_5); -void sub_8012CAC(Window *param_1, const MenuItem *param_2); -void sub_8012D08(Window *param_1, s32 param_2); -void sub_8012D34(Window *param_1, s32 param_2); +void sub_8012CAC(WindowTemplate *param_1, const MenuItem *param_2); +void sub_8012D08(WindowTemplate *param_1, s32 param_2); +void sub_8012D34(WindowTemplate *param_1, s32 param_2); void sub_8012D60(MenuStruct *param_1, const MenuItem *menuItems, const u32 *colorArray, u16 *param_4, s32 menuAction, s32 index); void sub_8012E04(MenuStruct *param_1, const MenuItem *menuItems, const u32 *colorArray, u16 *param_4, s32 menuAction, s32 index); void sub_8012EA4(MenuStruct *param_1, bool8 r1); @@ -49,7 +49,7 @@ void sub_8013C68(unkStructFor8013AA0 *); void sub_8013D10(unkStructFor8013AA0 *); void sub_8013E54(void); void sub_8013F84(void); -void sub_80140B4(Windows *); +void sub_80140B4(WindowTemplates *); #endif // GUARD_MENU_INPUT_H diff --git a/include/options_menu1.h b/include/options_menu1.h index 10247f132..d927bef9f 100644 --- a/include/options_menu1.h +++ b/include/options_menu1.h @@ -14,7 +14,7 @@ struct unkStruct_203B25C /* 0x1C */ MenuStruct menu; /* 0x6C */ MenuItem menuItems[8]; u16 unkAC[8]; - Windows unkBC; + WindowTemplates unkBC; }; bool8 sub_801DCC4(void); diff --git a/include/options_menu2.h b/include/options_menu2.h index f326e23b8..e0a140ca1 100644 --- a/include/options_menu2.h +++ b/include/options_menu2.h @@ -11,8 +11,8 @@ struct unkStruct_203B260 /* 0x4 */ MenuInputStructSub unk4; /* 0x10 */ MenuInputStruct input; u32 unk44; - Window *unk48; - Windows unk4C; + WindowTemplate *unk48; + WindowTemplates unk4C; }; bool8 sub_801E198(GameOptions *optionsMenu); diff --git a/include/other_menus1.h b/include/other_menus1.h index ad0e478f8..c87546e97 100644 --- a/include/other_menus1.h +++ b/include/other_menus1.h @@ -18,7 +18,7 @@ typedef struct unkStruct_203B35C u32 unk14; u8 fill18[0x1C - 0x18]; MenuStruct unk1C[4]; - Windows unk15C; + WindowTemplates unk15C; unkStruct_8035D94 unk1BC[2]; unkStruct_203B480 unk1CC; unkStruct_203B480 unk1FC; diff --git a/include/party_list_menu.h b/include/party_list_menu.h index f4ad8476e..c698012f1 100644 --- a/include/party_list_menu.h +++ b/include/party_list_menu.h @@ -32,7 +32,7 @@ typedef struct unkStruct_203B2B8 MenuItem unk16C[10]; MenuItem unk1BC[10]; u16 unk20C[10]; - Windows unk220; + WindowTemplates unk220; } unkStruct_203B2B8; bool8 CreatePartyListMenu(PokemonStruct1 *pokeStruct); diff --git a/include/pelipper_board.h b/include/pelipper_board.h index fc4892d72..b1f31c58e 100644 --- a/include/pelipper_board.h +++ b/include/pelipper_board.h @@ -17,7 +17,7 @@ struct unkStruct_203B308 MenuStruct unk6C; MenuItem menuItems[8]; u16 unkFC[8]; - Windows unk10C; + WindowTemplates unk10C; }; extern struct unkStruct_203B308 *gPelipperBoard; diff --git a/include/pokemon_news2.h b/include/pokemon_news2.h index d019d67e4..a3bad811f 100644 --- a/include/pokemon_news2.h +++ b/include/pokemon_news2.h @@ -14,7 +14,7 @@ struct unkStruct_203B2D4 const u8 *unk10[4]; u32 unk20; u32 unk24; - Windows unk28; + WindowTemplates unk28; MenuInputStructSub unk88; }; diff --git a/include/post_office_guide2.h b/include/post_office_guide2.h index a30bb5f71..95f782ac8 100644 --- a/include/post_office_guide2.h +++ b/include/post_office_guide2.h @@ -11,8 +11,8 @@ typedef struct unkStruct_203B330 u8 unkC; /* 0xD */ u8 dungeonIndex; u32 unk10; - Window *unk14; - Windows unk18; + WindowTemplate *unk14; + WindowTemplates unk18; } unkStruct_203B330; bool8 sub_80319A4(u8, u8 dungeon, s32); diff --git a/include/rescue_password_menu.h b/include/rescue_password_menu.h index 7c3563a94..e7c58b5cc 100644 --- a/include/rescue_password_menu.h +++ b/include/rescue_password_menu.h @@ -12,8 +12,8 @@ struct RescuePasswordMenu u32 currMenu; u32 state; MenuStruct unk8[4]; - Windows unk148; - Windows unk1A8; + WindowTemplates unk148; + WindowTemplates unk1A8; SpriteOAM unk208; u32 unk210; }; diff --git a/include/save_menu.h b/include/save_menu.h index 00bad9724..27d4e79e5 100644 --- a/include/save_menu.h +++ b/include/save_menu.h @@ -9,7 +9,7 @@ typedef struct SaveMenuWork /* 0x0 */ u32 currMenu; u32 unk4; MenuStruct unk8[4]; - Windows unk148; + WindowTemplates unk148; SpriteOAM unk1A8; u32 unk1B0; // Sprite count? } SaveMenuWork; diff --git a/include/structs/menu.h b/include/structs/menu.h index 78c36955d..9ab020421 100644 --- a/include/structs/menu.h +++ b/include/structs/menu.h @@ -72,7 +72,7 @@ typedef struct unkStructFor8013AA0 s32 unkC; // maxInclusive? s32 unk10; s32 unk14; // index of unk18? But read as chosenValue..? - Window *unk18; + WindowTemplate *unk18; s32 unk1C; // width of prompt? s32 unk20; // height of prompt? u8 unk24; // related to unk10 diff --git a/include/structs/str_text.h b/include/structs/str_text.h index 159a82efb..86a0c65bf 100644 --- a/include/structs/str_text.h +++ b/include/structs/str_text.h @@ -2,7 +2,7 @@ #define GUARD_STR_TEXT_H // size: 0x48 -typedef struct UnkTextStruct1 +typedef struct Window { s16 unk0; s16 unk2; @@ -26,7 +26,7 @@ typedef struct UnkTextStruct1 u8 unk44; bool8 unk45; u8 unk46; -} UnkTextStruct1; +} Window; typedef struct WindowHeader { @@ -39,7 +39,7 @@ typedef struct WindowHeader #include "structs/str_position.h" // size: 0x18 -typedef struct Window +typedef struct WindowTemplate { u8 unk0; s32 type; @@ -49,10 +49,10 @@ typedef struct Window s16 unk10; // In most cases it's the same as height. If it's smaller than height, the window may look glitchy. Maybe something with tile allocation/how the window is filled? s16 unk12; const WindowHeader *unk14; -} Window; +} WindowTemplate; // All fields are zeroed out except for type which is set to WINDOW_TYPE_NORMAL. -#define WINDOW_DUMMY (Window) {.unk0 = 0, .type = WINDOW_TYPE_NORMAL, .width = 0, .pos = {0, 0}, .height = 0, .unk10 = 0, .unk12 = 0, .unk14 = NULL} +#define WINDOW_DUMMY (WindowTemplate) {.unk0 = 0, .type = WINDOW_TYPE_NORMAL, .width = 0, .pos = {0, 0}, .height = 0, .unk10 = 0, .unk12 = 0, .unk14 = NULL} #define WINDOW_TYPE_0 0 #define WINDOW_TYPE_WITHOUT_BORDER 1 @@ -63,8 +63,8 @@ typedef struct Window #define MAX_WINDOWS 4 -typedef struct Windows { - Window id[MAX_WINDOWS]; -} Windows; +typedef struct WindowTemplates { + WindowTemplate id[MAX_WINDOWS]; +} WindowTemplates; #endif // GUARD_STR_TEXT_H diff --git a/include/structs/struct_sub80095e4.h b/include/structs/struct_sub80095e4.h index 19eaea943..64c730531 100644 --- a/include/structs/struct_sub80095e4.h +++ b/include/structs/struct_sub80095e4.h @@ -12,8 +12,8 @@ typedef struct struct_Sub80095E4 { /* 0x0 */ MenuInputStruct input; u32 unk34; - Window *unk38; - Windows windows; + WindowTemplate *unk38; + WindowTemplates windows; // size: 0x9C } struct_Sub80095E4; diff --git a/include/text.h b/include/text.h index 4ee3844fb..ac8b7a4bd 100644 --- a/include/text.h +++ b/include/text.h @@ -49,7 +49,7 @@ struct UnkDrawStringStruct s32 unk30; }; -extern UnkTextStruct1 gUnknown_2027370[4]; +extern Window gWindows[MAX_WINDOWS]; extern u8 gUnknown_202749A[11]; extern bool8 gUnknown_20274A5; extern u16 gUnknown_202B038[4][32][32]; // Usage points to these dimensions @@ -63,8 +63,8 @@ u32 UpdateFadeInTile(u32 a0); u32 sub_80063B0(void); void SelectCharmap(u32 a0); void SetCharacterMask(int a0); -void ShowWindows(const Windows *windows, bool8 a1, bool8 a2); -void RestoreUnkTextStruct_8006518(Windows *unkData); +void ShowWindows(const WindowTemplates *windows, bool8 a1, bool8 a2); +void RestoreUnkTextStruct_8006518(WindowTemplates *unkData); u32 sub_8006544(u32 index); void sub_8007334(s32 a0); void sub_80073B8(s32 a0); diff --git a/include/thank_you_wonder_mail.h b/include/thank_you_wonder_mail.h index 8761e25dc..f418f6bc0 100644 --- a/include/thank_you_wonder_mail.h +++ b/include/thank_you_wonder_mail.h @@ -22,8 +22,8 @@ typedef struct WonderMailStruct_203B2C4 unkStruct_203B480 unk1E8; /* 0x218 */ s8 mailIndex; MenuStruct unk21C[4]; - Windows unk35C; - Windows unk3BC; + WindowTemplates unk35C; + WindowTemplates unk3BC; Item unk41C; /* 0x420 */ struct MonPortraitMsg monPortrait; u32 unk430; diff --git a/include/trade_items_menu.h b/include/trade_items_menu.h index 6fa5cc386..9535c11d9 100644 --- a/include/trade_items_menu.h +++ b/include/trade_items_menu.h @@ -47,8 +47,8 @@ struct TradeItemsMenu u32 unk10; unkStructFor8013AA0 unk14; MenuStruct unk44[4]; - Windows unk184; - Windows unk1E4; + WindowTemplates unk184; + WindowTemplates unk1E4; // TODO These might be structs... struct TradeItem unk244; diff --git a/include/wigglytuff_shop2.h b/include/wigglytuff_shop2.h index b3477fd49..402d9fc74 100644 --- a/include/wigglytuff_shop2.h +++ b/include/wigglytuff_shop2.h @@ -13,8 +13,8 @@ typedef struct WigglytuffShop2Work u32 pokemonStatus[0x10]; /* 0x70 */ s32 numPokemoninFriendArea; s32 unk74; - Window *unk78; - Windows unk7C; + WindowTemplate *unk78; + WindowTemplates unk7C; u8 unkDC[4]; } WigglytuffShop2Work; diff --git a/include/wigglytuff_shop3.h b/include/wigglytuff_shop3.h index 59ae014c2..0466a1b27 100644 --- a/include/wigglytuff_shop3.h +++ b/include/wigglytuff_shop3.h @@ -54,7 +54,7 @@ typedef struct WigglytuffShop3Work MenuStruct unk6C; /* 0xBC */ struct MonPortraitMsg monPortrait; struct MonPortraitMsg *monPortraitPtr; - Windows unkD0; + WindowTemplates unkD0; u32 unk130; u32 unk134; } WigglytuffShop3Work; diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 04690941d..40db9e853 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -22,8 +22,8 @@ typedef struct WonderMailStruct_203B2C0 u8 fill16A[0x218 - 0x1B8]; /* 0x218 */ u8 mailIndex; MenuStruct unk21C[4]; - Windows unk35C; - Windows unk3BC; + WindowTemplates unk35C; + WindowTemplates unk3BC; /* 0x41C */ u32 unkfill; // ItemSlot? /* 0x420 */ struct MonPortraitMsg monPortrait; /* 0x430 */ u8 padding3[0x534 - 0x430]; diff --git a/include/wonder_mail_802C860.h b/include/wonder_mail_802C860.h index c4436fc70..8dffc5b5c 100644 --- a/include/wonder_mail_802C860.h +++ b/include/wonder_mail_802C860.h @@ -19,7 +19,7 @@ struct unkStruct_203B2F0 MenuItem unk10C[8]; MenuItem unk14C[8]; u8 fill18C[0x19C - 0x18C]; - Windows unk19C; + WindowTemplates unk19C; }; bool8 InitializeJobListMenu(u32); diff --git a/include/wonder_mail_802D098.h b/include/wonder_mail_802D098.h index 85fb329d9..529d066c5 100644 --- a/include/wonder_mail_802D098.h +++ b/include/wonder_mail_802D098.h @@ -34,7 +34,7 @@ typedef struct unkStruct_203B2F8 MenuItem unk118[8]; MenuItem unk158[8]; u16 unk198[8]; - Windows unk1A8; + WindowTemplates unk1A8; } unkStruct_203B2F8; bool8 GetWonderMailAccepted(void); diff --git a/src/code_8015080.c b/src/code_8015080.c index 72ff7c990..40a86da0e 100644 --- a/src/code_8015080.c +++ b/src/code_8015080.c @@ -16,13 +16,13 @@ struct unkStruct_203B1F8 // size: 0x4B4 u32 menuAction; MenuStruct unk4; - Windows windows; + WindowTemplates windows; u8 buffer[0x400]; }; EWRAM_INIT struct unkStruct_203B1F8 *gUnknown_203B1F8 = {NULL}; -const Window gUnknown_80DAF70 = { +const WindowTemplate gUnknown_80DAF70 = { 0x00, 0x03, 0x00, 0x00, @@ -31,7 +31,7 @@ const Window gUnknown_80DAF70 = { NULL }; -const Window gUnknown_80DAF88 = { +const WindowTemplate gUnknown_80DAF88 = { 0x00, 0x03, 0x02, 0x02, @@ -40,7 +40,7 @@ const Window gUnknown_80DAF88 = { NULL }; -const Window gUnknown_80DAFA0 = { +const WindowTemplate gUnknown_80DAFA0 = { 0x00, 0x03, 0x16, 0x0F, @@ -251,7 +251,7 @@ static const u8 *const gUnknown_80DB4F4[] = _("END"), }; -static const Window gUnknown_80DB538 = { +static const WindowTemplate gUnknown_80DB538 = { 0x00, 0x03, 0x00, 0x00, @@ -260,7 +260,7 @@ static const Window gUnknown_80DB538 = { NULL }; -static const Window gUnknown_80DB550 = { +static const WindowTemplate gUnknown_80DB550 = { 0x00, 0x01, 0x01, 0x0A, @@ -269,7 +269,7 @@ static const Window gUnknown_80DB550 = { NULL }; -static const Window gUnknown_80DB568 = { +static const WindowTemplate gUnknown_80DB568 = { 0x00, 0x01, 0x04, 0x03, @@ -278,7 +278,7 @@ static const Window gUnknown_80DB568 = { NULL }; -static const Window gUnknown_80DB580 = { +static const WindowTemplate gUnknown_80DB580 = { 0x00, 0x01, 0x01, 0x02, @@ -356,7 +356,7 @@ struct unkStruct_203B1FC u8 *unkF8; u8 unkFC[56]; u8 *unk134; - Windows windows; + WindowTemplates windows; }; extern struct unkStruct_203B1FC *gUnknown_203B1FC; @@ -640,7 +640,7 @@ bool8 sub_8015748(void) void sub_80157D8(void) { - UnkTextStruct1 *txtPtr = &gUnknown_2027370[1]; + Window *txtPtr = &gWindows[1]; // Note: for cases 4 and 5, the code is identical except for different position structs. if (gUnknown_203B1FC->unk0 == 4) { @@ -675,7 +675,7 @@ void sub_80157D8(void) void sub_80158BC(void) { s32 x, y; - UnkTextStruct1 *txtPtr = &gUnknown_2027370[0]; + Window *txtPtr = &gWindows[0]; u32 var; switch (sub_8012AE8()) { diff --git a/src/code_801EE10.c b/src/code_801EE10.c index d28889cb4..1e7d99c40 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -13,7 +13,7 @@ EWRAM_INIT unkStruct_203B270 *gUnknown_203B270 = {NULL}; -const Window gUnknown_80DC240 = { +const WindowTemplate gUnknown_80DC240 = { 0x00, 0x03, 0x00, 0x00, @@ -24,7 +24,7 @@ const Window gUnknown_80DC240 = { const WindowHeader gUnkData_80DC258 = {0x01, 0x00, 0x0F, 0x00}; -const Window gUnknown_80DC25C = { +const WindowTemplate gUnknown_80DC25C = { 0, 6, 0x2, 0x2, @@ -33,7 +33,7 @@ const Window gUnknown_80DC25C = { &gUnkData_80DC258 }; -const Window gUnknown_80DC274 = { +const WindowTemplate gUnknown_80DC274 = { 0, 3, 0x2, 0xF, diff --git a/src/code_801F428.c b/src/code_801F428.c index 00a688777..589d34eb9 100644 --- a/src/code_801F428.c +++ b/src/code_801F428.c @@ -20,7 +20,7 @@ struct unkStruct_203B274 }; EWRAM_INIT struct unkStruct_203B274 *gUnknown_203B274 = {NULL}; -static const Window sUnknown_80DC2AC = { +static const WindowTemplate sUnknown_80DC2AC = { 0, 3, 0, 0, @@ -28,7 +28,7 @@ static const Window sUnknown_80DC2AC = { 0, 0, NULL }; -static const Window sUnknown_80DC2C4 = { +static const WindowTemplate sUnknown_80DC2C4 = { 0, 6, 2, 2, diff --git a/src/code_801F808.c b/src/code_801F808.c index b08b685ed..e40893097 100644 --- a/src/code_801F808.c +++ b/src/code_801F808.c @@ -23,15 +23,15 @@ struct unkStruct_203B278 u32 unk24; MenuInputStruct unk28; u32 unk5C; - Window *unk60; - Windows windows; + WindowTemplate *unk60; + WindowTemplates windows; WindowHeader unkC4; MenuInputStructSub unkC8; }; EWRAM_INIT struct unkStruct_203B278 *gUnknown_203B278 = {NULL}; -static const Window sUnknown_80DC2F8 = { +static const WindowTemplate sUnknown_80DC2F8 = { 0, 3, 0, 0, diff --git a/src/code_8031D70.c b/src/code_8031D70.c index 27dfee0a1..1b951474f 100644 --- a/src/code_8031D70.c +++ b/src/code_8031D70.c @@ -18,15 +18,15 @@ struct unkStruct_203B334 u32 mailIndex; MenuInputStructSub unk4; u32 unk10; - Window *unk14; - Windows unk18; + WindowTemplate *unk14; + WindowTemplates unk18; u8 unk78[4]; }; EWRAM_INIT struct unkStruct_203B334 *gUnknown_203B334 = {NULL}; extern unkStruct_203B480 *gUnknown_203B480; -const Window gUnknown_80E1FA8 = { +const WindowTemplate gUnknown_80E1FA8 = { 0, 3, 0x0, 0x0, @@ -37,7 +37,7 @@ const Window gUnknown_80E1FA8 = { const WindowHeader gUnkData_80E1FC0 = {0x01, 0x00, 0x0A, 0x00}; -const Window gUnknown_80E1FC4 = { +const WindowTemplate gUnknown_80E1FC4 = { 0, 6, 0x2, 0x2, diff --git a/src/code_803E724.c b/src/code_803E724.c index 42a795d6b..2c2857fb3 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -173,7 +173,7 @@ void sub_803EA10(void) SetBGPaletteBufferColorRGB(248, &gFontPalette[8], gDungeonBrightness, NULL); } -static const struct Windows gUnknown_80F62B0 = +static const struct WindowTemplates gUnknown_80F62B0 = { .id = { [0] = { @@ -191,7 +191,7 @@ static const struct Windows gUnknown_80F62B0 = } }; -static const struct Windows gUnknown_80F6310 = +static const struct WindowTemplates gUnknown_80F6310 = { .id = { [0] = { @@ -209,7 +209,7 @@ static const struct Windows gUnknown_80F6310 = } }; -static const struct Windows gUnknown_80F6370 = +static const struct WindowTemplates gUnknown_80F6370 = { .id = { [0] = { @@ -243,7 +243,7 @@ static const struct Windows gUnknown_80F6370 = } }; -static const struct Windows gUnknown_80F63D0 = +static const struct WindowTemplates gUnknown_80F63D0 = { .id = { [0] = { @@ -353,7 +353,7 @@ void sub_803EC94(void) sub_801317C(&gDungeonMenu.unk28); } -void DungeonShowWindows(Windows *a0, bool8 a1) +void DungeonShowWindows(WindowTemplates *a0, bool8 a1) { gUnknown_202EDD0 = 10; sub_8052210(0); diff --git a/src/code_805D8C8.c b/src/code_805D8C8.c index 457d35ca1..93755abac 100644 --- a/src/code_805D8C8.c +++ b/src/code_805D8C8.c @@ -39,7 +39,7 @@ void sub_8068310(s32 size, u16 **param_2) void sub_8068344(void) { if ((gDungeonFramesCounter & 8) != 0) { - UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + Window *ptr = &gWindows[0]; SpriteOAM sprite = {0}; SpriteSetAffine1(&sprite, 0); @@ -63,7 +63,7 @@ void sub_8068344(void) void sub_80684C4(void) { if ((gDungeonFramesCounter & 8) != 0) { - UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + Window *ptr = &gWindows[0]; SpriteOAM sprite = {0}; SpriteSetAffine1(&sprite, 0); diff --git a/src/code_8066D04.c b/src/code_8066D04.c index abe76700b..1a1d8cbb8 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -904,13 +904,13 @@ extern void sub_8068344(void); bool8 CanSubMenuItemBeChosen(s32 param_1); void sub_8068310(s32 a0, PokemonStruct1 **a1); void sub_8067F00(u8 a0, PokemonStruct1 **a1, s32 a2, s32 a3, s32 a4); -extern void DungeonShowWindows(Windows *a0, u8 a1); +extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); u32 sub_8014140(s32 a0, const void *a1); void sub_8083D1C(void); void PlayDungeonConfirmationSE(void); void PlayDungeonCancelSE(void); void sub_806806C(PokemonStruct1 *a0); -void CreateDungeonMenuSubWindow(Windows *a0, s32 a1); +void CreateDungeonMenuSubWindow(WindowTemplates *a0, s32 a1); extern void sub_803EAF0(u32, u8 *); extern const s32 gUnknown_8106E80[]; @@ -925,7 +925,7 @@ static const u8 gUnknown_8106DA4[] = { 0x01, 0, 0x38, 0, 0, 0, 0x18, 0, 0x18, 0, 0, 0, 0x02, 0, 0x38, 0, 0x68, 0, 0x18, 0, 0x18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static const Windows gUnknown_8106DC8 = { +static const WindowTemplates gUnknown_8106DC8 = { .id = { [0] = { @@ -958,7 +958,7 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) { s32 i; s32 r10; - Windows spTxtStruct = gUnknown_8106DC8; + WindowTemplates spTxtStruct = gUnknown_8106DC8; gUnknown_202F30C = 0; r10 = 0; @@ -1251,7 +1251,7 @@ void sub_806806C(PokemonStruct1 *a0) { struct unkStruct_808FF20 unkStruct; struct UnkInfoTabStruct var_C8; - Windows spTxtStruct = {0}; + WindowTemplates spTxtStruct = {0}; s32 r7; spTxtStruct.id[0].type = WINDOW_TYPE_WITH_HEADER; @@ -1295,8 +1295,8 @@ void sub_806806C(PokemonStruct1 *a0) sub_808FF20(&unkStruct, a0, gDungeon->unk644.unk16); CreatePokemonInfoTabScreen(spF8[r7], r7, &unkStruct, &var_C8, 0); - gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 15) * 8; - gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (gWindows[0].unk0 + 15) * 8; + gDungeonMenu.unkE = ((gWindows[0].unk2 + 1) * 8) - 2; while (1) { s32 r5; diff --git a/src/code_8072F3C.c b/src/code_8072F3C.c index 38c7c4101..00b9a3d1e 100644 --- a/src/code_8072F3C.c +++ b/src/code_8072F3C.c @@ -29,7 +29,7 @@ struct unkStruct_203B314 EWRAM_INIT struct unkStruct_203B314 *gUnknown_203B314 = {NULL}; -const Window gUnknown_80E06FC = { +const WindowTemplate gUnknown_80E06FC = { 0x00, 0x03, 0x00, 0x00, @@ -38,7 +38,7 @@ const Window gUnknown_80E06FC = { NULL }; -const Window gUnknown_80E0714 = { +const WindowTemplate gUnknown_80E0714 = { 0x00, 0x06, 0x02, 0x02, @@ -46,7 +46,7 @@ const Window gUnknown_80E0714 = { 0x0E, 0x00, NULL }; -const Window gUnknown_80E072C = { +const WindowTemplate gUnknown_80E072C = { 0x00, 0x06, 0x02, 0x02, diff --git a/src/credits1.c b/src/credits1.c index 4b00e775c..1d66e0026 100644 --- a/src/credits1.c +++ b/src/credits1.c @@ -8,8 +8,8 @@ static EWRAM_INIT Credits1Work *sCredits1Work = {NULL}; -extern const Window gUnknown_80E4A10; -extern const Window gUnknown_80E4A28; +extern const WindowTemplate gUnknown_80E4A10; +extern const WindowTemplate gUnknown_80E4A28; extern const u32 gUnknown_80E4A40[]; extern const CreditsData* gCreditsTable[27]; diff --git a/src/data/adventure_log.h b/src/data/adventure_log.h index 37308cd0a..e57826d59 100644 --- a/src/data/adventure_log.h +++ b/src/data/adventure_log.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E1FF0 = +static const WindowTemplate sUnknown_80E1FF0 = { 0, 3, @@ -8,7 +8,7 @@ static const Window sUnknown_80E1FF0 = NULL }; -static const Window sUnknown_80E2008 = +static const WindowTemplate sUnknown_80E2008 = { 0, 6, diff --git a/src/data/code_801602C.h b/src/data/code_801602C.h index 5c29147dc..4cdb3b6ca 100644 --- a/src/data/code_801602C.h +++ b/src/data/code_801602C.h @@ -5,7 +5,7 @@ enum MENU_ACTION_NO, }; -UNUSED static const Window sUnknown_80DB670 = +UNUSED static const WindowTemplate sUnknown_80DB670 = { 0, 3, diff --git a/src/data/code_801B60C.h b/src/data/code_801B60C.h index 0bb10ae5d..01588c736 100644 --- a/src/data/code_801B60C.h +++ b/src/data/code_801B60C.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DBA58 = { +static const WindowTemplate sUnknown_80DBA58 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DBA58 = { NULL }; -static const Window sUnknown_80DBA70 = { +static const WindowTemplate sUnknown_80DBA70 = { 0, 3, 20, 4, @@ -16,7 +16,7 @@ static const Window sUnknown_80DBA70 = { NULL }; -static const Window sUnknown_80DBA88 = { +static const WindowTemplate sUnknown_80DBA88 = { 0, 3, 20, 14, diff --git a/src/data/code_801C8C4.h b/src/data/code_801C8C4.h index ff666225a..eadec3e8c 100644 --- a/src/data/code_801C8C4.h +++ b/src/data/code_801C8C4.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DBE3C = { +static const WindowTemplate sUnknown_80DBE3C = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DBE3C = { NULL }; -static const Window sUnknown_80DBE54 = { +static const WindowTemplate sUnknown_80DBE54 = { 0, 6, 2, 2, diff --git a/src/data/code_801D014.h b/src/data/code_801D014.h index 376c6f6f3..a2f79ca41 100644 --- a/src/data/code_801D014.h +++ b/src/data/code_801D014.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DBE7C = { +static const WindowTemplate sUnknown_80DBE7C = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ static const Window sUnknown_80DBE7C = { }; static const WindowHeader sUnknown_80DBE94 = {1, 0, 7, 0}; -static const Window sUnknown_80DBE98 = { +static const WindowTemplate sUnknown_80DBE98 = { 0, 6, 2, 2, @@ -17,7 +17,7 @@ static const Window sUnknown_80DBE98 = { &sUnknown_80DBE94 }; -static const Window sUnknown_80DBEB0[MAX_WINDOWS] = +static const WindowTemplate sUnknown_80DBEB0[MAX_WINDOWS] = { { 0, diff --git a/src/data/code_801D9E4.h b/src/data/code_801D9E4.h index 33fc54c10..05aa19e53 100644 --- a/src/data/code_801D9E4.h +++ b/src/data/code_801D9E4.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DBF70 = { +static const WindowTemplate sUnknown_80DBF70 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DBF70 = { NULL }; -static const Window sUnknown_80DBF88 = { +static const WindowTemplate sUnknown_80DBF88 = { 0, 6, 2, 2, diff --git a/src/data/code_80227B8.h b/src/data/code_80227B8.h index 3427469eb..25cc207d1 100644 --- a/src/data/code_80227B8.h +++ b/src/data/code_80227B8.h @@ -5,7 +5,7 @@ static const MenuItem sUnknown_80DC584[3] = {NULL, 1}, }; -static const Window sUnknown_80DC5A4 = +static const WindowTemplate sUnknown_80DC5A4 = { 0, 3, @@ -14,7 +14,7 @@ static const Window sUnknown_80DC5A4 = 0, 0, NULL }; -static const Window sUnknown_80DC5BC = +static const WindowTemplate sUnknown_80DC5BC = { 0, 3, @@ -23,7 +23,7 @@ static const Window sUnknown_80DC5BC = 3, 0, NULL }; -static const Window sUnknown_80DC5D4 = +static const WindowTemplate sUnknown_80DC5D4 = { 0, 3, diff --git a/src/data/code_8023144.h b/src/data/code_8023144.h index 286bf91b3..19ed68ad8 100644 --- a/src/data/code_8023144.h +++ b/src/data/code_8023144.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC904 = +static const WindowTemplate sUnknown_80DC904 = { 0, 3, @@ -8,7 +8,7 @@ static const Window sUnknown_80DC904 = NULL }; -static const Window sUnknown_80DC91C = +static const WindowTemplate sUnknown_80DC91C = { 0, 6, diff --git a/src/data/code_8023868.h b/src/data/code_8023868.h index 23a3f657e..2222d6cb9 100644 --- a/src/data/code_8023868.h +++ b/src/data/code_8023868.h @@ -1,5 +1,5 @@ //static // MAKE STATIC WHEN code_8023868.s IS DONE -const Window sUnknown_80DC950 = { +const WindowTemplate sUnknown_80DC950 = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ const Window sUnknown_80DC950 = { NULL }; //static // MAKE STATIC WHEN code_8023868.s IS DONE -const Window sUnknown_80DC968 = { +const WindowTemplate sUnknown_80DC968 = { 0, 6, 2, 2, diff --git a/src/data/code_8024458.h b/src/data/code_8024458.h index 69ff03565..6f3437de5 100644 --- a/src/data/code_8024458.h +++ b/src/data/code_8024458.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC9B0 = { +static const WindowTemplate sUnknown_80DC9B0 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DC9B0 = { NULL }; -static const Window sUnknown_80DC9C8 = { +static const WindowTemplate sUnknown_80DC9C8 = { 0, 6, 2, 2, diff --git a/src/data/code_802DB28.h b/src/data/code_802DB28.h index b41239deb..74a9165cf 100644 --- a/src/data/code_802DB28.h +++ b/src/data/code_802DB28.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E016C = { +static const WindowTemplate sUnknown_80E016C = { 0, 3, 0, 0, diff --git a/src/data/code_802DE84.h b/src/data/code_802DE84.h index 2b93977e1..b228a2ede 100644 --- a/src/data/code_802DE84.h +++ b/src/data/code_802DE84.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E0248 = { +static const WindowTemplate sUnknown_80E0248 = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ static const Window sUnknown_80E0248 = { }; static const WindowHeader sUnknown_80E0260 = {1, 0, 18, 0}; -static const Window sUnknown_80E0264 = { +static const WindowTemplate sUnknown_80E0264 = { 0, 6, 2, 2, diff --git a/src/data/debug_menu1.h b/src/data/debug_menu1.h index bf0f7f226..ce9c362b3 100644 --- a/src/data/debug_menu1.h +++ b/src/data/debug_menu1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E7D40 = { +static const WindowTemplate sUnknown_80E7D40 = { 0, 3, 0, 0, @@ -6,7 +6,7 @@ static const Window sUnknown_80E7D40 = { 0, 0, NULL }; -static const Window sUnknown_80E7D58 = { +static const WindowTemplate sUnknown_80E7D58 = { 0, 3, 2, 2, diff --git a/src/data/debug_menu2.h b/src/data/debug_menu2.h index 4cc4d3f3f..a9a8aff24 100644 --- a/src/data/debug_menu2.h +++ b/src/data/debug_menu2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E7E34 = +static const WindowTemplate sUnknown_80E7E34 = { 0, 3, @@ -8,7 +8,7 @@ static const Window sUnknown_80E7E34 = NULL }; -static const Window sUnknown_80E7E4C = +static const WindowTemplate sUnknown_80E7E4C = { 0, 3, @@ -18,7 +18,7 @@ static const Window sUnknown_80E7E4C = NULL }; -static const Window sUnknown_80E7E64 = +static const WindowTemplate sUnknown_80E7E64 = { 0, 3, diff --git a/src/data/debug_menu3.h b/src/data/debug_menu3.h index 4155d7d84..b61916104 100644 --- a/src/data/debug_menu3.h +++ b/src/data/debug_menu3.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E7E8C = +static const WindowTemplate sUnknown_80E7E8C = { 0, 3, @@ -8,7 +8,7 @@ static const Window sUnknown_80E7E8C = NULL }; -static const Window sUnknown_80E7EA4 = +static const WindowTemplate sUnknown_80E7EA4 = { 0, 3, diff --git a/src/data/debug_menu4.h b/src/data/debug_menu4.h index 7a9a30388..b5cf883e2 100644 --- a/src/data/debug_menu4.h +++ b/src/data/debug_menu4.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E7ED4 = +static const WindowTemplate sUnknown_80E7ED4 = { 0, 3, @@ -8,7 +8,7 @@ static const Window sUnknown_80E7ED4 = NULL }; -static const Window sUnknown_80E7EEC = +static const WindowTemplate sUnknown_80E7EEC = { 0, 3, @@ -18,7 +18,7 @@ static const Window sUnknown_80E7EEC = NULL }; -static const Window sUnknown_80E7F04 = +static const WindowTemplate sUnknown_80E7F04 = { 0, 3, diff --git a/src/data/felicity_bank.h b/src/data/felicity_bank.h index 7077a7b41..b5f6f1fdc 100644 --- a/src/data/felicity_bank.h +++ b/src/data/felicity_bank.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DB6DC = { +static const WindowTemplate sUnknown_80DB6DC = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DB6DC = { NULL }; -static const Window sUnknown_80DB6F4 = { +static const WindowTemplate sUnknown_80DB6F4 = { 0, 3, 2, 3, @@ -16,7 +16,7 @@ static const Window sUnknown_80DB6F4 = { NULL }; -static const Window sUnknown_80DB70C = { +static const WindowTemplate sUnknown_80DB70C = { 0, 3, 17, 8, diff --git a/src/data/friend_area_action_menu.h b/src/data/friend_area_action_menu.h index e29774519..5af41ec09 100644 --- a/src/data/friend_area_action_menu.h +++ b/src/data/friend_area_action_menu.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DD6EC = +static const WindowTemplate sUnknown_80DD6EC = { 0, 0x03, @@ -8,7 +8,7 @@ static const Window sUnknown_80DD6EC = NULL }; -static const Window sUnknown_80DD704 = +static const WindowTemplate sUnknown_80DD704 = { 0, 0x03, @@ -18,7 +18,7 @@ static const Window sUnknown_80DD704 = NULL }; -static const Window sUnknown_80DD71C = +static const WindowTemplate sUnknown_80DD71C = { 0, 0x03, @@ -28,7 +28,7 @@ static const Window sUnknown_80DD71C = NULL }; -static const Window sUnknown_80DD734 = +static const WindowTemplate sUnknown_80DD734 = { 0, 0x03, @@ -38,7 +38,7 @@ static const Window sUnknown_80DD734 = NULL }; -static const Window sUnknown_80DD74C = +static const WindowTemplate sUnknown_80DD74C = { 0, 0x03, diff --git a/src/data/friend_list_menu.h b/src/data/friend_list_menu.h index 19dfd7359..2652a9448 100644 --- a/src/data/friend_list_menu.h +++ b/src/data/friend_list_menu.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DD148 = { +static const WindowTemplate sUnknown_80DD148 = { 0, 0x03, 0x00, 0x00, @@ -7,7 +7,7 @@ static const Window sUnknown_80DD148 = { NULL }; -static const Window sUnknown_80DD160 = { +static const WindowTemplate sUnknown_80DD160 = { 0, 0x03, 0x13, 0x04, @@ -16,7 +16,7 @@ static const Window sUnknown_80DD160 = { NULL }; -static const Window sUnknown_80DD178 = { +static const WindowTemplate sUnknown_80DD178 = { 0, 0x03, 0x14, 0x04, @@ -25,7 +25,7 @@ static const Window sUnknown_80DD178 = { NULL }; -static const Window sUnknown_80DD190 = { +static const WindowTemplate sUnknown_80DD190 = { 0, 0x03, 0x02, 0x11, diff --git a/src/data/friend_rescue_menus.h b/src/data/friend_rescue_menus.h index 8c16570ac..3647c6f61 100644 --- a/src/data/friend_rescue_menus.h +++ b/src/data/friend_rescue_menus.h @@ -102,7 +102,7 @@ const MenuItem gUnknown_80E22F0[] = { {NULL, 8}, }; -const Window gUnknown_80E231C = +const WindowTemplate gUnknown_80E231C = { 0, 0x03, @@ -112,7 +112,7 @@ const Window gUnknown_80E231C = NULL }; -const Window gUnknown_80E2334 = +const WindowTemplate gUnknown_80E2334 = { 0, 0x03, @@ -142,7 +142,7 @@ const MenuItem gUnknown_80E23A8[] = { {NULL, 8}, }; -const Window gUnknown_80E23F0 = +const WindowTemplate gUnknown_80E23F0 = { 0, 0x03, @@ -159,7 +159,7 @@ const MenuItem gUnknown_80E2408[] = { {NULL, 8}, }; -UNUSED static const Window sUnused = +UNUSED static const WindowTemplate sUnused = { 0, 0x03, diff --git a/src/data/gulpin_shop.h b/src/data/gulpin_shop.h index 4c2daef02..0d52850df 100644 --- a/src/data/gulpin_shop.h +++ b/src/data/gulpin_shop.h @@ -1,4 +1,4 @@ -static const Window gUnknown_80DC11C = { +static const WindowTemplate gUnknown_80DC11C = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window gUnknown_80DC11C = { NULL }; -static const Window gUnknown_80DC134 = { +static const WindowTemplate gUnknown_80DC134 = { 0, 3, 22, 4, @@ -16,7 +16,7 @@ static const Window gUnknown_80DC134 = { NULL }; -UNUSED static const Window gUnknown_80DC14C = { +UNUSED static const WindowTemplate gUnknown_80DC14C = { 0, 3, 22, 14, diff --git a/src/data/gulpin_shop_801FB50.h b/src/data/gulpin_shop_801FB50.h index b9455ce27..340388da4 100644 --- a/src/data/gulpin_shop_801FB50.h +++ b/src/data/gulpin_shop_801FB50.h @@ -1,4 +1,4 @@ -static const Window gUnknown_80DC31C = { +static const WindowTemplate gUnknown_80DC31C = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window gUnknown_80DC31C = { NULL }; -static const Window gUnknown_80DC334 = { +static const WindowTemplate gUnknown_80DC334 = { 0, 3, 19, 4, @@ -16,7 +16,7 @@ static const Window gUnknown_80DC334 = { NULL }; -static const Window gUnknown_80DC34C = { +static const WindowTemplate gUnknown_80DC34C = { 0, 3, 22, 4, @@ -25,7 +25,7 @@ static const Window gUnknown_80DC34C = { NULL }; -UNUSED static const Window gUnknown_80DC364 = { +UNUSED static const WindowTemplate gUnknown_80DC364 = { 0, 3, 22, 14, @@ -34,7 +34,7 @@ UNUSED static const Window gUnknown_80DC364 = { NULL }; -static const Window gUnknown_80DC37C = { +static const WindowTemplate gUnknown_80DC37C = { 0, 3, 22, 3, diff --git a/src/data/hints_menu1.h b/src/data/hints_menu1.h index bab8d705a..1f45f1c8d 100644 --- a/src/data/hints_menu1.h +++ b/src/data/hints_menu1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC0A0 = { +static const WindowTemplate sUnknown_80DC0A0 = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ static const Window sUnknown_80DC0A0 = { }; static const WindowHeader sUnknown_80DC0B8 = {1, 0, 8, 0}; -static const Window sUnknown_80DC0BC = { +static const WindowTemplate sUnknown_80DC0BC = { 0, 6, 2, 2, diff --git a/src/data/hints_menu2.h b/src/data/hints_menu2.h index bc545320f..05d2103c8 100644 --- a/src/data/hints_menu2.h +++ b/src/data/hints_menu2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC0E4 = { +static const WindowTemplate sUnknown_80DC0E4 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DC0E4 = { NULL }; -static const Window sUnknown_80DC0FC = { +static const WindowTemplate sUnknown_80DC0FC = { 0, 6, 2, 2, diff --git a/src/data/iq_skill_list_menu.h b/src/data/iq_skill_list_menu.h index 61a0dbe50..a440b396d 100644 --- a/src/data/iq_skill_list_menu.h +++ b/src/data/iq_skill_list_menu.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DBDD8 = { +static const WindowTemplate sUnknown_80DBDD8 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DBDD8 = { NULL }; -static const Window sUnknown_80DBDF0 = { +static const WindowTemplate sUnknown_80DBDF0 = { 0, 6, 2, 2, diff --git a/src/data/iq_skill_menu.h b/src/data/iq_skill_menu.h index 75a4c0ea4..6aa346928 100644 --- a/src/data/iq_skill_menu.h +++ b/src/data/iq_skill_menu.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DBD98 = { +static const WindowTemplate sUnknown_80DBD98 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DBD98 = { NULL }; -static const Window sUnknown_80DBDB0 = { +static const WindowTemplate sUnknown_80DBDB0 = { 0, 3, 20, 4, diff --git a/src/data/kangaskhan_storage1.h b/src/data/kangaskhan_storage1.h index ba09975f2..f65384233 100644 --- a/src/data/kangaskhan_storage1.h +++ b/src/data/kangaskhan_storage1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DB748 = { +static const WindowTemplate sUnknown_80DB748 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DB748 = { NULL }; -static const Window sUnknown_80DB760 = { +static const WindowTemplate sUnknown_80DB760 = { 0, 3, 20, 4, @@ -16,7 +16,7 @@ static const Window sUnknown_80DB760 = { NULL }; -static const Window sUnknown_80DB778 = { +static const WindowTemplate sUnknown_80DB778 = { 0, 3, 20, 9, @@ -25,7 +25,7 @@ static const Window sUnknown_80DB778 = { NULL }; -static const Window sUnknown_80DB790 = { +static const WindowTemplate sUnknown_80DB790 = { 0, 3, 20, 14, diff --git a/src/data/kangaskhan_storage2.h b/src/data/kangaskhan_storage2.h index fdbc9976f..aca2c1eb1 100644 --- a/src/data/kangaskhan_storage2.h +++ b/src/data/kangaskhan_storage2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DB7B8 = { +static const WindowTemplate sUnknown_80DB7B8 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DB7B8 = { NULL }; -static const Window sUnknown_80DB7D0 = { +static const WindowTemplate sUnknown_80DB7D0 = { 0, 3, 3, 3, @@ -16,7 +16,7 @@ static const Window sUnknown_80DB7D0 = { NULL }; -static const Window sUnknown_80DB7E8 = { +static const WindowTemplate sUnknown_80DB7E8 = { 0, 3, 20, 4, @@ -25,7 +25,7 @@ static const Window sUnknown_80DB7E8 = { NULL }; -static const Window sUnknown_80DB800 = { +static const WindowTemplate sUnknown_80DB800 = { 0, 3, 20, 9, @@ -34,7 +34,7 @@ static const Window sUnknown_80DB800 = { NULL }; -static const Window sUnknown_80DB818 = { +static const WindowTemplate sUnknown_80DB818 = { 0, 3, 20, 14, diff --git a/src/data/kecleon_bros1.h b/src/data/kecleon_bros1.h index e0bbf1366..a4f3fba9c 100644 --- a/src/data/kecleon_bros1.h +++ b/src/data/kecleon_bros1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DB840 = { +static const WindowTemplate sUnknown_80DB840 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DB840 = { NULL }; -static const Window sUnknown_80DB858 = { +static const WindowTemplate sUnknown_80DB858 = { 0, 3, 20, 4, @@ -16,7 +16,7 @@ static const Window sUnknown_80DB858 = { NULL }; -static const Window sUnknown_80DB870 = { +static const WindowTemplate sUnknown_80DB870 = { 0, 3, 20, 9, @@ -25,7 +25,7 @@ static const Window sUnknown_80DB870 = { NULL }; -static const Window sUnknown_80DB888 = { +static const WindowTemplate sUnknown_80DB888 = { 0, 3, 20, 14, diff --git a/src/data/kecleon_bros2.h b/src/data/kecleon_bros2.h index cd27baf16..5329bd0d3 100644 --- a/src/data/kecleon_bros2.h +++ b/src/data/kecleon_bros2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DB8B4 = { +static const WindowTemplate sUnknown_80DB8B4 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DB8B4 = { NULL }; -static const Window sUnknown_80DB8CC = { +static const WindowTemplate sUnknown_80DB8CC = { 0, 6, 2, 2, diff --git a/src/data/kecleon_bros3.h b/src/data/kecleon_bros3.h index 986a1542e..7518164cf 100644 --- a/src/data/kecleon_bros3.h +++ b/src/data/kecleon_bros3.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DB8FC = { +static const WindowTemplate sUnknown_80DB8FC = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DB8FC = { NULL }; -static const Window sUnknown_80DB914 = { +static const WindowTemplate sUnknown_80DB914 = { 0, 6, 2, 2, diff --git a/src/data/kecleon_bros4.h b/src/data/kecleon_bros4.h index 7b9d49c08..1b6b164cf 100644 --- a/src/data/kecleon_bros4.h +++ b/src/data/kecleon_bros4.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DB944 = { +static const WindowTemplate sUnknown_80DB944 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DB944 = { NULL }; -static const Window sUnknown_80DB95C = { +static const WindowTemplate sUnknown_80DB95C = { 0, 6, 2, 2, diff --git a/src/data/luminous_cave.h b/src/data/luminous_cave.h index 066ee4ae8..f6421bcf9 100644 --- a/src/data/luminous_cave.h +++ b/src/data/luminous_cave.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC9E8 = { +static const WindowTemplate sUnknown_80DC9E8 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DC9E8 = { NULL }; -static const Window sUnknown_80DCA00 = { +static const WindowTemplate sUnknown_80DCA00 = { 0, 3, 20, 4, diff --git a/src/data/main_menu1.h b/src/data/main_menu1.h index 8f03055ab..3d100f536 100644 --- a/src/data/main_menu1.h +++ b/src/data/main_menu1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E59A8 = { +static const WindowTemplate sUnknown_80E59A8 = { 0, 3, 0, 0, diff --git a/src/data/main_menu2.h b/src/data/main_menu2.h index c8e88f1c9..7b8024001 100644 --- a/src/data/main_menu2.h +++ b/src/data/main_menu2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E59C8 = { +static const WindowTemplate sUnknown_80E59C8 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80E59C8 = { NULL }; -static const Window sUnknown_80E59E0 = { +static const WindowTemplate sUnknown_80E59E0 = { 0, 3, 2, 2, @@ -22,7 +22,7 @@ static const MenuItem sUnknown_80E59F8[] = { {NULL, 0xFFDD}, }; -UNUSED static const Window sUnknown_80E5A29 = { +UNUSED static const WindowTemplate sUnknown_80E5A29 = { 0, 3, 2, 2, @@ -36,7 +36,7 @@ UNUSED static const MenuItem sUnknown_80E5A44[] = { {NULL, 0xFFDD}, }; -static const Window sUnknown_80E5A60 = { +static const WindowTemplate sUnknown_80E5A60 = { 0, 3, 2, 2, @@ -45,7 +45,7 @@ static const Window sUnknown_80E5A60 = { NULL }; -static const Window sUnknown_80E5A78 = { +static const WindowTemplate sUnknown_80E5A78 = { 0, 3, 2, 2, @@ -73,7 +73,7 @@ static const MenuItem sUnknown_80E5AFC[] = { {NULL, 0xFFDD}, }; -static const Window sUnknown_80E5B34 = { +static const WindowTemplate sUnknown_80E5B34 = { 0, 3, 2, 2, @@ -101,7 +101,7 @@ static const MenuItem sUnknown_80E5B8C[] = { {NULL, 0xFFDD}, }; -static const Window sUnknown_80E5BC4 = { +static const WindowTemplate sUnknown_80E5BC4 = { 0, 3, 2, 2, @@ -129,7 +129,7 @@ static const MenuItem sUnknown_80E5C18[] = { {NULL, 0xFFDD}, }; -UNUSED static const Window sUnknown_80E5C50 = { +UNUSED static const WindowTemplate sUnknown_80E5C50 = { 0, 3, 2, 2, @@ -150,7 +150,7 @@ UNUSED static const MenuItem sUnknown_80E5C9C[] = { {NULL, 0xFFDD}, }; -static const Window sUnknown_80E5CB4 = { +static const WindowTemplate sUnknown_80E5CB4 = { 0, 3, 2, 15, diff --git a/src/data/makuhita_dojo1.h b/src/data/makuhita_dojo1.h index 6f49398e4..a5a72b2a0 100644 --- a/src/data/makuhita_dojo1.h +++ b/src/data/makuhita_dojo1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E0760 = { +static const WindowTemplate sUnknown_80E0760 = { 0, 3, 0, 0, diff --git a/src/data/makuhita_dojo2.h b/src/data/makuhita_dojo2.h index bd23d5d29..c2a77bb33 100644 --- a/src/data/makuhita_dojo2.h +++ b/src/data/makuhita_dojo2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E07EC = { +static const WindowTemplate sUnknown_80E07EC = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80E07EC = { NULL }; -static const Window sUnknown_80E0804 = { +static const WindowTemplate sUnknown_80E0804 = { 0, 6, 2, 2, diff --git a/src/data/options_menu1.h b/src/data/options_menu1.h index fbe669c26..d7099dca9 100644 --- a/src/data/options_menu1.h +++ b/src/data/options_menu1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DBFB0 = { +static const WindowTemplate sUnknown_80DBFB0 = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ static const Window sUnknown_80DBFB0 = { }; static const WindowHeader sUnknown_80DBFC8 = {1, 0, 7, 0}; -static const Window sUnknown_80DBFCC = { +static const WindowTemplate sUnknown_80DBFCC = { 0, 6, 2, 2, diff --git a/src/data/options_menu2.h b/src/data/options_menu2.h index 4fa347641..34b8deeed 100644 --- a/src/data/options_menu2.h +++ b/src/data/options_menu2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC020 = { +static const WindowTemplate sUnknown_80DC020 = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ static const Window sUnknown_80DC020 = { }; static const WindowHeader sUnknown_80DC038 = {1, 0, 10, 0}; -static const Window sUnknown_80DC03C = { +static const WindowTemplate sUnknown_80DC03C = { 0, 6, 2, 2, diff --git a/src/data/other_menus1.h b/src/data/other_menus1.h index 28137b35f..d81733ebe 100644 --- a/src/data/other_menus1.h +++ b/src/data/other_menus1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E653C = { +static const WindowTemplate sUnknown_80E653C = { 0, 3, 0, 0, @@ -6,7 +6,7 @@ static const Window sUnknown_80E653C = { 0, 0, NULL }; -static const Window sUnknown_80E6554 = { +static const WindowTemplate sUnknown_80E6554 = { 0, 3, 3, 8, @@ -50,7 +50,7 @@ static const MenuItem sUnknown_80E667C[] = { {NULL, 3}, }; -static const Window sUnknown_80E66BC = { +static const WindowTemplate sUnknown_80E66BC = { 0, 3, 3, 8, @@ -66,7 +66,7 @@ static const MenuItem sUnknown_80E66D4[] = { {NULL, 3}, }; -static const Window sUnknown_80E6748 = { +static const WindowTemplate sUnknown_80E6748 = { 0, 3, 3, 8, @@ -82,7 +82,7 @@ static const MenuItem sUnknown_80E6760[] = { {NULL, 3}, }; -static const Window sUnknown_80E67D4 = { +static const WindowTemplate sUnknown_80E67D4 = { 0, 3, 3, 8, @@ -98,7 +98,7 @@ static const MenuItem sUnknown_80E67EC[] = { {NULL, 3}, }; -static const Window sUnknown_80E6830 = { +static const WindowTemplate sUnknown_80E6830 = { 0, 3, 3, 8, @@ -114,7 +114,7 @@ static const MenuItem sUnknown_80E6848[] = { {NULL, 3}, }; -static const Window sUnknown_80E689C = { +static const WindowTemplate sUnknown_80E689C = { 0, 3, 3, 8, @@ -130,7 +130,7 @@ static const MenuItem sUnknown_80E68B4[] = { {NULL, 3}, }; -static const Window sUnknown_80E6938 = { +static const WindowTemplate sUnknown_80E6938 = { 0, 3, 3, 8, @@ -146,7 +146,7 @@ static const MenuItem sUnknown_80E6950[] = { {NULL, 3}, }; -static const Window sUnknown_80E69B0 = { +static const WindowTemplate sUnknown_80E69B0 = { 0, 3, 3, 8, @@ -162,7 +162,7 @@ static const MenuItem sUnknown_80E69C8[] = { {NULL, 3}, }; -static const Window sUnknown_80E6A10 = { +static const WindowTemplate sUnknown_80E6A10 = { 0, 3, 3, 8, @@ -178,7 +178,7 @@ static const MenuItem sUnknown_80E6A28[] = { {NULL, 3}, }; -static const Window sUnknown_80E6A74 = { +static const WindowTemplate sUnknown_80E6A74 = { 0, 3, 3, 8, @@ -194,7 +194,7 @@ static const MenuItem sUnknown_80E6A8C[] = { {NULL, 3}, }; -UNUSED static const Window sUnknown_80E6AEC = { +UNUSED static const WindowTemplate sUnknown_80E6AEC = { 0, 3, 3, 8, @@ -210,7 +210,7 @@ UNUSED static const MenuItem sUnknown_80E6B04[] = { {NULL, 3}, }; -static const Window sUnknown_80E6B78 = { +static const WindowTemplate sUnknown_80E6B78 = { 0, 3, 3, 8, @@ -226,7 +226,7 @@ static const MenuItem sUnknown_80E6B90[] = { {NULL, 3}, }; -static const Window sUnknown_80E6BF4 = { +static const WindowTemplate sUnknown_80E6BF4 = { 0, 3, 3, 8, @@ -242,7 +242,7 @@ static const MenuItem sUnknown_80E6C0C[] = { {NULL, 3}, }; -static const Window sUnknown_80E6C50 = { +static const WindowTemplate sUnknown_80E6C50 = { 0, 3, 3, 8, @@ -258,7 +258,7 @@ static const MenuItem sUnknown_80E6C68[] = { {NULL, 3}, }; -static const Window sUnknown_80E6CD0 = { +static const WindowTemplate sUnknown_80E6CD0 = { 0, 3, 3, 8, @@ -274,7 +274,7 @@ static const MenuItem sUnknown_80E6CE8[] = { {NULL, 3}, }; -static const Window sUnknown_80E6D54 = { +static const WindowTemplate sUnknown_80E6D54 = { 0, 3, 3, 8, @@ -290,7 +290,7 @@ static const MenuItem sUnknown_80E6D6C[] = { {NULL, 3}, }; -static const Window sUnknown_80E6DDC = { +static const WindowTemplate sUnknown_80E6DDC = { 0, 3, 3, 8, diff --git a/src/data/party_list_menu.h b/src/data/party_list_menu.h index ef5bba45b..e20505631 100644 --- a/src/data/party_list_menu.h +++ b/src/data/party_list_menu.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DD310 = { +static const WindowTemplate sUnknown_80DD310 = { 0, 0x03, 0x00, 0x00, @@ -7,7 +7,7 @@ static const Window sUnknown_80DD310 = { NULL }; -static const Window sUnknown_80DD328 = { +static const WindowTemplate sUnknown_80DD328 = { 0, 0x03, 0x13, 0x03, @@ -16,7 +16,7 @@ static const Window sUnknown_80DD328 = { NULL }; -static const Window sUnknown_80DD340 = { +static const WindowTemplate sUnknown_80DD340 = { 0, 0x03, 0x14, 0x04, @@ -25,7 +25,7 @@ static const Window sUnknown_80DD340 = { NULL }; -static const Window sUnknown_80DD358 = { +static const WindowTemplate sUnknown_80DD358 = { 0, 0x03, 0x02, 0x11, @@ -34,7 +34,7 @@ static const Window sUnknown_80DD358 = { NULL }; -static const Window sUnknown_80DD370 = { +static const WindowTemplate sUnknown_80DD370 = { 0, 0x03, 0x02, 0x03, diff --git a/src/data/personality_test1.h b/src/data/personality_test1.h index 3bd46e7a4..83c818aaa 100644 --- a/src/data/personality_test1.h +++ b/src/data/personality_test1.h @@ -819,7 +819,7 @@ static const u8* const sPersonalityTypeDescriptionTable[NUM_PERSONALITIES] = { [QUIRKY] = DESC_QUIRKY }; -static const Window sUnknown_80F4244 = { +static const WindowTemplate sUnknown_80F4244 = { 0, 5, 12, 6, diff --git a/src/data/personality_test2.h b/src/data/personality_test2.h index 4bf932a2c..c6a519cc5 100644 --- a/src/data/personality_test2.h +++ b/src/data/personality_test2.h @@ -12,7 +12,7 @@ const s16 gPartners[NUM_PARTNERS] = MONSTER_MUDKIP }; -const Window gUnknown_80F4278 = +const WindowTemplate gUnknown_80F4278 = { 0, 0x03, @@ -22,7 +22,7 @@ const Window gUnknown_80F4278 = NULL }; -const Window gUnknown_80F4290 = +const WindowTemplate gUnknown_80F4290 = { 0, 0x06, @@ -32,7 +32,7 @@ const Window gUnknown_80F4290 = NULL }; -const Window gUnknown_80F42A8 = +const WindowTemplate gUnknown_80F42A8 = { 0, 0x05, diff --git a/src/data/pokemon_news1.h b/src/data/pokemon_news1.h index 263418f51..a500570d3 100644 --- a/src/data/pokemon_news1.h +++ b/src/data/pokemon_news1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DFBD0 = { +static const WindowTemplate sUnknown_80DFBD0 = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ static const Window sUnknown_80DFBD0 = { }; static const WindowHeader sUnknown_80DFBE8 = {1, 0, 12, 0}; -static const Window sUnknown_80DFBEC = { +static const WindowTemplate sUnknown_80DFBEC = { 0, 6, 2, 2, diff --git a/src/data/pokemon_news2.h b/src/data/pokemon_news2.h index 4421b92d1..22678591d 100644 --- a/src/data/pokemon_news2.h +++ b/src/data/pokemon_news2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DFC18 = { +static const WindowTemplate sUnknown_80DFC18 = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ static const Window sUnknown_80DFC18 = { }; static const WindowHeader sUnknown_80DFC30 = {1, 0, 22, 0}; -static const Window sUnknown_80DFC34 = { +static const WindowTemplate sUnknown_80DFC34 = { 0, 6, 2, 2, diff --git a/src/data/pokemon_news3.h b/src/data/pokemon_news3.h index a3219ea5b..f8e6096f6 100644 --- a/src/data/pokemon_news3.h +++ b/src/data/pokemon_news3.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DFC5C = { +static const WindowTemplate sUnknown_80DFC5C = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DFC5C = { NULL }; -static const Window sUnknown_80DFC74 = { +static const WindowTemplate sUnknown_80DFC74 = { 0, 6, 2, 2, diff --git a/src/data/post_office_guide2.h b/src/data/post_office_guide2.h index 879a6f9be..5fdf0f6c8 100644 --- a/src/data/post_office_guide2.h +++ b/src/data/post_office_guide2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80E1EFC = +static const WindowTemplate sUnknown_80E1EFC = { 0, 3, @@ -10,7 +10,7 @@ static const Window sUnknown_80E1EFC = static const WindowHeader sUnknown_80E1F14 = {1, 0, 8, 0}; -static const Window sUnknown_80E1F18 = +static const WindowTemplate sUnknown_80E1F18 = { 0, 6, diff --git a/src/data/trade_items_menu.h b/src/data/trade_items_menu.h index fc0fe5349..430c45caa 100644 --- a/src/data/trade_items_menu.h +++ b/src/data/trade_items_menu.h @@ -10,7 +10,7 @@ static const MenuItem sUnknown_80E60D4[] = { {NULL, 0}, }; -static const Window sUnknown_80E60EC = +static const WindowTemplate sUnknown_80E60EC = { 0, 3, @@ -27,7 +27,7 @@ static const MenuItem sUnknown_80E6104[] = { {NULL, 0}, }; -static const Window unused = +static const WindowTemplate unused = { 0, 3, @@ -43,7 +43,7 @@ static const MenuItem sUnknown_80E6154[] = { {NULL, 0}, }; -static const Window sUnknown_80E6174 = +static const WindowTemplate sUnknown_80E6174 = { 0, 3, diff --git a/src/data/wigglytuff_shop1.h b/src/data/wigglytuff_shop1.h index 4857a05a2..04b147a41 100644 --- a/src/data/wigglytuff_shop1.h +++ b/src/data/wigglytuff_shop1.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC464 = { +static const WindowTemplate sUnknown_80DC464 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DC464 = { NULL }; -static const Window sUnknown_80DC47C = { +static const WindowTemplate sUnknown_80DC47C = { 0, 6, 2, 2, diff --git a/src/data/wigglytuff_shop2.h b/src/data/wigglytuff_shop2.h index 755dc97f3..866ba4d70 100644 --- a/src/data/wigglytuff_shop2.h +++ b/src/data/wigglytuff_shop2.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC4BC = { +static const WindowTemplate sUnknown_80DC4BC = { 0, 3, 0, 0, @@ -8,7 +8,7 @@ static const Window sUnknown_80DC4BC = { }; static const WindowHeader sUnknown_80DC4D4 = {1, 0, 18, 0}; -static const Window sUnknown_80DC4D8 = { +static const WindowTemplate sUnknown_80DC4D8 = { 0, 6, 2, 2, diff --git a/src/data/wigglytuff_shop3.h b/src/data/wigglytuff_shop3.h index 664450bdd..c530f9abb 100644 --- a/src/data/wigglytuff_shop3.h +++ b/src/data/wigglytuff_shop3.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DC534 = { +static const WindowTemplate sUnknown_80DC534 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DC534 = { NULL }; -static const Window sUnknown_80DC54C = { +static const WindowTemplate sUnknown_80DC54C = { 0, 3, 21, 4, @@ -16,7 +16,7 @@ static const Window sUnknown_80DC54C = { NULL }; -static const Window sUnknown_80DC564 = { +static const WindowTemplate sUnknown_80DC564 = { 0, 3, 21, 14, diff --git a/src/data/wonder_mail_1.h b/src/data/wonder_mail_1.h index dc01b51b1..a1a5004f4 100644 --- a/src/data/wonder_mail_1.h +++ b/src/data/wonder_mail_1.h @@ -40,7 +40,7 @@ const MenuItem gUnknown_80DDAA0[] = { {NULL, 10}, }; -const Window gUnknown_80DDACC = +const WindowTemplate gUnknown_80DDACC = { 0, 0x03, @@ -50,7 +50,7 @@ const Window gUnknown_80DDACC = NULL }; -const Window gUnknown_80DDAE4 = +const WindowTemplate gUnknown_80DDAE4 = { 0, 0x03, diff --git a/src/data/wonder_mail_802C10C.h b/src/data/wonder_mail_802C10C.h index 29c1dd42d..8f3e6db46 100644 --- a/src/data/wonder_mail_802C10C.h +++ b/src/data/wonder_mail_802C10C.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DFC9C = { +static const WindowTemplate sUnknown_80DFC9C = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DFC9C = { NULL }; -static const Window sUnknown_80DFCB4 = { +static const WindowTemplate sUnknown_80DFCB4 = { 0, 6, 2, 2, diff --git a/src/data/wonder_mail_802C4C8.h b/src/data/wonder_mail_802C4C8.h index ab724e7c8..a18bb1199 100644 --- a/src/data/wonder_mail_802C4C8.h +++ b/src/data/wonder_mail_802C4C8.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DFCE4 = { +static const WindowTemplate sUnknown_80DFCE4 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DFCE4 = { NULL }; -static const Window sUnknown_80DFCFC = { +static const WindowTemplate sUnknown_80DFCFC = { 0, 6, 2, 2, diff --git a/src/data/wonder_mail_802C860.h b/src/data/wonder_mail_802C860.h index fbc98490e..41ac16dc9 100644 --- a/src/data/wonder_mail_802C860.h +++ b/src/data/wonder_mail_802C860.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DFD28 = { +static const WindowTemplate sUnknown_80DFD28 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DFD28 = { NULL }; -static const Window sUnknown_80DFD40 = { +static const WindowTemplate sUnknown_80DFD40 = { 0, 4, 21, 6, @@ -16,7 +16,7 @@ static const Window sUnknown_80DFD40 = { NULL }; -static const Window sUnknown_80DFD58 = { +static const WindowTemplate sUnknown_80DFD58 = { 0, 4, 21, 15, diff --git a/src/data/wonder_mail_802CDD4.h b/src/data/wonder_mail_802CDD4.h index ee7620403..2d672cc57 100644 --- a/src/data/wonder_mail_802CDD4.h +++ b/src/data/wonder_mail_802CDD4.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DFD8C = { +static const WindowTemplate sUnknown_80DFD8C = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DFD8C = { NULL }; -static const Window sUnknown_80DFDA4 = { +static const WindowTemplate sUnknown_80DFDA4 = { 0, 6, 2, 2, diff --git a/src/data/wonder_mail_802D098.h b/src/data/wonder_mail_802D098.h index b0c43817a..8da5defd3 100644 --- a/src/data/wonder_mail_802D098.h +++ b/src/data/wonder_mail_802D098.h @@ -1,4 +1,4 @@ -static const Window sUnknown_80DFDD4 = { +static const WindowTemplate sUnknown_80DFDD4 = { 0, 3, 0, 0, @@ -7,7 +7,7 @@ static const Window sUnknown_80DFDD4 = { NULL }; -UNUSED static const Window sUnknown_80DFDEC = { +UNUSED static const WindowTemplate sUnknown_80DFDEC = { 0, 3, 3, 3, @@ -16,7 +16,7 @@ UNUSED static const Window sUnknown_80DFDEC = { NULL }; -static const Window sUnknown_80DFE04 = { +static const WindowTemplate sUnknown_80DFE04 = { 0, 3, 21, 6, @@ -25,7 +25,7 @@ static const Window sUnknown_80DFE04 = { NULL }; -static const Window sUnknown_80DFE1C = { +static const WindowTemplate sUnknown_80DFE1C = { 0, 3, 21, 15, @@ -34,7 +34,7 @@ static const Window sUnknown_80DFE1C = { NULL }; -UNUSED static const Window sUnknown_80DFE34 = { +UNUSED static const WindowTemplate sUnknown_80DFE34 = { 0, 3, 21, 15, diff --git a/src/dungeon_menu_items.c b/src/dungeon_menu_items.c index 199b88ca7..8144b4bcd 100644 --- a/src/dungeon_menu_items.c +++ b/src/dungeon_menu_items.c @@ -52,7 +52,7 @@ extern u8 *GetDungeonSubMenuItemString(s32 param_1); extern bool8 CanSubMenuItemBeChosen(s32 param_1); extern s32 gDungeonSubMenuItemsCount; extern const u8 gUnknown_8106B50[]; -extern void DungeonShowWindows(Windows *a0, u8 a1); +extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); extern Item * sub_8044CC8(Entity *param_1, ActionParameter *param_2, UNUSED s32 a3); extern void sub_8044F5C(u16 param_1, u8 param_2); extern void sub_8044FF0(u16 param_1); @@ -79,7 +79,7 @@ static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; static EWRAM_DATA s16 sUnknown_202F248[8] = {0}; static EWRAM_DATA s32 sUnknown_202F258 = 0; -static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, Windows *a4, WindowHeader *a5); +static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, WindowTemplates *a4, WindowHeader *a5); static s32 sub_8060800(WindowHeader *a0, s32 a1); static bool8 sub_8060860(s32 a0); static void sub_8060890(DungeonPos *a0); @@ -120,7 +120,7 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) EntityInfo *a0Info = GetEntInfo(a0); WindowHeader header; - Windows windows = + WindowTemplates windows = { .id = { @@ -381,12 +381,12 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) static const struct unkStruct_8090F58 gUnknown_8106B60 = {1, 1, 0, 80, 1}; -static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, bool8 a3, Windows *windows, WindowHeader *a5) +static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, bool8 a3, WindowTemplates *windows, WindowHeader *a5) { s32 i, x, y; s32 r10; - UnkTextStruct1 *txtStrPtr; - Window whichWindow = { + Window *txtStrPtr; + WindowTemplate whichWindow = { .type = WINDOW_TYPE_NORMAL, .pos = {2, 4}, .width = 6, @@ -447,7 +447,7 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, b } DungeonShowWindows(windows, 1); - txtStrPtr = &gUnknown_2027370[0]; + txtStrPtr = &gWindows[0]; gDungeonMenu.unkC = (txtStrPtr->unk0 + 0x10) * 8; gDungeonMenu.unkE = ((txtStrPtr->unk2 + 1) * 8) - 2; sub_80137B0(&gDungeonMenu, 0x70); diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index a6a7a66b0..8f3c22f9b 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -40,7 +40,7 @@ extern void sub_803EAF0(u32, u8 *); extern void sub_803E708(s32 a0, s32 a1); extern void sub_8044F5C(u16 param_1, u8 param_2); extern void sub_8044FF0(u16 param_1); -extern void DungeonShowWindows(Windows *a0, u8 a1); +extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); extern s32 GetTeamMemberEntityIndex(Entity *pokemon); extern u32 sub_8062D88(void); extern void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); @@ -62,11 +62,11 @@ extern s32 gUnknown_202F2D8; extern s32 sub_8044FB4(u16 param_1); extern const u8 *const gUnknown_80FE978; -extern const Window gUnknown_8106CAC; +extern const WindowTemplate gUnknown_8106CAC; extern const u8 *const gUnknown_80FDFE8; extern const u8 gUnknown_8106CC4[]; -void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); +void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); void sub_8063698(Entity *entity, u8 a1, u8 a2); void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); void sub_80637A4(ActionContainer *a0, s32 a1); @@ -193,7 +193,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) bool8 unkBool = TRUE; EntityInfo *leaderInfo = GetEntInfo(GetLeader()); WindowHeader header; - Windows windows = { + WindowTemplates windows = { .id = { [0] = { .type = WINDOW_TYPE_WITH_HEADER, @@ -425,10 +425,10 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) return ret; } -void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) +void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) { s32 i, movesCount; - Window windowNew = gUnknown_8106CAC; + WindowTemplate windowNew = gUnknown_8106CAC; header->f0 = arg7; header->f1 = arg6; @@ -460,8 +460,8 @@ void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, Windows *windows, W windows->id[2] = windowNew; DungeonShowWindows(windows, TRUE); sub_80137B0(&gDungeonMenu, 0); - gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 16) * 8; - gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (gWindows[0].unk0 + 16) * 8; + gDungeonMenu.unkE = ((gWindows[0].unk2 + 1) * 8) - 2; SetMessageArgument_2(gFormatBuffer_Monsters[0], entInfo, 0); for (i = 0; i < MAX_MON_MOVES; i++) { Move *move = &entInfo->moves.moves[i]; @@ -603,7 +603,7 @@ void sub_80637E8(ActionContainer *a0) void sub_8063834(Move *moves, s32 a1, s32 a2) { - Windows windows; + WindowTemplates windows; WindowHeader header; struct subStruct_203B240 *statuses[4]; s32 i, count, currId; @@ -632,8 +632,8 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) gDungeonMenu.unk1E = currId; gDungeonMenu.unk20 = count; - gDungeonMenu.unkC = (gUnknown_2027370[0].unk0 + 23) * 8; - gDungeonMenu.unkE = ((gUnknown_2027370[0].unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (gWindows[0].unk0 + 23) * 8; + gDungeonMenu.unkE = ((gWindows[0].unk2 + 1) * 8) - 2; gDungeonMenu.unk14.x = 0; gDungeonMenu.unk4 = 0; gDungeonMenu.firstEntryY = 16; diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index 4e043346b..c4690f68f 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -110,7 +110,7 @@ extern u8 *GetDungeonSubMenuItemString(s32 param_1); extern bool8 CanSubMenuItemBeChosen(s32 param_1); extern s32 gDungeonSubMenuItemsCount; extern const u8 gUnknown_8106B50[]; -extern void DungeonShowWindows(Windows *a0, u8 a1); +extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); extern Item * sub_8044CC8(Entity *param_1, ActionParameter *param_2, UNUSED s32 a3); extern void sub_8044F5C(u16 param_1, u8 param_2); extern void sub_8044FF0(u16 param_1); @@ -158,7 +158,7 @@ struct UnkFieldTeamMenuStruct u8 unk14[MAX_TEAM_MEMBERS]; }; -static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2); +static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, WindowTemplates *windows, bool8 a2); static void sub_806145C(struct UnkFieldTeamMenuStruct *a0); static void ChosenSubMenuToAction(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); static void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId); @@ -179,7 +179,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) s32 i; bool32 r10, ret; struct UnkFieldTeamMenuStruct sp; - Windows windows = { + WindowTemplates windows = { .id = { [0] = { .type = WINDOW_TYPE_WITH_HEADER, @@ -323,7 +323,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) return ret; } -static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, Windows *windows, bool8 a2) +static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, WindowTemplates *windows, bool8 a2) { s32 r0; DungeonPos pos; @@ -511,7 +511,7 @@ static void ChosenSubMenuToAction(ActionContainer *a0, struct UnkFieldTeamMenuSt void ShowDungeonTacticsMenu(ActionContainer *a0) { - Windows windows = { + WindowTemplates windows = { .id = { [0] = { .type = WINDOW_TYPE_WITH_HEADER, @@ -746,7 +746,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) s32 subWindowIds[6]; struct unkStruct_808FF20 unkMonStruct; struct UnkInfoTabStruct unkInfoTabStruct; - Windows windows = { + WindowTemplates windows = { .id = { [0] = { .type = WINDOW_TYPE_WITH_HEADER, @@ -810,7 +810,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) bool8 hasIqSkills = FALSE; bool8 hasStatusProblems = FALSE; bool8 addCursorSprite = TRUE; - UnkTextStruct1 *unkTxtStr1Ptr = &gUnknown_2027370[0]; + Window *unkTxtStr1Ptr = &gWindows[0]; sTeamWindowHeader.f0 = totalSubWindows; sTeamWindowHeader.f1 = currSubWindowId; @@ -1197,7 +1197,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) static void ShowUpArrowSprite(void) { if ((gDungeonFramesCounter & 8) != 0) { - UnkTextStruct1 *txtStrPtr = &gUnknown_2027370[0]; + Window *txtStrPtr = &gWindows[0]; SpriteOAM sprite = {0}; SpriteSetAffine1(&sprite, 0); @@ -1222,7 +1222,7 @@ static void ShowUpArrowSprite(void) static void ShowDownArrowSprite(void) { if ((gDungeonFramesCounter & 8) != 0) { - UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + Window *ptr = &gWindows[0]; SpriteOAM sprite = {0}; SpriteSetAffine1(&sprite, 0); @@ -1245,7 +1245,7 @@ static void ShowDownArrowSprite(void) void ShowStatusDescriptionMenuArrow(void) { if ((gDungeonFramesCounter & 8) != 0) { - UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + Window *ptr = &gWindows[0]; SpriteSetAffine1(&gUnknown_202F268, 0); SpriteSetAffine2(&gUnknown_202F268, 0); @@ -1293,7 +1293,7 @@ void ShowStatusesDescriptionMenu(s32 count, struct subStruct_203B240 **strings) static void ShowIqDescriptionWindow(u8 iqSkillId) { MenuInputStructSub menuSub; - Windows windows; + WindowTemplates windows; WindowHeader header; struct subStruct_203B240 *result[4]; @@ -1346,7 +1346,7 @@ static void ShowIqDescriptionWindow(u8 iqSkillId) static void ShowTacticDescriptionWindow(u8 tacticId) { MenuInputStructSub menuSub; - Windows windows; + WindowTemplates windows; WindowHeader header; struct subStruct_203B240 *result[4]; @@ -1401,7 +1401,7 @@ static void ShowStatusInfoWindow(s32 statusId) const u8 *str; MenuInputStructSub menuSub; WindowHeader header; - Windows windows = { + WindowTemplates windows = { .id = { [0] = { .type = WINDOW_TYPE_WITH_HEADER, @@ -1448,7 +1448,7 @@ static void ShowStatusInfoWindow(s32 statusId) } static const WindowHeader sBottomWindowHeader = {1, 0, 15, 0}; -static const Window sMovesSubMenu = { +static const WindowTemplate sMovesSubMenu = { .type = WINDOW_TYPE_WITH_HEADER, .pos = {2, 10}, .width = 18, @@ -1457,7 +1457,7 @@ static const Window sMovesSubMenu = { .unk12 = 0, .unk14 = &sBottomWindowHeader, }; -static const Window sItemSubMenu = { +static const WindowTemplate sItemSubMenu = { .type = WINDOW_TYPE_WITH_HEADER, .pos = {2, 10}, .width = 18, @@ -1470,7 +1470,7 @@ static const Window sItemSubMenu = { Entity *ShowDungeonToWhichMonMenu(s32 *teamId, s32 caseId) { struct UnkFieldTeamMenuStruct unkStruct; - Windows windows = { + WindowTemplates windows = { .id = { [0] = { .type = WINDOW_TYPE_NORMAL, // Since the window has a header, it should probably be WINDOW_TYPE_WTIH_HEADER. diff --git a/src/dungeon_message.c b/src/dungeon_message.c index 208fa09b0..15c821c3b 100644 --- a/src/dungeon_message.c +++ b/src/dungeon_message.c @@ -1046,7 +1046,7 @@ static bool8 TryScrollLogDown(s32 a0) static void CreateMessageLogArrow(bool8 upArrow, s32 y) { - struct UnkTextStruct1 *unkStr = &gUnknown_2027370[0]; + struct Window *unkStr = &gWindows[0]; if (!(gDungeonFramesCounter & 8)) { SpriteSetAffine1(&sMessageLogArrowSpriteOAM, 0); SpriteSetAffine2(&sMessageLogArrowSpriteOAM, 0); diff --git a/src/dungeon_submenu.c b/src/dungeon_submenu.c index 92a90afd6..d77e36680 100644 --- a/src/dungeon_submenu.c +++ b/src/dungeon_submenu.c @@ -12,12 +12,12 @@ extern s32 gDungeonSubMenuItemsCount; extern u8 *GetDungeonSubMenuItemString(s32 param_1); extern bool8 CanSubMenuItemBeChosen(s32 param_1); -extern void DungeonShowWindows(Windows *a0, u8 a1); +extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); -void CreateDungeonMenuSubWindow(Window *mainWindow, s32 subWindowX) +void CreateDungeonMenuSubWindow(WindowTemplate *mainWindow, s32 subWindowX) { s32 i; - Windows windows = { + WindowTemplates windows = { .id = { [0] = WINDOW_DUMMY, [1] = { diff --git a/src/friend_areas_map_util.c b/src/friend_areas_map_util.c index f2d2cb1df..fd167d0a8 100644 --- a/src/friend_areas_map_util.c +++ b/src/friend_areas_map_util.c @@ -258,7 +258,7 @@ void FriendAreasMap_PrintCurrAreaName(void) u8 txt[200]; s32 id = gFriendAreasMapPtr->currLocationId; const struct FriendAreaLocationInfo *locationInfo = &gFriendAreasMapPtr->locationsInfo[id]; - Windows windows = {0}; + WindowTemplates windows = {0}; windows.id[0].type = WINDOW_TYPE_NORMAL; windows.id[0].pos.x = 7; @@ -295,7 +295,7 @@ void FriendAreasMap_PrintAvailableSubAreas(void) const struct FriendAreaLocationInfo *locationInfo = &gFriendAreasMapPtr->locationsInfo[id]; MenuInputStruct *menuInput = &gFriendAreasMapPtr->menu; WindowHeader header; - Windows windows = { + WindowTemplates windows = { .id = { [0] = { .type = WINDOW_TYPE_WITH_HEADER, diff --git a/src/friend_rescue.c b/src/friend_rescue.c index da673ddcb..0f02fb76a 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -32,7 +32,7 @@ extern void SetFriendRescueMenuState(u32); extern TeamInventory *gTeamInventoryRef; -// NOTE: MenuItems and Window defined in here.. +// NOTE: MenuItems and WindowTemplate defined in here.. #include "data/friend_rescue_menus.h" const u8 gUnknown_80E25F4[] = "What would you like to do?"; diff --git a/src/load_screen.c b/src/load_screen.c index d15c565e5..acc17b55f 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -29,7 +29,7 @@ struct LoadScreen // size: 0x27c u32 currMenu; MenuStruct unk4[4]; - Windows unk144; + WindowTemplates unk144; /* 0x1A4 */ u8 formattedTeamName[0x24]; /* 0x1C8 */ u8 formattedPlayerName[0x24]; /* 0x1EC */ u8 formattedLocation[0x24]; @@ -48,7 +48,7 @@ void sub_80397B4(void); extern void sub_80920D8(u8 *); -const Window gUnknown_80E75F8 = { +const WindowTemplate gUnknown_80E75F8 = { 0, 0x03, 0x00, 0x00, @@ -57,7 +57,7 @@ const Window gUnknown_80E75F8 = { NULL }; -const Window gUnknown_80E7610 = { +const WindowTemplate gUnknown_80E7610 = { 0, 0x03, 0x02, 0x02, @@ -80,7 +80,7 @@ EWRAM_INIT MenuItem gUnknown_203B378[2] = { EWRAM_INIT u32 gUnknown_203B388[12] = {0xC, 0xC, 0xE, 0xE, 0xD, 0xE, 0xC, 0xD, 0xD, 0xB, 0xB, 0xB}; EWRAM_INIT u32 gUnknown_203B3B8[12] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x1A, 0x18, 0x1B, 0x16, 0x19, 0x17}; -const Window gUnknown_80E762C = { +const WindowTemplate gUnknown_80E762C = { 0, 0x03, 0x02, 0x0F, @@ -124,7 +124,7 @@ const MenuItem gDeleteSaveConfirmMenuItems[3] = {NULL, 3}, }; -const Window gUnknown_80E7784 = +const WindowTemplate gUnknown_80E7784 = { 0, 0x03, diff --git a/src/mailbox.c b/src/mailbox.c index ead63f107..b9126a1e0 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -20,7 +20,7 @@ EWRAM_INIT struct unkStruct_203B304 *gUnknown_203B304 = {NULL}; -const Window gUnknown_80E0284 = +const WindowTemplate gUnknown_80E0284 = { 0, 0x03, @@ -30,7 +30,7 @@ const Window gUnknown_80E0284 = NULL }; -const Window gUnknown_80E029C = +const WindowTemplate gUnknown_80E029C = { 0, 0x03, @@ -40,7 +40,7 @@ const Window gUnknown_80E029C = NULL }; -const Window gUnknown_80E02B4 = +const WindowTemplate gUnknown_80E02B4 = { 0, 0x04, @@ -50,7 +50,7 @@ const Window gUnknown_80E02B4 = NULL }; -const Window gUnknown_80E02CC = +const WindowTemplate gUnknown_80E02CC = { 0, 0x04, diff --git a/src/main_menu1.c b/src/main_menu1.c index adf9cc8ae..b1627fbb9 100644 --- a/src/main_menu1.c +++ b/src/main_menu1.c @@ -291,9 +291,9 @@ void sub_8035C1C(void) sMainMenu->sub.unk2D = 0; } -void SetMenuItems(MenuStruct *a0, Windows *a1, s32 index, const Window *a3, const MenuItem *menuItems, bool8 a5, u32 menuAction, bool8 unused) +void SetMenuItems(MenuStruct *a0, WindowTemplates *a1, s32 index, const WindowTemplate *a3, const MenuItem *menuItems, bool8 a5, u32 menuAction, bool8 unused) { - Window *winPtrs = a1->id; + WindowTemplate *winPtrs = a1->id; winPtrs[index] = *a3; ResetUnusedInputStruct(); ShowWindows(a1, TRUE, TRUE); @@ -306,9 +306,9 @@ void SetMenuItems(MenuStruct *a0, Windows *a1, s32 index, const Window *a3, cons a0[index].unk4C = TRUE; } -void sub_8035CC0(Windows *dataArray, u32 index) +void sub_8035CC0(WindowTemplates *dataArray, u32 index) { - Window *winPtrs; + WindowTemplate *winPtrs; RestoreUnkTextStruct_8006518(dataArray); winPtrs = dataArray->id; diff --git a/src/menu_input.c b/src/menu_input.c index a0b0ea261..4eedb7408 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -18,7 +18,7 @@ const u32 gDefaultMenuTextColors[3] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED }; const WindowHeader UnkData_80D47C4 = {0x01, 0x00, 0x10, 0x00}; -const Window gUnknown_80D47C8[MAX_WINDOWS] = { +const WindowTemplate gUnknown_80D47C8[MAX_WINDOWS] = { 0, 0x06, 0x02, 0x02, @@ -223,7 +223,7 @@ void sub_8012C60(u32 x, u32 y, u32 a2, u32 color, u32 a4) xxx_call_draw_char(x + add_x, y, uVar2, color, a4); } -void sub_8012CAC(Window *a0, const MenuItem *a1) +void sub_8012CAC(WindowTemplate *a0, const MenuItem *a1) { s32 length; s32 maxLength; @@ -244,7 +244,7 @@ void sub_8012CAC(Window *a0, const MenuItem *a1) sub_8012D08(a0, count); } -void sub_8012D08(Window *param_1, s32 param_2) +void sub_8012D08(WindowTemplate *param_1, s32 param_2) { s32 sVar2; s16 sVar3; @@ -258,7 +258,7 @@ void sub_8012D08(Window *param_1, s32 param_2) param_1->unk10 = sVar3; } -void sub_8012D34(struct Window *param_1, s32 param_2) +void sub_8012D34(struct WindowTemplate *param_1, s32 param_2) { s32 sVar2; s16 sVar3; @@ -386,15 +386,15 @@ void sub_8012EBC(MenuStruct *param_1) const u32 *colorArray; s32 counter; s32 index; - Windows textStack; + WindowTemplates textStack; u8 buffer[256]; - UnkTextStruct1 *ptr_text; - Window *ptr_text2; + Window *ptr_text; + WindowTemplate *ptr_text2; if (param_1->unk4D) { sub_80073B8(param_1->index); index = param_1->index; - ptr_text = &gUnknown_2027370[index]; + ptr_text = &gWindows[index]; if (ptr_text->unkC == 6) { ptr_text2 = &textStack.id[index]; @@ -540,9 +540,9 @@ bool8 sub_8013114(MenuStruct *param_1, s32 *menuAction) static void sub_8013134(MenuInputStruct *param_1, u32 menuItemCounter, u32 index) { - UnkTextStruct1 *temp; + Window *temp; - temp = &gUnknown_2027370[index]; + temp = &gWindows[index]; param_1->unk0 = index; param_1->menuIndex = 0; @@ -700,10 +700,10 @@ void sub_8013660(MenuInputStruct *param_1) void UpdateMenuCursorSpriteCoords(MenuInputStruct *param_1) { s32 index; - UnkTextStruct1 *temp; + Window *temp; index = param_1->unk0; - temp = &gUnknown_2027370[index]; + temp = &gWindows[index]; param_1->unk8.x = temp->unk0 * 8 + param_1->unk4; param_1->unk8.y = temp->unk2 * 8 + GetMenuEntryYCoord(param_1, param_1->menuIndex); } @@ -798,12 +798,12 @@ void sub_80137B0(MenuInputStruct *param_1, s32 param_2) iVar2 = param_2 << 8; } else { - if (gUnknown_2027370[param_1->unk0].unkC == 6) + if (gWindows[param_1->unk0].unkC == 6) iVar1 = 16; else iVar1 = 0; - iVar2 = (gUnknown_2027370[param_1->unk0].unk6 * 8 - iVar1) << 8; + iVar2 = (gWindows[param_1->unk0].unk6 * 8 - iVar1) << 8; } param_1->unk10 = iVar2 / param_1->unk1C; @@ -931,10 +931,10 @@ void sub_8013984(MenuInputStruct *param_1) { s32 iVar2; s32 iVar4; - UnkTextStruct1 *ptr; + Window *ptr; iVar4 = param_1->unk0; - ptr = &gUnknown_2027370[iVar4]; + ptr = &gWindows[iVar4]; if (param_1->unk1C == 0) param_1->unk1C++; @@ -1085,9 +1085,9 @@ void sub_8013D10(unkStructFor8013AA0 *a0) { s32 x, y; u8 uVar4; - UnkTextStruct1 *ptr; + Window *ptr; - ptr = &gUnknown_2027370[a0->unk14]; + ptr = &gWindows[a0->unk14]; uVar4 = a0->unk24; switch (sub_8012AE8()) { @@ -1152,7 +1152,7 @@ static bool8 sub_8013DD0(unkStructFor8013AA0 *a0) void sub_8013E54(void) { - UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + Window *ptr = &gWindows[0]; SpriteOAM SStack_18 = {0}; SpriteSetAffine1(&SStack_18, 0); @@ -1174,7 +1174,7 @@ void sub_8013E54(void) void sub_8013F84(void) { - UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + Window *ptr = &gWindows[0]; SpriteOAM SStack_18 = {0}; SpriteSetAffine1(&SStack_18, 0); @@ -1194,7 +1194,7 @@ void sub_8013F84(void) AddSprite(&SStack_18,0x100,0,0x0); } -void sub_80140B4(Windows *a0) +void sub_80140B4(WindowTemplates *a0) { s32 i; diff --git a/src/mission_reward.c b/src/mission_reward.c index b35434301..5973a4e68 100644 --- a/src/mission_reward.c +++ b/src/mission_reward.c @@ -22,7 +22,7 @@ struct unkStruct_203B310 /* 0xC */ s32 itemRewardIndex; unkStruct_802F204 *unk10; /* 0x14 */ struct MonPortraitMsg monPortrait; - Windows unk24; + WindowTemplates unk24; }; EWRAM_INIT struct unkStruct_203B310 *gUnknown_203B310 = {NULL}; @@ -41,7 +41,7 @@ enum FriendRewardStates REWARD_EXIT, }; -const Window gUnknown_80E041C = { +const WindowTemplate gUnknown_80E041C = { 0, 0x03, 0x00, 0x00, diff --git a/src/other_menus1.c b/src/other_menus1.c index 9c3b97911..60001409f 100644 --- a/src/other_menus1.c +++ b/src/other_menus1.c @@ -119,7 +119,7 @@ static void sub_80371B8(void) { unkStruct_8035D94 *item; const MenuItem *MenuItems; - const Window *puVar5; + const WindowTemplate *puVar5; puVar5 = NULL; MenuItems = NULL; diff --git a/src/pelipper_board.c b/src/pelipper_board.c index 05fc3f7aa..13a521c0b 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -20,7 +20,7 @@ EWRAM_INIT struct unkStruct_203B308 *gPelipperBoard = {NULL}; -const Window gUnknown_80E0330 = +const WindowTemplate gUnknown_80E0330 = { 0, 0x03, @@ -30,7 +30,7 @@ const Window gUnknown_80E0330 = NULL }; -const Window gUnknown_80E0348 = +const WindowTemplate gUnknown_80E0348 = { 0, 0x03, @@ -40,7 +40,7 @@ const Window gUnknown_80E0348 = NULL }; -const Window gUnknown_80E0360 = +const WindowTemplate gUnknown_80E0360 = { 0, 0x04, @@ -50,7 +50,7 @@ const Window gUnknown_80E0360 = NULL }; -const Window gUnknown_80E0378 = +const WindowTemplate gUnknown_80E0378 = { 0, 0x04, diff --git a/src/personality_test1.c b/src/personality_test1.c index 8eed940c8..20a2253b9 100644 --- a/src/personality_test1.c +++ b/src/personality_test1.c @@ -386,7 +386,7 @@ static void PersonalityTest_DisplayStarterSprite(void) s32 paletteIndex; s32 emotionId; const u8 *gfx; - Windows stackArray; + WindowTemplates stackArray; starterID = sPersonalityTestTracker->unk4.StarterID; RestoreUnkTextStruct_8006518(&stackArray); diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 77d0d9ebd..7c38bfb8a 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -26,7 +26,7 @@ EWRAM_INIT u8 gUnknown_203B368 = {1}; EWRAM_INIT u32 gUnknown_203B36C = {65502}; EWRAM_INIT struct RescuePasswordMenu *gRescuePasswordMenu = {NULL}; -const Window gUnknown_80E71E4 = { +const WindowTemplate gUnknown_80E71E4 = { 0, 0x03, 0x00, 0x00, @@ -35,7 +35,7 @@ const Window gUnknown_80E71E4 = { NULL }; -const Window gUnknown_80E71FC = { +const WindowTemplate gUnknown_80E71FC = { 0, 0x03, 0x03, 0x09, @@ -59,7 +59,7 @@ ALIGNED(4) const u8 CheckAgain_80E7234[] = _("{CENTER_ALIGN}Please check it agai ALIGNED(4) const u8 IncorrectPassword_80E7250[] = _("{CENTER_ALIGN}Incorrect password!"); ALIGNED(4) const u8 Error_80E7268[] = _("{CENTER_ALIGN}{COLOR RED}Error!{RESET} "); -const Window gUnknown_80E7278 = { +const WindowTemplate gUnknown_80E7278 = { 0, 0x03, 0x03, 0x09, @@ -83,7 +83,7 @@ ALIGNED(4) const u8 DATA_80E72B0[] = " "; ALIGNED(4) const u8 PasswordAccept_80E72B4[] = _("{CENTER_ALIGN}The password has been accepted."); ALIGNED(4) const u8 Success_80E72D8[] = _("{CENTER_ALIGN}{COLOR CYAN_G}Success!{RESET} "); -const Window gUnknown_80E72EC = { +const WindowTemplate gUnknown_80E72EC = { 0, 0x03, 0x03, 0x09, @@ -103,7 +103,7 @@ const MenuItem gUnknown_80E7304[4] = { ALIGNED(4) const u8 NotSOSMail_80E7324[] = _("{CENTER_ALIGN}This is not an {COLOR CYAN_G}SOS Mail{RESET}."); -const Window gUnknown_80E7344 = { +const WindowTemplate gUnknown_80E7344 = { 0, 0x03, 0x03, 0x09, @@ -123,7 +123,7 @@ const MenuItem gUnknown_80E735C[4] = { ALIGNED(4) const u8 ReceiveSOSMail_80E737C[] = _("{CENTER_ALIGN}This {COLOR CYAN_G}SOS Mail{RESET} has been received already."); -const Window gUnknown_80E73AC = { +const WindowTemplate gUnknown_80E73AC = { 0, 0x03, 0x03, 0x09, @@ -143,7 +143,7 @@ const MenuItem gUnknown_80E73C4[4] = { ALIGNED(4) const u8 sUnknown_80E73E4[] = _("{CENTER_ALIGN}This is not an {COLOR CYAN_G}A-OK Mail{RESET}."); -const Window gUnknown_80E7408 = { +const WindowTemplate gUnknown_80E7408 = { 0, 0x03, 0x03, 0x09, @@ -163,7 +163,7 @@ const MenuItem gUnknown_80E7420[4] = { ALIGNED(4) const u8 sUnknown_80E7440[] = _("{CENTER_ALIGN}This {COLOR CYAN_G}A-OK Mail{RESET} cannot be used."); -const Window gUnknown_80E7468 = { +const WindowTemplate gUnknown_80E7468 = { 0, 0x03, 0x03, 0x09, @@ -182,7 +182,7 @@ const MenuItem gUnknown_80E7480[4] = { }; ALIGNED(4) const u8 sUnknown_80E74A0[] = _("{CENTER_ALIGN}This is not a {COLOR CYAN_G}Thank-You Mail{RESET}."); -const Window gUnknown_80E74C8 = { +const WindowTemplate gUnknown_80E74C8 = { 0, 0x03, 0x03, 0x09, @@ -202,7 +202,7 @@ const MenuItem gUnknown_80E74E0[4] = { ALIGNED(4) const u8 sUnknown_80E7500[] = _("{CENTER_ALIGN}This {COLOR CYAN_G}Thank-You Mail{RESET} cannot be used."); -const Window gUnknown_80E752C = { +const WindowTemplate gUnknown_80E752C = { 0, 0x03, 0x03, 0x09, @@ -221,7 +221,7 @@ const MenuItem gUnknown_80E7544[4] = { }; ALIGNED(4) const u8 sUnknown_80E7564[] = _("{CENTER_ALIGN}This is not a {COLOR CYAN_G}Wonder Mail{RESET}."); -const Window gUnknown_80E7588 = { +const WindowTemplate gUnknown_80E7588 = { 0, 0x03, 0x03, 0x09, diff --git a/src/save_menu.c b/src/save_menu.c index 3ff3fb918..74e5a7c2f 100644 --- a/src/save_menu.c +++ b/src/save_menu.c @@ -12,7 +12,7 @@ static EWRAM_INIT SaveMenuWork *sUnknown_203B364 = {NULL}; -const Window gUnknown_80E6F20 = +const WindowTemplate gUnknown_80E6F20 = { 0, 0x03, @@ -22,7 +22,7 @@ const Window gUnknown_80E6F20 = NULL }; -const Window gUnknown_80E6F38 = +const WindowTemplate gUnknown_80E6F38 = { 0, 0x03, diff --git a/src/string_format.c b/src/string_format.c index 21130c246..f2daf62bd 100644 --- a/src/string_format.c +++ b/src/string_format.c @@ -60,7 +60,7 @@ u32 sub_8014140(void) // This kinda looks like the 'true' beginning of the file static const u32 gUnknown_80D48A0[] = {0x7, 0x2, 0x2}; -static const struct Window gUnknown_80D48AC = { +static const struct WindowTemplate gUnknown_80D48AC = { 0x00, 0x03, 0x00, 0x00, @@ -68,7 +68,7 @@ static const struct Window gUnknown_80D48AC = { 0x00, 0x00, 0x00 }; -static const Window gUnknown_80D48C4 = { +static const WindowTemplate gUnknown_80D48C4 = { 0x00, 0x00, 0x02, 0x0F, @@ -77,7 +77,7 @@ static const Window gUnknown_80D48C4 = { NULL }; -static const Window gUnknown_80D48DC = { +static const WindowTemplate gUnknown_80D48DC = { 0x00, 0x02, 0x02, 0x08, @@ -148,7 +148,7 @@ static EWRAM_DATA s32 gUnknown_202EC1C = 0; // Only read, but never written to. Possibly used in Blue? struct NeverWrittenToStruct202EC20 { - struct Window unk0; + struct WindowTemplate unk0; const u8 *unk18; }; static EWRAM_DATA struct NeverWrittenToStruct202EC20 *sNeverWrittenToUnknownStructPtr = NULL; @@ -156,7 +156,7 @@ static UNUSED EWRAM_DATA u8 sUnusedEwram1[4] = {0}; static EWRAM_DATA MenuInputStructSub gUnknown_202EC28 = {0}; -static EWRAM_INIT Windows sUnknown_203B198 = { +static EWRAM_INIT WindowTemplates sUnknown_203B198 = { .id = { [0] = { .pos = {2, 15}, @@ -260,7 +260,7 @@ void CreateMenuDialogueBoxAndPortrait(const u8 *text, void *a1, u32 r9, const Me gUnknown_202E748.unk0 = 4; gUnknown_202E748.unk2 = 4; gUnknown_202E748.unk8 = 0x70; - gUnknown_202E748.unkA = (gUnknown_2027370[0].unk2 * 8) + 34; + gUnknown_202E748.unkA = (gWindows[0].unk2 * 8) + 34; gUnknown_202E748.unk10 = 7; gUnknown_202E748.unk1C = 0; gUnknown_202E748.unk20 = 0; @@ -541,7 +541,7 @@ void DrawDialogueBoxString(void) } gUnknown_202E748.unk8 = 0x70; - gUnknown_202E748.unkA = (gUnknown_2027370[0].unk2 * 8) + 34; + gUnknown_202E748.unkA = (gWindows[0].unk2 * 8) + 34; } keepLooping = FALSE; } diff --git a/src/text.c b/src/text.c index 3a1960192..9ee4c9fee 100644 --- a/src/text.c +++ b/src/text.c @@ -23,7 +23,7 @@ extern const char gUnknown_80B88C0[]; // "fontsppa" // system_sbin.s extern const struct FileArchive gSystemFileArchive; -EWRAM_DATA UnkTextStruct1 gUnknown_2027370[4] = {0}; +EWRAM_DATA Window gWindows[MAX_WINDOWS] = {0}; EWRAM_DATA static struct CharMapStruct *sCharmaps[2] = {NULL}; EWRAM_DATA static s16 sCharacterSpacing = 0; EWRAM_DATA u8 gUnknown_202749A[11] = {0}; @@ -33,7 +33,7 @@ EWRAM_DATA static s32 sCurrentCharmap = 0; EWRAM_DATA static vu32 sUnknown_20274B0 = 0; EWRAM_DATA static u32 sUnknown_20274B4[0xEC0] = {0}; EWRAM_DATA static OpenedFile *sCharmapFiles[3] = {NULL}; -EWRAM_DATA static Windows sUnknown_202AFC0 = {0}; +EWRAM_DATA static WindowTemplates sSavedWindows = {0}; EWRAM_DATA static s32 sUnknown_202B020 = 0; EWRAM_DATA static s32 sUnknown_202B024 = 0; EWRAM_DATA static s32 sCharHeight[2] = {0}; @@ -41,13 +41,13 @@ EWRAM_DATA static u32 sTextShadowMask = 0; // Some text color info is stored; re EWRAM_DATA static u8 sDrawTextShadow = 0; EWRAM_DATA ALIGNED(4) u16 gUnknown_202B038[4][32][32] = {0}; -IWRAM_DATA static s16 gUnknown_3000E94[161] = {0}; +IWRAM_DATA ALIGNED(4) static s16 gUnknown_3000E94[161] = {0}; // These text-related functions were deemed important as they're copied and run from IWRAM for improved performance. -static void ScrollDownWindowInternal(UnkTextStruct1 *txtStructs, s32 id); -static void ScrollUpWindowInternal(UnkTextStruct1 *txtStructs, s32 id); -static void sub_82729B8(UnkTextStruct1 *txtStructs, s32 id); -static void sub_8272A8C(UnkTextStruct1 *txtStructs, s32 id); +static void ScrollDownWindowInternal(Window *txtStructs, s32 id); +static void ScrollUpWindowInternal(Window *txtStructs, s32 id); +static void sub_82729B8(Window *txtStructs, s32 id); +static void sub_8272A8C(Window *txtStructs, s32 id); void ScrollDownWindow(s32 windowId); void ScrollUpWindow(s32 windowId); void sub_82729A4(s32 id); @@ -61,32 +61,32 @@ EWRAM_INIT void (*gIwramTextFunc4)(s32 a0) = sub_8272A78; // This variable is only used in InitGraphics function, which may or may not belong to text.c EWRAM_INIT u8 gUnknown_203B090 = 0; -static void SaveUnkTextStructAndXXX_8006438(const Windows *a0, bool8 a1, bool8 a2, DungeonPos *a3); -static void sub_8006554(UnkTextStruct1 *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, const Window *a5, bool8 a6, u32 a7, DungeonPos *a8, u8 a9); -static void sub_800677C(UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3); -static void sub_80069CC(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4); -static void sub_8006AC4(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4); -static void sub_8006B70(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4); -static void sub_8006C44(UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3); -static void sub_8006E94(UnkTextStruct1 *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4); -static u32 xxx_draw_char(struct UnkTextStruct1 *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5); +static void ShowWindowsInternal(const WindowTemplates *a0, bool8 a1, bool8 a2, DungeonPos *a3); +static void AddWindow(Window *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, const WindowTemplate *a5, bool8 a6, u32 a7, DungeonPos *a8, u8 a9); +static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3); +static void sub_80069CC(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4); +static void sub_8006AC4(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4); +static void sub_8006B70(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4); +static void sub_8006C44(Window *a0, s32 a1, u16 *a2, u8 a3); +static void sub_8006E94(Window *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4); +static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5); static void nullsub_129(u32 a0, s32 x, s32 y, s32 a3, u32 color); -static void sub_8007958(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color); -static void sub_8007AA4(struct UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color); -static void sub_8007BA8(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color); -static void sub_8007D00(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color); -static void sub_8007E64(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8); -static void sub_8008030(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8); -static void DisplayMonPortrait(UnkTextStruct1 *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4); -static void DisplayMonPortraitFlipped(UnkTextStruct1 *a0, s32 a1, const u8 *compressedData, s32 a3); -static void sub_80084A4(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 a8); -static void sub_8008818(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); -static bool8 xxx_update_bg_vram(UnkTextStruct1 *a0); -static void sub_800898C(void); -static void sub_80089AC(const Window *r4, DungeonPos *r5_Str); -static void PrepareTextbox_8008C6C(UnkTextStruct1 *strArr, u32 strId); -static void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 windowId, u32 terminatingChr, s32 characterSpacing, s32 lineSpacing); -static const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp); +static void sub_8007958(Window *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color); +static void sub_8007AA4(struct Window *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color); +static void sub_8007BA8(Window *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color); +static void sub_8007D00(Window *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color); +static void sub_8007E64(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8); +static void sub_8008030(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8); +static void DisplayMonPortrait(Window *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4); +static void DisplayMonPortraitFlipped(Window *a0, s32 a1, const u8 *compressedData, s32 a3); +static void sub_80084A4(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 a8); +static void sub_8008818(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +static bool8 xxx_update_bg_vram(Window *a0); +static void ResetWindowBgData(void); +static void sub_80089AC(const WindowTemplate *r4, DungeonPos *r5_Str); +static void PrepareTextbox_8008C6C(Window *strArr, u32 strId); +static void xxx_draw_string(Window *strArr, s32 x, s32 y, const u8 *str, u32 windowId, u32 terminatingChr, s32 characterSpacing, s32 lineSpacing); +static const u8 *HandleTextFormat(Window *strArr, const u8 *str, struct UnkDrawStringStruct *sp); static void sub_8009388(void); static s32 InterpretColorChar(u8 a0); @@ -110,7 +110,7 @@ static const u32 gUnknown_80B853C[16] = 0xEEEEEEEE, }; -static const Windows sDummyWindows = +static const WindowTemplates sDummyWindows = { .id = { [0] = WINDOW_DUMMY, @@ -182,9 +182,9 @@ void LoadCharmaps(void) sCharHeight[1] = 12; for (k = 0; k < 4; k++) { - gUnknown_2027370[k].unk4 = 0; - gUnknown_2027370[k].unk8 = 0; - gUnknown_2027370[k].unk46 = 0; + gWindows[k].unk4 = 0; + gWindows[k].unk8 = 0; + gWindows[k].unk46 = 0; } sCharacterSpacing = 0; @@ -272,34 +272,34 @@ void SetCharacterMask(int a0) sTextShadowMask = retval; } -void ShowWindows(const Windows *windows, bool8 a1, bool8 a2) +void ShowWindows(const WindowTemplates *winTemplates, bool8 a1, bool8 a2) { DungeonPos positionModifier = {0, 0}; - SaveUnkTextStructAndXXX_8006438(windows, a1, a2, &positionModifier); + ShowWindowsInternal(winTemplates, a1, a2, &positionModifier); } // https://decomp.me/scratch/xF5Y1 -static void SaveUnkTextStructAndXXX_8006438(const Windows *a0, bool8 a1, bool8 a2, DungeonPos *a3) +static void ShowWindowsInternal(const WindowTemplates *winTemplates, bool8 a1, bool8 a2, DungeonPos *positionModifier) { s32 i; u32 r9; r9 = 2; - if (a0 == NULL) - a0 = &sDummyWindows; + if (winTemplates == NULL) + winTemplates = &sDummyWindows; if (a2) sub_8009388(); - sub_800898C(); + ResetWindowBgData(); - for (i = 0; i < 4; i++) { - sUnknown_202AFC0.id[i] = a0->id[i]; + for (i = 0; i < MAX_WINDOWS; i++) { + sSavedWindows.id[i] = winTemplates->id[i]; - if (a0->id[i].width) { - sub_8006554(gUnknown_2027370, (u32 *)VRAM, sUnknown_20274B4, &gUnknown_202B038[0][0][0], gUnknown_80B8804[i], &a0->id[i], a1, r9, a3, 0); - sub_80089AC(&a0->id[i], a3); - r9 += a0->id[i].width * a0->id[i].unk10; + if (winTemplates->id[i].width != 0) { + AddWindow(gWindows, (u32 *)VRAM, sUnknown_20274B4, &gUnknown_202B038[0][0][0], gUnknown_80B8804[i], &winTemplates->id[i], a1, r9, positionModifier, 0); + sub_80089AC(&winTemplates->id[i], positionModifier); + r9 += winTemplates->id[i].width * winTemplates->id[i].unk10; } } @@ -316,11 +316,11 @@ UNUSED static void nullsub_152(void) { } -void RestoreUnkTextStruct_8006518(Windows *unkData) +void RestoreUnkTextStruct_8006518(WindowTemplates *unkData) { s32 i; for (i = 0; i < 4; i++) - unkData->id[i] = sUnknown_202AFC0.id[i]; + unkData->id[i] = sSavedWindows.id[i]; } UNUSED static void nullsub_153(void) @@ -333,9 +333,9 @@ u32 sub_8006544(u32 index) } // a1 is a VRAM pointer -static void sub_8006554(UnkTextStruct1 *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, const Window *a5, bool8 a6, u32 a7, DungeonPos *a8, u8 a9) +static void AddWindow(Window *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, const WindowTemplate *winTemplate, bool8 a6, u32 a7, DungeonPos *a8, u8 a9) { - UnkTextStruct1 *t1; + Window *t1; s32 iVar3; s32 iVar5; s32 iVar6; @@ -347,28 +347,28 @@ static void sub_8006554(UnkTextStruct1 *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, c s32 j; t1 = &a0[a4]; - iVar3 = a5->pos.x + a8->x; - iVar5 = a5->pos.y + a8->y; + iVar3 = winTemplate->pos.x + a8->x; + iVar5 = winTemplate->pos.y + a8->y; t1->unk0 = iVar3; t1->unk2 = iVar5; - t1->unk4 = a5->width; - t1->unk8 = a5->unk10; - t1->unk6 = a5->height; - t1->unkC = a5->type; + t1->unk4 = winTemplate->width; + t1->unk8 = winTemplate->unk10; + t1->unk6 = winTemplate->height; + t1->unkC = winTemplate->type; t1->unk10 = a7; if (t1->unkC == 6) t1->unk14 = a7; else - t1->unk14 = a7 + a5->unk12 * t1->unk4; + t1->unk14 = a7 + winTemplate->unk12 * t1->unk4; t1->unk18 = &a2[t1->unk10 * 8]; t1->unk1C = &a2[t1->unk14 * 8]; - t1->unk24 = a5->unk12; + t1->unk24 = winTemplate->unk12; t1->unk28 = &a1[t1->unk14 * 8]; if (t1->unkC == 6) - t1->unk2C = t1->unk4 * (t1->unk6 + a5->unk12) * 32; + t1->unk2C = t1->unk4 * (t1->unk6 + winTemplate->unk12) * 32; else t1->unk2C = t1->unk4 * t1->unk6 * 32; @@ -381,16 +381,16 @@ static void sub_8006554(UnkTextStruct1 *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, c if (t1->unk8 == 0) return; - if ((a5->unk0 & 0xA0) != 0x80) { + if ((winTemplate->unk0 & 0xA0) != 0x80) { temp = iVar5 - 1; if (t1->unkC == 6) { uVar1 = a6 ? t1->unk14 : 0; - sub_8006E94(t1, temp, uVar1, a5->unk14, a3); + sub_8006E94(t1, temp, uVar1, winTemplate->unk14, a3); temp = iVar5 + 2; - uVar1 = a6 ? t1->unk14 + t1->unk4 * (a5->unk12 + 2) : 0; + uVar1 = a6 ? t1->unk14 + t1->unk4 * (winTemplate->unk12 + 2) : 0; numI = t1->unk6 - 2; } else { @@ -420,13 +420,13 @@ static void sub_8006554(UnkTextStruct1 *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, c sub_8006C44(t1, temp, a3, a9); } - if ((a5->unk0 & 0x80) == 0) + if ((winTemplate->unk0 & 0x80) == 0) PrepareTextbox_8008C6C(a0, a4); t1->unk46 = 0; } -static void sub_800677C(UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3) +static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3) { s32 iVar5; s32 i; @@ -499,7 +499,7 @@ static void sub_800677C(UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3) } } -static void sub_80069CC(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) +static void sub_80069CC(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) { if (a2 > 28) return; @@ -540,7 +540,7 @@ static void sub_80069CC(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) } } -static void sub_8006AC4(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) +static void sub_8006AC4(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) { if (a2 > 28) return; @@ -567,7 +567,7 @@ static void sub_8006AC4(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) } } -static void sub_8006B70(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) +static void sub_8006B70(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) { if (a2 > 28) return; @@ -608,7 +608,7 @@ static void sub_8006B70(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, u16 *a4) } } -static void sub_8006C44(UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3) +static void sub_8006C44(Window *a0, s32 a1, u16 *a2, u8 a3) { s32 iVar5; s32 i; @@ -683,7 +683,7 @@ static void sub_8006C44(UnkTextStruct1 *a0, s32 a1, u16 *a2, u8 a3) // Not even close but I don't feel like continuing atm https://decomp.me/scratch/F58jg /* -void sub_8006E94(UnkTextStruct1 *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4) +void sub_8006E94(Window *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4) { s32 bVar1; s32 iVar2; @@ -867,7 +867,7 @@ void sub_8006E94(UnkTextStruct1 *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 } */ NAKED -static void sub_8006E94(UnkTextStruct1 *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4) +static void sub_8006E94(Window *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4) { asm_unified( "\tpush {r4-r7,lr}\n" @@ -1465,7 +1465,7 @@ static void sub_8006E94(UnkTextStruct1 *a0, s32 a1, u32 a2, const WindowHeader * void sub_8007334(s32 a0) { s32 i, j; - struct UnkTextStruct1 *textStructPtr = &gUnknown_2027370[a0]; + struct Window *textStructPtr = &gWindows[a0]; s32 r5 = textStructPtr->unk14; s32 r6 = textStructPtr->unk2; for (i = 0; i < textStructPtr->unk6; i++) { @@ -1486,9 +1486,9 @@ UNUSED static void nullsub_154(void) void sub_80073B8(s32 a0) { - UnkTextStruct1 *r1; + Window *r1; - r1 = &gUnknown_2027370[a0]; + r1 = &gWindows[a0]; r1->unk3C = &r1->unk1C[(u32)r1->unk2C >> 2]; r1->unk40 = r1->unk1C; @@ -1501,9 +1501,9 @@ UNUSED static void nullsub_155(void) void sub_80073E0(s32 a0) { - UnkTextStruct1 *r1; + Window *r1; - r1 = &gUnknown_2027370[a0]; + r1 = &gWindows[a0]; if (r1->unk44 == 0) { r1->unk30 = &r1->unk28[r1->unk3C - r1->unk1C]; @@ -1526,7 +1526,7 @@ UNUSED static void nullsub_156(void) u32 xxx_call_draw_char(s32 x, s32 y, u32 a2, u32 color, u32 a4) { - return xxx_draw_char(gUnknown_2027370, x, y, a2, color, a4); + return xxx_draw_char(gWindows, x, y, a2, color, a4); } UNUSED static bool8 sub_8007464(void) @@ -1534,7 +1534,7 @@ UNUSED static bool8 sub_8007464(void) return FALSE; } -static u32 xxx_draw_char(struct UnkTextStruct1 *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5) +static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5) { u32 *r3; const struct unkShiftData *shiftData; @@ -1544,7 +1544,7 @@ static u32 xxx_draw_char(struct UnkTextStruct1 *a0, s32 x, s32 y, u32 a3, u32 co const u16 *local_3c; s32 i; s32 xDiv8, yDiv8; - struct UnkTextStruct1 *r5 = &a0[a5]; + struct Window *r5 = &a0[a5]; s32 sp18 = gUnknown_80B853C[color & 0xF]; u8 var_2C; u32 r4; @@ -1739,20 +1739,20 @@ UNUSED static void sub_80078E8(u32 a0, s32 x, s32 y, s32 a3, u32 color) void sub_800792C(u32 a0, s32 x, s32 y, s32 a3, u32 color) { - sub_8007958(gUnknown_2027370, a0, x, y, a3, color); + sub_8007958(gWindows, a0, x, y, a3, color); } static void nullsub_129(u32 a0, s32 x, s32 y, s32 a3, u32 color) { } -static void sub_8007958(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color) +static void sub_8007958(Window *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color) { u32 uVar4; u32 *dest; s32 r4; const struct unkShiftData *shiftData; - UnkTextStruct1 *r5; + Window *r5; s32 r6; u32 r9; s32 lol; @@ -1810,16 +1810,16 @@ static void sub_8007958(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 co void sub_8007A78(u32 a0, s32 x, s32 y, s32 a3, u32 color) { - sub_8007AA4(gUnknown_2027370, a0, x, y, a3, color); + sub_8007AA4(gWindows, a0, x, y, a3, color); } UNUSED static void nullsub_157(void) { } -static void sub_8007AA4(struct UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color) +static void sub_8007AA4(struct Window *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color) { - struct UnkTextStruct1 *r4 = &a0[a1]; + struct Window *r4 = &a0[a1]; u32 ip = gUnknown_80B853C[color & 0xF] + 0x11111111; const u32 unkBits[] = {0xF, 0xF0, 0xF00, 0xF000, 0xF0000, 0xF00000, 0xF000000, 0xF0000000}; s32 r3 = y / 8; @@ -1857,7 +1857,7 @@ static void sub_8007AA4(struct UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, void sub_8007B7C(u32 a0, s32 x, s32 y, s32 a3, u32 color) { - sub_8007BA8(gUnknown_2027370, a0, x, y, a3, color); + sub_8007BA8(gWindows, a0, x, y, a3, color); } UNUSED static void nullsub_158(void) @@ -1865,7 +1865,7 @@ UNUSED static void nullsub_158(void) } #ifdef NONMATCHING // https://decomp.me/scratch/AU1bH -static void sub_8007BA8(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color) +static void sub_8007BA8(Window *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color) { s32 iVar1; // r1 s32 iVar3; @@ -1874,7 +1874,7 @@ static void sub_8007BA8(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 co u32 *r4; u32 r5; u32 r6; - UnkTextStruct1 *ip; + Window *ip; s32 sp4; s32 sp8; u32 sp1C; // Used correctly @@ -1937,7 +1937,7 @@ static void sub_8007BA8(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 co } #else NAKED -static void sub_8007BA8(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color) +static void sub_8007BA8(Window *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color) { asm_unified( "push {r4-r7,lr}\n" @@ -2107,7 +2107,7 @@ static void sub_8007BA8(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 co UNUSED static void sub_8007CD4(u32 a0, s32 a1, s32 a2, s32 a3, s32 a4) { - sub_8007D00(gUnknown_2027370, a0, a1, a2, a3, a4); + sub_8007D00(gWindows, a0, a1, a2, a3, a4); } UNUSED static void nullsub_159(void) @@ -2115,7 +2115,7 @@ UNUSED static void nullsub_159(void) } NAKED // Very similar to sub_8007BA8 -static void sub_8007D00(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color) +static void sub_8007D00(Window *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color) { asm_unified( "push {r4-r7,lr}\n" @@ -2278,17 +2278,17 @@ static void sub_8007D00(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 co void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6) { - sub_8007E64(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6); + sub_8007E64(gWindows, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6); } UNUSED static void nullsub_160(void) { } -static void sub_8007E64(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) +static void sub_8007E64(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) { s32 i, j; - UnkTextStruct1 *strPtr = &a0[a2]; + Window *strPtr = &a0[a2]; a3 /= 8; a4 /= 8; @@ -2355,7 +2355,7 @@ static u32 FlipPixelsHorizontally(u32 a0) UNUSED static void sub_8007FEC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6) { - sub_8008030(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6); + sub_8008030(gWindows, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6); } UNUSED static void nullsub_161(void) @@ -2363,10 +2363,10 @@ UNUSED static void nullsub_161(void) } // Similar to sub_8007E64 -static void sub_8008030(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) +static void sub_8008030(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) { s32 i, j; - UnkTextStruct1 *strPtr = &a0[a2]; + Window *strPtr = &a0[a2]; a3 /= 8; a4 /= 8; @@ -2416,7 +2416,7 @@ static void sub_8008030(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 UNUSED static void sub_80081A4(s32 a0, s32 a3, s32 a4, s32 a7Id) { s32 i, j, a5, a6; - UnkTextStruct1 *strPtr = &gUnknown_2027370[a0]; + Window *strPtr = &gWindows[a0]; const u32 *a7 = gUnknown_80B86B4[a7Id]; a3 /= 8; @@ -2459,17 +2459,17 @@ UNUSED static void sub_80081A4(s32 a0, s32 a3, s32 a4, s32 a7Id) void DisplayMonPortraitSprite(s32 a0, const u8 *compressedData, s32 a2) { - DisplayMonPortrait(gUnknown_2027370, gUnknown_202B038[0], a0, compressedData, a2); + DisplayMonPortrait(gWindows, gUnknown_202B038[0], a0, compressedData, a2); } UNUSED static void nullsub_162(void) { } -static void DisplayMonPortrait(UnkTextStruct1 *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4) +static void DisplayMonPortrait(Window *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4) { s32 i, j; - UnkTextStruct1 *strPtr = &a0[a2]; + Window *strPtr = &a0[a2]; a4 *= 4096; DecompressAT((u8 *)strPtr->unk18, (strPtr->unk4 * 32) * strPtr->unk8, compressedData); @@ -2511,17 +2511,17 @@ static void sub_8008334(u32 *r7, u32 *r12) void DisplayMonPortraitSpriteFlipped(s32 a0, const u8 *compressedData, s32 a1) { - DisplayMonPortraitFlipped(gUnknown_2027370, a0, compressedData, a1); + DisplayMonPortraitFlipped(gWindows, a0, compressedData, a1); } UNUSED static void nullsub_163(void) { } -static void DisplayMonPortraitFlipped(UnkTextStruct1 *a0, s32 a1, const u8 *compressedData, s32 a3) +static void DisplayMonPortraitFlipped(Window *a0, s32 a1, const u8 *compressedData, s32 a3) { s32 i, j; - UnkTextStruct1 *strPtr = &a0[a1]; + Window *strPtr = &a0[a1]; DisplayMonPortraitSprite(a1, compressedData, a3); for (i = 0; i < strPtr->unk8; i++) { @@ -2550,7 +2550,7 @@ static void DisplayMonPortraitFlipped(UnkTextStruct1 *a0, s32 a1, const u8 *comp UNUSED static void sub_8008468(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 a6) { - sub_80084A4(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a6); + sub_80084A4(gWindows, gUnknown_202B038[0], a0, a1, a2, a3, a4, a6); } UNUSED static void nullsub_164(void) @@ -2558,10 +2558,10 @@ UNUSED static void nullsub_164(void) } // Effectively unused -static void sub_80084A4(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 a8) +static void sub_80084A4(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 a8) { s32 i, j; - UnkTextStruct1 *strPtr = &a0[a2]; + Window *strPtr = &a0[a2]; a3 /= 8; a4 /= 8; @@ -2686,11 +2686,11 @@ static const u32 gUnknown_80B8868[] = 0xFFF00000, 0xFF000000, 0xF0000000 }; -UNUSED static void sub_80086C8(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) +UNUSED static void sub_80086C8(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) { u32 *r5; s32 r2, r0, r1; - UnkTextStruct1 *strPtr = &a0[a1]; + Window *strPtr = &a0[a1]; if (a2 < 0) { a4 += a2; @@ -2756,17 +2756,17 @@ UNUSED static void sub_80086C8(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, s32 a void sub_80087EC(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) { - sub_8008818(gUnknown_2027370, a0, a1, a2, a3, a4); + sub_8008818(gWindows, a0, a1, a2, a3, a4); } UNUSED static void nullsub_176(void) { } -static void sub_8008818(UnkTextStruct1 *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) +static void sub_8008818(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) { s32 i, j; - UnkTextStruct1 *strPtr = &a0[a1]; + Window *strPtr = &a0[a1]; s32 a2Div = a2 / 8; s32 a3Div = a3 / 8; @@ -2800,18 +2800,18 @@ bool8 xxx_call_update_bg_vram(void) gUnknown_20274A5 = FALSE; sub_80099C0(); } - ret = xxx_update_bg_vram(gUnknown_2027370); + ret = xxx_update_bg_vram(gWindows); return ret; } -static bool8 xxx_update_bg_vram(UnkTextStruct1 *a0) +static bool8 xxx_update_bg_vram(Window *a0) { s32 i, j; u32 r5; bool8 ret = FALSE; for (i = 0; i < 4; i++) { - UnkTextStruct1 *strPtr = &a0[i]; + Window *strPtr = &a0[i]; if (strPtr->unk4 == 0) continue; r5 = strPtr->unk38; @@ -2854,7 +2854,7 @@ static bool8 xxx_update_bg_vram(UnkTextStruct1 *a0) return ret; } -static void sub_800898C(void) +static void ResetWindowBgData(void) { s32 i; @@ -2863,7 +2863,7 @@ static void sub_800898C(void) } } -static void sub_80089AC(const Window *r4, DungeonPos *r5_Str) +static void sub_80089AC(const WindowTemplate *r4, DungeonPos *r5_Str) { u8 *r6; @@ -3020,17 +3020,17 @@ static void sub_80089AC(const Window *r4, DungeonPos *r5_Str) void CallPrepareTextbox_8008C54(u32 strId) { - PrepareTextbox_8008C6C(gUnknown_2027370, strId); + PrepareTextbox_8008C6C(gWindows, strId); } UNUSED static void nullsub_169(void) { } -static void PrepareTextbox_8008C6C(UnkTextStruct1 *strArr, u32 strId) +static void PrepareTextbox_8008C6C(Window *strArr, u32 strId) { s32 i; - UnkTextStruct1 *strPtr = &strArr[strId]; + Window *strPtr = &strArr[strId]; if (!strPtr->unk45) { s32 count = (strPtr->unk4 * strPtr->unk8) * 32; @@ -3072,7 +3072,7 @@ static void PrepareTextbox_8008C6C(UnkTextStruct1 *strArr, u32 strId) bool8 sub_8008D8C(u32 strId) { - UnkTextStruct1 *strPtr = &gUnknown_2027370[strId]; + Window *strPtr = &gWindows[strId]; return (strPtr->unk38 != 0); } @@ -3193,12 +3193,12 @@ s32 sub_8008ED0(const u8 *str) void PrintStringOnWindow2(s32 x, s32 y, const u8 *str, u32 windowId, u32 terminatingChr, s32 lineSpacing) { - xxx_draw_string(gUnknown_2027370, x, y, str, windowId, terminatingChr, 0, lineSpacing); + xxx_draw_string(gWindows, x, y, str, windowId, terminatingChr, 0, lineSpacing); } void PrintStringOnWindow(s32 x, s32 y, const u8 *str, u32 windowId, u32 terminatingChr) { - xxx_draw_string(gUnknown_2027370, x, y, str, windowId, terminatingChr, 0, 13); + xxx_draw_string(gWindows, x, y, str, windowId, terminatingChr, 0, 13); } UNUSED static void nullsub_170(void) @@ -3208,14 +3208,14 @@ UNUSED static void nullsub_170(void) // Identical to PrintStringOnWindow UNUSED static void UnusedPrintStringOnWindow(s32 x, u32 y, const u8 *str, u32 windowId, u32 terminatingChr) { - xxx_draw_string(gUnknown_2027370, x, y, str, windowId, terminatingChr, 0, 13); + xxx_draw_string(gWindows, x, y, str, windowId, terminatingChr, 0, 13); } UNUSED static void nullsub_171(void) { } -static void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 windowId, u32 terminatingChr, s32 characterSpacing, s32 lineSpacing) +static void xxx_draw_string(Window *strArr, s32 x, s32 y, const u8 *str, u32 windowId, u32 terminatingChr, s32 characterSpacing, s32 lineSpacing) { struct UnkDrawStringStruct sp; u32 currChr; @@ -3292,7 +3292,7 @@ static const u8 *sub_800915C(s16 *a0, const u8 *str) const u8 *xxx_handle_format_global(const u8 *str, struct UnkDrawStringStruct *unkStrPtr) { - return HandleTextFormat(gUnknown_2027370, str, unkStrPtr); + return HandleTextFormat(gWindows, str, unkStrPtr); } UNUSED static s32 sub_80091A8(s32 a0) @@ -3300,7 +3300,7 @@ UNUSED static s32 sub_80091A8(s32 a0) return a0 + 1; } -static const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp) +static const u8 *HandleTextFormat(Window *strArr, const u8 *str, struct UnkDrawStringStruct *sp) { while (1) { if (str[0] == '#') { @@ -3465,7 +3465,7 @@ UNUSED static void sub_8009488(s32 strArrId) { s32 i, j; s32 id0, id1; - UnkTextStruct1 *strPtr = &gUnknown_2027370[strArrId]; + Window *strPtr = &gWindows[strArrId]; id0 = strPtr->unk2; for (i = 0; i < strPtr->unk6; i++) { @@ -3486,7 +3486,7 @@ UNUSED static void nullsub_172(void) void sub_8009524(s32 strArrId) { s32 i, j; - UnkTextStruct1 *strPtr = &gUnknown_2027370[strArrId]; + Window *strPtr = &gWindows[strArrId]; s32 id0 = strPtr->unk2 - 1; for (i = 0; i < strPtr->unk6 + 2; i++) { @@ -3645,12 +3645,12 @@ void InitGraphics(void) // These functions run from IWRAM for improved performance. IWRAM_INIT void ScrollDownWindow(s32 windowId) { - ScrollDownWindowInternal(gUnknown_2027370, windowId); + ScrollDownWindowInternal(gWindows, windowId); } -IWRAM_INIT static void ScrollDownWindowInternal(UnkTextStruct1 *txtStructs, s32 windowId) +IWRAM_INIT static void ScrollDownWindowInternal(Window *txtStructs, s32 windowId) { - UnkTextStruct1 *txtStructPtr = &txtStructs[windowId]; + Window *txtStructPtr = &txtStructs[windowId]; if (txtStructPtr->unk8 > 0) { s32 i, j; @@ -3708,12 +3708,12 @@ IWRAM_INIT static void ScrollDownWindowInternal(UnkTextStruct1 *txtStructs, s32 IWRAM_INIT void ScrollUpWindow(s32 windowId) { - ScrollUpWindowInternal(gUnknown_2027370, windowId); + ScrollUpWindowInternal(gWindows, windowId); } -IWRAM_INIT static void ScrollUpWindowInternal(UnkTextStruct1 *txtStructs, s32 windowId) +IWRAM_INIT static void ScrollUpWindowInternal(Window *txtStructs, s32 windowId) { - UnkTextStruct1 *txtStructPtr = &txtStructs[windowId]; + Window *txtStructPtr = &txtStructs[windowId]; if (txtStructPtr->unk8 > 0) { s32 i, j; @@ -3787,13 +3787,13 @@ IWRAM_INIT static void ScrollUpWindowInternal(UnkTextStruct1 *txtStructs, s32 wi IWRAM_INIT void sub_82729A4(s32 id) { - sub_82729B8(gUnknown_2027370, id); + sub_82729B8(gWindows, id); } -IWRAM_INIT static void sub_82729B8(UnkTextStruct1 *txtStructs, s32 id) +IWRAM_INIT static void sub_82729B8(Window *txtStructs, s32 id) { s32 i, j; - UnkTextStruct1 *txtStructPtr = &txtStructs[id]; + Window *txtStructPtr = &txtStructs[id]; u32 *dstPtr = txtStructPtr->unk18; s32 id8 = txtStructPtr->unk20 + 8; s32 id9 = txtStructPtr->unk20 + 9; @@ -3841,13 +3841,13 @@ IWRAM_INIT static void sub_82729B8(UnkTextStruct1 *txtStructs, s32 id) IWRAM_INIT void sub_8272A78(s32 id) { - sub_8272A8C(gUnknown_2027370, id); + sub_8272A8C(gWindows, id); } -IWRAM_INIT static void sub_8272A8C(UnkTextStruct1 *txtStructs, s32 id) +IWRAM_INIT static void sub_8272A8C(Window *txtStructs, s32 id) { s32 i, j; - UnkTextStruct1 *txtStructPtr = &txtStructs[id]; + Window *txtStructPtr = &txtStructs[id]; u32 *dstPtr = txtStructPtr->unk18; s32 id8 = txtStructPtr->unk20 + 8; diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 6b784017e..a3daad4eb 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -75,7 +75,7 @@ const Item gUnknown_80DED44 = ITEM_FLAG_EXISTS, 0, ITEM_NOTHING }; -const Window gUnknown_80DED48 = +const WindowTemplate gUnknown_80DED48 = { 0, 0x03, @@ -85,7 +85,7 @@ const Window gUnknown_80DED48 = NULL }; -const Window gUnknown_80DED60 = +const WindowTemplate gUnknown_80DED60 = { 0, 0x03, @@ -103,7 +103,7 @@ const MenuItem gUnknown_80DED78[] = }; // Unused -const Window gUnknown_80DEDA0 = +const WindowTemplate gUnknown_80DEDA0 = { 0, 0x03, diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index 84262722d..2ecf24159 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -15,14 +15,14 @@ typedef struct unkStruct_203B360 /* 0x0 */ u32 currMenu; u32 unk4; // state MenuStruct unk8[4]; - Windows unk148; + WindowTemplates unk148; SpriteOAM unk1A8; u32 unk1B0; // sprite count? } unkStruct_203B360; static EWRAM_INIT unkStruct_203B360 *sUnknown_203B360 = {NULL}; -const Window gUnknown_80E6E7C = { +const WindowTemplate gUnknown_80E6E7C = { 0, 0x03, 0x00, 0x00, @@ -31,7 +31,7 @@ const Window gUnknown_80E6E7C = { NULL }; -const Window gUnknown_80E6E94 = { +const WindowTemplate gUnknown_80E6E94 = { 0, 0x03, 0x05, 0x09, diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 545d90dbd..f9b848b27 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -19,7 +19,7 @@ struct unkStruct_203B30C unkStruct_802C39C unk8; MenuStruct unk60; MenuItem unkB0[8]; - Windows unkF0; + WindowTemplates unkF0; }; static EWRAM_INIT struct unkStruct_203B30C *gUnknown_203B30C = {NULL}; @@ -31,7 +31,7 @@ extern void sub_802F004(); extern void sub_802F088(); extern void sub_802F108(void); -const Window gUnknown_80E03C4 = { +const WindowTemplate gUnknown_80E03C4 = { 0, 0x03, 0x00, 0x00, @@ -39,7 +39,7 @@ const Window gUnknown_80E03C4 = { 0x00, 0x00, NULL }; -const Window gUnknown_80E03DC = { +const WindowTemplate gUnknown_80E03DC = { 0, 0x03, 0x03, 0x03, @@ -47,7 +47,7 @@ const Window gUnknown_80E03DC = { 0x03, 0x00, NULL }; -const Window gUnknown_80E03F4 = { +const WindowTemplate gUnknown_80E03F4 = { 0, 0x03, 0x15, 0x06, diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index c0f71b37f..3127dd633 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -26,7 +26,7 @@ static EWRAM_INIT struct unkStruct_203B320 *gUnknown_203B320 = {NULL}; extern unkStruct_203B480 *gUnknown_203B480; -const Window gUnknown_80E083C = { +const WindowTemplate gUnknown_80E083C = { 0, 0x03, 0x00, 0x00, @@ -35,7 +35,7 @@ const Window gUnknown_80E083C = { NULL }; -const Window gUnknown_80E0854 = { +const WindowTemplate gUnknown_80E0854 = { 0, 0x06, 0x02, 0x02, diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index ec366a25e..6ff971b1b 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -20,8 +20,8 @@ struct unkStruct_203B324 MenuInputStructSub unk0; u8 mailIndex; u32 windowID; - Window *unk14; - Windows unk18; + WindowTemplate *unk14; + WindowTemplates unk18; }; static EWRAM_INIT struct unkStruct_203B324 *gUnknown_203B324 = {NULL}; @@ -29,7 +29,7 @@ static EWRAM_INIT struct unkStruct_203B324 *gUnknown_203B324 = {NULL}; extern unkStruct_203B480 *gUnknown_203B480; -const Window gUnknown_80E0900 = { +const WindowTemplate gUnknown_80E0900 = { 0, 0x03, 0x00, 0x00, @@ -40,7 +40,7 @@ const Window gUnknown_80E0900 = { const WindowHeader gUnknown_80E0918 = {0x01, 0x00, 0x12, 0x00}; -const Window gUnknown_80E091C = { +const WindowTemplate gUnknown_80E091C = { 0, 0x06, 0x02, 0x02, diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index 7ffa730c0..2a834a5bb 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -17,7 +17,7 @@ struct unkStruct_203B328 u8 mailIndex; MenuStruct unk8; MenuStruct unk58; - Windows unkA8; + WindowTemplates unkA8; /* 0x108 */ struct MonPortraitMsg monPortrait; u32 wonderMailType; }; @@ -48,7 +48,7 @@ const MenuItem gUnknown_80E0968[] = {NULL, CANCEL_ACTION} }; -const Window gUnknown_80E0990 = { +const WindowTemplate gUnknown_80E0990 = { 0, 0x03, 0x00, 0x00, @@ -56,7 +56,7 @@ const Window gUnknown_80E0990 = { 0x00, 0x00, NULL }; -const Window gUnknown_80E09A8 = { +const WindowTemplate gUnknown_80E09A8 = { 0, 0x03, 0x13, 0x0B, @@ -64,7 +64,7 @@ const Window gUnknown_80E09A8 = { 0x03, 0x00, NULL }; -const Window gUnknown_80E09C0 = { +const WindowTemplate gUnknown_80E09C0 = { 0, 0x03, 0x11, 0x0F, diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c index 6c2598492..5cec3e8e2 100644 --- a/src/wonder_mail_main_menu.c +++ b/src/wonder_mail_main_menu.c @@ -49,7 +49,7 @@ struct unkStruct_203B3E8 u8 unk38_u8[0x30]; // idk why it fills to 0x30 instead... } UNK38; u8 fill68[0x1EC - 0x68]; - Windows unk1EC; + WindowTemplates unk1EC; u32 unk24C; /* 0x250 */ u32 wonderMailStatus; unkStruct_803B344 unk254; diff --git a/src/world_map.c b/src/world_map.c index 844299fb0..436764068 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -38,7 +38,7 @@ extern void sub_80117AC(void); extern void sub_8011760(void); static EWRAM_INIT struct WorldMap *sWorldMapPtr = NULL; -static EWRAM_INIT Windows sWorldMapWindows = { +static EWRAM_INIT WindowTemplates sWorldMapWindows = { .id = { [0] = { .type = WINDOW_TYPE_NORMAL, @@ -483,7 +483,7 @@ static void AnimateSprites(bool8 a0) static void PrintDungeonName(DungeonLocation *dungLocation) { - Windows windows = { + WindowTemplates windows = { .id = { [0] = { .type = WINDOW_TYPE_NORMAL, From 341fc1cc94be09c7e7add14399c0278cb10deb10 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 16:12:50 +0100 Subject: [PATCH 17/31] document WindowHeader struct --- include/structs/str_text.h | 10 +++---- src/adventure_log.c | 10 +++---- src/code_801C8C4.c | 10 +++---- src/code_801D9E4.c | 10 +++---- src/code_801F428.c | 8 ++--- src/code_801F808.c | 8 ++--- src/code_8023144.c | 10 +++---- src/code_8024458.c | 8 ++--- src/code_803E724.c | 12 ++++---- src/code_8066D04.c | 18 ++++++------ src/code_8072F3C.c | 10 +++---- src/dungeon_menu_items.c | 14 ++++----- src/dungeon_menu_moves.c | 16 +++++----- src/dungeon_menu_team.c | 58 ++++++++++++++++++------------------- src/friend_areas_map_util.c | 8 ++--- src/hints_menu2.c | 8 ++--- src/iq_skill_list_menu.c | 10 +++---- src/kecleon_bros2.c | 8 ++--- src/kecleon_bros3.c | 8 ++--- src/kecleon_bros4.c | 8 ++--- src/makuhita_dojo2.c | 10 +++---- src/menu_input.c | 2 +- src/personality_test2.c | 8 ++--- src/pokemon_news1.c | 2 +- src/pokemon_news3.c | 8 ++--- src/text.c | 14 ++++----- src/wigglytuff_shop1.c | 10 +++---- src/wonder_mail_4.c | 10 +++---- src/wonder_mail_802C10C.c | 10 +++---- src/wonder_mail_802C4C8.c | 10 +++---- src/wonder_mail_802CDD4.c | 10 +++---- 31 files changed, 173 insertions(+), 173 deletions(-) diff --git a/include/structs/str_text.h b/include/structs/str_text.h index 86a0c65bf..686d85608 100644 --- a/include/structs/str_text.h +++ b/include/structs/str_text.h @@ -30,9 +30,9 @@ typedef struct Window typedef struct WindowHeader { - u8 f0; - u8 f1; - u8 f2; + u8 count; // How many headers there are, it's used for windows which can be scrolled left/right + u8 currId; // Id of the current header + u8 width; u8 f3; } WindowHeader; @@ -48,11 +48,11 @@ typedef struct WindowTemplate s16 height; s16 unk10; // In most cases it's the same as height. If it's smaller than height, the window may look glitchy. Maybe something with tile allocation/how the window is filled? s16 unk12; - const WindowHeader *unk14; + const WindowHeader *header; } WindowTemplate; // All fields are zeroed out except for type which is set to WINDOW_TYPE_NORMAL. -#define WINDOW_DUMMY (WindowTemplate) {.unk0 = 0, .type = WINDOW_TYPE_NORMAL, .width = 0, .pos = {0, 0}, .height = 0, .unk10 = 0, .unk12 = 0, .unk14 = NULL} +#define WINDOW_DUMMY (WindowTemplate) {.unk0 = 0, .type = WINDOW_TYPE_NORMAL, .width = 0, .pos = {0, 0}, .height = 0, .unk10 = 0, .unk12 = 0, .header = NULL} #define WINDOW_TYPE_0 0 #define WINDOW_TYPE_WITHOUT_BORDER 1 diff --git a/src/adventure_log.c b/src/adventure_log.c index 5e658c0f2..396ffe2b4 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -26,7 +26,7 @@ bool8 CreateAdventureLogScreen(u32 kind) sAdventureLog->s0.unk38 = &sAdventureLog->s0.windows.id[kind]; RestoreUnkTextStruct_8006518(&sAdventureLog->s0.windows); sAdventureLog->s0.windows.id[sAdventureLog->s0.unk34] = sUnknown_80E2008; - sAdventureLog->s0.unk38->unk14 = &sAdventureLog->unk9C; + sAdventureLog->s0.unk38->header = &sAdventureLog->unk9C; ResetUnusedInputStruct(); ShowWindows(&sAdventureLog->s0.windows, TRUE, TRUE); @@ -73,9 +73,9 @@ void CleanAdventureLogScreen(void) static void sub_8032084(void) { - sAdventureLog->unk9C.f0 = sAdventureLog->s0.input.unk20; - sAdventureLog->unk9C.f1 = sAdventureLog->s0.input.unk1E; - sAdventureLog->unk9C.f2 = 11; + sAdventureLog->unk9C.count = sAdventureLog->s0.input.unk20; + sAdventureLog->unk9C.currId = sAdventureLog->s0.input.unk1E; + sAdventureLog->unk9C.width = 11; sAdventureLog->unk9C.f3 = 0; SUB_80095E4_CALL(sAdventureLog->s0); @@ -96,7 +96,7 @@ static void DisplayAdventureLog(void) PrintStringOnWindow(r6, 0, sAdventureLogText, sAdventureLog->s0.unk34, 0); r4 += 4; - r6 = r4 + (sAdventureLog->unk9C.f2 * 8); + r6 = r4 + (sAdventureLog->unk9C.width * 8); sub_8012BC4(r6, 0, sAdventureLog->s0.input.unk1E + 1, 1, 7, sAdventureLog->s0.unk34); for (i = 0; i < sAdventureLog->s0.input.unk1A; i++) { diff --git a/src/code_801C8C4.c b/src/code_801C8C4.c index 4500f7b8a..76a38db8c 100644 --- a/src/code_801C8C4.c +++ b/src/code_801C8C4.c @@ -32,7 +32,7 @@ bool8 sub_801C8C4(s32 a0, s32 a1, DungeonPos *a2, u32 a3) sUnknown_203B244->unk4B4.s0.unk38 = &sUnknown_203B244->unk4B4.s0.windows.id[a1]; RestoreUnkTextStruct_8006518(&sUnknown_203B244->unk4B4.s0.windows); sUnknown_203B244->unk4B4.s0.windows.id[sUnknown_203B244->unk4B4.s0.unk34] = sUnknown_80DBE54; - sUnknown_203B244->unk4B4.s0.unk38->unk14 = &sUnknown_203B244->unk4B4.unk9C; + sUnknown_203B244->unk4B4.s0.unk38->header = &sUnknown_203B244->unk4B4.unk9C; if (a2 != NULL) sUnknown_203B244->unk4B4.s0.windows.id[sUnknown_203B244->unk4B4.s0.unk34].pos = *a2; @@ -137,9 +137,9 @@ void sub_801CBB8(void) static void sub_801CC38(void) { - sUnknown_203B244->unk4B4.unk9C.f0 = 1; - sUnknown_203B244->unk4B4.unk9C.f1 = 0; - sUnknown_203B244->unk4B4.unk9C.f2 = 12; + sUnknown_203B244->unk4B4.unk9C.count = 1; + sUnknown_203B244->unk4B4.unk9C.currId = 0; + sUnknown_203B244->unk4B4.unk9C.width = 12; sUnknown_203B244->unk4B4.unk9C.f3 = 0; SUB_80095E4_CALL(sUnknown_203B244->unk4B4.s0); @@ -156,7 +156,7 @@ void sub_801CCD8(void) CallPrepareTextbox_8008C54(sUnknown_203B244->unk4B4.s0.unk34); sub_80073B8(sUnknown_203B244->unk4B4.s0.unk34); PrintStringOnWindow(10, 0, sStorage, sUnknown_203B244->unk4B4.s0.unk34, 0); - sub_8012BC4(sUnknown_203B244->unk4B4.unk9C.f2 * 8 + 4, 0, sUnknown_203B244->unk4B4.s0.input.unk1E + 1, 2, 7, sUnknown_203B244->unk4B4.s0.unk34); + sub_8012BC4(sUnknown_203B244->unk4B4.unk9C.width * 8 + 4, 0, sUnknown_203B244->unk4B4.s0.input.unk1E + 1, 2, 7, sUnknown_203B244->unk4B4.s0.unk34); for(index = 0; index < sUnknown_203B244->unk4B4.s0.input.unk1A; index++) { itemID = sUnknown_203B244->itemIDs[(sUnknown_203B244->unk4B4.s0.input.unk1E * sUnknown_203B244->unk4B4.s0.input.unk1C) + index]; diff --git a/src/code_801D9E4.c b/src/code_801D9E4.c index 7e89b77d7..d3264dbf2 100644 --- a/src/code_801D9E4.c +++ b/src/code_801D9E4.c @@ -26,7 +26,7 @@ bool8 sub_801D9E4(void) sUnknown_203B258->s0.unk38 = &sUnknown_203B258->s0.windows.id[3]; RestoreUnkTextStruct_8006518(&sUnknown_203B258->s0.windows); sUnknown_203B258->s0.windows.id[sUnknown_203B258->s0.unk34] = sUnknown_80DBF88; - sUnknown_203B258->s0.unk38->unk14 = &sUnknown_203B258->unk9C; + sUnknown_203B258->s0.unk38->header = &sUnknown_203B258->unk9C; ResetUnusedInputStruct(); ShowWindows(&sUnknown_203B258->s0.windows, TRUE, TRUE); sub_8013818(&sUnknown_203B258->s0.input, 229, 10, sUnknown_203B258->s0.unk34); @@ -90,9 +90,9 @@ void sub_801DB0C(void) static void sub_801DB54(void) { - sUnknown_203B258->unk9C.f0 = 1; - sUnknown_203B258->unk9C.f1 = 0; - sUnknown_203B258->unk9C.f2 = 8; + sUnknown_203B258->unk9C.count = 1; + sUnknown_203B258->unk9C.currId = 0; + sUnknown_203B258->unk9C.width = 8; sUnknown_203B258->unk9C.f3 = 0; ResetUnusedInputStruct(); @@ -113,7 +113,7 @@ static void sub_801DBD4(void) sub_80073B8(sUnknown_203B258->s0.unk34); PrintStringOnWindow(10, 0, sField, sUnknown_203B258->s0.unk34, 0); // Field - x = (sUnknown_203B258->unk9C.f2 * 8) - 2; + x = (sUnknown_203B258->unk9C.width * 8) - 2; n = sUnknown_203B258->s0.input.unk1E + 1; sub_8012BC4(x, 0, n, 2, 7, sUnknown_203B258->s0.unk34); diff --git a/src/code_801F428.c b/src/code_801F428.c index 589d34eb9..8cef24760 100644 --- a/src/code_801F428.c +++ b/src/code_801F428.c @@ -55,10 +55,10 @@ bool8 sub_801F428(s16 index, s32 param_2) gUnknown_203B274->s348.s0.unk38 = &gUnknown_203B274->s348.s0.windows.id[gUnknown_203B274->s348.s0.unk34]; RestoreUnkTextStruct_8006518(&gUnknown_203B274->s348.s0.windows); gUnknown_203B274->s348.s0.windows.id[gUnknown_203B274->s348.s0.unk34] = sUnknown_80DC2C4; - gUnknown_203B274->s348.s0.unk38->unk14 = &gUnknown_203B274->s348.unk9C; - gUnknown_203B274->s348.unk9C.f0 = 1; - gUnknown_203B274->s348.unk9C.f1 = 0; - gUnknown_203B274->s348.unk9C.f2 = 0xC; + gUnknown_203B274->s348.s0.unk38->header = &gUnknown_203B274->s348.unk9C; + gUnknown_203B274->s348.unk9C.count = 1; + gUnknown_203B274->s348.unk9C.currId = 0; + gUnknown_203B274->s348.unk9C.width = 0xC; gUnknown_203B274->s348.unk9C.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B274->s348.s0.windows, TRUE, TRUE); diff --git a/src/code_801F808.c b/src/code_801F808.c index e40893097..8e68b93e4 100644 --- a/src/code_801F808.c +++ b/src/code_801F808.c @@ -114,10 +114,10 @@ void sub_801F930(void) switch(gUnknown_203B278->state) { case 0: - gUnknown_203B278->unk60->unk14 = &gUnknown_203B278->unkC4; - gUnknown_203B278->unkC4.f0 = gUnknown_203B278->unk28.unk20; - gUnknown_203B278->unkC4.f1 = gUnknown_203B278->unk28.unk1E; - gUnknown_203B278->unkC4.f2 = 0x10; + gUnknown_203B278->unk60->header = &gUnknown_203B278->unkC4; + gUnknown_203B278->unkC4.count = gUnknown_203B278->unk28.unk20; + gUnknown_203B278->unkC4.currId = gUnknown_203B278->unk28.unk1E; + gUnknown_203B278->unkC4.width = 0x10; gUnknown_203B278->unkC4.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B278->windows, TRUE, TRUE); diff --git a/src/code_8023144.c b/src/code_8023144.c index fdb680ae2..b48f81678 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -51,7 +51,7 @@ bool8 sub_8023144(s32 a0, s32 index, DungeonPos *sub, u32 a3) RestoreUnkTextStruct_8006518(&gUnknown_3001B5C->s35C.s0.windows); gUnknown_3001B5C->s35C.s0.windows.id[gUnknown_3001B5C->s35C.s0.unk34] = sUnknown_80DC91C; - gUnknown_3001B5C->s35C.s0.unk38->unk14 = &gUnknown_3001B5C->s35C.unk9C; + gUnknown_3001B5C->s35C.s0.unk38->header = &gUnknown_3001B5C->s35C.unk9C; if (sub != NULL) gUnknown_3001B5C->s35C.s0.windows.id[gUnknown_3001B5C->s35C.s0.unk34].pos = *sub; @@ -137,9 +137,9 @@ void sub_80233A0(void) static void sub_8023420(void) { - gUnknown_3001B5C->s35C.unk9C.f0 = 1; - gUnknown_3001B5C->s35C.unk9C.f1 = 0; - gUnknown_3001B5C->s35C.unk9C.f2 = 12; + gUnknown_3001B5C->s35C.unk9C.count = 1; + gUnknown_3001B5C->s35C.unk9C.currId = 0; + gUnknown_3001B5C->s35C.unk9C.width = 12; gUnknown_3001B5C->s35C.unk9C.f3 = 0; SUB_80095E4_CALL_2(gUnknown_3001B5C->s35C.s0); @@ -162,7 +162,7 @@ static void sub_80234BC(void) sub_80073B8(gUnknown_3001B5C->s35C.s0.unk34); PrintStringOnWindow(10, 0, sPokemon, gUnknown_3001B5C->s35C.s0.unk34, 0); - sub_8012BC4((gUnknown_3001B5C->s35C.unk9C.f2 * 8) + 4, 0, gUnknown_3001B5C->s35C.s0.input.unk1E + 1, 2, 7, gUnknown_3001B5C->s35C.s0.unk34); + sub_8012BC4((gUnknown_3001B5C->s35C.unk9C.width * 8) + 4, 0, gUnknown_3001B5C->s35C.s0.input.unk1E + 1, 2, 7, gUnknown_3001B5C->s35C.s0.unk34); for (i = 0; i < gUnknown_3001B5C->s35C.s0.input.unk1A; i++) { y = GetMenuEntryYCoord(&gUnknown_3001B5C->s35C.s0.input, i); diff --git a/src/code_8024458.c b/src/code_8024458.c index de31fef05..3b59376a8 100644 --- a/src/code_8024458.c +++ b/src/code_8024458.c @@ -29,8 +29,8 @@ bool8 sub_8024458(s16 speciesNum, s32 a1) sUnknown_203B2AC->unkE4 = &sUnknown_203B2AC->unkE8.id[a1]; RestoreUnkTextStruct_8006518(&sUnknown_203B2AC->unkE8); sUnknown_203B2AC->unkE8.id[sUnknown_203B2AC->unkE0] = sUnknown_80DC9C8; - sUnknown_203B2AC->unkE4->unk14 = &sUnknown_203B2AC->unk148; - sUnknown_203B2AC->unk148.f2 = 10; + sUnknown_203B2AC->unkE4->header = &sUnknown_203B2AC->unk148; + sUnknown_203B2AC->unk148.width = 10; sub_8024604(); sub_802452C(); sub_8013984(&sUnknown_203B2AC->input); @@ -74,8 +74,8 @@ void sub_802453C(void) static void sub_8024588(void) { - sUnknown_203B2AC->unk148.f0 = sUnknown_203B2AC->input.unk20; - sUnknown_203B2AC->unk148.f1 = sUnknown_203B2AC->input.unk1E; + sUnknown_203B2AC->unk148.count = sUnknown_203B2AC->input.unk20; + sUnknown_203B2AC->unk148.currId = sUnknown_203B2AC->input.unk1E; sUnknown_203B2AC->unk148.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&sUnknown_203B2AC->unkE8, TRUE, TRUE); diff --git a/src/code_803E724.c b/src/code_803E724.c index 2c2857fb3..452d98908 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -183,7 +183,7 @@ static const struct WindowTemplates gUnknown_80F62B0 = .height = 5, .unk10 = 7, .unk12 = 0, - .unk14 = NULL, + .header = NULL, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -201,7 +201,7 @@ static const struct WindowTemplates gUnknown_80F6310 = .height = 7, .unk10 = 7, .unk12 = 0, - .unk14 = NULL, + .header = NULL, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -219,7 +219,7 @@ static const struct WindowTemplates gUnknown_80F6370 = .height = 7, .unk10 = 7, .unk12 = 0, - .unk14 = NULL, + .header = NULL, }, [1] = { .type = WINDOW_TYPE_NORMAL, @@ -228,7 +228,7 @@ static const struct WindowTemplates gUnknown_80F6370 = .height = 2, .unk10 = 2, .unk12 = 0, - .unk14 = NULL, + .header = NULL, }, [2] = { .type = WINDOW_TYPE_NORMAL, @@ -237,7 +237,7 @@ static const struct WindowTemplates gUnknown_80F6370 = .height = 6, .unk10 = 6, .unk12 = 0, - .unk14 = NULL, + .header = NULL, }, [3] = WINDOW_DUMMY, } @@ -253,7 +253,7 @@ static const struct WindowTemplates gUnknown_80F63D0 = .height = 14, .unk10 = 18, .unk12 = 2, - .unk14 = NULL, + .header = NULL, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, diff --git a/src/code_8066D04.c b/src/code_8066D04.c index 1a1d8cbb8..52e832437 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -936,7 +936,7 @@ static const WindowTemplates gUnknown_8106DC8 = { .height = 0x0E, .unk10 = 0x12, .unk12 = 0x02, - .unk14 = &gUnknown_202F308 + .header = &gUnknown_202F308 }, [1] = { @@ -947,7 +947,7 @@ static const WindowTemplates gUnknown_8106DC8 = { .height = 0x04, .unk10 = 0x04, .unk12 = 0, - .unk14 = NULL + .header = NULL }, [2] = WINDOW_DUMMY, [3] = WINDOW_DUMMY, @@ -973,9 +973,9 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) while (1) { s32 r7 = 0, r5 = 0; - gUnknown_202F308.f0 = 1; - gUnknown_202F308.f1 = 0; - gUnknown_202F308.f2 = 0xE; + gUnknown_202F308.count = 1; + gUnknown_202F308.currId = 0; + gUnknown_202F308.width = 0xE; gUnknown_202F308.f3 = 0; ASM_MATCH_TRICK(r7); @@ -1261,7 +1261,7 @@ void sub_806806C(PokemonStruct1 *a0) spTxtStruct.id[0].height = 0xE; spTxtStruct.id[0].unk10 = 0x12; spTxtStruct.id[0].unk12 = 2; - spTxtStruct.id[0].unk14 = &gUnknown_202F308; + spTxtStruct.id[0].header = &gUnknown_202F308; spTxtStruct.id[1].type = WINDOW_TYPE_NORMAL; spTxtStruct.id[2].type = WINDOW_TYPE_NORMAL; spTxtStruct.id[3].type = WINDOW_TYPE_NORMAL; @@ -1275,9 +1275,9 @@ void sub_806806C(PokemonStruct1 *a0) bool32 loopBreak = FALSE; s32 spF8[4] = {2, 3, 4, 5}; - gUnknown_202F308.f0 = 4; - gUnknown_202F308.f1 = r7; - gUnknown_202F308.f2 = 10; + gUnknown_202F308.count = 4; + gUnknown_202F308.currId = r7; + gUnknown_202F308.width = 10; gUnknown_202F308.f3 = 0; gDungeonMenu.unk1E = r7; diff --git a/src/code_8072F3C.c b/src/code_8072F3C.c index 00b9a3d1e..17ff7d44d 100644 --- a/src/code_8072F3C.c +++ b/src/code_8072F3C.c @@ -84,7 +84,7 @@ u32 sub_802F73C(u32 r0, DungeonPos *r1, u32 r2, u8 r3) else gUnknown_203B314->sBC.s0.windows.id[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E0714; - gUnknown_203B314->sBC.s0.unk38->unk14 = &gUnknown_203B314->sBC.unk9C; + gUnknown_203B314->sBC.s0.unk38->header = &gUnknown_203B314->sBC.unk9C; if (r1 != 0) gUnknown_203B314->sBC.s0.windows.id[gUnknown_203B314->sBC.s0.unk34].pos = *r1; @@ -179,9 +179,9 @@ void sub_802F974(void) void sub_802F9C0(void) { - gUnknown_203B314->sBC.unk9C.f0 = 1; - gUnknown_203B314->sBC.unk9C.f1 = 0; - gUnknown_203B314->sBC.unk9C.f2 = 8; + gUnknown_203B314->sBC.unk9C.count = 1; + gUnknown_203B314->sBC.unk9C.currId = 0; + gUnknown_203B314->sBC.unk9C.width = 8; gUnknown_203B314->sBC.unk9C.f3 = 0; SUB_80095E4_CALL(gUnknown_203B314->sBC.s0); @@ -199,7 +199,7 @@ void sub_802FA50(void) CallPrepareTextbox_8008C54(gUnknown_203B314->sBC.s0.unk34); sub_80073B8(gUnknown_203B314->sBC.s0.unk34); PrintStringOnWindow(10,0,gUnknown_80E0744,gUnknown_203B314->sBC.s0.unk34,0); - sub_8012BC4(gUnknown_203B314->sBC.unk9C.f2 * 8 + 4,0,gUnknown_203B314->sBC.s0.input.unk1E + 1,2,7,gUnknown_203B314->sBC.s0.unk34); + sub_8012BC4(gUnknown_203B314->sBC.unk9C.width * 8 + 4,0,gUnknown_203B314->sBC.s0.input.unk1E + 1,2,7,gUnknown_203B314->sBC.s0.unk34); if (gUnknown_203B314->unkB8 != 0) { for(counter = 0; counter < gUnknown_203B314->sBC.s0.input.unk1A; counter++) { diff --git a/src/dungeon_menu_items.c b/src/dungeon_menu_items.c index 8144b4bcd..6d83fdc1e 100644 --- a/src/dungeon_menu_items.c +++ b/src/dungeon_menu_items.c @@ -131,7 +131,7 @@ bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1) .width = 0x12, .height = 0x10, .unk10 = 0x10, - .unk14 = &header, + .header = &header, }, WINDOW_DUMMY, WINDOW_DUMMY, WINDOW_DUMMY }, @@ -393,7 +393,7 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, b .height = 2, .unk10 = 2, .unk12 = 0, - .unk14 = NULL, + .header = NULL, }; u8 txtBuff[80]; EntityInfo *a1Info; @@ -414,7 +414,7 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, b case 1: windows->id[0].unk10 = 0x10; windows->id[0].height = 0x10; - a5->f2 = 0xC; + a5->width = 0xC; gDungeonMenu.firstEntryY = 0x10; gDungeonMenu.unk1C = 0xA; gDungeon->unk181e8.unk18212 = 1; @@ -422,7 +422,7 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, b case 2: windows->id[0].unk10 = 4; windows->id[0].height = 4; - a5->f2 = 6; + a5->width = 6; gDungeonMenu.firstEntryY = 0x12; gDungeonMenu.unk1C = 1; break; @@ -430,7 +430,7 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, b default: windows->id[0].unk10 = 4; windows->id[0].height = 4; - a5->f2 = 0xC; + a5->width = 0xC; gDungeonMenu.firstEntryY = 0x12; gDungeonMenu.unk1C = 1; break; @@ -561,8 +561,8 @@ static s32 sub_8060800(WindowHeader *a0, s32 a1) } if (a0 != NULL) { - a0->f0 = r2; - a0->f1 = r3; + a0->count = r2; + a0->currId = r3; a0->f3 = 0; } diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index 8f3c22f9b..725a4c135 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -202,7 +202,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) .height = 16, .unk10 = 16, .unk12 = 0, - .unk14 = &header, + .header = &header, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -430,8 +430,8 @@ void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *wi s32 i, movesCount; WindowTemplate windowNew = gUnknown_8106CAC; - header->f0 = arg7; - header->f1 = arg6; + header->count = arg7; + header->currId = arg6; header->f3 = 0; movesCount = 0; @@ -454,7 +454,7 @@ void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *wi sub_801317C(&gDungeonMenu.unk28); windows->id[0].height = windows->id[0].unk10 = sub_80095E4(4, 0xC) + 2; - header->f2 = 13; + header->width = 13; windows->id[0].pos.x = 2; windows->id[1] = windows->id[3]; windows->id[2] = windowNew; @@ -609,7 +609,7 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) s32 i, count, currId; sub_80140B4(&windows); - windows.id[0].unk14 = &header; + windows.id[0].header = &header; count = 1; for (i = a1 + 1; i < a2; i++) { @@ -625,9 +625,9 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) s32 statusesCount; s32 inputAction = 0; - header.f0 = count; - header.f1 = currId; - header.f2 = 12; + header.count = count; + header.currId = currId; + header.width = 12; header.f3 = 0; gDungeonMenu.unk1E = currId; diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index c4690f68f..be1caa545 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -188,7 +188,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) .height = 16, .unk10 = 16, .unk12 = 0, - .unk14 = &sTeamWindowHeader, + .header = &sTeamWindowHeader, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -359,8 +359,8 @@ static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, WindowTemp a0->unk14[i] = 0; } - sTeamWindowHeader.f0 = 1; - sTeamWindowHeader.f1 = 0; + sTeamWindowHeader.count = 1; + sTeamWindowHeader.currId = 0; sTeamWindowHeader.f3 = 0; gDungeonMenu.menuIndex = gTeamMenuChosenId; gDungeonMenu.unk1A = count; @@ -380,7 +380,7 @@ static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, WindowTemp } windows->id[0].unk10 = r0; windows->id[0].height = r0; - sTeamWindowHeader.f2 = 8; + sTeamWindowHeader.width = 8; if (a2) { windows->id[1] = windows->id[3]; } @@ -520,7 +520,7 @@ void ShowDungeonTacticsMenu(ActionContainer *a0) .height = 14, .unk10 = 18, .unk12 = 2, - .unk14 = &sTeamWindowHeader, + .header = &sTeamWindowHeader, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -542,9 +542,9 @@ void ShowDungeonTacticsMenu(ActionContainer *a0) bool32 addCursor = TRUE; bool32 loopBreak = FALSE; - sTeamWindowHeader.f0 = 1; - sTeamWindowHeader.f1 = 0; - sTeamWindowHeader.f2 = 10; + sTeamWindowHeader.count = 1; + sTeamWindowHeader.currId = 0; + sTeamWindowHeader.width = 10; sTeamWindowHeader.f3 = 0; DungeonShowWindows(&windows, 1); PrintMonTactics(scrollFirstId, tacticIds, monInfo, 0); @@ -755,7 +755,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) .height = 14, .unk10 = 18, .unk12 = 2, - .unk14 = &sTeamWindowHeader, + .header = &sTeamWindowHeader, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -812,9 +812,9 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) bool8 addCursorSprite = TRUE; Window *unkTxtStr1Ptr = &gWindows[0]; - sTeamWindowHeader.f0 = totalSubWindows; - sTeamWindowHeader.f1 = currSubWindowId; - sTeamWindowHeader.f2 = 10; + sTeamWindowHeader.count = totalSubWindows; + sTeamWindowHeader.currId = currSubWindowId; + sTeamWindowHeader.width = 10; sTeamWindowHeader.f3 = 0; DungeonShowWindows(&windows, TRUE); sub_8069844(&unkMonStruct, entity); @@ -897,7 +897,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) } DungeonRunFrameActions(0x1C); - if (sTeamWindowHeader.f0 > 1 && !sub_80048C8()) { + if (sTeamWindowHeader.count > 1 && !sub_80048C8()) { if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { PlayDungeonCursorSE(0); currSubWindowId++; @@ -1303,10 +1303,10 @@ static void ShowIqDescriptionWindow(u8 iqSkillId) sub_801317C(&menuSub); sub_80140B4(&windows); - windows.id[0].unk14 = &header; - header.f0 = 1; - header.f1 = 0; - header.f2 = 16; + windows.id[0].header = &header; + header.count = 1; + header.currId = 0; + header.width = 16; header.f3 = 0; DungeonShowWindows(&windows, TRUE); sub_80073B8(0); @@ -1356,10 +1356,10 @@ static void ShowTacticDescriptionWindow(u8 tacticId) sub_801317C(&menuSub); sub_80140B4(&windows); - windows.id[0].unk14 = &header; - header.f0 = 1; - header.f1 = 0; - header.f2 = 16; + windows.id[0].header = &header; + header.count = 1; + header.currId = 0; + header.width = 16; header.f3 = 0; DungeonShowWindows(&windows, TRUE); sub_80073B8(0); @@ -1410,7 +1410,7 @@ static void ShowStatusInfoWindow(s32 statusId) .height = 12, .unk10 = 12, .unk12 = 0, - .unk14 = &header, + .header = &header, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -1419,9 +1419,9 @@ static void ShowStatusInfoWindow(s32 statusId) }; sub_801317C(&menuSub); - header.f0 = 1; - header.f1 = 0; - header.f2 = 16; + header.count = 1; + header.currId = 0; + header.width = 16; header.f3 = 0; DungeonShowWindows(&windows, TRUE); sub_80073B8(0); @@ -1455,7 +1455,7 @@ static const WindowTemplate sMovesSubMenu = { .height = 8, .unk10 = 8, .unk12 = 0, - .unk14 = &sBottomWindowHeader, + .header = &sBottomWindowHeader, }; static const WindowTemplate sItemSubMenu = { .type = WINDOW_TYPE_WITH_HEADER, @@ -1464,7 +1464,7 @@ static const WindowTemplate sItemSubMenu = { .height = 4, .unk10 = 4, .unk12 = 0, - .unk14 = &sBottomWindowHeader, + .header = &sBottomWindowHeader, }; Entity *ShowDungeonToWhichMonMenu(s32 *teamId, s32 caseId) @@ -1479,7 +1479,7 @@ Entity *ShowDungeonToWhichMonMenu(s32 *teamId, s32 caseId) .height = 16, .unk10 = 16, .unk12 = 0, - .unk14 = &sTeamWindowHeader, + .header = &sTeamWindowHeader, }, [1] = { .type = WINDOW_TYPE_NORMAL, @@ -1488,7 +1488,7 @@ Entity *ShowDungeonToWhichMonMenu(s32 *teamId, s32 caseId) .height = 2, .unk10 = 2, .unk12 = 0, - .unk14 = NULL, + .header = NULL, }, [2] = WINDOW_DUMMY, [3] = WINDOW_DUMMY, diff --git a/src/friend_areas_map_util.c b/src/friend_areas_map_util.c index fd167d0a8..548afda74 100644 --- a/src/friend_areas_map_util.c +++ b/src/friend_areas_map_util.c @@ -303,7 +303,7 @@ void FriendAreasMap_PrintAvailableSubAreas(void) .width = 21, .height = 2, .unk10 = 2, - .unk14 = &header, + .header = &header, }, [1] = WINDOW_DUMMY, [2] = WINDOW_DUMMY, @@ -320,9 +320,9 @@ void FriendAreasMap_PrintAvailableSubAreas(void) } gFriendAreasMapPtr->displayedAreasCount = count; - header.f0 = 1; - header.f1 = 0; - header.f2 = 18; + header.count = 1; + header.currId = 0; + header.width = 18; header.f3 = 0; menuInput->menuIndex = 0; menuInput->unk1A = count; diff --git a/src/hints_menu2.c b/src/hints_menu2.c index bc127ac88..52b2496d7 100644 --- a/src/hints_menu2.c +++ b/src/hints_menu2.c @@ -25,7 +25,7 @@ bool8 CreateHintDisplayScreen(u32 index) sUnknown_203B268->s0.unk38 = &sUnknown_203B268->s0.windows.id[0]; RestoreUnkTextStruct_8006518(&sUnknown_203B268->s0.windows); sUnknown_203B268->s0.windows.id[sUnknown_203B268->s0.unk34] = sUnknown_80DC0FC; - sUnknown_203B268->s0.unk38->unk14 = &sUnknown_203B268->unk9C; + sUnknown_203B268->s0.unk38->header = &sUnknown_203B268->unk9C; ResetUnusedInputStruct(); ShowWindows(&sUnknown_203B268->s0.windows, TRUE, TRUE); sub_8013818(&sUnknown_203B268->s0.input, 5, 1, sUnknown_203B268->s0.unk34); @@ -72,9 +72,9 @@ void DestroyHintDisplayScreen(void) static void sub_801E76C(void) { - sUnknown_203B268->unk9C.f0 = sUnknown_203B268->s0.input.unk20; - sUnknown_203B268->unk9C.f1 = sUnknown_203B268->s0.input.unk1E; - sUnknown_203B268->unk9C.f2 = 15; + sUnknown_203B268->unk9C.count = sUnknown_203B268->s0.input.unk20; + sUnknown_203B268->unk9C.currId = sUnknown_203B268->s0.input.unk1E; + sUnknown_203B268->unk9C.width = 15; sUnknown_203B268->unk9C.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&sUnknown_203B268->s0.windows, TRUE, TRUE); diff --git a/src/iq_skill_list_menu.c b/src/iq_skill_list_menu.c index b289a5cf6..9b74c99f2 100644 --- a/src/iq_skill_list_menu.c +++ b/src/iq_skill_list_menu.c @@ -33,7 +33,7 @@ bool8 CreateIQSkillListMenu(s16 species, u32 index, u32 a2) sIQSkillListMenu->s24.s0.unk38 = &sIQSkillListMenu->s24.s0.windows.id[index]; RestoreUnkTextStruct_8006518(&sIQSkillListMenu->s24.s0.windows); sIQSkillListMenu->s24.s0.windows.id[sIQSkillListMenu->s24.s0.unk34] = sUnknown_80DBDF0; - sIQSkillListMenu->s24.s0.unk38->unk14 = &sIQSkillListMenu->s24.unk9C; + sIQSkillListMenu->s24.s0.unk38->header = &sIQSkillListMenu->s24.unk9C; sub_8012D08(sIQSkillListMenu->s24.s0.unk38, a2); ResetUnusedInputStruct(); ShowWindows(&sIQSkillListMenu->s24.s0.windows, TRUE, TRUE); @@ -101,9 +101,9 @@ void CleanIQSkillListMenu(void) static void sub_801C440(void) { - sIQSkillListMenu->s24.unk9C.f0 = sIQSkillListMenu->s24.s0.input.unk20; - sIQSkillListMenu->s24.unk9C.f1 = sIQSkillListMenu->s24.s0.input.unk1E; - sIQSkillListMenu->s24.unk9C.f2 = 10; + sIQSkillListMenu->s24.unk9C.count = sIQSkillListMenu->s24.s0.input.unk20; + sIQSkillListMenu->s24.unk9C.currId = sIQSkillListMenu->s24.s0.input.unk1E; + sIQSkillListMenu->s24.unk9C.width = 10; sIQSkillListMenu->s24.unk9C.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&sIQSkillListMenu->s24.s0.windows, TRUE, TRUE); @@ -126,7 +126,7 @@ void BuildIQSkillList(void) PrintStringOnWindow(x2, 0, sIQSkills, sIQSkillListMenu->s24.s0.unk34, 0); x += 4; - x2 = x + sIQSkillListMenu->s24.unk9C.f2 * 8; + x2 = x + sIQSkillListMenu->s24.unk9C.width * 8; sub_8012BC4(x2, 0, sIQSkillListMenu->s24.s0.input.unk1E + 1, 1, 7, sIQSkillListMenu->s24.s0.unk34); for (counter = 0; counter < sIQSkillListMenu->s24.s0.input.unk1A; counter++) { diff --git a/src/kecleon_bros2.c b/src/kecleon_bros2.c index ffe7467e5..eef49dd1a 100644 --- a/src/kecleon_bros2.c +++ b/src/kecleon_bros2.c @@ -28,7 +28,7 @@ bool8 sub_8019E40(u32 r0) gUnknown_203B214->s0.unk38 = &gUnknown_203B214->s0.windows.id[gUnknown_203B214->s0.unk34]; RestoreUnkTextStruct_8006518(&gUnknown_203B214->s0.windows); gUnknown_203B214->s0.windows.id[gUnknown_203B214->s0.unk34] = sUnknown_80DB8CC; - gUnknown_203B214->s0.unk38->unk14 = &gUnknown_203B214->unk9C; + gUnknown_203B214->s0.unk38->header = &gUnknown_203B214->unk9C; ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B214->s0.windows, TRUE, TRUE); sub_8013818(&gUnknown_203B214->s0.input, CountKecleonShopItems(), 10, r0); @@ -107,9 +107,9 @@ void sub_801A010(void) static void sub_801A064(void) { - gUnknown_203B214->unk9C.f0 = gUnknown_203B214->s0.input.unk20; - gUnknown_203B214->unk9C.f1 = gUnknown_203B214->s0.input.unk1E; - gUnknown_203B214->unk9C.f2 = 10; + gUnknown_203B214->unk9C.count = gUnknown_203B214->s0.input.unk20; + gUnknown_203B214->unk9C.currId = gUnknown_203B214->s0.input.unk1E; + gUnknown_203B214->unk9C.width = 10; gUnknown_203B214->unk9C.f3 = 0; SUB_80095E4_CALL(gUnknown_203B214->s0); diff --git a/src/kecleon_bros3.c b/src/kecleon_bros3.c index af8b70663..78fb7a7d9 100644 --- a/src/kecleon_bros3.c +++ b/src/kecleon_bros3.c @@ -28,7 +28,7 @@ u8 sub_801A20C(u32 r0) gUnknown_203B21C->s0.unk38 = &gUnknown_203B21C->s0.windows.id[gUnknown_203B21C->s0.unk34]; RestoreUnkTextStruct_8006518(&gUnknown_203B21C->s0.windows); gUnknown_203B21C->s0.windows.id[gUnknown_203B21C->s0.unk34] = sUnknown_80DB914; - gUnknown_203B21C->s0.unk38->unk14 = &gUnknown_203B21C->unk9C; + gUnknown_203B21C->s0.unk38->header = &gUnknown_203B21C->unk9C; ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B21C->s0.windows, TRUE, TRUE); sub_8013818(&gUnknown_203B21C->s0.input, CountKecleonWareItems(), 10, r0); @@ -108,9 +108,9 @@ void sub_801A3DC(void) static void sub_801A430(void) { - gUnknown_203B21C->unk9C.f0 = gUnknown_203B21C->s0.input.unk20; - gUnknown_203B21C->unk9C.f1 = gUnknown_203B21C->s0.input.unk1E; - gUnknown_203B21C->unk9C.f2 = 10; + gUnknown_203B21C->unk9C.count = gUnknown_203B21C->s0.input.unk20; + gUnknown_203B21C->unk9C.currId = gUnknown_203B21C->s0.input.unk1E; + gUnknown_203B21C->unk9C.width = 10; gUnknown_203B21C->unk9C.f3 = 0; SUB_80095E4_CALL(gUnknown_203B21C->s0); diff --git a/src/kecleon_bros4.c b/src/kecleon_bros4.c index e7d83f4dd..6a50ff9a5 100644 --- a/src/kecleon_bros4.c +++ b/src/kecleon_bros4.c @@ -38,7 +38,7 @@ bool8 sub_801A5D8(u32 param_1, s32 param_2, DungeonPos *param_3, u32 param_4) gUnknown_203B224->unk54.s0.unk38 = &gUnknown_203B224->unk54.s0.windows.id[param_2]; RestoreUnkTextStruct_8006518(&gUnknown_203B224->unk54.s0.windows); gUnknown_203B224->unk54.s0.windows.id[gUnknown_203B224->unk54.s0.unk34] = sUnknown_80DB95C; - gUnknown_203B224->unk54.s0.unk38->unk14 = &gUnknown_203B224->unk54.unk9C; + gUnknown_203B224->unk54.s0.unk38->header = &gUnknown_203B224->unk54.unk9C; if (param_3 != NULL) gUnknown_203B224->unk54.s0.windows.id[gUnknown_203B224->unk54.s0.unk34].pos = *param_3; @@ -173,9 +173,9 @@ void sub_801A928(void) static void sub_801A998(void) { - gUnknown_203B224->unk54.unk9C.f0 = gUnknown_203B224->unk54.s0.input.unk20; - gUnknown_203B224->unk54.unk9C.f1 = gUnknown_203B224->unk54.s0.input.unk1E; - gUnknown_203B224->unk54.unk9C.f2 = 11; + gUnknown_203B224->unk54.unk9C.count = gUnknown_203B224->unk54.s0.input.unk20; + gUnknown_203B224->unk54.unk9C.currId = gUnknown_203B224->unk54.s0.input.unk1E; + gUnknown_203B224->unk54.unk9C.width = 11; gUnknown_203B224->unk54.unk9C.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B224->unk54.s0.windows, TRUE, TRUE); diff --git a/src/makuhita_dojo2.c b/src/makuhita_dojo2.c index de517e53b..09ccdb020 100644 --- a/src/makuhita_dojo2.c +++ b/src/makuhita_dojo2.c @@ -34,7 +34,7 @@ bool8 sub_80302E8(s32 param_1, DungeonPos *param_2, u32 param_3) sMakuhitaDojoWork2->s30.s0.unk38 = &sMakuhitaDojoWork2->s30.s0.windows.id[param_1]; RestoreUnkTextStruct_8006518(&sMakuhitaDojoWork2->s30.s0.windows); sMakuhitaDojoWork2->s30.s0.windows.id[sMakuhitaDojoWork2->s30.s0.unk34] = sUnknown_80E0804; - sMakuhitaDojoWork2->s30.s0.unk38->unk14 = &sMakuhitaDojoWork2->s30.unk9C; + sMakuhitaDojoWork2->s30.s0.unk38->header = &sMakuhitaDojoWork2->s30.unk9C; if (param_2 != NULL) sMakuhitaDojoWork2->s30.s0.windows.id[sMakuhitaDojoWork2->s30.s0.unk34].pos = *param_2; @@ -101,9 +101,9 @@ void sub_8030480(void) static void sub_80304C8(void) { - sMakuhitaDojoWork2->s30.unk9C.f0 = 1; - sMakuhitaDojoWork2->s30.unk9C.f1 = 0; - sMakuhitaDojoWork2->s30.unk9C.f2 = 8; + sMakuhitaDojoWork2->s30.unk9C.count = 1; + sMakuhitaDojoWork2->s30.unk9C.currId = 0; + sMakuhitaDojoWork2->s30.unk9C.width = 8; sMakuhitaDojoWork2->s30.unk9C.f3 = 0; SUB_80095E4_CALL(sMakuhitaDojoWork2->s30.s0); @@ -122,7 +122,7 @@ static void MakuhitaDojo_DrawCourseList(void) CallPrepareTextbox_8008C54(sMakuhitaDojoWork2->s30.s0.unk34); sub_80073B8(sMakuhitaDojoWork2->s30.s0.unk34); PrintStringOnWindow(10, 0, sCourses, sMakuhitaDojoWork2->s30.s0.unk34, 0); - sub_8012BC4((sMakuhitaDojoWork2->s30.unk9C.f2 * 8) + 4, 0, sMakuhitaDojoWork2->s30.s0.input.unk1E + 1, 2, 7, sMakuhitaDojoWork2->s30.s0.unk34); + sub_8012BC4((sMakuhitaDojoWork2->s30.unk9C.width * 8) + 4, 0, sMakuhitaDojoWork2->s30.s0.input.unk1E + 1, 2, 7, sMakuhitaDojoWork2->s30.s0.unk34); for (i = 0; i < sMakuhitaDojoWork2->s30.s0.input.unk1A; i++) { iVar6 = sMakuhitaDojoWork2->unk0[sMakuhitaDojoWork2->s30.s0.input.unk1E * sMakuhitaDojoWork2->s30.s0.input.unk1C + i]; diff --git a/src/menu_input.c b/src/menu_input.c index 4eedb7408..91603ba4b 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -400,7 +400,7 @@ void sub_8012EBC(MenuStruct *param_1) ptr_text2 = &textStack.id[index]; RestoreUnkTextStruct_8006518(&textStack); x = sub_8008ED0(param_1->unk0); - PrintFormattedStringOnWindow(((ptr_text2->unk14->f2 * 8 - x) / 2) + 8, 0, param_1->unk0, param_1->index, 0); + PrintFormattedStringOnWindow(((ptr_text2->header->width * 8 - x) / 2) + 8, 0, param_1->unk0, param_1->index, 0); } colorArray = param_1->menuTextColorArray; diff --git a/src/personality_test2.c b/src/personality_test2.c index b40f611e8..c82d295fe 100644 --- a/src/personality_test2.c +++ b/src/personality_test2.c @@ -40,11 +40,11 @@ void CreatePartnerSelectionMenu(s16 starterID) gUnknown_203B404->s18.s0.windows.id[2] = gUnknown_80F4278; gUnknown_203B404->s18.s0.windows.id[3] = gUnknown_80F4278; - gUnknown_203B404->s18.s0.unk38->unk14 = &gUnknown_203B404->s18.unk9C; + gUnknown_203B404->s18.s0.unk38->header = &gUnknown_203B404->s18.unk9C; - gUnknown_203B404->s18.unk9C.f0 = 1; - gUnknown_203B404->s18.unk9C.f1 = 0; - gUnknown_203B404->s18.unk9C.f2 = 6; + gUnknown_203B404->s18.unk9C.count = 1; + gUnknown_203B404->s18.unk9C.currId = 0; + gUnknown_203B404->s18.unk9C.width = 6; gUnknown_203B404->s18.unk9C.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B404->s18.s0.windows, TRUE, TRUE); diff --git a/src/pokemon_news1.c b/src/pokemon_news1.c index 92770b943..037a09d9f 100644 --- a/src/pokemon_news1.c +++ b/src/pokemon_news1.c @@ -136,7 +136,7 @@ static void CreatePKMNNewsMenu(void) sub_80073B8(sUnknown_203B2CC->s38.unk34); PrintStringOnWindow(10, 0, sNewsList, sUnknown_203B2CC->s38.unk34, 0); - sub_8012BC4((sUnknown_80DFBE8.f2 * 8) + 4, 0, sUnknown_203B2CC->s38.input.unk1E + 1, 2, 7, sUnknown_203B2CC->s38.unk34); + sub_8012BC4((sUnknown_80DFBE8.width * 8) + 4, 0, sUnknown_203B2CC->s38.input.unk1E + 1, 2, 7, sUnknown_203B2CC->s38.unk34); for (index = 0; index < sUnknown_203B2CC->s38.input.unk1A; index++) { y = GetMenuEntryYCoord(&sUnknown_203B2CC->s38.input, index); diff --git a/src/pokemon_news3.c b/src/pokemon_news3.c index ee129ad59..655690036 100644 --- a/src/pokemon_news3.c +++ b/src/pokemon_news3.c @@ -38,7 +38,7 @@ bool8 sub_802BD14(s32 a0, DungeonPos *a1, u32 a2) sUnknown_203B2D8->unk4.s0.unk38 = &sUnknown_203B2D8->unk4.s0.windows.id[a0]; RestoreUnkTextStruct_8006518(&sUnknown_203B2D8->unk4.s0.windows); sUnknown_203B2D8->unk4.s0.windows.id[sUnknown_203B2D8->unk4.s0.unk34] = sUnknown_80DFC74; - sUnknown_203B2D8->unk4.s0.unk38->unk14 = &sUnknown_203B2D8->unk4.unk9C; + sUnknown_203B2D8->unk4.s0.unk38->header = &sUnknown_203B2D8->unk4.unk9C; if (a1 != NULL) sUnknown_203B2D8->unk4.s0.windows.id[sUnknown_203B2D8->unk4.s0.unk34].pos = *a1; @@ -114,9 +114,9 @@ void sub_802BEDC(void) static void sub_802BF30(void) { - sUnknown_203B2D8->unk4.unk9C.f0 = 1; - sUnknown_203B2D8->unk4.unk9C.f1 = 0; - sUnknown_203B2D8->unk4.unk9C.f2 = 12; + sUnknown_203B2D8->unk4.unk9C.count = 1; + sUnknown_203B2D8->unk4.unk9C.currId = 0; + sUnknown_203B2D8->unk4.unk9C.width = 12; sUnknown_203B2D8->unk4.unk9C.f3 = 0; SUB_8009614_CALL(sUnknown_203B2D8->unk4.s0); } diff --git a/src/text.c b/src/text.c index 9ee4c9fee..8e06ef5e2 100644 --- a/src/text.c +++ b/src/text.c @@ -319,7 +319,7 @@ UNUSED static void nullsub_152(void) void RestoreUnkTextStruct_8006518(WindowTemplates *unkData) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_WINDOWS; i++) unkData->id[i] = sSavedWindows.id[i]; } @@ -387,7 +387,7 @@ static void AddWindow(Window *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, const Windo if (t1->unkC == 6) { uVar1 = a6 ? t1->unk14 : 0; - sub_8006E94(t1, temp, uVar1, winTemplate->unk14, a3); + sub_8006E94(t1, temp, uVar1, winTemplate->header, a3); temp = iVar5 + 2; uVar1 = a6 ? t1->unk14 + t1->unk4 * (winTemplate->unk12 + 2) : 0; @@ -2911,11 +2911,11 @@ static void sub_80089AC(const WindowTemplate *r4, DungeonPos *r5_Str) s32 var_24 = ((r4->pos.x + r5_Str->x + r4->width) * 8) + 5; s32 r8 = ((r4->pos.y + r5_Str->y + r4->height) * 8) + 5; s32 r12 = ((r4->pos.x + r5_Str->x) * 8) + 3; - const WindowHeader *r2 = r4->unk14; - s32 tmp = r2->f2 - 1; - s32 r10 = (((tmp + r2->f0 + 2) * 8) + r12) - 4; - s32 r4 = r9 + ((r2->f1 + 1) * 8); - s32 r7 = (r4 + ((r2->f2 + 2) * 8)) - 4; + const WindowHeader *r2 = r4->header; + s32 tmp = r2->width - 1; + s32 r10 = (((tmp + r2->count + 2) * 8) + r12) - 4; + s32 r4 = r9 + ((r2->currId + 1) * 8); + s32 r7 = (r4 + ((r2->width + 2) * 8)) - 4; if (r5 < 0) r5 = 0; diff --git a/src/wigglytuff_shop1.c b/src/wigglytuff_shop1.c index bf89f2253..858cbd1b1 100644 --- a/src/wigglytuff_shop1.c +++ b/src/wigglytuff_shop1.c @@ -33,7 +33,7 @@ bool8 sub_80211AC(u32 mode, u32 a1) sWigglytuffShop1Work->s40.s0.unk38 = &sWigglytuffShop1Work->s40.s0.windows.id[sWigglytuffShop1Work->s40.s0.unk34]; RestoreUnkTextStruct_8006518(&sWigglytuffShop1Work->s40.s0.windows); sWigglytuffShop1Work->s40.s0.windows.id[sWigglytuffShop1Work->s40.s0.unk34] = sUnknown_80DC47C; - sWigglytuffShop1Work->s40.s0.unk38->unk14 = &sWigglytuffShop1Work->s40.unk9C; + sWigglytuffShop1Work->s40.s0.unk38->header = &sWigglytuffShop1Work->s40.unk9C; ResetUnusedInputStruct(); ShowWindows(&sWigglytuffShop1Work->s40.s0.windows, TRUE, TRUE); sub_8013818(&sWigglytuffShop1Work->s40.s0.input, sub_8021664(), 10, a1); @@ -113,9 +113,9 @@ void sub_80213A0(void) static void sub_8021410(void) { - sWigglytuffShop1Work->s40.unk9C.f0 = 1; - sWigglytuffShop1Work->s40.unk9C.f1 = 0; - sWigglytuffShop1Work->s40.unk9C.f2 = 12; + sWigglytuffShop1Work->s40.unk9C.count = 1; + sWigglytuffShop1Work->s40.unk9C.currId = 0; + sWigglytuffShop1Work->s40.unk9C.width = 12; sWigglytuffShop1Work->s40.unk9C.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&sWigglytuffShop1Work->s40.s0.windows, TRUE, TRUE); @@ -134,7 +134,7 @@ void sub_8021494(void) sub_80073B8(sWigglytuffShop1Work->s40.s0.unk34); PrintStringOnWindow(10, 0, sFriendAreas, sWigglytuffShop1Work->s40.s0.unk34, 0); - sub_8012BC4((sWigglytuffShop1Work->s40.unk9C.f2 * 8) + 4, 0, sWigglytuffShop1Work->s40.s0.input.unk1E + 1, 1, 7, sWigglytuffShop1Work->s40.s0.unk34); + sub_8012BC4((sWigglytuffShop1Work->s40.unk9C.width * 8) + 4, 0, sWigglytuffShop1Work->s40.s0.input.unk1E + 1, 1, 7, sWigglytuffShop1Work->s40.s0.unk34); for (i = 0; i < sWigglytuffShop1Work->s40.s0.input.unk1A; i++) { friendAreaIndex = sWigglytuffShop1Work->friendAreas[(sWigglytuffShop1Work->s40.s0.input.unk1E * sWigglytuffShop1Work->s40.s0.input.unk1C) + i]; diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 3127dd633..e5e8af37e 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -90,7 +90,7 @@ u32 sub_80306A8(u32 wonderMailType, u32 r1, DungeonPos *r2, u32 r3) RestoreUnkTextStruct_8006518(&gUnknown_203B320->s28.s0.windows); gUnknown_203B320->s28.s0.windows.id[gUnknown_203B320->s28.s0.unk34] = gUnknown_80E0854; - gUnknown_203B320->s28.s0.unk38->unk14 = &gUnknown_203B320->s28.unk9C; + gUnknown_203B320->s28.s0.unk38->header = &gUnknown_203B320->s28.unk9C; if (r2 != 0) gUnknown_203B320->s28.s0.windows.id[gUnknown_203B320->s28.s0.unk34].pos = *r2; @@ -169,9 +169,9 @@ u8 *sub_8030894(void) void sub_80308A0(void) { - gUnknown_203B320->s28.unk9C.f0 = gUnknown_203B320->s28.s0.input.unk20; - gUnknown_203B320->s28.unk9C.f1 = gUnknown_203B320->s28.s0.input.unk1E; - gUnknown_203B320->s28.unk9C.f2 = 12; + gUnknown_203B320->s28.unk9C.count = gUnknown_203B320->s28.s0.input.unk20; + gUnknown_203B320->s28.unk9C.currId = gUnknown_203B320->s28.s0.input.unk1E; + gUnknown_203B320->s28.unk9C.width = 12; gUnknown_203B320->s28.unk9C.f3 = 0; ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B320->s28.s0.windows, TRUE, TRUE); @@ -194,7 +194,7 @@ void sub_803092C(void) r5 += 10; PrintStringOnWindow(r5,0,gUnknown_80E086C[gUnknown_203B320->wonderMailType],gUnknown_203B320->s28.s0.unk34,0); r4 += 4; - r5 = r4 + gUnknown_203B320->s28.unk9C.f2 * 8; + r5 = r4 + gUnknown_203B320->s28.unk9C.width * 8; sub_8012BC4(r5,0,gUnknown_203B320->s28.s0.input.unk1E + 1,1,7,gUnknown_203B320->s28.s0.unk34); for (index = 0; index < gUnknown_203B320->s28.s0.input.unk1A; index++) { diff --git a/src/wonder_mail_802C10C.c b/src/wonder_mail_802C10C.c index b37dec5bf..fa8e3b35d 100644 --- a/src/wonder_mail_802C10C.c +++ b/src/wonder_mail_802C10C.c @@ -33,7 +33,7 @@ bool8 sub_802C10C(s32 a0, DungeonPos *a1, s32 a2) RestoreUnkTextStruct_8006518(&gUnknown_203B2E0->unk8.s0.windows); gUnknown_203B2E0->unk8.s0.windows.id[gUnknown_203B2E0->unk8.s0.unk34] = sUnknown_80DFCB4; - gUnknown_203B2E0->unk8.s0.unk38->unk14 = &gUnknown_203B2E0->unk8.unk9C; + gUnknown_203B2E0->unk8.s0.unk38->header = &gUnknown_203B2E0->unk8.unk9C; if (a1 != NULL) gUnknown_203B2E0->unk8.s0.windows.id[gUnknown_203B2E0->unk8.s0.unk34].pos = *a1; @@ -108,9 +108,9 @@ void sub_802C2D4(void) static void sub_802C328(void) { - gUnknown_203B2E0->unk8.unk9C.f0 = gUnknown_203B2E0->unk8.s0.input.unk20; - gUnknown_203B2E0->unk8.unk9C.f1 = gUnknown_203B2E0->unk8.s0.input.unk1E; - gUnknown_203B2E0->unk8.unk9C.f2 = 12; + gUnknown_203B2E0->unk8.unk9C.count = gUnknown_203B2E0->unk8.s0.input.unk20; + gUnknown_203B2E0->unk8.unk9C.currId = gUnknown_203B2E0->unk8.s0.input.unk1E; + gUnknown_203B2E0->unk8.unk9C.width = 12; gUnknown_203B2E0->unk8.unk9C.f3 = 0; SUB_8009614_CALL(gUnknown_203B2E0->unk8.s0); @@ -133,7 +133,7 @@ void DrawPelipperBoardJobMenu(void) PrintStringOnWindow(x, 0, sBulletinBoard, gUnknown_203B2E0->unk8.s0.unk34, 0); iVar4 += 4; - x = iVar4 + (gUnknown_203B2E0->unk8.unk9C.f2 * 8); + x = iVar4 + (gUnknown_203B2E0->unk8.unk9C.width * 8); sub_8012BC4(x, 0, gUnknown_203B2E0->unk8.s0.input.unk1E + 1, 2, 7, gUnknown_203B2E0->unk8.s0.unk34); for (i = 0; i < gUnknown_203B2E0->unk8.s0.input.unk1A; i++) { diff --git a/src/wonder_mail_802C4C8.c b/src/wonder_mail_802C4C8.c index 66d4b380a..ff2627f21 100644 --- a/src/wonder_mail_802C4C8.c +++ b/src/wonder_mail_802C4C8.c @@ -34,7 +34,7 @@ bool8 sub_802C4C8(s32 a0, DungeonPos *a1, u32 a2) RestoreUnkTextStruct_8006518(&gUnknown_203B2E8->unk8.s0.windows); gUnknown_203B2E8->unk8.s0.windows.id[gUnknown_203B2E8->unk8.s0.unk34] = sUnknown_80DFCFC; - gUnknown_203B2E8->unk8.s0.unk38->unk14 = &gUnknown_203B2E8->unk8.unk9C; + gUnknown_203B2E8->unk8.s0.unk38->header = &gUnknown_203B2E8->unk8.unk9C; if (a1 != NULL) gUnknown_203B2E8->unk8.s0.windows.id[gUnknown_203B2E8->unk8.s0.unk34].pos = *a1; @@ -109,9 +109,9 @@ void sub_802C688(void) static void sub_802C6DC(void) { - gUnknown_203B2E8->unk8.unk9C.f0 = gUnknown_203B2E8->unk8.s0.input.unk20; - gUnknown_203B2E8->unk8.unk9C.f1 = gUnknown_203B2E8->unk8.s0.input.unk1E; - gUnknown_203B2E8->unk8.unk9C.f2 = 12; + gUnknown_203B2E8->unk8.unk9C.count = gUnknown_203B2E8->unk8.s0.input.unk20; + gUnknown_203B2E8->unk8.unk9C.currId = gUnknown_203B2E8->unk8.s0.input.unk1E; + gUnknown_203B2E8->unk8.unk9C.width = 12; gUnknown_203B2E8->unk8.unk9C.f3 = 0; SUB_8009614_CALL(gUnknown_203B2E8->unk8.s0); @@ -133,7 +133,7 @@ void DrawJobListMenu(void) PrintStringOnWindow(x, 0, sJobList, gUnknown_203B2E8->unk8.s0.unk34, 0); r4 += 4; - x = r4 + (gUnknown_203B2E8->unk8.unk9C.f2 * 8); + x = r4 + (gUnknown_203B2E8->unk8.unk9C.width * 8); sub_8012BC4(x, 0, gUnknown_203B2E8->unk8.s0.input.unk1E + 1, 2, 7, gUnknown_203B2E8->unk8.s0.unk34); for (i = 0; i < gUnknown_203B2E8->unk8.s0.input.unk1A; i++) { diff --git a/src/wonder_mail_802CDD4.c b/src/wonder_mail_802CDD4.c index ce6a6d4d2..57b794396 100644 --- a/src/wonder_mail_802CDD4.c +++ b/src/wonder_mail_802CDD4.c @@ -28,7 +28,7 @@ bool8 sub_802CDD4(u32 a0) sUnknown_203B2F4->s0.unk38 = &sUnknown_203B2F4->s0.windows.id[sUnknown_203B2F4->s0.unk34]; RestoreUnkTextStruct_8006518(&sUnknown_203B2F4->s0.windows); sUnknown_203B2F4->s0.windows.id[sUnknown_203B2F4->s0.unk34] = sUnknown_80DFDA4; - sUnknown_203B2F4->s0.unk38->unk14 = &sUnknown_203B2F4->unk9C; + sUnknown_203B2F4->s0.unk38->header = &sUnknown_203B2F4->unk9C; sub_8012D34(sUnknown_203B2F4->s0.unk38, 4); ResetUnusedInputStruct(); ShowWindows(&sUnknown_203B2F4->s0.windows, TRUE, TRUE); @@ -91,9 +91,9 @@ void sub_802CF14(void) static void sub_802CF5C(void) { - sUnknown_203B2F4->unk9C.f0 = sUnknown_203B2F4->s0.input.unk20; - sUnknown_203B2F4->unk9C.f1 = sUnknown_203B2F4->s0.input.unk1E; - sUnknown_203B2F4->unk9C.f2 = 12; + sUnknown_203B2F4->unk9C.count = sUnknown_203B2F4->s0.input.unk20; + sUnknown_203B2F4->unk9C.currId = sUnknown_203B2F4->s0.input.unk1E; + sUnknown_203B2F4->unk9C.width = 12; sUnknown_203B2F4->unk9C.f3 = 0; SUB_8009614_CALL(sUnknown_203B2F4->s0); @@ -113,7 +113,7 @@ void sub_802CFD0(void) PrintStringOnWindow(r5, 0, sRescueEvent, sUnknown_203B2F4->s0.unk34, 0); r4 -= 6; - r5 = r4 + (sUnknown_203B2F4->unk9C.f2 * 8); + r5 = r4 + (sUnknown_203B2F4->unk9C.width * 8); sub_8012BC4(r5, 0, sUnknown_203B2F4->s0.input.unk1E + 1, 2, 7, sUnknown_203B2F4->s0.unk34); for (r5 = 0; r5 < sUnknown_203B2F4->s0.input.unk1A; r5++) { From 631c9c34853b52c04c4cc38ec705aa31933da226 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 17:46:34 +0100 Subject: [PATCH 18/31] sub_8063C88 --- asm/code_805D8C8.s | 383 ----------------------------------- include/dungeon_menu_moves.h | 3 + src/dungeon_menu_moves.c | 138 ++++++++++++- src/dungeon_menu_team.c | 2 +- 4 files changed, 141 insertions(+), 385 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 5a653821b..16075ce8a 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -7,389 +7,6 @@ - thumb_func_start ShowStatusDescriptionMenu -ShowStatusDescriptionMenu: - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - ldr r4, _08063A5C - adds r0, r4, 0 - bl sub_80140B4 - ldr r0, _08063A60 - str r0, [r4, 0x14] - adds r0, r4, 0 - movs r1, 0x1 - bl DungeonShowWindows - movs r0, 0 - bl sub_80073B8 - ldr r0, _08063A64 - ldr r1, [r5] - bl strcpy - ldr r2, _08063A68 - movs r4, 0 - str r4, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r2, [r5, 0x4] - str r4, [sp] - movs r0, 0x4 - movs r1, 0x10 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - ldr r0, _08063A6C - strh r4, [r0, 0x1E] - strh r4, [r0, 0x20] - strh r4, [r0, 0xC] - strh r4, [r0, 0xE] - strh r4, [r0, 0x14] - strh r4, [r0, 0x4] - movs r1, 0x10 - strh r1, [r0, 0x6] - str r4, [r0] - strh r4, [r0, 0x18] - strh r4, [r0, 0x1A] - strh r4, [r0, 0x1C] - adds r0, r6, 0 - bl sub_801317C - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08063A5C: .4byte gUnknown_202F278 -_08063A60: .4byte gUnknown_8106CC8 -_08063A64: .4byte gFormatBuffer_Monsters -_08063A68: .4byte gUnknown_8106CCC -_08063A6C: .4byte gDungeonMenu - thumb_func_end ShowStatusDescriptionMenu - - thumb_func_start sub_8063A70 -sub_8063A70: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - ldr r1, _08063B1C - ldr r2, [r1] - ldrb r1, [r0, 0x4] - lsls r1, 2 - ldr r3, _08063B20 - adds r2, r3 - adds r2, r1 - ldr r6, [r2] - ldr r5, [r6, 0x70] - ldrb r0, [r0, 0xC] - lsls r0, 3 - movs r2, 0x8C - lsls r2, 1 - adds r0, r2 - adds r4, r5, r0 - ldrb r1, [r4] - movs r0, 0x8 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - negs r0, r0 - lsrs r0, 31 - mov r8, r0 - ldr r0, _08063B24 - mov r9, r0 - movs r1, 0x1 - mov r12, r1 - adds r2, r5, r2 - movs r7, 0xF7 - movs r3, 0x3 -_08063ABC: - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - cmp r0, 0 - beq _08063ACC - adds r0, r7, 0 - ands r0, r1 - strb r0, [r2] -_08063ACC: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _08063ABC - mov r0, r9 - adds r1, r4, 0 - movs r2, 0 - bl BufferMoveName - mov r3, r8 - cmp r3, 0 - bne _08063AEC - ldrb r1, [r4] - movs r0, 0x8 - orrs r0, r1 - strb r0, [r4] -_08063AEC: - movs r1, 0x8C - lsls r1, 1 - adds r0, r5, r1 - bl unk_FixLinkedMovesSetEnabled4 - ldrb r1, [r4, 0x1] - movs r0, 0x2 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _08063B28 - bl PlaySoundEffect - mov r3, r10 - cmp r3, 0 - beq _08063B42 - mov r0, r8 - cmp r0, 0 - bne _08063B30 - ldr r0, _08063B2C - ldr r1, [r0] - adds r0, r6, 0 - bl LogMessageByIdWithPopupCheckUser - b _08063B3A - .align 2, 0 -_08063B1C: .4byte gDungeon -_08063B20: .4byte 0x0001357c -_08063B24: .4byte gFormatBuffer_Items -_08063B28: .4byte 0x00000133 -_08063B2C: .4byte gUnknown_80F8B40 -_08063B30: - ldr r0, _08063B50 - ldr r1, [r0] - adds r0, r6, 0 - bl LogMessageByIdWithPopupCheckUser -_08063B3A: - movs r0, 0x78 - movs r1, 0x1F - bl sub_803E708 -_08063B42: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08063B50: .4byte gUnknown_80F8B64 - thumb_func_end sub_8063A70 - - thumb_func_start sub_8063B54 -sub_8063B54: - push {r4-r6,lr} - ldr r1, _08063BA4 - ldr r2, [r1] - ldrb r1, [r0, 0x4] - lsls r1, 2 - ldr r3, _08063BA8 - adds r2, r3 - adds r2, r1 - ldr r1, [r2] - ldr r5, [r1, 0x70] - ldrb r4, [r0, 0xC] - lsls r4, 3 - movs r6, 0x8C - lsls r6, 1 - adds r4, r6 - adds r4, r5, r4 - ldr r0, _08063BAC - adds r1, r4, 0 - movs r2, 0 - bl BufferMoveName - ldrb r0, [r4] - movs r1, 0x4 - eors r0, r1 - strb r0, [r4] - adds r5, r6 - adds r0, r5, 0 - bl unk_FixLinkedMovesSetEnabled4 - ldrb r1, [r4, 0x1] - movs r0, 0x2 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _08063BB0 - bl PlaySoundEffect - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08063BA4: .4byte gDungeon -_08063BA8: .4byte 0x0001357c -_08063BAC: .4byte gFormatBuffer_Items -_08063BB0: .4byte 0x00000133 - thumb_func_end sub_8063B54 - - thumb_func_start sub_8063BB4 -sub_8063BB4: - push {r4-r7,lr} - ldr r1, _08063C70 - ldr r2, [r1] - ldrb r1, [r0, 0x4] - lsls r1, 2 - ldr r3, _08063C74 - adds r2, r3 - adds r2, r1 - ldr r1, [r2] - ldr r6, [r1, 0x70] - ldrb r5, [r0, 0xC] - ldr r0, _08063C78 - lsls r4, r5, 3 - movs r7, 0x8C - lsls r7, 1 - adds r1, r4, r7 - adds r1, r6, r1 - movs r2, 0 - bl BufferMoveName - adds r4, r6, r4 - ldr r0, _08063C7C - adds r2, r4, r0 - ldrb r1, [r2] - movs r0, 0x2 - orrs r0, r1 - strb r0, [r2] - movs r3, 0 - adds r5, 0x1 - cmp r5, 0x3 - bgt _08063C2C - lsls r2, r5, 3 - adds r0, r2, r6 - adds r1, r7, 0 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08063C2C - adds r0, r2, r7 - adds r2, r0, r6 - movs r4, 0x2 -_08063C0A: - ldrb r1, [r2] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08063C2C - adds r3, 0x1 - cmp r3, 0x3 - bgt _08063C2C - adds r2, 0x8 - adds r5, 0x1 - cmp r5, 0x3 - bgt _08063C2C - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08063C0A -_08063C2C: - lsls r0, r5, 3 - adds r0, r6 - movs r4, 0x8C - lsls r4, 1 - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08063C42 - movs r5, 0x4 -_08063C42: - cmp r5, 0x3 - bgt _08063C5C - lsls r1, r5, 3 - adds r1, r4 - adds r1, r6, r1 - ldrb r2, [r1] - movs r0, 0x2 - orrs r0, r2 - strb r0, [r1] - ldr r0, _08063C80 - movs r2, 0 - bl BufferMoveName -_08063C5C: - adds r0, r6, r4 - bl unk_FixLinkedMovesSetEnabled4 - ldr r0, _08063C84 - bl PlaySoundEffect - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08063C70: .4byte gDungeon -_08063C74: .4byte 0x0001357c -_08063C78: .4byte gFormatBuffer_Items -_08063C7C: .4byte 0x00000119 -_08063C80: .4byte gFormatBuffer_Items + 0x50 -_08063C84: .4byte 0x00000133 - thumb_func_end sub_8063BB4 - - thumb_func_start sub_8063C88 -sub_8063C88: - push {r4-r7,lr} - adds r4, r0, 0 - movs r7, 0 - adds r5, r1, 0 - lsls r0, r5, 3 - adds r0, r4, r0 - movs r1, 0x8D - lsls r1, 1 - adds r0, r1 - ldrh r0, [r0] - bl DoesMoveCharge - lsls r0, 24 - cmp r0, 0 - beq _08063CAE -_08063CA6: - movs r0, 0 - b _08063CEA -_08063CAA: - movs r7, 0x1 - b _08063CE8 -_08063CAE: - adds r5, 0x1 - movs r6, 0 - lsls r0, r5, 3 - movs r1, 0x8C - lsls r1, 1 - adds r0, r1 - adds r4, r0, r4 -_08063CBC: - ldrh r0, [r4, 0x2] - bl DoesMoveCharge - lsls r0, 24 - cmp r0, 0 - bne _08063CA6 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08063CE8 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08063CAA - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x3 - bgt _08063CE8 - adds r6, 0x1 - cmp r6, 0x3 - ble _08063CBC -_08063CE8: - adds r0, r7, 0 -_08063CEA: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8063C88 thumb_func_start sub_8063CF0 sub_8063CF0: diff --git a/include/dungeon_menu_moves.h b/include/dungeon_menu_moves.h index c7737d876..68c9c7f66 100644 --- a/include/dungeon_menu_moves.h +++ b/include/dungeon_menu_moves.h @@ -2,7 +2,10 @@ #define GUARD_DUNGEON_MENU_MOVES_H #include "structs/dungeon_entity.h" +#include "structs/menu.h" +#include "structs/subStruct_203B240.h" void ShowMovesFromTeamMenu(ActionContainer *a0); +void ShowStatusDescriptionMenu(struct subStruct_203B240 *status, MenuInputStructSub *menuSub); #endif diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index 725a4c135..ca74151f0 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -47,7 +47,6 @@ extern void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern void SetLeaderActionToNothing(u8 a0); extern void sub_80637E8(ActionContainer *a0); extern void sub_8063B54(ActionContainer *a0); -extern void sub_8063BB4(ActionContainer *a0); extern void sub_806752C(ActionContainer *a0); extern void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 a1); extern void sub_8063A70(ActionContainer *a0, bool8 a1); @@ -703,4 +702,141 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) sub_803EAF0(0, 0); } +extern WindowTemplates gUnknown_202F278; +extern const WindowHeader gUnknown_8106CC8; +extern const u8 gUnknown_8106CCC[]; + +void ShowStatusDescriptionMenu(struct subStruct_203B240 *status, MenuInputStructSub *menuSub) +{ + sub_80140B4(&gUnknown_202F278); + gUnknown_202F278.id[0].header = &gUnknown_8106CC8; + DungeonShowWindows(&gUnknown_202F278, TRUE); + sub_80073B8(0); + + strcpy(gFormatBuffer_Monsters[0], status->pokeName); + PrintFormattedStringOnWindow(16, 0, gUnknown_8106CCC, 0, '\0'); + PrintFormattedStringOnWindow(4, 16, status->unk4, 0, '\0'); + sub_80073E0(0); + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk0 = 0; + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1A = 0; + gDungeonMenu.unk1C = 0; + sub_801317C(menuSub); +} + +extern const u8 *const gUnknown_80F8B40; +extern const u8 *const gUnknown_80F8B64; + +void sub_8063A70(ActionContainer *a0, bool8 flagToSet) +{ + s32 i; + Entity *entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + EntityInfo *entInfo = GetEntInfo(entity); + Move *move = &entInfo->moves.moves[a0->actionParameters[1].actionUseIndex]; + bool8 wasSet = MoveFlagSet(move) != 0; + + for (i = 0; i < MAX_MON_MOVES; i++) { + if (MoveFlagExists(&entInfo->moves.moves[i])) { + entInfo->moves.moves[i].moveFlags &= ~(MOVE_FLAG_SET); + } + } + + BufferMoveName(gFormatBuffer_Items[0], move, NULL); + if (!wasSet) { + move->moveFlags |= MOVE_FLAG_SET; + } + unk_FixLinkedMovesSetEnabled4(entInfo->moves.moves); + move->moveFlags2 |= 2; + PlaySoundEffect(0x133); + if (flagToSet) { + if (!wasSet) { + LogMessageByIdWithPopupCheckUser(entity, gUnknown_80F8B40); + } + else { + LogMessageByIdWithPopupCheckUser(entity, gUnknown_80F8B64); + } + sub_803E708(0x78, 0x1F); + } +} + +void sub_8063B54(ActionContainer *a0) +{ + Entity *entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + EntityInfo *entInfo = GetEntInfo(entity); + Move *move = &entInfo->moves.moves[a0->actionParameters[1].actionUseIndex]; + + BufferMoveName(gFormatBuffer_Items[0], move, NULL); + move->moveFlags ^= MOVE_FLAG_ENABLED_FOR_AI; + unk_FixLinkedMovesSetEnabled4(entInfo->moves.moves); + move->moveFlags2 |= 2; + PlaySoundEffect(0x133); +} + +void sub_8063BB4(ActionContainer *a0) +{ + s32 linkedCount; + Entity *entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + EntityInfo *entInfo = GetEntInfo(entity); + s32 id = a0->actionParameters[1].actionUseIndex; + + BufferMoveName(gFormatBuffer_Items[0], &entInfo->moves.moves[id], NULL); + entInfo->moves.moves[id].moveFlags2 |= 2; + linkedCount = 0; + for (id++; id < MAX_MON_MOVES; id++) { + if (!MoveFlagExists(&entInfo->moves.moves[id])) + break; + if (!MoveFlagLinkChain(&entInfo->moves.moves[id])) + break; + if (++linkedCount >= MAX_MON_MOVES) + break; + } + + if (!MoveFlagExists(&entInfo->moves.moves[id])) + id = MAX_MON_MOVES; + + if (id < MAX_MON_MOVES) { + Move *move = &entInfo->moves.moves[id]; + move->moveFlags |= MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN; + BufferMoveName(gFormatBuffer_Items[1], move, NULL); + } + unk_FixLinkedMovesSetEnabled4(entInfo->moves.moves); + PlaySoundEffect(0x133); +} + +bool8 sub_8063C88(EntityInfo *entInfo, s32 a1) +{ + s32 i; + bool8 ret = FALSE; + s32 moveId = a1; + + if (DoesMoveCharge(entInfo->moves.moves[moveId].id)) + return FALSE; + + moveId++; + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &entInfo->moves.moves[moveId]; + + if (DoesMoveCharge(move->id)) + return FALSE; + + if (!MoveFlagExists(move)) + break; + if (!MoveFlagLinkChain(move)) { + ret = TRUE; + break; + } + if (++moveId >= MAX_MON_MOVES) + break; + } + + return ret; +} + // diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index be1caa545..788f01269 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -1,6 +1,7 @@ #include "global.h" #include "globaldata.h" #include "dungeon_menu_team.h" +#include "dungeon_menu_moves.h" #include "dungeon_submenu.h" #include "structs/str_dungeon.h" #include "number_util.h" @@ -126,7 +127,6 @@ extern char* sub_808E4FC(s32 a1); extern char* sub_808E51C(s32 a1); extern void sub_8045C18(u8 *buffer, Item *item); extern bool32 sub_8069D18(DungeonPos *a0, Entity *a1); -extern void ShowStatusDescriptionMenu(struct subStruct_203B240 *strings, MenuInputStructSub *menuSub); extern u8 gUnknown_202EE00; extern Entity *gLeaderPointer; From 90736d6bb27d786d7dea5c0dda6ff0bcaa47e2bf Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Mar 2025 19:36:03 +0100 Subject: [PATCH 19/31] sub_8063E30 --- asm/code_805D8C8.s | 204 --------------------------------------- src/dungeon_menu_moves.c | 78 +++++++++++++++ 2 files changed, 78 insertions(+), 204 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 16075ce8a..32157a0bc 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,210 +6,6 @@ .text - - - thumb_func_start sub_8063CF0 -sub_8063CF0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - ldr r1, _08063D98 - ldr r2, [r1] - ldrb r1, [r0, 0x4] - lsls r1, 2 - ldr r3, _08063D9C - adds r2, r3 - adds r2, r1 - ldr r7, [r2] - ldr r6, [r7, 0x70] - ldrb r5, [r0, 0xC] - movs r0, 0 - mov r8, r0 - ldr r0, _08063DA0 - lsls r4, r5, 3 - movs r1, 0x8C - lsls r1, 1 - mov r9, r1 - adds r1, r4, r1 - adds r1, r6, r1 - movs r2, 0 - bl BufferMoveName - adds r4, r6, r4 - ldr r3, _08063DA4 - adds r2, r4, r3 - ldrb r1, [r2] - movs r0, 0x2 - orrs r0, r1 - strb r0, [r2] - adds r5, 0x1 - movs r3, 0 - cmp r5, 0x3 - bgt _08063D70 - movs r0, 0x2 - mov r12, r0 - lsls r0, r5, 3 - add r0, r9 - adds r2, r0, r6 - movs r4, 0xFD -_08063D4E: - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - cmp r0, 0 - beq _08063D70 - adds r0, r4, 0 - ands r0, r1 - strb r0, [r2] - movs r1, 0x1 - mov r8, r1 - adds r2, 0x8 - adds r5, 0x1 - adds r3, 0x1 - cmp r3, 0x3 - bgt _08063D70 - cmp r5, 0x3 - ble _08063D4E -_08063D70: - movs r2, 0x8C - lsls r2, 1 - adds r0, r6, r2 - bl unk_FixLinkedMovesSetEnabled4 - ldr r0, _08063DA8 - bl PlaySoundEffect - mov r3, r10 - cmp r3, 0 - beq _08063DC2 - mov r0, r8 - cmp r0, 0 - beq _08063DB0 - ldr r0, _08063DAC - ldr r1, [r0] - adds r0, r7, 0 - bl LogMessageByIdWithPopupCheckUser - b _08063DBA - .align 2, 0 -_08063D98: .4byte gDungeon -_08063D9C: .4byte 0x0001357c -_08063DA0: .4byte gFormatBuffer_Items -_08063DA4: .4byte 0x00000119 -_08063DA8: .4byte 0x00000133 -_08063DAC: .4byte gUnknown_80F8B88 -_08063DB0: - ldr r0, _08063DD0 - ldr r1, [r0] - adds r0, r7, 0 - bl LogMessageByIdWithPopupCheckUser -_08063DBA: - movs r0, 0x78 - movs r1, 0x1F - bl sub_803E708 -_08063DC2: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08063DD0: .4byte gUnknown_80F8BB4 - thumb_func_end sub_8063CF0 - - thumb_func_start sub_8063DD4 -sub_8063DD4: - push {r4-r7,lr} - adds r3, r0, 0 - adds r2, r1, 0 - movs r5, 0 - adds r2, 0x1 - movs r4, 0 - cmp r2, 0x3 - bgt _08063E20 - lsls r0, r2, 3 - movs r6, 0x8C - lsls r6, 1 - adds r0, r6 - adds r0, r3, r0 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08063E20 - movs r5, 0x1 - adds r2, 0x1 - movs r7, 0x2 - lsls r0, r2, 3 - adds r0, r6 - adds r3, r0, r3 -_08063E04: - adds r4, 0x1 - cmp r4, 0x3 - bgt _08063E20 - cmp r2, 0x3 - bgt _08063E20 - ldrb r1, [r3] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _08063E20 - movs r5, 0x1 - adds r3, 0x8 - adds r2, 0x1 - b _08063E04 -_08063E20: - cmp r5, 0 - bne _08063E28 - movs r0, 0 - b _08063E2A -_08063E28: - movs r0, 0x1 -_08063E2A: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8063DD4 - - thumb_func_start sub_8063E30 -sub_8063E30: - push {r4-r7,lr} - adds r5, r0, 0 - adds r1, 0x1 - movs r4, 0 - cmp r1, 0x7 - bgt _08063E62 - movs r7, 0x2 - movs r6, 0xFD - lsls r0, r1, 3 - adds r3, r0, r5 -_08063E44: - ldrb r2, [r3] - adds r0, r7, 0 - ands r0, r2 - cmp r0, 0 - beq _08063E62 - adds r0, r6, 0 - ands r0, r2 - strb r0, [r3] - adds r3, 0x8 - adds r1, 0x1 - adds r4, 0x1 - cmp r4, 0x7 - bgt _08063E62 - cmp r1, 0x7 - ble _08063E44 -_08063E62: - adds r0, r5, 0 - bl unk_FixLinkedMovesSetEnabled8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8063E30 - thumb_func_start sub_8063E70 sub_8063E70: push {r4-r7,lr} diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index ca74151f0..5dd701f6b 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -733,6 +733,8 @@ void ShowStatusDescriptionMenu(struct subStruct_203B240 *status, MenuInputStruct extern const u8 *const gUnknown_80F8B40; extern const u8 *const gUnknown_80F8B64; +extern const u8 *const gUnknown_80F8BB4; +extern const u8 *const gUnknown_80F8B88; void sub_8063A70(ActionContainer *a0, bool8 flagToSet) { @@ -839,4 +841,80 @@ bool8 sub_8063C88(EntityInfo *entInfo, s32 a1) return ret; } +void sub_8063CF0(ActionContainer *a0, bool8 a1) +{ + s32 linkedCount; + Entity *entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; + EntityInfo *entInfo = GetEntInfo(entity); + s32 id = a0->actionParameters[1].actionUseIndex; + bool8 unlInked = FALSE; + + BufferMoveName(gFormatBuffer_Items[0], &entInfo->moves.moves[id], NULL); + entInfo->moves.moves[id].moveFlags2 |= 2; + + id++; + for (linkedCount = 0; linkedCount < MAX_MON_MOVES && id < MAX_MON_MOVES; id++, linkedCount++) { + Move *move = &entInfo->moves.moves[id]; + if (MoveFlagLinkChain(move)) { + move->moveFlags &= ~(MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN); + unlInked = TRUE; + } + else { + break; + } + } + + unk_FixLinkedMovesSetEnabled4(entInfo->moves.moves); + PlaySoundEffect(0x133); + if (a1) { + if (unlInked) { + LogMessageByIdWithPopupCheckUser(entity, gUnknown_80F8B88); + } + else { + LogMessageByIdWithPopupCheckUser(entity, gUnknown_80F8BB4); + } + sub_803E708(0x78, 0x1F); + } +} + +bool8 sub_8063DD4(EntityInfo *entInfo, s32 id) +{ + bool8 linkFound = FALSE; + s32 linkedCount; + + id++; + for (linkedCount = 0; linkedCount < MAX_MON_MOVES && id < MAX_MON_MOVES; linkedCount++) { + Move *move = &entInfo->moves.moves[id]; + + if (MoveFlagLinkChain(move)) { + linkFound = TRUE; + id++; + } + else { + break; + } + } + + if (linkFound) + return TRUE; + return FALSE; +} + +void sub_8063E30(Move *moves, s32 id) +{ + s32 i; + + id++; + for (i = 0; i < 8 && id < 8; id++, i++) { + if (MoveFlagLinkChain(&moves[id])) { + moves[id].moveFlags &= ~(MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN); + } + else { + break; + } + } + + unk_FixLinkedMovesSetEnabled8(moves); +} + // From 1f610267fe9ffda4bf27f611448528a4257e2cf5 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 3 Mar 2025 12:00:11 +0100 Subject: [PATCH 20/31] sub_8064228 --- asm/code_805D8C8.s | 583 --------------------------------------- data/data_8106A4C.s | 22 -- src/dungeon_menu_moves.c | 273 +++++++++++++++++- 3 files changed, 261 insertions(+), 617 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 32157a0bc..1e71b463a 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,589 +6,6 @@ .text - thumb_func_start sub_8063E70 -sub_8063E70: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xD0 - str r0, [sp, 0xC4] - adds r7, r1, 0 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0xC8] - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0xCC] - add r4, sp, 0x60 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x64] - add r0, sp, 0x68 - movs r6, 0 - movs r1, 0x2 - strh r1, [r0] - strh r1, [r0, 0x2] - add r1, sp, 0x6C - movs r0, 0x12 - strh r0, [r1] - mov r0, sp - adds r0, 0x6E - movs r1, 0x10 - strh r1, [r0] - add r0, sp, 0x70 - strh r1, [r0] - add r5, sp, 0xC0 - str r5, [sp, 0x74] - movs r1, 0x3 - str r1, [sp, 0x7C] - add r0, sp, 0x90 - str r1, [r0, 0x4] - add r0, sp, 0xA8 - str r1, [r0, 0x4] - mov r0, sp - adds r1, r4, 0 - movs r2, 0x60 - bl memcpy - ldr r0, _08063F80 - str r6, [r0] - ldr r1, _08063F84 - mov r8, r1 - mov r9, r0 - ldr r2, _08063F88 - mov r10, r2 -_08063EE0: - ldr r0, [sp, 0xC4] - adds r1, r7, 0 - mov r2, sp - add r3, sp, 0xC0 - bl sub_8064228 -_08063EEC: - mov r0, r8 - bl AddMenuCursorSprite - movs r0, 0x1E - bl DungeonRunFrameActions - mov r0, r10 - ldrh r1, [r0, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08063F2A - mov r1, r8 - movs r2, 0x18 - ldrsh r4, [r1, r2] - adds r0, r7, 0 - adds r1, r4, 0 - bl unk_FindMoveEnabledForAIAfter8 - adds r1, r0, 0 - mov r0, r8 - bl sub_8013780 - mov r1, r8 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r4, r0 - beq _08063F2A - movs r0, 0 - bl PlayDungeonCursorSE -_08063F2A: - mov r0, r10 - ldrh r1, [r0, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08063F5C - mov r1, r8 - movs r2, 0x18 - ldrsh r4, [r1, r2] - adds r0, r7, 0 - adds r1, r4, 0 - bl unk_FindMoveEnabledForAIBefore8 - adds r1, r0, 0 - mov r0, r8 - bl sub_8013780 - mov r1, r8 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r4, r0 - beq _08063F5C - movs r0, 0 - bl PlayDungeonCursorSE -_08063F5C: - bl sub_8062D88 - mov r2, r10 - ldrh r1, [r2, 0x2] - ands r0, r1 - cmp r0, 0 - bne _08063F76 - ldr r2, _08063F84 - adds r0, r2, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08063F8C -_08063F76: - bl PlayDungeonConfirmationSE - movs r4, 0 - b _08063FB2 - .align 2, 0 -_08063F80: .4byte gUnknown_202F2D8 -_08063F84: .4byte gDungeonMenu -_08063F88: .4byte gRealInputs -_08063F8C: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08063FD4 - ldr r0, [sp, 0xCC] - cmp r0, 0 - beq _08063EEC - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08063FAC - adds r0, r2, 0 - adds r0, 0x2A - ldrb r0, [r0] - cmp r0, 0 - beq _08063EEC -_08063FAC: - bl PlayDungeonCancelSE - movs r4, 0x1 -_08063FB2: - ldr r5, _08063FD0 - adds r0, r5, 0 - bl AddMenuCursorSprite - movs r0, 0x1E - bl DungeonRunFrameActions - cmp r4, 0x1 - bne _08063FDC - movs r0, 0x1 - negs r0, r0 - mov r1, r9 - str r0, [r1] - b _080640FA - .align 2, 0 -_08063FD0: .4byte gDungeonMenu -_08063FD4: - bl PlayDungeonStartButtonSE - movs r4, 0x2 - b _08063FB2 -_08063FDC: - ldr r6, _08064004 - movs r2, 0x18 - ldrsh r0, [r5, r2] - str r0, [r6] - cmp r4, 0x2 - bne _08064008 - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - movs r0, 0x8 - movs r1, 0x1B - bl sub_803E708 - ldr r1, [r6] - adds r0, r7, 0 - movs r2, 0x4 - bl sub_8063834 - b _08063EE0 - .align 2, 0 -_08064004: .4byte gUnknown_202F2D8 -_08064008: - adds r0, r7, 0 - bl sub_8064310 - mov r0, sp - movs r1, 0x16 - bl CreateDungeonMenuSubWindow - adds r4, r5, 0 - ldr r6, _0806408C - adds r5, 0x2A -_0806401C: - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x1B - bl DungeonRunFrameActions - ldrh r1, [r6, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08064040 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r4, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_08064040: - ldrh r1, [r6, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08064058 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r4, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_08064058: - bl sub_8062D88 - ldrh r1, [r6, 0x2] - ands r1, r0 - cmp r1, 0 - bne _0806406E - adds r0, r4, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _0806409C -_0806406E: - movs r1, 0x18 - ldrsh r0, [r4, r1] - bl CanSubMenuItemBeChosen - lsls r0, 24 - cmp r0, 0 - beq _08064098 - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r0, 0x2 - bne _08064090 - bl PlayDungeonConfirmationSE - b _08064094 - .align 2, 0 -_0806408C: .4byte gRealInputs -_08064090: - bl sub_8083D1C -_08064094: - movs r4, 0 - b _080640B2 -_08064098: - bl PlayDungeonCancelSE -_0806409C: - ldrh r1, [r6, 0x2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080640AC - ldrb r0, [r5] - cmp r0, 0 - beq _0806401C -_080640AC: - bl PlayDungeonCancelSE - movs r4, 0x1 -_080640B2: - ldr r6, _080640E4 - adds r0, r6, 0 - bl AddMenuCursorSprite - movs r0, 0x1B - bl DungeonRunFrameActions - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - cmp r4, 0x1 - bne _080640CE - b _08063EE0 -_080640CE: - movs r1, 0x18 - ldrsh r0, [r6, r1] - cmp r0, 0x1 - bne _080640E8 - mov r2, r9 - ldr r1, [r2] - adds r0, r7, 0 - bl sub_8063E30 - b _08063EE0 - .align 2, 0 -_080640E4: .4byte gDungeonMenu -_080640E8: - cmp r0, 0x2 - bne _080640FA - mov r0, r9 - ldr r1, [r0] - adds r0, r7, 0 - movs r2, 0x8 - bl sub_8063834 - b _08063EE0 -_080640FA: - ldr r1, _08064140 - ldr r2, [r1] - cmp r2, 0 - bge _08064104 - b _08064214 -_08064104: - ldr r0, [sp, 0xC8] - cmp r0, 0 - beq _08064160 - movs r4, 0 - lsls r0, r2, 3 - adds r1, r7, r0 - adds r0, r2, 0x1 - cmp r0, 0x7 - bgt _08064130 - lsls r0, 3 - adds r0, r7 - ldrb r2, [r0] - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _08064130 - movs r0, 0x2 - ands r0, r2 - lsls r0, 24 - lsrs r0, 24 - negs r0, r0 - lsrs r4, r0, 31 -_08064130: - ldr r0, _08064144 - movs r2, 0 - bl BufferMoveName - cmp r4, 0 - beq _0806414C - ldr r0, _08064148 - b _0806414E - .align 2, 0 -_08064140: .4byte gUnknown_202F2D8 -_08064144: .4byte gFormatBuffer_Items -_08064148: .4byte gUnknown_80FDF00 -_0806414C: - ldr r0, _0806415C -_0806414E: - ldr r1, [r0] - movs r0, 0 - movs r2, 0 - bl DisplayDungeonYesNoMessage - adds r3, r0, 0 - b _08064162 - .align 2, 0 -_0806415C: .4byte gUnknown_80FDF70 -_08064160: - movs r3, 0x1 -_08064162: - cmp r3, 0x1 - beq _08064168 - b _08063EE0 -_08064168: - mov r1, r9 - ldr r0, [r1] - lsls r0, 3 - adds r0, r7 - movs r1, 0 - strb r1, [r0] - mov r2, r9 - ldr r0, [r2] - adds r2, r0, 0x1 - cmp r2, 0x7 - bgt _080641BC - lsls r0, r2, 3 - adds r4, r7, r0 - ldrb r1, [r4] - ands r3, r1 - cmp r3, 0 - beq _080641BC - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080641BC - movs r0, 0 - mov r12, r0 - movs r6, 0x1 - adds r3, r4, 0 - movs r5, 0x2 -_0806419C: - mov r1, r12 - strb r1, [r4] - adds r3, 0x8 - adds r2, 0x1 - cmp r2, 0x7 - bgt _080641BC - adds r4, r3, 0 - ldrb r1, [r3] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _080641BC - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _0806419C -_080641BC: - movs r4, 0 - movs r6, 0x1 - adds r3, r7, 0 - add r5, sp, 0x60 - movs r2, 0x7 -_080641C6: - ldrb r1, [r3] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _080641D8 - ldr r0, [r3] - ldr r1, [r3, 0x4] - stm r5!, {r0,r1} - adds r4, 0x1 -_080641D8: - adds r3, 0x8 - subs r2, 0x1 - cmp r2, 0 - bge _080641C6 - cmp r4, 0x7 - bgt _080641F4 - movs r1, 0 -_080641E6: - lsls r0, r4, 3 - add r0, sp - adds r0, 0x60 - strb r1, [r0] - adds r4, 0x1 - cmp r4, 0x7 - ble _080641E6 -_080641F4: - add r4, sp, 0x60 - adds r3, r7, 0 - movs r2, 0x7 -_080641FA: - ldm r4!, {r0,r1} - stm r3!, {r0,r1} - subs r2, 0x1 - cmp r2, 0 - bge _080641FA - ldr r2, _08064210 - ldr r0, [r2] - cmp r0, 0 - blt _08064214 - movs r0, 0x1 - b _08064216 - .align 2, 0 -_08064210: .4byte gUnknown_202F2D8 -_08064214: - movs r0, 0 -_08064216: - add sp, 0xD0 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8063E70 - - thumb_func_start sub_8064228 -sub_8064228: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r9, r0 - mov r10, r1 - adds r5, r2, 0 - adds r7, r3, 0 - movs r1, 0 - movs r0, 0x1 - strb r0, [r7] - strb r1, [r7, 0x1] - strb r1, [r7, 0x3] - mov r8, r1 - ldr r6, _08064304 - ldr r0, _08064308 - mov r12, r0 - movs r4, 0x1 - mov r2, r10 - movs r3, 0x7 -_08064254: - ldrb r1, [r2] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08064262 - movs r1, 0x1 - add r8, r1 -_08064262: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _08064254 - mov r2, r12 - ldr r0, [r2] - movs r4, 0 - strh r0, [r6, 0x18] - mov r3, r8 - strh r3, [r6, 0x1A] - strh r3, [r6, 0x1C] - strh r4, [r6, 0x1E] - strh r4, [r6, 0x20] - strh r4, [r6, 0x4] - movs r0, 0x10 - strh r0, [r6, 0x6] - strh r4, [r6, 0xC] - strh r4, [r6, 0xE] - strh r4, [r6, 0x14] - str r4, [r6] - adds r0, r6, 0 - adds r0, 0x28 - bl sub_801317C - mov r0, r8 - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - strh r0, [r5, 0x10] - strh r0, [r5, 0xE] - movs r0, 0xE - strb r0, [r7, 0x2] - movs r0, 0x2 - strh r0, [r5, 0x8] - adds r1, r5, 0 - adds r1, 0x18 - adds r0, r5, 0 - adds r0, 0x48 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r1, r5, 0 - adds r1, 0x30 - adds r0, r5, 0 - adds r0, 0x48 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r0, r5, 0 - movs r1, 0x1 - bl DungeonShowWindows - adds r0, r6, 0 - movs r1, 0 - bl sub_80137B0 - ldr r0, _0806430C - mov r7, r9 - ldr r1, [r7, 0x70] - movs r2, 0 - bl SetMessageArgument_2 - str r4, [sp] - str r4, [sp, 0x4] - mov r0, r8 - mov r1, r9 - mov r2, r10 - movs r3, 0 - bl sub_8063578 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08064304: .4byte gDungeonMenu -_08064308: .4byte gUnknown_202F2D8 -_0806430C: .4byte gFormatBuffer_Monsters - thumb_func_end sub_8064228 thumb_func_start sub_8064310 sub_8064310: diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index 184a94538..413077a14 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -4,28 +4,6 @@ @ CreateFieldItemMenu - sub_8062CA8 - .global gUnknown_8106CAC -gUnknown_8106CAC: @ 8106CAC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x0E, 0x00 - .byte 0x1A, 0x00, 0x03, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_8106CC4 -gUnknown_8106CC4: @ 8106CC4 - .string "{MOVE_ITEM_0}\0" - .align 2,0 - - .global gUnknown_8106CC8 -gUnknown_8106CC8: @ 8106CC8 - .byte 0x01, 0x00, 0x10, 0x00 - - .global gUnknown_8106CCC -gUnknown_8106CCC: @ 8106CCC - .string "{POKEMON_0}\0" - @ ??? .align 2,0 .string "pksdir0\0" diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index 5dd701f6b..505f2d305 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -61,15 +61,13 @@ extern s32 gUnknown_202F2D8; extern s32 sub_8044FB4(u16 param_1); extern const u8 *const gUnknown_80FE978; -extern const WindowTemplate gUnknown_8106CAC; extern const u8 *const gUnknown_80FDFE8; -extern const u8 gUnknown_8106CC4[]; void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); void sub_8063698(Entity *entity, u8 a1, u8 a2); void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); void sub_80637A4(ActionContainer *a0, s32 a1); -void sub_8063578(s32 a0, Entity *entity, Moves *moves, s32 a3, u8 a4, s32 a5); +void sub_8063578(s32 count, Entity *entity, Move *moves, s32 windowId, u8 a4, s32 a5); bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); void sub_8063834(Move *moves, s32 a1, s32 a2); @@ -427,7 +425,15 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) { s32 i, movesCount; - WindowTemplate windowNew = gUnknown_8106CAC; + WindowTemplate windowNew = { + .type = WINDOW_TYPE_NORMAL, + .pos = {2, 14}, + .width = 26, + .height = 3, + .unk10 = 3, + .unk12 = 0, + .header = NULL, + }; header->count = arg7; header->currId = arg6; @@ -476,13 +482,13 @@ void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *wi } } - sub_8063578(4, entity, &entInfo->moves, 0, a2, arg6); + sub_8063578(4, entity, entInfo->moves.moves, 0, a2, arg6); sub_80073B8(2); PrintFormattedStringOnWindow(4, 0, gUnknown_80FDFE8, 2, '\0'); sub_80073E0(2); } -void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s32 a5) +void sub_8063578(s32 count, Entity *entity, Move *moves, s32 windowId, u8 a4, s32 a5) { s32 i; EntityInfo *entInfo = GetEntInfo(entity); @@ -493,7 +499,7 @@ void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s for (i = 0; i < count; i++) { s32 x, y; unkStruct_80928C0 movStruct = {0, 106, 0, a4}; - Move *move = &moves->moves[i]; + Move *move = &moves[i]; if (MoveFlagExists(move)) { if (entInfo->isTeamLeader) { @@ -515,7 +521,7 @@ void sub_8063578(s32 count, Entity *entity, Moves *moves, s32 windowId, u8 a4, s sub_80078A4(windowId, 12, y - 2, 120, 7); } } - PrintFormattedStringOnWindow(x, y, gUnknown_8106CC4, windowId, '\0'); + PrintFormattedStringOnWindow(x, y, _("{MOVE_ITEM_0}"), windowId, '\0'); } } @@ -703,18 +709,21 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) } extern WindowTemplates gUnknown_202F278; -extern const WindowHeader gUnknown_8106CC8; -extern const u8 gUnknown_8106CCC[]; + +static const WindowHeader sStatusDescriptionHeader = { + .count = 1, + .width = 16, +}; void ShowStatusDescriptionMenu(struct subStruct_203B240 *status, MenuInputStructSub *menuSub) { sub_80140B4(&gUnknown_202F278); - gUnknown_202F278.id[0].header = &gUnknown_8106CC8; + gUnknown_202F278.id[0].header = &sStatusDescriptionHeader; DungeonShowWindows(&gUnknown_202F278, TRUE); sub_80073B8(0); strcpy(gFormatBuffer_Monsters[0], status->pokeName); - PrintFormattedStringOnWindow(16, 0, gUnknown_8106CCC, 0, '\0'); + PrintFormattedStringOnWindow(16, 0, _("{POKEMON_0}"), 0, '\0'); PrintFormattedStringOnWindow(4, 16, status->unk4, 0, '\0'); sub_80073E0(0); gDungeonMenu.unk1E = 0; @@ -917,4 +926,244 @@ void sub_8063E30(Move *moves, s32 id) unk_FixLinkedMovesSetEnabled8(moves); } +extern void sub_8083D1C(void); + +void sub_8064228(Entity *entity, Move *moves, WindowTemplates *windows, WindowHeader *header); +void sub_8064310(Move *moves); + +extern const u8 *const gUnknown_80FDF70; +extern const u8 *const gUnknown_80FDF00; + +static inline void ResetMoveFlags(Move *move) +{ + move->moveFlags = 0; +} + +bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBPress) +{ + s32 i, count; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + Move movesLocal[8]; + + gUnknown_202F2D8 = 0; + while (1) { + s32 inputAction; + s32 yesNoAnswer; + + sub_8064228(entity, moves, &windows, &header); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1E); + if (gRealInputs.repeated & DPAD_DOWN) { + s32 prev = gDungeonMenu.menuIndex; + + sub_8013780(&gDungeonMenu, unk_FindMoveEnabledForAIAfter8(moves, prev)); + if (prev != gDungeonMenu.menuIndex) { + PlayDungeonCursorSE(FALSE); + } + } + if (gRealInputs.repeated & DPAD_UP) { + s32 prev = gDungeonMenu.menuIndex; + + sub_8013780(&gDungeonMenu, unk_FindMoveEnabledForAIBefore8(moves, prev)); + if (prev != gDungeonMenu.menuIndex) { + PlayDungeonCursorSE(FALSE); + } + } + ASM_MATCH_TRICK(gUnknown_202F2D8); + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + PlayDungeonConfirmationSE(); + inputAction = 0; + break; + } + if (gRealInputs.pressed & START_BUTTON) { + PlayDungeonStartButtonSE(); + inputAction = 2; + break; + } + if (allowBPress && (CheckPressed(B_BUTTON) || gDungeonMenu.unk28.b_button)) { + PlayDungeonCancelSE(); + inputAction = 1; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1E); + if (inputAction == 1) { + gUnknown_202F2D8 = -1; + } + else { + gUnknown_202F2D8 = gDungeonMenu.menuIndex; + + if (inputAction == 2) { + sub_803EAF0(0, 0); + sub_803E708(8, 0x1B); + ASM_MATCH_TRICK(gUnknown_202F2D8); + sub_8063834(moves, gUnknown_202F2D8, 4); + continue; + } + + sub_8064310(moves); + CreateDungeonMenuSubWindow(&windows.id[0], 22); + + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1B); + + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { + if (gDungeonMenu.menuIndex == 2) { + PlayDungeonConfirmationSE(); + } + else { + sub_8083D1C(); + } + inputAction = 0; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + inputAction = 1; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x1b); + sub_803EAF0(0, 0); + if (inputAction == 1) + continue; + if (gDungeonMenu.menuIndex == 1) { + sub_8063E30(moves, gUnknown_202F2D8); + continue; + } + if (gDungeonMenu.menuIndex == 2) { + sub_8063834(moves, gUnknown_202F2D8, 8); + continue; + } + } + + if (gUnknown_202F2D8 < 0) + break; + + if (showYesNoBox) { + bool8 linked = FALSE; + Move *move = &moves[gUnknown_202F2D8]; + s32 nextMoveId = gUnknown_202F2D8 + 1; + + if (nextMoveId < 8 && MoveFlagExists(&moves[nextMoveId])) { + linked = MoveFlagLinkChain(&moves[nextMoveId]) != 0; + } + BufferMoveName(gFormatBuffer_Items[0], move, NULL); + yesNoAnswer = DisplayDungeonYesNoMessage(NULL, (!linked) ? gUnknown_80FDF70 : gUnknown_80FDF00, FALSE); + } + else { + yesNoAnswer = 1; + } + + if (yesNoAnswer == 1) { + moves[gUnknown_202F2D8].moveFlags = 0; + for (i = gUnknown_202F2D8 + 1; i < 8; i++) { + Move *move = &moves[i]; + if (!MoveFlagExists(move)) + break; + if (!(move->moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)) + break; + + ResetMoveFlags(move); + } + + count = 0; + for (i = 0; i < 8; i++) { + Move *move = &moves[i]; + if (MoveFlagExists(move)) { + movesLocal[count++] = *move; + } + } + + for (; count < 8; count++) { + ResetMoveFlags(&movesLocal[count]); + } + + for (i = 0; i < 8; i++) { + moves[i] = movesLocal[i]; + } + + break; + } + } + + if (gUnknown_202F2D8 < 0) + return FALSE; + + return TRUE; +} + +void sub_8064228(Entity *entity, Move *moves, WindowTemplates *windows, WindowHeader *header) +{ + s32 i, count; + + header->count = 1; + header->currId = 0; + header->f3 = 0; + + count = 0; + for (i = 0; i < 8; i++) { + if (MoveFlagExists(&moves[i])) { + count++; + } + } + + gDungeonMenu.menuIndex = gUnknown_202F2D8; + gDungeonMenu.unk1A = count; + gDungeonMenu.unk1C = count; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + windows->id[0].height = windows->id[0].unk10 = sub_80095E4(count, 12) + 2; + header->width = 14; + windows->id[0].pos.x = 2; + windows->id[1] = windows->id[3]; + windows->id[2] = windows->id[3]; + DungeonShowWindows(windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + SetMessageArgument_2(gFormatBuffer_Monsters[0], GetEntInfo(entity), 0); + sub_8063578(count, entity, moves, 0, 0, 0); +} + + // From e670716324744f4720478bb4060e5d597836413c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 3 Mar 2025 14:46:42 +0100 Subject: [PATCH 21/31] dungeon menu moves done --- asm/code_805D8C8.s | 91 +-------- include/constants/dungeon_action.h | 9 +- include/dungeon_menu_moves.h | 7 + src/code_8044CC8.c | 14 +- src/code_8048480.c | 27 ++- src/code_8066D04.c | 16 +- src/dungeon_main.c | 25 +-- src/dungeon_menu_items.c | 72 +++---- src/dungeon_menu_moves.c | 312 ++++++++++++++++------------- src/dungeon_menu_team.c | 54 ++--- sym_ewram.txt | 8 +- 11 files changed, 285 insertions(+), 350 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 1e71b463a..145046781 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -7,89 +7,6 @@ - thumb_func_start sub_8064310 -sub_8064310: - push {r4,lr} - adds r4, r0, 0 - ldr r1, _08064350 - movs r0, 0 - str r0, [r1] - movs r0, 0x22 - movs r1, 0 - bl sub_8044F5C - movs r0, 0x21 - movs r1, 0 - bl sub_8044F5C - ldr r0, _08064354 - ldr r1, [r0] - adds r0, r4, 0 - bl sub_8064358 - lsls r0, 24 - cmp r0, 0 - bne _08064340 - movs r0, 0x21 - bl sub_8044FF0 -_08064340: - movs r0, 0x1D - movs r1, 0 - bl sub_8044F5C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08064350: .4byte gDungeonSubMenuItemsCount -_08064354: .4byte gUnknown_202F2D8 - thumb_func_end sub_8064310 - - thumb_func_start sub_8064358 -sub_8064358: - push {r4-r6,lr} - adds r3, r0, 0 - adds r2, r1, 0 - movs r5, 0 - adds r2, 0x1 - movs r4, 0 - cmp r2, 0x7 - bgt _0806439C - lsls r0, r2, 3 - adds r0, r3, r0 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0806439C - movs r5, 0x1 - adds r2, 0x1 - movs r6, 0x2 - lsls r0, r2, 3 - adds r3, r0, r3 -_08064380: - adds r4, 0x1 - cmp r4, 0x7 - bgt _0806439C - cmp r2, 0x7 - bgt _0806439C - ldrb r1, [r3] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _0806439C - movs r5, 0x1 - adds r3, 0x8 - adds r2, 0x1 - b _08064380 -_0806439C: - cmp r5, 0 - bne _080643A4 - movs r0, 0 - b _080643A6 -_080643A4: - movs r0, 0x1 -_080643A6: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8064358 thumb_func_start sub_80643AC sub_80643AC: @@ -361,10 +278,10 @@ sub_80645D4: str r0, [r1] movs r0, 0x25 movs r1, 0 - bl sub_8044F5C + bl AddActionToDungeonSubMenu movs r0, 0xC movs r1, 0 - bl sub_8044F5C + bl AddActionToDungeonSubMenu bl sub_8045064 pop {r0} bx r0 @@ -894,10 +811,10 @@ sub_8064A18: str r0, [r1] movs r0, 0x26 movs r1, 0 - bl sub_8044F5C + bl AddActionToDungeonSubMenu movs r0, 0xC movs r1, 0 - bl sub_8044F5C + bl AddActionToDungeonSubMenu bl sub_8045064 pop {r0} bx r0 diff --git a/include/constants/dungeon_action.h b/include/constants/dungeon_action.h index 3a6febe5b..ccd4e8b64 100644 --- a/include/constants/dungeon_action.h +++ b/include/constants/dungeon_action.h @@ -24,11 +24,12 @@ enum DungeonAction ACTION_CHANGE_TACTICS = 0x1A, ACTION_CHECK_SUMMARY = 0x1B, ACTION_TALK_MENU = 0x1C, // Talking to another Pokémon via the menu. - ACTION_UNK1D = 0x1D, + ACTION_MOVE_INFO = 0x1D, ACTION_SET_MOVE = 0x1E, // Registering a move. - ACTION_UNK1F = 0x1F, - ACTION_UNK20 = 0x20, - ACTION_UNK21 = 0x21, + ACTION_SWITCH_AI_MOVE = 0x1F, + ACTION_LINK_MOVES = 0x20, + ACTION_DELINK_MOVES = 0x21, + ACTION_UNK22 = 0x22, ACTION_EAT_AI = 0x23, ACTION_THROW_ITEM_AI = 0x24, ACTION_STEPPED_ON_TRAP = 0x25, diff --git a/include/dungeon_menu_moves.h b/include/dungeon_menu_moves.h index 68c9c7f66..7334f36c3 100644 --- a/include/dungeon_menu_moves.h +++ b/include/dungeon_menu_moves.h @@ -6,6 +6,13 @@ #include "structs/subStruct_203B240.h" void ShowMovesFromTeamMenu(ActionContainer *a0); +bool8 ShowDungeonMovesMenu(Entity * entity, bool8 addLinkOptions, bool8 addUseMove, s32 a3, s32 a4); +void ActionShowMoveInfo(ActionContainer *a0); void ShowStatusDescriptionMenu(struct subStruct_203B240 *status, MenuInputStructSub *menuSub); +void ActionSetOrUnsetMove(ActionContainer *a0, bool8 flagToSet); +void ActionToggleMoveUsableForAi(ActionContainer *a0); +void ActionLinkMoves(ActionContainer *a0); +void ActionDelinkMoves(ActionContainer *a0, bool8 showMsg); +bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBPress); #endif diff --git a/src/code_8044CC8.c b/src/code_8044CC8.c index 6b7ea111e..ee4717edc 100644 --- a/src/code_8044CC8.c +++ b/src/code_8044CC8.c @@ -185,44 +185,44 @@ bool8 CanSubMenuItemBeChosen(s32 itemId) return gDungeonSubMenu[itemId].canBeChosen; } -void sub_8044F5C(u16 param_1, u8 param_2) +void AddActionToDungeonSubMenu(u16 actionId, u8 param_2) { int index; if (gDungeonSubMenuItemsCount < 10) { for(index = 0; index < gDungeonSubMenuItemsCount; index++) { - if (gDungeonSubMenu[index].actionId == param_1) { + if (gDungeonSubMenu[index].actionId == actionId) { return; } } - gDungeonSubMenu[gDungeonSubMenuItemsCount].actionId = param_1; + gDungeonSubMenu[gDungeonSubMenuItemsCount].actionId = actionId; gDungeonSubMenu[gDungeonSubMenuItemsCount].unk2 = param_2; gDungeonSubMenu[gDungeonSubMenuItemsCount].canBeChosen = TRUE; gDungeonSubMenuItemsCount++; } } -s32 sub_8044FB4(u16 param_1) +s32 ActionToDungeonSubMenuId(u16 actionId) { int index; for(index = 0; index < gDungeonSubMenuItemsCount; index++) { - if (gDungeonSubMenu[index].actionId == param_1) { + if (gDungeonSubMenu[index].actionId == actionId) { return index; } } return -1; } -void sub_8044FF0(u16 param_1) +void SetActionUnusableInDungeonSubMenu(u16 actionId) { int index; for(index = 0; index < gDungeonSubMenuItemsCount; index++) { - if (gDungeonSubMenu[index].actionId == param_1) { + if (gDungeonSubMenu[index].actionId == actionId) { gDungeonSubMenu[index].canBeChosen = FALSE; return; } diff --git a/src/code_8048480.c b/src/code_8048480.c index 3cb277df8..7ac03bd5f 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -28,6 +28,7 @@ #include "structs/str_position.h" #include "dungeon_config.h" #include "dungeon_menu_team.h" +#include "dungeon_menu_moves.h" extern s16 gTypeGummiIQBoost[NUM_TYPES][NUMBER_OF_GUMMIS]; @@ -69,12 +70,8 @@ extern void sub_8078B5C(Entity *, Entity *, u32, u32, u32); extern u8 sub_806A538(s32); extern void sub_8051E7C(Entity *pokemon); extern void sub_8045BF8(u8 *, Item *); -extern void sub_8063B54(ActionContainer *); -extern void sub_80637E8(ActionContainer *); -extern void sub_8063BB4(ActionContainer *); -extern void sub_8063CF0(ActionContainer *, u32); -extern void sub_8063A70(ActionContainer *, u32); -extern u8 ShowDungeonMovesMenu(Entity *, u32, u32, u32, u32); +extern void ActionShowMoveInfo(ActionContainer *); +extern void ActionLinkMoves(ActionContainer *); extern void sub_8044DF0(Entity *, u32, u32); extern void sub_803EAF0(u32, u32); extern void SetLeaderActionToNothing(bool8); @@ -932,27 +929,27 @@ bool8 sub_8048B9C(Entity *entity, Item *item) originalAction = *entityActionPtr; goto LOOP_MIDDLE; // Needed to match while (1) { - if (entityActionPtr->action == ACTION_UNK1D) { - sub_80637E8(entityActionPtr); + if (entityActionPtr->action == ACTION_MOVE_INFO) { + ActionShowMoveInfo(entityActionPtr); } - else if (entityActionPtr->action == ACTION_UNK20) { + else if (entityActionPtr->action == ACTION_LINK_MOVES) { sub_803EAF0(0,0); - sub_8063BB4(entityActionPtr); + ActionLinkMoves(entityActionPtr); SetLeaderActionToNothing(TRUE); ret = TRUE; } - else if (entityActionPtr->action == ACTION_UNK21) { + else if (entityActionPtr->action == ACTION_DELINK_MOVES) { sub_803EAF0(0,0); - sub_8063CF0(entityActionPtr,0); + ActionDelinkMoves(entityActionPtr,0); SetLeaderActionToNothing(TRUE); } else if ((entityActionPtr->action == ACTION_SET_MOVE) || (entityActionPtr->action == ACTION_UNSET_MOVE)) { sub_803EAF0(0,0); - sub_8063A70(entityActionPtr,0); + ActionSetOrUnsetMove(entityActionPtr, FALSE); } - else if (entityActionPtr->action == ACTION_UNK1F) { + else if (entityActionPtr->action == ACTION_SWITCH_AI_MOVE) { sub_803EAF0(0,0); - sub_8063B54(entityActionPtr); + ActionToggleMoveUsableForAi(entityActionPtr); } LOOP_MIDDLE: diff --git a/src/code_8066D04.c b/src/code_8066D04.c index 52e832437..240eee648 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -91,9 +91,9 @@ extern bool8 sub_8045888(Entity *); extern Item *sub_8044D90(Entity *, s32, u32); void sub_8045BF8(u8 *, Item *); u8 sub_8048D50(); -void sub_8044FF0(u16 param_1); +void SetActionUnusableInDungeonSubMenu(u16 param_1); u8 * sub_80464AC(); -void sub_8044F5C(u16 param_1, u8 param_2); +void AddActionToDungeonSubMenu(u16 param_1, u8 param_2); void sub_8044DF0(); void sub_8042208(Entity *pokemon, u8 r1); void sub_803E708(); @@ -1125,20 +1125,20 @@ void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3) r10 = gDungeonMenu.menuIndex; arrId = gUnknown_202F30C + r10; gDungeonSubMenuItemsCount = 0; - sub_8044F5C(0x29, 0); - sub_8044F5C(0x2A, 0); - sub_8044F5C(0x40, 0); + AddActionToDungeonSubMenu(0x29, 0); + AddActionToDungeonSubMenu(0x2A, 0); + AddActionToDungeonSubMenu(0x40, 0); if (a3[arrId]->unk0 & 0x8000) { - sub_8044FF0(0x29); + SetActionUnusableInDungeonSubMenu(0x29); } else { - sub_8044FF0(0x2A); + SetActionUnusableInDungeonSubMenu(0x2A); } // This unnecessary variable is required to match. locIdIsPartner = DUNGEON_JOIN_LOCATION_PARTNER; if (a3[arrId]->isTeamLeader || (a3[arrId]->dungeonLocation.id == DUNGEON_JOIN_LOCATION_LEADER || a3[arrId]->dungeonLocation.id == locIdIsPartner)) { - sub_8044FF0(0x29); + SetActionUnusableInDungeonSubMenu(0x29); } sub_8045064(); diff --git a/src/dungeon_main.c b/src/dungeon_main.c index 7f441c811..0c2681dee 100644 --- a/src/dungeon_main.c +++ b/src/dungeon_main.c @@ -90,17 +90,11 @@ bool8 sub_8044B28(void); bool8 IsNotAttacking(Entity *param_1, bool8 param_2); s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); -void sub_80637E8(ActionContainer *a0); -void sub_8063B54(ActionContainer *a0); -void sub_8063BB4(ActionContainer *a0); void sub_806752C(ActionContainer *a0); -void sub_8063A70(ActionContainer *a0, bool8 a1); -void sub_8063CF0(ActionContainer *a0, bool8 a1); void sub_8067768(ActionContainer *a0); void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern bool8 sub_8071A8C(Entity *pokemon); extern void sub_80643AC(Entity *pokemon); -extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); extern void GetWeatherName(u8 *dst, u8 weatherId); extern bool8 sub_8070F14(Entity * pokemon, s32 direction); extern Entity *sub_80696A8(Entity *a0); @@ -1368,7 +1362,6 @@ static void ShowMainMenu(bool8 fromBPress, bool8 a1) } } - while (1) { SetLeaderActionToNothing(0); LOOP_START_NO_CALL: // Actions 6 and 7 don't call SetLeaderActionToNothing @@ -1429,20 +1422,20 @@ static void ShowMainMenu(bool8 fromBPress, bool8 a1) } goto LOOP_START_NO_CALL; } - else if (GetLeaderActionId() == ACTION_UNK1D) { - sub_80637E8(GetLeaderActionContainer()); + else if (GetLeaderActionId() == ACTION_MOVE_INFO) { + ActionShowMoveInfo(GetLeaderActionContainer()); } else if (GetLeaderActionId() == ACTION_SET_MOVE || GetLeaderActionId() == ACTION_UNSET_MOVE) { - sub_8063A70(GetLeaderActionContainer(), FALSE); + ActionSetOrUnsetMove(GetLeaderActionContainer(), FALSE); } - else if (GetLeaderActionId() == ACTION_UNK1F) { - sub_8063B54(GetLeaderActionContainer()); + else if (GetLeaderActionId() == ACTION_SWITCH_AI_MOVE) { + ActionToggleMoveUsableForAi(GetLeaderActionContainer()); } - else if (GetLeaderActionId() == ACTION_UNK20) { - sub_8063BB4(GetLeaderActionContainer()); + else if (GetLeaderActionId() == ACTION_LINK_MOVES) { + ActionLinkMoves(GetLeaderActionContainer()); } - else if (GetLeaderActionId() == ACTION_UNK21) { - sub_8063CF0(GetLeaderActionContainer(), FALSE); + else if (GetLeaderActionId() == ACTION_DELINK_MOVES) { + ActionDelinkMoves(GetLeaderActionContainer(), FALSE); } else { break; diff --git a/src/dungeon_menu_items.c b/src/dungeon_menu_items.c index 6d83fdc1e..8a4527921 100644 --- a/src/dungeon_menu_items.c +++ b/src/dungeon_menu_items.c @@ -54,8 +54,8 @@ extern s32 gDungeonSubMenuItemsCount; extern const u8 gUnknown_8106B50[]; extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); extern Item * sub_8044CC8(Entity *param_1, ActionParameter *param_2, UNUSED s32 a3); -extern void sub_8044F5C(u16 param_1, u8 param_2); -extern void sub_8044FF0(u16 param_1); +extern void AddActionToDungeonSubMenu(u16 param_1, u8 param_2); +extern void SetActionUnusableInDungeonSubMenu(u16 param_1); extern u16 sub_8044DC8(Item *param_1); extern bool8 sub_8046F00(Item *item); extern void sub_8045064(void); @@ -609,7 +609,7 @@ static void sub_8060900(Entity *a0) gDungeonSubMenuItemsCount = 0; if (sUnknownActionUnk4.actionUseIndex < 144) { if (sUnknownActionUnk4.actionUseIndex == 128) { - sub_8044F5C(9, item->id); + AddActionToDungeonSubMenu(9, item->id); if (GetItemCategory(item->id) != CATEGORY_POKE) { bool32 r2 = 0; if (gDungeon->unk644.unk17 != 0) { @@ -622,21 +622,21 @@ static void sub_8060900(Entity *a0) } if (r2) { - sub_8044FF0(9); + SetActionUnusableInDungeonSubMenu(9); } } } if (sUnknownActionUnk4.actionUseIndex == 128 && gDungeon->unk644.unk17 != 0) { - sub_8044F5C(10, item->id); + AddActionToDungeonSubMenu(10, item->id); } val_sub8044DC8 = sub_8044DC8(item); if (val_sub8044DC8 != 0) { - sub_8044F5C(val_sub8044DC8, item->id); + AddActionToDungeonSubMenu(val_sub8044DC8, item->id); if (item->flags & ITEM_FLAG_STICKY) { - sub_8044FF0(val_sub8044DC8); + SetActionUnusableInDungeonSubMenu(val_sub8044DC8); } if (!sub_8046F00(item)) { - sub_8044FF0(val_sub8044DC8); + SetActionUnusableInDungeonSubMenu(val_sub8044DC8); } } @@ -646,10 +646,10 @@ static void sub_8060900(Entity *a0) s32 i; if (ItemSet(item)) { - sub_8044F5C(0x3D, item->id); + AddActionToDungeonSubMenu(0x3D, item->id); } else { - sub_8044F5C(0x3C, item->id); + AddActionToDungeonSubMenu(0x3C, item->id); } for (i = 0; i < INVENTORY_SIZE; i++) { @@ -657,8 +657,8 @@ static void sub_8060900(Entity *a0) && ItemSet(&gTeamInventoryRef->teamItems[i]) && ItemSticky(&gTeamInventoryRef->teamItems[i])) { - sub_8044FF0(0x3C); - sub_8044FF0(0x3D); + SetActionUnusableInDungeonSubMenu(0x3C); + SetActionUnusableInDungeonSubMenu(0x3D); break; } } @@ -669,7 +669,7 @@ static void sub_8060900(Entity *a0) s32 i; bool32 r8 = FALSE; - sub_8044F5C(0x36, item->id); + AddActionToDungeonSubMenu(0x36, item->id); for (i = 0; i < MAX_TEAM_MEMBERS; i++) { Entity *teamMon = gDungeon->teamPokemon[i]; if (EntityIsValid(teamMon)) { @@ -682,48 +682,48 @@ static void sub_8060900(Entity *a0) } } if (!r8) { - sub_8044FF0(0x36); + SetActionUnusableInDungeonSubMenu(0x36); } } } else if (gDungeon->unk644.unk17) { if (gTeamInventoryRef->teamItems[INVENTORY_SIZE - 1].flags & ITEM_FLAG_EXISTS) { - sub_8044F5C(0x3E, item->id); + AddActionToDungeonSubMenu(0x3E, item->id); } else { - sub_8044F5C(0x37, item->id); + AddActionToDungeonSubMenu(0x37, item->id); } if (CheckVariousConditions(a0)) { - sub_8044FF0(0x37); - sub_8044FF0(0x3E); + SetActionUnusableInDungeonSubMenu(0x37); + SetActionUnusableInDungeonSubMenu(0x3E); } } if (sUnknownActionUnk4.actionUseIndex <= 20) { Entity *tileEntity = GetTile(a0->pos.x, a0->pos.y)->object; if (tileEntity == NULL) { - sub_8044F5C(8, item->id); + AddActionToDungeonSubMenu(8, item->id); } else if (GetEntityType(tileEntity) == ENTITY_ITEM) { - sub_8044F5C(0x3A, item->id); + AddActionToDungeonSubMenu(0x3A, item->id); } } if (GetItemCategory(item->id) == CATEGORY_THROWN_LINE) { - sub_8044F5C(0x27, item->id); + AddActionToDungeonSubMenu(0x27, item->id); } else if (GetItemCategory(item->id) == CATEGORY_THROWN_ARC) { - sub_8044F5C(0x41, item->id); + AddActionToDungeonSubMenu(0x41, item->id); } else { - sub_8044F5C(0xB, item->id); + AddActionToDungeonSubMenu(0xB, item->id); } if (!MonsterCanThrowItems(a0Info)) { - sub_8044FF0(0x27); - sub_8044FF0(0x41); - sub_8044FF0(0xB); + SetActionUnusableInDungeonSubMenu(0x27); + SetActionUnusableInDungeonSubMenu(0x41); + SetActionUnusableInDungeonSubMenu(0xB); } } else { @@ -749,40 +749,40 @@ static void sub_8060900(Entity *a0) if (gDungeon->unk644.unk17) { if (r4) { - sub_8044F5C(0x3E, item->id); + AddActionToDungeonSubMenu(0x3E, item->id); } else { - sub_8044F5C(0x37, item->id); + AddActionToDungeonSubMenu(0x37, item->id); } if (r6) { - sub_8044FF0(0x37); - sub_8044FF0(0x3E); + SetActionUnusableInDungeonSubMenu(0x37); + SetActionUnusableInDungeonSubMenu(0x3E); } } if (teamMonInfo->isTeamLeader) { val_sub8044DC8 = sub_8044DC8(item); if (val_sub8044DC8 != 0) { - sub_8044F5C(val_sub8044DC8, item->id); + AddActionToDungeonSubMenu(val_sub8044DC8, item->id); if (item->flags & ITEM_FLAG_STICKY) { - sub_8044FF0(val_sub8044DC8); + SetActionUnusableInDungeonSubMenu(val_sub8044DC8); } if (!sub_8046F00(item)) { - sub_8044FF0(val_sub8044DC8); + SetActionUnusableInDungeonSubMenu(val_sub8044DC8); } } } else { - sub_8044F5C(0x38, item->id); + AddActionToDungeonSubMenu(0x38, item->id); if (r5) { - sub_8044FF0(0x38); + SetActionUnusableInDungeonSubMenu(0x38); } } } } - sub_8044F5C(0xC, item->id); + AddActionToDungeonSubMenu(0xC, item->id); sub_8045064(); } diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index 505f2d305..451a7192e 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -38,39 +38,46 @@ extern bool8 CanSubMenuItemBeChosen(s32 param_1); extern void sub_8045064(void); extern void sub_803EAF0(u32, u8 *); extern void sub_803E708(s32 a0, s32 a1); -extern void sub_8044F5C(u16 param_1, u8 param_2); -extern void sub_8044FF0(u16 param_1); +extern void AddActionToDungeonSubMenu(u16 param_1, u8 param_2); +extern void SetActionUnusableInDungeonSubMenu(u16 param_1); extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); extern s32 GetTeamMemberEntityIndex(Entity *pokemon); -extern u32 sub_8062D88(void); extern void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern void SetLeaderActionToNothing(u8 a0); -extern void sub_80637E8(ActionContainer *a0); -extern void sub_8063B54(ActionContainer *a0); extern void sub_806752C(ActionContainer *a0); extern void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 a1); -extern void sub_8063A70(ActionContainer *a0, bool8 a1); -extern void sub_8063CF0(ActionContainer *a0, bool8 a1); extern void sub_8067768(ActionContainer *a0); extern void sub_806A2BC(Entity *a0, u8 a1); extern bool8 sub_8071A8C(Entity *pokemon); +extern void sub_8083D1C(void); extern s32 gDungeonSubMenuItemsCount; extern MenuInputStruct gDungeonMenu; -extern s32 gUnknown_202F2D8; -extern s32 sub_8044FB4(u16 param_1); +extern s32 ActionToDungeonSubMenuId(u16 param_1); extern const u8 *const gUnknown_80FE978; extern const u8 *const gUnknown_80FDFE8; +extern const u8 *const gUnknown_80F8B40; +extern const u8 *const gUnknown_80F8B64; +extern const u8 *const gUnknown_80F8BB4; +extern const u8 *const gUnknown_80F8B88; +extern const u8 *const gUnknown_80FDF70; +extern const u8 *const gUnknown_80FDF00; -void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); -void sub_8063698(Entity *entity, u8 a1, u8 a2); -void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2); -void sub_80637A4(ActionContainer *a0, s32 a1); -void sub_8063578(s32 count, Entity *entity, Move *moves, s32 windowId, u8 a4, s32 a5); -bool8 sub_8063C88(EntityInfo *entInfo, s32 a1); -bool8 sub_8063DD4(EntityInfo *entInfo, s32 a1); -void sub_8063834(Move *moves, s32 a1, s32 a2); +static void ShowMovesMenuWindows(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); +static void AddSubMenuOptions(Entity *entity, bool8 addLinkOptions, bool8 addUseMove); +static void SetSubMenuOptionAction(ActionContainer *a0, s32 a1, s32 a2); +static void MenuChosenOptionToAction(ActionContainer *a0, s32 a1); +static void PrintMoveNamesOnWindow(s32 count, Entity *entity, Move *moves, s32 windowId, u8 a4, s32 a5); +static bool8 IsMoveLinkedAndNotCharging(EntityInfo *entInfo, s32 moveId_); +static bool8 IsMoveLinked(EntityInfo *entInfo, s32 id); +static void ShowMovesInfoWindow(Move *moves, s32 firstMoveId, s32 movesCount); +static void sub_8064228(Entity *entity, Move *moves, WindowTemplates *windows, WindowHeader *header); +static void sub_8064310(Move *moves); +static bool8 sub_8064358(Move *moves, s32 id); + +EWRAM_DATA static WindowTemplates sMovesMenuWindows = {0}; +EWRAM_DATA static s32 sChosenMoveSlotId = 0; // Needed to match some functions. static inline u32 CheckPressed(u32 button) @@ -80,7 +87,8 @@ static inline u32 CheckPressed(u32 button) return check; } -u32 sub_8062D88(void) +// In Blue it's 0x401, so A_BUTTON + 0x400 whatever that is +static u32 GetConfirmationButtons(void) { return A_BUTTON; } @@ -149,28 +157,28 @@ void ShowMovesFromTeamMenu(ActionContainer *a0) } SetLeaderActionToNothing(TRUE); } - else if (GetLeaderActionId() == ACTION_UNK1D) { - sub_80637E8(GetLeaderActionContainer()); + else if (GetLeaderActionId() == ACTION_MOVE_INFO) { + ActionShowMoveInfo(GetLeaderActionContainer()); SetLeaderActionToNothing(TRUE); } else if (GetLeaderActionId() == ACTION_SET_MOVE) { sub_803EAF0(0, NULL); - sub_8063A70(GetLeaderActionContainer(), TRUE); + ActionSetOrUnsetMove(GetLeaderActionContainer(), TRUE); SetLeaderActionToNothing(TRUE); } else if (GetLeaderActionId() == ACTION_UNSET_MOVE) { sub_803EAF0(0, NULL); - sub_8063A70(GetLeaderActionContainer(), FALSE); + ActionSetOrUnsetMove(GetLeaderActionContainer(), FALSE); SetLeaderActionToNothing(TRUE); } - else if (GetLeaderActionId() == ACTION_UNK1F) { + else if (GetLeaderActionId() == ACTION_SWITCH_AI_MOVE) { sub_803EAF0(0, NULL); - sub_8063B54(GetLeaderActionContainer()); + ActionToggleMoveUsableForAi(GetLeaderActionContainer()); SetLeaderActionToNothing(TRUE); } - else if (GetLeaderActionId() == ACTION_UNK21) { + else if (GetLeaderActionId() == ACTION_DELINK_MOVES) { sub_803EAF0(0, NULL); - sub_8063CF0(GetLeaderActionContainer(), TRUE); + ActionDelinkMoves(GetLeaderActionContainer(), TRUE); SetLeaderActionToNothing(TRUE); } @@ -182,7 +190,7 @@ void ShowMovesFromTeamMenu(ActionContainer *a0) ChangeDungeonCameraPos(&entityOrg->pos, 0, 1, 1); } -bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) +bool8 ShowDungeonMovesMenu(Entity * entity, bool8 addLinkOptions, bool8 addUseMove, s32 a3, s32 a4) { s32 i; bool8 ret; @@ -211,13 +219,13 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) s32 r5; bool8 bPress; - gUnknown_202F2D8 = 0; + sChosenMoveSlotId = 0; for (i = 0; i < MAX_MON_MOVES; i++) { Move *move = &entInfo->moves.moves[i]; if (MoveFlagExists(move) && move->moveFlags2 & 2) { move->moveFlags2 &= ~(2); - gUnknown_202F2D8 = i; + sChosenMoveSlotId = i; } } @@ -225,7 +233,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) r5 = 0; ret = FALSE; r10 = FALSE; - sub_80633E4(entity, entInfo, a1, &windows, &header, unk, a3, a4); + ShowMovesMenuWindows(entity, entInfo, addLinkOptions, &windows, &header, unk, a3, a4); while (1) { AddMenuCursorSprite_(&gDungeonMenu, unk); DungeonRunFrameActions(0x1E); @@ -234,8 +242,8 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) s32 id = gDungeonMenu.menuIndex; if (rHeld) { - gUnknown_202F2D8 = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); - if (id != gUnknown_202F2D8) { + sChosenMoveSlotId = unk_SetMoveToLastInLinkedSequence4(entInfo->moves.moves, id); + if (id != sChosenMoveSlotId) { PlayDungeonCursorSE(0); } else { @@ -256,8 +264,8 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) s32 id = gDungeonMenu.menuIndex; if (rHeld) { - gUnknown_202F2D8 = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); - if (id != gUnknown_202F2D8) { + sChosenMoveSlotId = unk_SetMoveToFirstInLinkedSequence4(entInfo->moves.moves, id); + if (id != sChosenMoveSlotId) { PlayDungeonCursorSE(0); } else { @@ -283,8 +291,8 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) break; } - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { - if (a1) { + if ((gRealInputs.pressed & GetConfirmationButtons()) || gDungeonMenu.unk28.a_button) { + if (addLinkOptions) { bool8 rHeld = (gRealInputs.held & R_BUTTON) != 0; if (rHeld) { r5 = 3; @@ -324,51 +332,51 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) if (ret) break; - gUnknown_202F2D8 = gDungeonMenu.menuIndex; + sChosenMoveSlotId = gDungeonMenu.menuIndex; if (r5 == 1) { SetMonsterActionFields(&leaderInfo->action, 0x1D); leaderInfo->action.actionParameters[0].actionUseIndex = entity->unk24; - leaderInfo->action.actionParameters[1].actionUseIndex = gUnknown_202F2D8; + leaderInfo->action.actionParameters[1].actionUseIndex = sChosenMoveSlotId; sub_803EAF0(0, NULL); sub_803E708(8, 0x1B); ret = FALSE; break; } - sub_8063698(entity, a1, a2); + AddSubMenuOptions(entity, addLinkOptions, addUseMove); if (r5 == 3) { - s32 r6 = sub_8044FB4(0x20); - if (!CanSubMenuItemBeChosen(r6)) { - r6 = sub_8044FB4(0x21); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + s32 subMenuId = ActionToDungeonSubMenuId(ACTION_LINK_MOVES); + if (!CanSubMenuItemBeChosen(subMenuId)) { + subMenuId = ActionToDungeonSubMenuId(ACTION_DELINK_MOVES); + if (CanSubMenuItemBeChosen(subMenuId)) { + SetSubMenuOptionAction(&leaderInfo->action, subMenuId, GetTeamMemberEntityIndex(entity)); break; } } else { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + SetSubMenuOptionAction(&leaderInfo->action, subMenuId, GetTeamMemberEntityIndex(entity)); break; } } else if (r5 == 2) { if (entInfo->isTeamLeader) { - s32 r6 = sub_8044FB4(0x1E); - if (!CanSubMenuItemBeChosen(r6)) { - r6 = sub_8044FB4(0x33); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + s32 subMenuId = ActionToDungeonSubMenuId(ACTION_SET_MOVE); + if (!CanSubMenuItemBeChosen(subMenuId)) { + subMenuId = ActionToDungeonSubMenuId(ACTION_UNSET_MOVE); + if (CanSubMenuItemBeChosen(subMenuId)) { + SetSubMenuOptionAction(&leaderInfo->action, subMenuId, GetTeamMemberEntityIndex(entity)); break; } } else { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + SetSubMenuOptionAction(&leaderInfo->action, subMenuId, GetTeamMemberEntityIndex(entity)); break; } } else { - s32 r6 = sub_8044FB4(0x1F); - if (CanSubMenuItemBeChosen(r6)) { - sub_80637BC(&leaderInfo->action, r6, GetTeamMemberEntityIndex(entity)); + s32 subMenuId = ActionToDungeonSubMenuId(ACTION_SWITCH_AI_MOVE); + if (CanSubMenuItemBeChosen(subMenuId)) { + SetSubMenuOptionAction(&leaderInfo->action, subMenuId, GetTeamMemberEntityIndex(entity)); break; } } @@ -388,9 +396,9 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if ((gRealInputs.pressed & GetConfirmationButtons()) || gDungeonMenu.unk28.a_button) { if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { - sub_80637A4(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); + MenuChosenOptionToAction(&leaderInfo->action, GetTeamMemberEntityIndex(entity)); if (leaderInfo->action.action != 20 && leaderInfo->action.action != 21) { PlayDungeonConfirmationSE(); } @@ -422,7 +430,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4) return ret; } -void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) +static void ShowMovesMenuWindows(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7) { s32 i, movesCount; WindowTemplate windowNew = { @@ -447,7 +455,7 @@ void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *wi } } - gDungeonMenu.menuIndex = gUnknown_202F2D8; + gDungeonMenu.menuIndex = sChosenMoveSlotId; gDungeonMenu.unk1A = movesCount; gDungeonMenu.unk1C = 4; gDungeonMenu.unk1E = arg6; @@ -482,13 +490,13 @@ void sub_80633E4(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *wi } } - sub_8063578(4, entity, entInfo->moves.moves, 0, a2, arg6); + PrintMoveNamesOnWindow(4, entity, entInfo->moves.moves, 0, a2, arg6); sub_80073B8(2); PrintFormattedStringOnWindow(4, 0, gUnknown_80FDFE8, 2, '\0'); sub_80073E0(2); } -void sub_8063578(s32 count, Entity *entity, Move *moves, s32 windowId, u8 a4, s32 a5) +static void PrintMoveNamesOnWindow(s32 count, Entity *entity, Move *moves, s32 windowId, u8 a4, s32 a5) { s32 i; EntityInfo *entInfo = GetEntInfo(entity); @@ -528,85 +536,85 @@ void sub_8063578(s32 count, Entity *entity, Move *moves, s32 windowId, u8 a4, s3 sub_80073E0(windowId); } -void sub_8063698(Entity *entity, u8 a1, u8 a2) +static void AddSubMenuOptions(Entity *entity, bool8 addLinkOptions, bool8 addUseMove) { EntityInfo *entInfo = GetEntInfo(entity); - Move *move = &entInfo->moves.moves[gUnknown_202F2D8]; + Move *move = &entInfo->moves.moves[sChosenMoveSlotId]; gDungeonSubMenuItemsCount = 0; if (entInfo->isTeamLeader) { - if (a2) { - sub_8044F5C(0x14, 0); + if (addUseMove) { + AddActionToDungeonSubMenu(ACTION_USE_MOVE_PLAYER, 0); } if (MoveFlagExists(move)) { if (MoveFlagSet(move)) { - sub_8044F5C(0x33, 0); + AddActionToDungeonSubMenu(ACTION_UNSET_MOVE, 0); } else { - sub_8044F5C(0x1E, 0); + AddActionToDungeonSubMenu(ACTION_SET_MOVE, 0); } } } else { - sub_8044F5C(0x1F, 0); + AddActionToDungeonSubMenu(ACTION_SWITCH_AI_MOVE, 0); } - if (a1) { - sub_8044F5C(0x20, 0); - sub_8044F5C(0x21, 0); + if (addLinkOptions) { + AddActionToDungeonSubMenu(ACTION_LINK_MOVES, 0); + AddActionToDungeonSubMenu(ACTION_DELINK_MOVES, 0); } - sub_8044F5C(0x1D, 0); - if (!a1) { - sub_8044FF0(0x20); + AddActionToDungeonSubMenu(ACTION_MOVE_INFO, 0); + if (!addLinkOptions) { + SetActionUnusableInDungeonSubMenu(ACTION_LINK_MOVES); } else { - if (!sub_8063C88(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x20); + if (!IsMoveLinkedAndNotCharging(entInfo, sChosenMoveSlotId)) { + SetActionUnusableInDungeonSubMenu(ACTION_LINK_MOVES); } - if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x21); + if (!IsMoveLinked(entInfo, sChosenMoveSlotId)) { + SetActionUnusableInDungeonSubMenu(ACTION_DELINK_MOVES); } } - if (!sub_8063DD4(entInfo, gUnknown_202F2D8)) { - sub_8044FF0(0x21); + if (!IsMoveLinked(entInfo, sChosenMoveSlotId)) { + SetActionUnusableInDungeonSubMenu(ACTION_DELINK_MOVES); } - if (a2) { - bool8 unkBool = FALSE; - if (gUnknown_202F2D8 < MAX_MON_MOVES) { - unkBool = CanAIUseMove(entity, gUnknown_202F2D8, TRUE) != FALSE; + if (addUseMove) { + bool8 moveUnusable = FALSE; + if (sChosenMoveSlotId < MAX_MON_MOVES) { + moveUnusable = CanAIUseMove(entity, sChosenMoveSlotId, TRUE) != FALSE; } - if (!unkBool) { - sub_8044FF0(0x14); + if (!moveUnusable) { + SetActionUnusableInDungeonSubMenu(ACTION_USE_MOVE_PLAYER); } } sub_8045064(); } -void sub_80637A4(ActionContainer *a0, s32 a1) +static void MenuChosenOptionToAction(ActionContainer *a0, s32 teamId) { - sub_80637BC(a0, gDungeonMenu.menuIndex, a1); + SetSubMenuOptionAction(a0, gDungeonMenu.menuIndex, teamId); } -void sub_80637BC(ActionContainer *a0, s32 a1, s32 a2) +static void SetSubMenuOptionAction(ActionContainer *a0, s32 subMenuOptionId, s32 teamId) { - SetMonsterActionFields(a0, gDungeonSubMenu[a1].actionId); - a0->actionParameters[0].actionUseIndex = a2; - a0->actionParameters[1].actionUseIndex = gUnknown_202F2D8; + SetMonsterActionFields(a0, gDungeonSubMenu[subMenuOptionId].actionId); + a0->actionParameters[0].actionUseIndex = teamId; + a0->actionParameters[1].actionUseIndex = sChosenMoveSlotId; } -void sub_80637E8(ActionContainer *a0) +void ActionShowMoveInfo(ActionContainer *a0) { Entity *mon = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; EntityInfo *monInfo = GetEntInfo(mon); monInfo->moves.moves[a0->actionParameters[1].actionUseIndex].moveFlags2 |= 2; - sub_8063834(monInfo->moves.moves, a0->actionParameters[1].actionUseIndex, 4); + ShowMovesInfoWindow(monInfo->moves.moves, a0->actionParameters[1].actionUseIndex, MAX_MON_MOVES); } -void sub_8063834(Move *moves, s32 a1, s32 a2) +static void ShowMovesInfoWindow(Move *moves, s32 firstMoveId, s32 movesCount) { WindowTemplates windows; WindowHeader header; @@ -617,7 +625,7 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) windows.id[0].header = &header; count = 1; - for (i = a1 + 1; i < a2; i++) { + for (i = firstMoveId + 1; i < movesCount; i++) { if (!MoveFlagExists(&moves[i])) break; if (!MoveFlagLinkChain(&moves[i])) @@ -648,7 +656,7 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) gDungeonMenu.unk1A = 0; gDungeonMenu.unk1C = 0; DungeonShowWindows(&windows, TRUE); - statusesCount = unk_PrintMoveDescription(currId, &moves[a1 + currId], 0, statuses); + statusesCount = unk_PrintMoveDescription(currId, &moves[firstMoveId + currId], 0, statuses); while (1) { if (statusesCount != 0) { ShowStatusDescriptionMenuArrow(); @@ -657,7 +665,7 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) nullsub_34(&gDungeonMenu.unk28, 0); DungeonRunFrameActions(0x1C); - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if ((gRealInputs.pressed & GetConfirmationButtons()) || gDungeonMenu.unk28.a_button) { PlayDungeonConfirmationSE(); inputAction = 1; if (statusesCount != 0) { @@ -708,8 +716,6 @@ void sub_8063834(Move *moves, s32 a1, s32 a2) sub_803EAF0(0, 0); } -extern WindowTemplates gUnknown_202F278; - static const WindowHeader sStatusDescriptionHeader = { .count = 1, .width = 16, @@ -717,9 +723,9 @@ static const WindowHeader sStatusDescriptionHeader = { void ShowStatusDescriptionMenu(struct subStruct_203B240 *status, MenuInputStructSub *menuSub) { - sub_80140B4(&gUnknown_202F278); - gUnknown_202F278.id[0].header = &sStatusDescriptionHeader; - DungeonShowWindows(&gUnknown_202F278, TRUE); + sub_80140B4(&sMovesMenuWindows); + sMovesMenuWindows.id[0].header = &sStatusDescriptionHeader; + DungeonShowWindows(&sMovesMenuWindows, TRUE); sub_80073B8(0); strcpy(gFormatBuffer_Monsters[0], status->pokeName); @@ -740,12 +746,7 @@ void ShowStatusDescriptionMenu(struct subStruct_203B240 *status, MenuInputStruct sub_801317C(menuSub); } -extern const u8 *const gUnknown_80F8B40; -extern const u8 *const gUnknown_80F8B64; -extern const u8 *const gUnknown_80F8BB4; -extern const u8 *const gUnknown_80F8B88; - -void sub_8063A70(ActionContainer *a0, bool8 flagToSet) +void ActionSetOrUnsetMove(ActionContainer *a0, bool8 flagToSet) { s32 i; Entity *entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; @@ -777,7 +778,7 @@ void sub_8063A70(ActionContainer *a0, bool8 flagToSet) } } -void sub_8063B54(ActionContainer *a0) +void ActionToggleMoveUsableForAi(ActionContainer *a0) { Entity *entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; EntityInfo *entInfo = GetEntInfo(entity); @@ -790,7 +791,7 @@ void sub_8063B54(ActionContainer *a0) PlaySoundEffect(0x133); } -void sub_8063BB4(ActionContainer *a0) +void ActionLinkMoves(ActionContainer *a0) { s32 linkedCount; Entity *entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; @@ -821,11 +822,11 @@ void sub_8063BB4(ActionContainer *a0) PlaySoundEffect(0x133); } -bool8 sub_8063C88(EntityInfo *entInfo, s32 a1) +static bool8 IsMoveLinkedAndNotCharging(EntityInfo *entInfo, s32 moveId_) { s32 i; bool8 ret = FALSE; - s32 moveId = a1; + s32 moveId = moveId_; if (DoesMoveCharge(entInfo->moves.moves[moveId].id)) return FALSE; @@ -850,7 +851,7 @@ bool8 sub_8063C88(EntityInfo *entInfo, s32 a1) return ret; } -void sub_8063CF0(ActionContainer *a0, bool8 a1) +void ActionDelinkMoves(ActionContainer *a0, bool8 showMsg) { s32 linkedCount; Entity *entity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex]; @@ -875,7 +876,7 @@ void sub_8063CF0(ActionContainer *a0, bool8 a1) unk_FixLinkedMovesSetEnabled4(entInfo->moves.moves); PlaySoundEffect(0x133); - if (a1) { + if (showMsg) { if (unlInked) { LogMessageByIdWithPopupCheckUser(entity, gUnknown_80F8B88); } @@ -886,7 +887,7 @@ void sub_8063CF0(ActionContainer *a0, bool8 a1) } } -bool8 sub_8063DD4(EntityInfo *entInfo, s32 id) +static bool8 IsMoveLinked(EntityInfo *entInfo, s32 id) { bool8 linkFound = FALSE; s32 linkedCount; @@ -909,7 +910,7 @@ bool8 sub_8063DD4(EntityInfo *entInfo, s32 id) return FALSE; } -void sub_8063E30(Move *moves, s32 id) +static void sub_8063E30(Move *moves, s32 id) { s32 i; @@ -926,14 +927,6 @@ void sub_8063E30(Move *moves, s32 id) unk_FixLinkedMovesSetEnabled8(moves); } -extern void sub_8083D1C(void); - -void sub_8064228(Entity *entity, Move *moves, WindowTemplates *windows, WindowHeader *header); -void sub_8064310(Move *moves); - -extern const u8 *const gUnknown_80FDF70; -extern const u8 *const gUnknown_80FDF00; - static inline void ResetMoveFlags(Move *move) { move->moveFlags = 0; @@ -961,7 +954,7 @@ bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBP }; Move movesLocal[8]; - gUnknown_202F2D8 = 0; + sChosenMoveSlotId = 0; while (1) { s32 inputAction; s32 yesNoAnswer; @@ -986,8 +979,8 @@ bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBP PlayDungeonCursorSE(FALSE); } } - ASM_MATCH_TRICK(gUnknown_202F2D8); - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + ASM_MATCH_TRICK(sChosenMoveSlotId); + if ((gRealInputs.pressed & GetConfirmationButtons()) || gDungeonMenu.unk28.a_button) { PlayDungeonConfirmationSE(); inputAction = 0; break; @@ -1007,16 +1000,16 @@ bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBP AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x1E); if (inputAction == 1) { - gUnknown_202F2D8 = -1; + sChosenMoveSlotId = -1; } else { - gUnknown_202F2D8 = gDungeonMenu.menuIndex; + sChosenMoveSlotId = gDungeonMenu.menuIndex; if (inputAction == 2) { sub_803EAF0(0, 0); sub_803E708(8, 0x1B); - ASM_MATCH_TRICK(gUnknown_202F2D8); - sub_8063834(moves, gUnknown_202F2D8, 4); + ASM_MATCH_TRICK(sChosenMoveSlotId); + ShowMovesInfoWindow(moves, sChosenMoveSlotId, MAX_MON_MOVES); continue; } @@ -1036,7 +1029,7 @@ bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBP MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); } - if ((gRealInputs.pressed & sub_8062D88()) || gDungeonMenu.unk28.a_button) { + if ((gRealInputs.pressed & GetConfirmationButtons()) || gDungeonMenu.unk28.a_button) { if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { if (gDungeonMenu.menuIndex == 2) { PlayDungeonConfirmationSE(); @@ -1062,22 +1055,22 @@ bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBP if (inputAction == 1) continue; if (gDungeonMenu.menuIndex == 1) { - sub_8063E30(moves, gUnknown_202F2D8); + sub_8063E30(moves, sChosenMoveSlotId); continue; } if (gDungeonMenu.menuIndex == 2) { - sub_8063834(moves, gUnknown_202F2D8, 8); + ShowMovesInfoWindow(moves, sChosenMoveSlotId, 8); continue; } } - if (gUnknown_202F2D8 < 0) + if (sChosenMoveSlotId < 0) break; if (showYesNoBox) { bool8 linked = FALSE; - Move *move = &moves[gUnknown_202F2D8]; - s32 nextMoveId = gUnknown_202F2D8 + 1; + Move *move = &moves[sChosenMoveSlotId]; + s32 nextMoveId = sChosenMoveSlotId + 1; if (nextMoveId < 8 && MoveFlagExists(&moves[nextMoveId])) { linked = MoveFlagLinkChain(&moves[nextMoveId]) != 0; @@ -1090,8 +1083,8 @@ bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBP } if (yesNoAnswer == 1) { - moves[gUnknown_202F2D8].moveFlags = 0; - for (i = gUnknown_202F2D8 + 1; i < 8; i++) { + moves[sChosenMoveSlotId].moveFlags = 0; + for (i = sChosenMoveSlotId + 1; i < 8; i++) { Move *move = &moves[i]; if (!MoveFlagExists(move)) break; @@ -1121,13 +1114,13 @@ bool8 sub_8063E70(Entity *entity, Move *moves, bool8 showYesNoBox, bool8 allowBP } } - if (gUnknown_202F2D8 < 0) + if (sChosenMoveSlotId < 0) return FALSE; return TRUE; } -void sub_8064228(Entity *entity, Move *moves, WindowTemplates *windows, WindowHeader *header) +static void sub_8064228(Entity *entity, Move *moves, WindowTemplates *windows, WindowHeader *header) { s32 i, count; @@ -1142,7 +1135,7 @@ void sub_8064228(Entity *entity, Move *moves, WindowTemplates *windows, WindowHe } } - gDungeonMenu.menuIndex = gUnknown_202F2D8; + gDungeonMenu.menuIndex = sChosenMoveSlotId; gDungeonMenu.unk1A = count; gDungeonMenu.unk1C = count; gDungeonMenu.unk1E = 0; @@ -1162,8 +1155,39 @@ void sub_8064228(Entity *entity, Move *moves, WindowTemplates *windows, WindowHe DungeonShowWindows(windows, TRUE); sub_80137B0(&gDungeonMenu, 0); SetMessageArgument_2(gFormatBuffer_Monsters[0], GetEntInfo(entity), 0); - sub_8063578(count, entity, moves, 0, 0, 0); + PrintMoveNamesOnWindow(count, entity, moves, 0, 0, 0); } +static void sub_8064310(Move *moves) +{ + gDungeonSubMenuItemsCount = 0; + AddActionToDungeonSubMenu(ACTION_UNK22, 0); + AddActionToDungeonSubMenu(ACTION_DELINK_MOVES, 0); + if (!sub_8064358(moves, sChosenMoveSlotId)) { + SetActionUnusableInDungeonSubMenu(ACTION_DELINK_MOVES); + } + AddActionToDungeonSubMenu(ACTION_MOVE_INFO, 0); +} -// +static bool8 sub_8064358(Move *moves, s32 id) +{ + bool8 linkFound = FALSE; + s32 linkedCount; + + id++; + for (linkedCount = 0; linkedCount < 8 && id < 8; linkedCount++) { + Move *move = &moves[id]; + + if (MoveFlagLinkChain(move)) { + linkFound = TRUE; + id++; + } + else { + break; + } + } + + if (linkFound) + return TRUE; + return FALSE; +} diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index 788f01269..db01beb27 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -87,12 +87,12 @@ void PrintOnMainMenu(bool8 printAll); bool8 ShowDungeonItemsMenu(Entity * a0, struct UnkMenuBitsStruct *a1); void sub_8060D24(UNUSED ActionContainer *a0); bool8 ShowDungeonTeamMenu(Entity *a0); -void sub_80637E8(ActionContainer *a0); -void sub_8063B54(ActionContainer *a0); -void sub_8063BB4(ActionContainer *a0); +void ActionShowMoveInfo(ActionContainer *a0); +void ActionToggleMoveUsableForAi(ActionContainer *a0); +void ActionLinkMoves(ActionContainer *a0); void sub_806752C(ActionContainer *a0); -void sub_8063A70(ActionContainer *a0, bool8 a1); -void sub_8063CF0(ActionContainer *a0, bool8 a1); +void ActionSetOrUnsetMove(ActionContainer *a0, bool8 a1); +void ActionDelinkMoves(ActionContainer *a0, bool8 a1); void sub_8067768(ActionContainer *a0); void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern void sub_80643AC(Entity *pokemon); @@ -113,8 +113,8 @@ extern s32 gDungeonSubMenuItemsCount; extern const u8 gUnknown_8106B50[]; extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); extern Item * sub_8044CC8(Entity *param_1, ActionParameter *param_2, UNUSED s32 a3); -extern void sub_8044F5C(u16 param_1, u8 param_2); -extern void sub_8044FF0(u16 param_1); +extern void AddActionToDungeonSubMenu(u16 param_1, u8 param_2); +extern void SetActionUnusableInDungeonSubMenu(u16 param_1); extern u16 sub_8044DC8(Item *param_1); extern bool8 sub_8046F00(Item *item); extern void sub_8045064(void); @@ -457,22 +457,22 @@ static void sub_806145C(struct UnkFieldTeamMenuStruct *a0) gDungeonSubMenuItemsCount = 0; teamMon = gDungeon->teamPokemon[a0->unk4[gDungeonMenu.menuIndex]]; monInfo = GetEntInfo(teamMon); - sub_8044F5C(0x1B, 0); - sub_8044F5C(0x19, 0); + AddActionToDungeonSubMenu(0x1B, 0); + AddActionToDungeonSubMenu(0x19, 0); if (!monInfo->isTeamLeader) { if (!gDungeon->unk644.unk19 && (monInfo->joinedAt.id != DUNGEON_JOIN_LOCATION_PARTNER || gDungeon->unk644.unk18)) { - sub_8044F5C(0x34, 0); + AddActionToDungeonSubMenu(0x34, 0); } - sub_8044F5C(0x1C, 0); + AddActionToDungeonSubMenu(0x1C, 0); } - sub_8044F5C(0x30, 0); + AddActionToDungeonSubMenu(0x30, 0); if (!monInfo->isTeamLeader) { - sub_8044F5C(0x1A, 0); + AddActionToDungeonSubMenu(0x1A, 0); } if (!monInfo->isTeamLeader && gDungeon->unk644.unk18 && CanLeaderSwitch(gDungeon->unk644.dungeonLocation.id)) { bool32 r5; - sub_8044F5C(0x3B, 0); + AddActionToDungeonSubMenu(0x3B, 0); r5 = TRUE; if (monInfo->teamIndex >= MAX_TEAM_MEMBERS) { r5 = FALSE; @@ -488,16 +488,16 @@ static void sub_806145C(struct UnkFieldTeamMenuStruct *a0) r5 = FALSE; } if (!r5) { - sub_8044FF0(0x3B); + SetActionUnusableInDungeonSubMenu(0x3B); } } if (IsExperienceLocked(monInfo->joinedAt.id)) { - sub_8044FF0(0x19); - sub_8044FF0(0x3B); - sub_8044FF0(0x1A); - sub_8044FF0(0x30); - sub_8044FF0(0x34); + SetActionUnusableInDungeonSubMenu(0x19); + SetActionUnusableInDungeonSubMenu(0x3B); + SetActionUnusableInDungeonSubMenu(0x1A); + SetActionUnusableInDungeonSubMenu(0x30); + SetActionUnusableInDungeonSubMenu(0x34); } sub_8045064(); @@ -622,10 +622,10 @@ void ShowDungeonTacticsMenu(ActionContainer *a0) ResetDungeonMenu(); PlayDungeonConfirmationSE(); gDungeonSubMenuItemsCount = 0; - sub_8044F5C(0x2F, 0); - sub_8044F5C(0xC, 0); + AddActionToDungeonSubMenu(0x2F, 0); + AddActionToDungeonSubMenu(0xC, 0); if (CheckVariousStatuses2(teamMon, TRUE)) { - sub_8044FF0(0x2F); + SetActionUnusableInDungeonSubMenu(0x2F); } CreateDungeonMenuSubWindow(&windows.id[0], 0x16); while (1) { @@ -1081,7 +1081,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) ResetDungeonMenu(); gDungeonSubMenuItemsCount = 0; PlayDungeonConfirmationSE(); - sub_8044F5C(0xC, 0); + AddActionToDungeonSubMenu(0xC, 0); CreateDungeonMenuSubWindow(&windows.id[0], 0x16); while (1) { AddMenuCursorSprite(&gDungeonMenu); @@ -1117,10 +1117,10 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) ResetDungeonMenu(); gDungeonSubMenuItemsCount = 0; PlayDungeonConfirmationSE(); - sub_8044F5C(0x28, 0); - sub_8044F5C(0xC, 0); + AddActionToDungeonSubMenu(0x28, 0); + AddActionToDungeonSubMenu(0xC, 0); if (CheckVariousStatuses2(entity, TRUE)) { - sub_8044FF0(0x28); + SetActionUnusableInDungeonSubMenu(0x28); } CreateDungeonMenuSubWindow(&windows.id[0], 0x16); while (1) { diff --git a/sym_ewram.txt b/sym_ewram.txt index f81b0f6bb..63d6da5e2 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -154,12 +154,8 @@ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */ .space 0x4 .include "src/dungeon_menu_team.o" .space 0x4 - -gUnknown_202F278: /* 202F278 (sub_80639E4) */ - .space 0x60 - -gUnknown_202F2D8: /* 202F2D8 (sub_8062F90 - sub_8064310) */ - .space 0x8 + .include "src/dungeon_menu_moves.o" + .space 0x4 gUnknown_202F2E0: /* 202F2E0 (sub_8064BE0 - sub_8065250) */ .space 0x8 From 7a865991b1ddc28975166360597b37b51cd73352 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 3 Mar 2025 18:52:19 +0100 Subject: [PATCH 22/31] dungeon menu tile done --- asm/code_805D8C8.s | 529 ----------------------------- data/data_8106A4C.s | 4 - include/code_8097DD0.h | 4 +- include/constants/dungeon_action.h | 1 + include/dungeon_menu_tile.h | 8 + ld_script.txt | 2 + src/dungeon_main.c | 26 +- src/dungeon_menu_moves.c | 9 +- src/dungeon_menu_team.c | 24 +- src/dungeon_menu_tile.c | 241 +++++++++++++ 10 files changed, 282 insertions(+), 566 deletions(-) create mode 100644 include/dungeon_menu_tile.h create mode 100644 src/dungeon_menu_tile.c diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 145046781..1895ce031 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,535 +6,6 @@ .text - - - thumb_func_start sub_80643AC -sub_80643AC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xE4 - adds r7, r0, 0 - add r0, sp, 0x68 - mov r9, r0 - mov r1, sp - adds r1, 0x6C - str r1, [sp, 0xD0] - mov r2, sp - adds r2, 0x6E - str r2, [sp, 0xD4] - mov r0, sp - adds r0, 0x70 - str r0, [sp, 0xD8] - adds r1, 0xC - str r1, [sp, 0xDC] - adds r2, 0x22 - str r2, [sp, 0xE0] - adds r0, 0x38 - str r0, [sp, 0xC8] - subs r1, 0x18 - str r1, [sp, 0xC4] - add r2, sp, 0xC0 - mov r10, r2 - ldr r5, _080644C8 - adds r0, r7, 0x4 - str r0, [sp, 0xCC] - ldr r1, _080644CC - mov r8, r1 - movs r6, 0 -_080643F0: - movs r4, 0 - ldr r0, [sp, 0xC4] - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x64] - movs r0, 0x2 - mov r2, r9 - strh r0, [r2] - strh r0, [r2, 0x2] - movs r0, 0x12 - ldr r1, [sp, 0xD0] - strh r0, [r1] - movs r0, 0x4 - ldr r2, [sp, 0xD4] - strh r0, [r2] - movs r0, 0x10 - ldr r1, [sp, 0xD8] - strh r0, [r1] - mov r2, r10 - str r2, [sp, 0x74] - movs r0, 0x3 - ldr r1, [sp, 0xDC] - str r0, [r1, 0x4] - ldr r2, [sp, 0xE0] - str r0, [r2, 0x4] - ldr r1, [sp, 0xC8] - str r0, [r1, 0x4] - mov r0, sp - ldr r1, [sp, 0xC4] - movs r2, 0x60 - bl memcpy - bl PlayDungeonStartButtonSE - adds r0, r7, 0x4 - mov r1, sp - mov r2, r10 - bl sub_806455C - movs r0, 0x2D - bl DungeonRunFrameActions - adds r0, r7, 0 - bl sub_80645D4 - strh r4, [r5, 0x8] - strh r4, [r5, 0xA] - mov r0, sp - movs r1, 0x16 - bl CreateDungeonMenuSubWindow -_0806445C: - adds r0, r5, 0 - bl AddMenuCursorSprite - movs r0, 0x2D - bl DungeonRunFrameActions - mov r2, r8 - ldrh r1, [r2, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08064482 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r5, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_08064482: - mov r0, r8 - ldrh r1, [r0, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0806449C - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r5, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_0806449C: - mov r2, r8 - ldrh r1, [r2, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080644B2 - adds r0, r5, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08064510 -_080644B2: - movs r1, 0x18 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _080644D0 - bl PlayDungeonConfirmationSE - ldr r0, [sp, 0xCC] - bl sub_80645F8 - movs r4, 0x2 - b _0806452A - .align 2, 0 -_080644C8: .4byte gDungeonMenu -_080644CC: .4byte gRealInputs -_080644D0: - movs r2, 0x18 - ldrsh r0, [r5, r2] - bl CanSubMenuItemBeChosen - lsls r0, 24 - cmp r0, 0 - beq _0806450C - ldr r4, [r7, 0x70] - adds r4, 0x44 - ldr r1, _08064508 - movs r2, 0x18 - ldrsh r0, [r5, r2] - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0] - adds r0, r4, 0 - bl SetMonsterActionFields - bl PlayDungeonConfirmationSE - strb r6, [r4, 0x4] - strh r6, [r4, 0x8] - strh r6, [r4, 0xA] - strb r6, [r4, 0xC] - strh r6, [r4, 0x10] - strh r6, [r4, 0x12] - movs r4, 0 - b _0806452A - .align 2, 0 -_08064508: .4byte gDungeonSubMenu -_0806450C: - bl PlayDungeonCancelSE -_08064510: - mov r0, r8 - ldrh r1, [r0, 0x2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08064524 - ldr r1, _08064554 - ldrb r0, [r1] - cmp r0, 0 - beq _0806445C -_08064524: - bl PlayDungeonCancelSE - movs r4, 0x1 -_0806452A: - ldr r0, _08064558 - bl AddMenuCursorSprite - movs r0, 0x2D - bl DungeonRunFrameActions - cmp r4, 0x2 - bne _0806453C - b _080643F0 -_0806453C: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - add sp, 0xE4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08064554: .4byte gUnknown_202EE3A -_08064558: .4byte gDungeonMenu - thumb_func_end sub_80643AC - - thumb_func_start sub_806455C -sub_806455C: - push {r4,r5,lr} - sub sp, 0x54 - adds r4, r0, 0 - adds r0, r1, 0 - movs r5, 0 - movs r1, 0x1 - strb r1, [r2] - strb r5, [r2, 0x1] - movs r1, 0xC - strb r1, [r2, 0x2] - strb r5, [r2, 0x3] - movs r1, 0x1 - bl DungeonShowWindows - movs r0, 0 - bl sub_80073B8 - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetTile - adds r4, r0, 0 - ldr r0, _080645D0 - ldr r2, [r0] - str r5, [sp] - movs r0, 0xC - movs r1, 0 - movs r3, 0 - bl PrintStringOnWindow - ldr r0, [r4, 0x14] - bl EntityIsValid - lsls r0, 24 - cmp r0, 0 - beq _080645C0 - ldr r1, [r4, 0x14] - add r0, sp, 0x4 - movs r2, 0 - bl SubstitutePlaceholderStringTags - str r5, [sp] - movs r0, 0x8 - movs r1, 0x12 - add r2, sp, 0x4 - movs r3, 0 - bl PrintStringOnWindow -_080645C0: - movs r0, 0 - bl sub_80073E0 - add sp, 0x54 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080645D0: .4byte gUnknown_80FE708 - thumb_func_end sub_806455C - - thumb_func_start sub_80645D4 -sub_80645D4: - push {lr} - ldr r1, _080645F4 - movs r0, 0 - str r0, [r1] - movs r0, 0x25 - movs r1, 0 - bl AddActionToDungeonSubMenu - movs r0, 0xC - movs r1, 0 - bl AddActionToDungeonSubMenu - bl sub_8045064 - pop {r0} - bx r0 - .align 2, 0 -_080645F4: .4byte gDungeonSubMenuItemsCount - thumb_func_end sub_80645D4 - - thumb_func_start sub_80645F8 -sub_80645F8: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x110 - str r0, [sp, 0xE4] - mov r0, sp - adds r0, 0x84 - str r0, [sp, 0xF4] - mov r1, sp - adds r1, 0x88 - str r1, [sp, 0xF8] - mov r2, sp - adds r2, 0x8C - str r2, [sp, 0xFC] - mov r3, sp - adds r3, 0x8E - str r3, [sp, 0x100] - adds r0, 0xC - str r0, [sp, 0x104] - adds r1, 0xC - str r1, [sp, 0x108] - adds r2, 0xC - str r2, [sp, 0x10C] - adds r3, 0x22 - str r3, [sp, 0xEC] - adds r0, 0x38 - str r0, [sp, 0xF0] - add r6, sp, 0x14 - subs r1, 0x74 - str r1, [sp, 0xE8] - add r2, sp, 0x80 - mov r10, r2 - add r3, sp, 0xE0 - mov r9, r3 -_08064640: - movs r7, 0 - mov r0, r10 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - ldr r1, [sp, 0xF4] - str r0, [r1] - movs r0, 0x2 - ldr r2, [sp, 0xF8] - strh r0, [r2] - strh r0, [r2, 0x2] - movs r0, 0x1A - ldr r3, [sp, 0xFC] - strh r0, [r3] - movs r0, 0xC - ldr r1, [sp, 0x100] - strh r0, [r1] - ldr r2, [sp, 0x104] - strh r0, [r2] - mov r3, r9 - ldr r0, [sp, 0x108] - str r3, [r0] - movs r0, 0x3 - ldr r1, [sp, 0x10C] - str r0, [r1, 0x4] - ldr r2, [sp, 0xEC] - str r0, [r2, 0x4] - ldr r3, [sp, 0xF0] - str r0, [r3, 0x4] - ldr r0, [sp, 0xE8] - mov r1, r10 - movs r2, 0x60 - bl memcpy - adds r0, r6, 0 - bl sub_801317C - movs r1, 0x1 - add r0, sp, 0xE0 - strb r1, [r0] - movs r1, 0 - mov r0, r9 - strb r1, [r0, 0x1] - movs r0, 0x10 - mov r2, r9 - strb r0, [r2, 0x2] - strb r1, [r2, 0x3] - ldr r3, [sp, 0xE4] - movs r1, 0 - ldrsh r0, [r3, r1] - movs r2, 0x2 - ldrsh r1, [r3, r2] - bl GetTile - ldr r4, [r0, 0x14] - cmp r4, 0 - bne _080646B8 - b _080647D8 -_080646B8: - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x2 - beq _080646C4 - b _080647D8 -_080646C4: - ldr r0, [sp, 0xE8] - movs r1, 0 - bl DungeonShowWindows - adds r0, r4, 0 - bl GetTrapData - adds r4, r0, 0 - ldrb r1, [r4] - mov r0, r10 - bl GetTrapName - movs r0, 0 - bl sub_80073B8 - str r7, [sp] - movs r0, 0x10 - movs r1, 0 - mov r2, r10 - movs r3, 0 - bl PrintStringOnWindow - ldr r5, _08064720 - ldrb r0, [r4] - lsls r0, 2 - adds r0, r5 - ldr r2, [r0] - str r7, [sp] - movs r0, 0x8 - movs r1, 0x18 - movs r3, 0 - bl PrintStringOnWindow - movs r0, 0 - bl sub_80073E0 - ldrb r0, [r4] - lsls r0, 2 - adds r0, r5 - ldr r0, [r0] - add r1, sp, 0x4 - bl sub_8097DF0 - adds r5, r0, 0 - b _08064738 - .align 2, 0 -_08064720: .4byte gTrapDescriptions -_08064724: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08064732 - ldrb r0, [r6, 0x2] - cmp r0, 0 - beq _08064738 -_08064732: - bl PlayDungeonCancelSE - b _080647D8 -_08064738: - cmp r5, 0 - beq _08064740 - bl ShowStatusDescriptionMenuArrow -_08064740: - adds r0, r6, 0 - movs r1, 0 - bl nullsub_34 - movs r0, 0x16 - bl DungeonRunFrameActions - ldr r0, _08064788 - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08064760 - ldrb r0, [r6, 0x1] - cmp r0, 0 - beq _08064724 -_08064760: - bl PlayDungeonConfirmationSE - cmp r5, 0 - beq _080647D8 - movs r4, 0 - cmp r4, r5 - blt _08064770 - b _08064640 -_08064770: - subs r3, r5, 0x1 - mov r8, r3 -_08064774: - lsls r0, r4, 2 - add r0, sp - adds r0, 0x4 - ldr r0, [r0] - adds r1, r6, 0 - bl ShowStatusDescriptionMenu - adds r7, r4, 0x1 - b _080647A0 - .align 2, 0 -_08064788: .4byte gRealInputs -_0806478C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0806479A - ldrb r0, [r6, 0x2] - cmp r0, 0 - beq _080647A0 -_0806479A: - bl PlayDungeonCancelSE - b _080647CC -_080647A0: - cmp r4, r8 - bge _080647A8 - bl ShowStatusDescriptionMenuArrow -_080647A8: - adds r0, r6, 0 - movs r1, 0 - bl nullsub_34 - movs r0, 0x16 - bl DungeonRunFrameActions - ldr r0, _080647D4 - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080647C8 - ldrb r0, [r6, 0x1] - cmp r0, 0 - beq _0806478C -_080647C8: - bl PlayDungeonConfirmationSE -_080647CC: - adds r4, r7, 0 - cmp r4, r5 - blt _08064774 - b _08064640 - .align 2, 0 -_080647D4: .4byte gRealInputs -_080647D8: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - add sp, 0x110 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80645F8 - thumb_func_start ShowDungeonStairsMenu ShowDungeonStairsMenu: push {r4-r7,lr} diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index 413077a14..e6531f822 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -4,10 +4,6 @@ @ CreateFieldItemMenu - sub_8062CA8 -@ ??? - .align 2,0 - .string "pksdir0\0" - @ ??? .align 2,0 .string "pksdir0\0" diff --git a/include/code_8097DD0.h b/include/code_8097DD0.h index 6a8ae9003..2a083c681 100644 --- a/include/code_8097DD0.h +++ b/include/code_8097DD0.h @@ -3,6 +3,6 @@ #include "structs/subStruct_203B240.h" -extern u32 sub_8097DF0(u8 *, struct subStruct_203B240 **); +extern u32 sub_8097DF0(const u8 *, struct subStruct_203B240 **); -#endif // GUARD_CODE_8097DD0_H \ No newline at end of file +#endif // GUARD_CODE_8097DD0_H diff --git a/include/constants/dungeon_action.h b/include/constants/dungeon_action.h index ccd4e8b64..6c47cbb75 100644 --- a/include/constants/dungeon_action.h +++ b/include/constants/dungeon_action.h @@ -14,6 +14,7 @@ enum DungeonAction // Some actions are different between the leader and AI-controlled Pokémon. ACTION_PICK_UP_PLAYER = 0x9, // Picking up an item underfoot. ACTION_THROW_ITEM_PLAYER = 0xB, + ACTION_SHOW_TRAP_INFO = 0xC, ACTION_EAT_BERRY_SEED_DRINK = 0xD, ACTION_USE_TM = 0x12, ACTION_TALK_FIELD = 0x13, // Talking to another Pokémon by facing them and interacting. diff --git a/include/dungeon_menu_tile.h b/include/dungeon_menu_tile.h new file mode 100644 index 000000000..ba619f876 --- /dev/null +++ b/include/dungeon_menu_tile.h @@ -0,0 +1,8 @@ +#ifndef GUARD_DUNGEON_MENU_TRAP_H +#define GUARD_DUNGEON_MENU_TRAP_H + +#include "structs/dungeon_entity.h" + +void ShowDungeonTileMenu(Entity *mon); + +#endif diff --git a/ld_script.txt b/ld_script.txt index 3718d7a2b..b10957d0e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -231,6 +231,7 @@ SECTIONS { src/dungeon_menu_items.o(.text); src/dungeon_menu_team.o(.text); src/dungeon_menu_moves.o(.text); + src/dungeon_menu_tile.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); src/code_805D8C8.o(.text); @@ -550,6 +551,7 @@ SECTIONS { src/dungeon_menu_items.o(.rodata); src/dungeon_menu_team.o(.rodata); src/dungeon_menu_moves.o(.rodata); + src/dungeon_menu_tile.o(.rodata); data/data_8106A4C.o(.rodata); src/code_8066D04.o(.rodata); data/data_8106A4C_2.o(.rodata); diff --git a/src/dungeon_main.c b/src/dungeon_main.c index 0c2681dee..e87ddad6a 100644 --- a/src/dungeon_main.c +++ b/src/dungeon_main.c @@ -46,6 +46,7 @@ #include "dungeon_menu_items.h" #include "dungeon_menu_team.h" #include "dungeon_menu_moves.h" +#include "dungeon_menu_tile.h" #include "constants/dungeon.h" #include "constants/status.h" #include "constants/tactic.h" @@ -94,7 +95,6 @@ void sub_806752C(ActionContainer *a0); void sub_8067768(ActionContainer *a0); void ChangeDungeonCameraPos(DungeonPos *pos, s32 a1, u8 a2, u8 a3); extern bool8 sub_8071A8C(Entity *pokemon); -extern void sub_80643AC(Entity *pokemon); extern void GetWeatherName(u8 *dst, u8 weatherId); extern bool8 sub_8070F14(Entity * pokemon, s32 direction); extern Entity *sub_80696A8(Entity *a0); @@ -1496,24 +1496,22 @@ static void ShowMainMenu(bool8 fromBPress, bool8 a1) } else if (GetEntityType(tileObject) == ENTITY_TRAP) { SetLeaderActionToNothing(1); - sub_80643AC(GetLeader()); + ShowDungeonTileMenu(GetLeader()); if (GetLeaderActionId() != 0) break; } } - else - { - if (tile->terrainType & TERRAIN_TYPE_STAIRS) { - SetLeaderActionToNothing(1); - ShowDungeonStairsMenu(GetLeader()); - if (GetLeaderActionId() != 0) - break; - } - else { - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], GetLeader(), 0); - DisplayDungeonMessage(0, gUnknown_80FDE18, 1); - } + else if (tile->terrainType & TERRAIN_TYPE_STAIRS) { + SetLeaderActionToNothing(1); + ShowDungeonStairsMenu(GetLeader()); + if (GetLeaderActionId() != 0) + break; } + else { + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], GetLeader(), 0); + DisplayDungeonMessage(0, gUnknown_80FDE18, 1); + } + r10 = -1; } else if (chosenOption == MAIN_MENU_OTHERS) { diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index 451a7192e..0b6f06b44 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -28,7 +28,6 @@ #include "code_8044CC8.h" #include "move_util.h" -extern bool8 ShowDungeonMovesMenu(Entity * entity, u8 a1, u8 a2, s32 a3, s32 a4); extern void PlayDungeonStartButtonSE(void); extern void PlayDungeonCancelSE(void); extern void PlayDungeonConfirmationSE(void); @@ -50,10 +49,10 @@ extern void sub_8067768(ActionContainer *a0); extern void sub_806A2BC(Entity *a0, u8 a1); extern bool8 sub_8071A8C(Entity *pokemon); extern void sub_8083D1C(void); +extern s32 ActionToDungeonSubMenuId(u16 param_1); extern s32 gDungeonSubMenuItemsCount; extern MenuInputStruct gDungeonMenu; -extern s32 ActionToDungeonSubMenuId(u16 param_1); extern const u8 *const gUnknown_80FE978; extern const u8 *const gUnknown_80FDFE8; @@ -65,7 +64,7 @@ extern const u8 *const gUnknown_80FDF70; extern const u8 *const gUnknown_80FDF00; static void ShowMovesMenuWindows(Entity *entity, EntityInfo *entInfo, u8 a2, WindowTemplates *windows, WindowHeader *header, u8 *arg5, s32 arg6, s32 arg7); -static void AddSubMenuOptions(Entity *entity, bool8 addLinkOptions, bool8 addUseMove); +static void AddMovesSubMenuOptions(Entity *entity, bool8 addLinkOptions, bool8 addUseMove); static void SetSubMenuOptionAction(ActionContainer *a0, s32 a1, s32 a2); static void MenuChosenOptionToAction(ActionContainer *a0, s32 a1); static void PrintMoveNamesOnWindow(s32 count, Entity *entity, Move *moves, s32 windowId, u8 a4, s32 a5); @@ -343,7 +342,7 @@ bool8 ShowDungeonMovesMenu(Entity * entity, bool8 addLinkOptions, bool8 addUseMo break; } - AddSubMenuOptions(entity, addLinkOptions, addUseMove); + AddMovesSubMenuOptions(entity, addLinkOptions, addUseMove); if (r5 == 3) { s32 subMenuId = ActionToDungeonSubMenuId(ACTION_LINK_MOVES); if (!CanSubMenuItemBeChosen(subMenuId)) { @@ -536,7 +535,7 @@ static void PrintMoveNamesOnWindow(s32 count, Entity *entity, Move *moves, s32 w sub_80073E0(windowId); } -static void AddSubMenuOptions(Entity *entity, bool8 addLinkOptions, bool8 addUseMove) +static void AddMovesSubMenuOptions(Entity *entity, bool8 addLinkOptions, bool8 addUseMove) { EntityInfo *entInfo = GetEntInfo(entity); Move *move = &entInfo->moves.moves[sChosenMoveSlotId]; diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index db01beb27..d19d678a0 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -53,6 +53,7 @@ extern Item *sub_8044D90(Entity *, s32, u32); extern void PlayDungeonStartButtonSE(void); extern void PlayDungeonCancelSE(void); extern void PlayDungeonConfirmationSE(void); +extern void PlayDungeonCursorSE(u8 param_1); extern void sub_806A6E8(Entity *); extern bool8 sub_8047084(s32 itemFlag); extern void HandleTrap(Entity *pokemon, DungeonPos *pos, int param_3, char param_4); @@ -106,14 +107,13 @@ extern void sub_803F508(Entity *); extern void sub_8041AD0(Entity *pokemon); extern void sub_8041AE0(Entity *pokemon); extern void sub_807EC28(bool8); -extern void PlayDungeonCursorSE(u8 param_1); extern u8 *GetDungeonSubMenuItemString(s32 param_1); extern bool8 CanSubMenuItemBeChosen(s32 param_1); extern s32 gDungeonSubMenuItemsCount; extern const u8 gUnknown_8106B50[]; extern void DungeonShowWindows(WindowTemplates *a0, u8 a1); extern Item * sub_8044CC8(Entity *param_1, ActionParameter *param_2, UNUSED s32 a3); -extern void AddActionToDungeonSubMenu(u16 param_1, u8 param_2); +extern void AddActionToDungeonSubMenu(u16 actionId, u8 param_2); extern void SetActionUnusableInDungeonSubMenu(u16 param_1); extern u16 sub_8044DC8(Item *param_1); extern bool8 sub_8046F00(Item *item); @@ -159,7 +159,7 @@ struct UnkFieldTeamMenuStruct }; static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, WindowTemplates *windows, bool8 a2); -static void sub_806145C(struct UnkFieldTeamMenuStruct *a0); +static void AddTeamSubMenuOptions(struct UnkFieldTeamMenuStruct *a0); static void ChosenSubMenuToAction(ActionContainer *a0, struct UnkFieldTeamMenuStruct *a1); static void PrintMonTactics(s32 firstId, u8 *tacticIds, EntityInfo *mon, s32 windowId); static void ShowUpArrowSprite(void); @@ -272,7 +272,7 @@ bool8 ShowDungeonTeamMenu(Entity *a0) sp.unk0 = gDungeonMenu.menuIndex; gTeamMenuChosenId = gDungeonMenu.menuIndex; - sub_806145C(&sp); + AddTeamSubMenuOptions(&sp); if (r10) { EntityInfo *info = GetEntInfo(a0); SetMonsterActionFields(&info->action, 0x1B); @@ -449,7 +449,7 @@ static void PrintOnDungeonTeamMenu(struct UnkFieldTeamMenuStruct *a0, WindowTemp sub_80073E0(0); } -static void sub_806145C(struct UnkFieldTeamMenuStruct *a0) +static void AddTeamSubMenuOptions(struct UnkFieldTeamMenuStruct *a0) { Entity *teamMon; EntityInfo *monInfo; @@ -457,17 +457,17 @@ static void sub_806145C(struct UnkFieldTeamMenuStruct *a0) gDungeonSubMenuItemsCount = 0; teamMon = gDungeon->teamPokemon[a0->unk4[gDungeonMenu.menuIndex]]; monInfo = GetEntInfo(teamMon); - AddActionToDungeonSubMenu(0x1B, 0); - AddActionToDungeonSubMenu(0x19, 0); + AddActionToDungeonSubMenu(ACTION_CHECK_SUMMARY, 0); + AddActionToDungeonSubMenu(ACTION_CHECK_MOVES, 0); if (!monInfo->isTeamLeader) { if (!gDungeon->unk644.unk19 && (monInfo->joinedAt.id != DUNGEON_JOIN_LOCATION_PARTNER || gDungeon->unk644.unk18)) { AddActionToDungeonSubMenu(0x34, 0); } - AddActionToDungeonSubMenu(0x1C, 0); + AddActionToDungeonSubMenu(ACTION_TALK_MENU, 0); } AddActionToDungeonSubMenu(0x30, 0); if (!monInfo->isTeamLeader) { - AddActionToDungeonSubMenu(0x1A, 0); + AddActionToDungeonSubMenu(ACTION_CHANGE_TACTICS, 0); } if (!monInfo->isTeamLeader && gDungeon->unk644.unk18 && CanLeaderSwitch(gDungeon->unk644.dungeonLocation.id)) { bool32 r5; @@ -493,10 +493,10 @@ static void sub_806145C(struct UnkFieldTeamMenuStruct *a0) } if (IsExperienceLocked(monInfo->joinedAt.id)) { - SetActionUnusableInDungeonSubMenu(0x19); + SetActionUnusableInDungeonSubMenu(ACTION_CHECK_MOVES); SetActionUnusableInDungeonSubMenu(0x3B); - SetActionUnusableInDungeonSubMenu(0x1A); - SetActionUnusableInDungeonSubMenu(0x30); + SetActionUnusableInDungeonSubMenu(ACTION_CHANGE_TACTICS); + SetActionUnusableInDungeonSubMenu(ACTION_VIEW_IQ); SetActionUnusableInDungeonSubMenu(0x34); } diff --git a/src/dungeon_menu_tile.c b/src/dungeon_menu_tile.c new file mode 100644 index 000000000..dce1e0a7b --- /dev/null +++ b/src/dungeon_menu_tile.c @@ -0,0 +1,241 @@ +#include "global.h" +#include "globaldata.h" +#include "dungeon_menu_tile.h" +#include "dungeon_menu_team.h" +#include "dungeon_menu_moves.h" +#include "dungeon_submenu.h" +#include "dungeon.h" +#include "text.h" +#include "menu_input.h" +#include "input.h" +#include "code_8044CC8.h" +#include "dungeon_action.h" +#include "dungeon_util.h" +#include "dungeon_map_access.h" +#include "code_8045A00.h" +#include "trap.h" +#include "code_8097DD0.h" + +extern void PlayDungeonStartButtonSE(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); +extern void PlayDungeonCursorSE(u8 param_1); +extern void sub_803EAF0(u32, u8 *); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern void DungeonRunFrameActions(u32 a0); +extern void DungeonShowWindows(WindowTemplates *a0, bool8 a1); +extern void AddActionToDungeonSubMenu(u16 actionId, u8 param_2); +extern void sub_8045064(void); + +extern MenuInputStruct gDungeonMenu; +extern s32 gDungeonSubMenuItemsCount; + +extern const u8 *const gUnknown_80FE708; +extern const u8 *const gTrapDescriptions[]; + +static void ShowAndPrintOnTileMenu(DungeonPos *pos, WindowTemplates *windows, WindowHeader *header); +static void AddTileSubMenuOptions(Entity *mon); +static void ShowTileDescription(DungeonPos *pos); + +void ShowDungeonTileMenu(Entity *mon) +{ + while (1) { + s32 inputAction = 0; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 4, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + PlayDungeonStartButtonSE(); + ShowAndPrintOnTileMenu(&mon->pos, &windows, &header); + DungeonRunFrameActions(0x2D); + AddTileSubMenuOptions(mon); + gDungeonMenu.unk8.x = 0; + gDungeonMenu.unk8.y = 0; + CreateDungeonMenuSubWindow(&windows.id[0], 22); + + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x2D); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (gDungeonMenu.menuIndex == 1) { + PlayDungeonConfirmationSE(); + ShowTileDescription(&mon->pos); + inputAction = 2; + break; + } + else if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { + ActionContainer *action = &GetEntInfo(mon)->action; + + SetMonsterActionFields(action, gDungeonSubMenu[gDungeonMenu.menuIndex].actionId); + PlayDungeonConfirmationSE(); + action->actionParameters[0].actionUseIndex = 0; + action->actionParameters[0].itemPos.x = 0; + action->actionParameters[0].itemPos.y = 0; + action->actionParameters[1].actionUseIndex = 0; + action->actionParameters[1].itemPos.x = 0; + action->actionParameters[1].itemPos.y = 0; + inputAction = 0; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + inputAction = 1; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x2D); + if (inputAction != 2) + break; + } + + sub_803EAF0(0, 0); +} + +static void ShowAndPrintOnTileMenu(DungeonPos *pos, WindowTemplates *windows, WindowHeader *header) +{ + u8 text[80]; + const Tile *tile; + + header->count = 1; + header->currId = 0; + header->width = 12; + header->f3 = 0; + DungeonShowWindows(windows, TRUE); + sub_80073B8(0); + tile = GetTile(pos->x, pos->y); + + PrintStringOnWindow(12, 0, gUnknown_80FE708, 0, '\0'); + if (EntityIsValid(tile->object)) { + SubstitutePlaceholderStringTags(text, tile->object, 0); + PrintStringOnWindow(8, 18, text, 0, '\0'); + } + sub_80073E0(0); +} + +static void AddTileSubMenuOptions(Entity *mon) +{ + gDungeonSubMenuItemsCount = 0; + AddActionToDungeonSubMenu(ACTION_STEPPED_ON_TRAP, 0); + AddActionToDungeonSubMenu(ACTION_SHOW_TRAP_INFO, 0); + sub_8045064(); +} + +static void ShowTileDescription(DungeonPos *pos) +{ + while (1) { + const Tile *tile; + Entity *object; + Trap *trap; + bool8 bPress = FALSE; + struct subStruct_203B240 *statuses[4]; + MenuInputStructSub menuSub; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 26, + .height = 12, + .unk10 = 12, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + u8 trapName[0x60]; + s32 i, statusesCount; + + sub_801317C(&menuSub); + header.count = 1; + header.currId = 0; + header.width = 16; + header.f3 = 0; + + tile = GetTile(pos->x, pos->y); + object = tile->object; + if (object == NULL) + break; + if (GetEntityType(object) != ENTITY_TRAP) + break; + + DungeonShowWindows(&windows, FALSE); + trap = GetTrapData(object); + GetTrapName(trapName, trap->id); + sub_80073B8(0); + PrintStringOnWindow(16, 0, trapName, 0, '\0'); + PrintStringOnWindow(8, 24, gTrapDescriptions[trap->id], 0, '\0'); + sub_80073E0(0); + statusesCount = sub_8097DF0(gTrapDescriptions[trap->id], statuses); + while (1) { + if (statusesCount != 0) { + ShowStatusDescriptionMenuArrow(); + } + nullsub_34(&menuSub, 0); + DungeonRunFrameActions(0x16); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + PlayDungeonConfirmationSE(); + bPress = FALSE; + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + if (bPress || statusesCount == 0) + break; + + for (i = 0; i < statusesCount; i++) { + ShowStatusDescriptionMenu(statuses[i], &menuSub); + while (1) { + if (i < statusesCount - 1) { + ShowStatusDescriptionMenuArrow(); + } + nullsub_34(&menuSub, 0); + DungeonRunFrameActions(0x16); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + PlayDungeonCancelSE(); + break; + } + } + } + } + + sub_803EAF0(0, 0); +} From 2d0e962d9ee1f279893f7b87e1f219de276e6f73 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 3 Mar 2025 20:42:35 +0100 Subject: [PATCH 23/31] dungeon menu stairs --- asm/code_805D8C8.s | 492 ----------------------------- data/data_8106A4C.s | 3 - include/constants/dungeon_action.h | 2 +- include/dungeon_menu_stairs.h | 8 + ld_script.txt | 2 + src/dungeon_main.c | 2 +- src/dungeon_menu_stairs.c | 243 ++++++++++++++ src/dungeon_menu_tile.c | 2 +- 8 files changed, 256 insertions(+), 498 deletions(-) create mode 100644 include/dungeon_menu_stairs.h create mode 100644 src/dungeon_menu_stairs.c diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 1895ce031..9eacde8f1 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,498 +6,6 @@ .text - thumb_func_start ShowDungeonStairsMenu -ShowDungeonStairsMenu: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xE4 - adds r7, r0, 0 - add r0, sp, 0x68 - mov r9, r0 - mov r1, sp - adds r1, 0x6C - str r1, [sp, 0xD0] - mov r2, sp - adds r2, 0x6E - str r2, [sp, 0xD4] - mov r0, sp - adds r0, 0x70 - str r0, [sp, 0xD8] - adds r1, 0xC - str r1, [sp, 0xDC] - adds r2, 0x22 - str r2, [sp, 0xE0] - adds r0, 0x38 - str r0, [sp, 0xC8] - subs r1, 0x18 - str r1, [sp, 0xC4] - add r2, sp, 0xC0 - mov r10, r2 - ldr r5, _0806490C - adds r0, r7, 0x4 - str r0, [sp, 0xCC] - ldr r1, _08064910 - mov r8, r1 - movs r6, 0 -_08064834: - movs r4, 0 - ldr r0, [sp, 0xC4] - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x64] - movs r0, 0x2 - mov r2, r9 - strh r0, [r2] - strh r0, [r2, 0x2] - movs r0, 0x12 - ldr r1, [sp, 0xD0] - strh r0, [r1] - movs r0, 0x4 - ldr r2, [sp, 0xD4] - strh r0, [r2] - movs r0, 0x10 - ldr r1, [sp, 0xD8] - strh r0, [r1] - mov r2, r10 - str r2, [sp, 0x74] - movs r0, 0x3 - ldr r1, [sp, 0xDC] - str r0, [r1, 0x4] - ldr r2, [sp, 0xE0] - str r0, [r2, 0x4] - ldr r1, [sp, 0xC8] - str r0, [r1, 0x4] - mov r0, sp - ldr r1, [sp, 0xC4] - movs r2, 0x60 - bl memcpy - bl PlayDungeonStartButtonSE - adds r0, r7, 0x4 - mov r1, sp - mov r2, r10 - bl sub_80649A0 - movs r0, 0x2E - bl DungeonRunFrameActions - adds r0, r7, 0 - bl sub_8064A18 - strh r4, [r5, 0x8] - strh r4, [r5, 0xA] - mov r0, sp - movs r1, 0x16 - bl CreateDungeonMenuSubWindow -_080648A0: - adds r0, r5, 0 - bl AddMenuCursorSprite - movs r0, 0x2E - bl DungeonRunFrameActions - mov r2, r8 - ldrh r1, [r2, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080648C6 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r5, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_080648C6: - mov r0, r8 - ldrh r1, [r0, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080648E0 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r5, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_080648E0: - mov r2, r8 - ldrh r1, [r2, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080648F6 - adds r0, r5, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08064954 -_080648F6: - movs r1, 0x18 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _08064914 - bl PlayDungeonConfirmationSE - ldr r0, [sp, 0xCC] - bl sub_8064A3C - movs r4, 0x2 - b _0806496E - .align 2, 0 -_0806490C: .4byte gDungeonMenu -_08064910: .4byte gRealInputs -_08064914: - movs r2, 0x18 - ldrsh r0, [r5, r2] - bl CanSubMenuItemBeChosen - lsls r0, 24 - cmp r0, 0 - beq _08064950 - ldr r4, [r7, 0x70] - adds r4, 0x44 - ldr r1, _0806494C - movs r2, 0x18 - ldrsh r0, [r5, r2] - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0] - adds r0, r4, 0 - bl SetMonsterActionFields - bl PlayDungeonConfirmationSE - strb r6, [r4, 0x4] - strh r6, [r4, 0x8] - strh r6, [r4, 0xA] - strb r6, [r4, 0xC] - strh r6, [r4, 0x10] - strh r6, [r4, 0x12] - movs r4, 0 - b _0806496E - .align 2, 0 -_0806494C: .4byte gDungeonSubMenu -_08064950: - bl PlayDungeonCancelSE -_08064954: - mov r0, r8 - ldrh r1, [r0, 0x2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08064968 - ldr r1, _08064998 - ldrb r0, [r1] - cmp r0, 0 - beq _080648A0 -_08064968: - bl PlayDungeonCancelSE - movs r4, 0x1 -_0806496E: - ldr r0, _0806499C - bl AddMenuCursorSprite - movs r0, 0x2E - bl DungeonRunFrameActions - cmp r4, 0x2 - bne _08064980 - b _08064834 -_08064980: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - add sp, 0xE4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08064998: .4byte gUnknown_202EE3A -_0806499C: .4byte gDungeonMenu - thumb_func_end ShowDungeonStairsMenu - - thumb_func_start sub_80649A0 -sub_80649A0: - push {r4,r5,lr} - sub sp, 0x4 - adds r0, r1, 0 - movs r3, 0 - movs r1, 0x1 - strb r1, [r2] - strb r3, [r2, 0x1] - movs r1, 0xB - strb r1, [r2, 0x2] - strb r3, [r2, 0x3] - movs r1, 0x1 - bl DungeonShowWindows - movs r0, 0 - bl sub_80073B8 - bl GetFloorType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080649E4 - cmp r0, 0x1 - ble _080649D4 - cmp r0, 0x2 - beq _080649DC -_080649D4: - ldr r0, _080649D8 - b _080649E6 - .align 2, 0 -_080649D8: .4byte gUnknown_80FE70C -_080649DC: - ldr r0, _080649E0 - b _080649E6 - .align 2, 0 -_080649E0: .4byte gUnknown_80FE720 -_080649E4: - ldr r0, _08064A14 -_080649E6: - ldr r5, [r0] - movs r4, 0 - str r4, [sp] - movs r0, 0xC - movs r1, 0 - adds r2, r5, 0 - movs r3, 0 - bl PrintStringOnWindow - str r4, [sp] - movs r0, 0x8 - movs r1, 0x12 - adds r2, r5, 0 - movs r3, 0 - bl PrintStringOnWindow - movs r0, 0 - bl sub_80073E0 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08064A14: .4byte gUnknown_80FE724 - thumb_func_end sub_80649A0 - - thumb_func_start sub_8064A18 -sub_8064A18: - push {lr} - ldr r1, _08064A38 - movs r0, 0 - str r0, [r1] - movs r0, 0x26 - movs r1, 0 - bl AddActionToDungeonSubMenu - movs r0, 0xC - movs r1, 0 - bl AddActionToDungeonSubMenu - bl sub_8045064 - pop {r0} - bx r0 - .align 2, 0 -_08064A38: .4byte gDungeonSubMenuItemsCount - thumb_func_end sub_8064A18 - - thumb_func_start sub_8064A3C -sub_8064A3C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xE8 - mov r0, sp - adds r0, 0x20 - str r0, [sp, 0xE4] - add r1, sp, 0x80 - mov r10, r1 - add r0, sp, 0xE0 - mov r9, r0 - add r5, sp, 0x14 -_08064A58: - mov r0, r10 - movs r1, 0 - movs r2, 0x60 - bl memset - add r1, sp, 0x84 - movs r0, 0x6 - str r0, [r1] - add r0, sp, 0x88 - movs r1, 0x2 - strh r1, [r0] - strh r1, [r0, 0x2] - add r1, sp, 0x8C - movs r0, 0x1A - strh r0, [r1] - mov r0, sp - adds r0, 0x8E - movs r1, 0xC - strh r1, [r0] - add r0, sp, 0x90 - strh r1, [r0] - add r0, sp, 0x94 - mov r1, r9 - str r1, [r0] - add r0, sp, 0x98 - movs r1, 0x3 - str r1, [r0, 0x4] - add r0, sp, 0xB0 - str r1, [r0, 0x4] - add r0, sp, 0xC8 - str r1, [r0, 0x4] - ldr r0, [sp, 0xE4] - mov r1, r10 - movs r2, 0x60 - bl memcpy - add r0, sp, 0x14 - bl sub_801317C - movs r0, 0x1 - mov r1, r9 - strb r0, [r1] - movs r0, 0 - strb r0, [r1, 0x1] - movs r0, 0x10 - strb r0, [r1, 0x2] - movs r0, 0 - strb r0, [r1, 0x3] - ldr r0, [sp, 0xE4] - movs r1, 0 - bl DungeonShowWindows - bl GetFloorType - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - bl sub_80073B8 - ldr r0, _08064B0C - lsls r4, 2 - adds r0, r4, r0 - ldr r2, [r0] - movs r1, 0 - str r1, [sp] - movs r0, 0x10 - movs r3, 0 - bl PrintStringOnWindow - ldr r0, _08064B10 - adds r4, r0 - ldr r4, [r4] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x18 - adds r2, r4, 0 - movs r3, 0 - bl PrintStringOnWindow - movs r0, 0 - bl sub_80073E0 - adds r0, r4, 0 - add r1, sp, 0x4 - bl sub_8097DF0 - adds r6, r0, 0 - b _08064B28 - .align 2, 0 -_08064B0C: .4byte gUnknown_80F8104 -_08064B10: .4byte gUnknown_80F7F70 -_08064B14: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08064B22 - ldrb r0, [r5, 0x2] - cmp r0, 0 - beq _08064B28 -_08064B22: - bl PlayDungeonCancelSE - b _08064BC8 -_08064B28: - cmp r6, 0 - beq _08064B30 - bl ShowStatusDescriptionMenuArrow -_08064B30: - adds r0, r5, 0 - movs r1, 0 - bl nullsub_34 - movs r0, 0x16 - bl DungeonRunFrameActions - ldr r0, _08064B78 - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08064B50 - ldrb r0, [r5, 0x1] - cmp r0, 0 - beq _08064B14 -_08064B50: - bl PlayDungeonConfirmationSE - cmp r6, 0 - beq _08064BC8 - movs r4, 0 - cmp r4, r6 - blt _08064B60 - b _08064A58 -_08064B60: - subs r1, r6, 0x1 - mov r8, r1 -_08064B64: - lsls r0, r4, 2 - add r0, sp - adds r0, 0x4 - ldr r0, [r0] - adds r1, r5, 0 - bl ShowStatusDescriptionMenu - adds r7, r4, 0x1 - b _08064B90 - .align 2, 0 -_08064B78: .4byte gRealInputs -_08064B7C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08064B8A - ldrb r0, [r5, 0x2] - cmp r0, 0 - beq _08064B90 -_08064B8A: - bl PlayDungeonCancelSE - b _08064BBC -_08064B90: - cmp r4, r8 - bge _08064B98 - bl ShowStatusDescriptionMenuArrow -_08064B98: - adds r0, r5, 0 - movs r1, 0 - bl nullsub_34 - movs r0, 0x16 - bl DungeonRunFrameActions - ldr r0, _08064BC4 - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08064BB8 - ldrb r0, [r5, 0x1] - cmp r0, 0 - beq _08064B7C -_08064BB8: - bl PlayDungeonConfirmationSE -_08064BBC: - adds r4, r7, 0 - cmp r4, r6 - blt _08064B64 - b _08064A58 - .align 2, 0 -_08064BC4: .4byte gRealInputs -_08064BC8: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - add sp, 0xE8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8064A3C - thumb_func_start ShowDungeonOthersMenu ShowDungeonOthersMenu: push {r4-r7,lr} diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index e6531f822..bd90f8ebf 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -4,9 +4,6 @@ @ CreateFieldItemMenu - sub_8062CA8 -@ ??? - .align 2,0 - .string "pksdir0\0" @ CreateFieldDungeonMenu - CreateFieldOthersMenu .align 2,0 diff --git a/include/constants/dungeon_action.h b/include/constants/dungeon_action.h index 6c47cbb75..c4ff73040 100644 --- a/include/constants/dungeon_action.h +++ b/include/constants/dungeon_action.h @@ -14,7 +14,7 @@ enum DungeonAction // Some actions are different between the leader and AI-controlled Pokémon. ACTION_PICK_UP_PLAYER = 0x9, // Picking up an item underfoot. ACTION_THROW_ITEM_PLAYER = 0xB, - ACTION_SHOW_TRAP_INFO = 0xC, + ACTION_SHOW_INFO = 0xC, ACTION_EAT_BERRY_SEED_DRINK = 0xD, ACTION_USE_TM = 0x12, ACTION_TALK_FIELD = 0x13, // Talking to another Pokémon by facing them and interacting. diff --git a/include/dungeon_menu_stairs.h b/include/dungeon_menu_stairs.h new file mode 100644 index 000000000..642d0ecf5 --- /dev/null +++ b/include/dungeon_menu_stairs.h @@ -0,0 +1,8 @@ +#ifndef GUARD_DUNGEON_MENU_STAIRS_H +#define GUARD_DUNGEON_MENU_STAIRS_H + +#include "structs/dungeon_entity.h" + +void ShowDungeonStairsMenu(Entity *mon); + +#endif diff --git a/ld_script.txt b/ld_script.txt index b10957d0e..f841b7bc2 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -232,6 +232,7 @@ SECTIONS { src/dungeon_menu_team.o(.text); src/dungeon_menu_moves.o(.text); src/dungeon_menu_tile.o(.text); + src/dungeon_menu_stairs.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); src/code_805D8C8.o(.text); @@ -552,6 +553,7 @@ SECTIONS { src/dungeon_menu_team.o(.rodata); src/dungeon_menu_moves.o(.rodata); src/dungeon_menu_tile.o(.rodata); + src/dungeon_menu_stairs.o(.rodata); data/data_8106A4C.o(.rodata); src/code_8066D04.o(.rodata); data/data_8106A4C_2.o(.rodata); diff --git a/src/dungeon_main.c b/src/dungeon_main.c index e87ddad6a..1a93e8edc 100644 --- a/src/dungeon_main.c +++ b/src/dungeon_main.c @@ -47,6 +47,7 @@ #include "dungeon_menu_team.h" #include "dungeon_menu_moves.h" #include "dungeon_menu_tile.h" +#include "dungeon_menu_stairs.h" #include "constants/dungeon.h" #include "constants/status.h" #include "constants/tactic.h" @@ -71,7 +72,6 @@ extern void sub_8045DB4(DungeonPos *, u32); bool8 sub_807EF48(void); void sub_806A2BC(Entity *a0, u8 a1); bool8 sub_80701A4(Entity *a0); -void ShowDungeonStairsMenu(Entity *a0); void sub_803E708(s32 a0, s32 a1); void sub_8040A78(void); void ShowDungeonOthersMenu(void); diff --git a/src/dungeon_menu_stairs.c b/src/dungeon_menu_stairs.c new file mode 100644 index 000000000..ed059ec8c --- /dev/null +++ b/src/dungeon_menu_stairs.c @@ -0,0 +1,243 @@ +#include "global.h" +#include "globaldata.h" +#include "dungeon_menu_stairs.h" +#include "dungeon_menu_team.h" +#include "dungeon_menu_moves.h" +#include "dungeon_submenu.h" +#include "dungeon.h" +#include "text.h" +#include "menu_input.h" +#include "input.h" +#include "code_8044CC8.h" +#include "dungeon_action.h" +#include "dungeon_util.h" +#include "dungeon_map_access.h" +#include "code_8045A00.h" +#include "code_8097DD0.h" +#include "dungeon_generation.h" + +extern void PlayDungeonStartButtonSE(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); +extern void PlayDungeonCursorSE(u8 param_1); +extern void sub_803EAF0(u32, u8 *); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern void DungeonRunFrameActions(u32 a0); +extern void DungeonShowWindows(WindowTemplates *a0, bool8 a1); +extern void AddActionToDungeonSubMenu(u16 actionId, u8 param_2); +extern void sub_8045064(void); +extern u8 GetFloorType(void); + +extern MenuInputStruct gDungeonMenu; +extern s32 gDungeonSubMenuItemsCount; + +extern const u8 *const gUnknown_80FE70C; +extern const u8 *const gUnknown_80FE720; +extern const u8 *const gUnknown_80FE724; +extern const u8 *const gUnknown_80F8104[]; +extern const u8 *const gUnknown_80F7F70[]; + +static void ShowAndPrintOnStairsMenu(DungeonPos *pos, WindowTemplates *windows, WindowHeader *header); +static void AddStairsSubMenuOptions(Entity *mon); +static void ShowStairsDescription(DungeonPos *pos); + +// Pretty much a copy of ShowDungeonTileMenu +void ShowDungeonStairsMenu(Entity *mon) +{ + while (1) { + s32 inputAction = 0; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 4, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + PlayDungeonStartButtonSE(); + ShowAndPrintOnStairsMenu(&mon->pos, &windows, &header); + DungeonRunFrameActions(0x2E); + AddStairsSubMenuOptions(mon); + gDungeonMenu.unk8.x = 0; + gDungeonMenu.unk8.y = 0; + CreateDungeonMenuSubWindow(&windows.id[0], 22); + + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x2E); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (gDungeonMenu.menuIndex == 1) { + PlayDungeonConfirmationSE(); + ShowStairsDescription(&mon->pos); + inputAction = 2; + break; + } + else if (CanSubMenuItemBeChosen(gDungeonMenu.menuIndex)) { + ActionContainer *action = &GetEntInfo(mon)->action; + + SetMonsterActionFields(action, gDungeonSubMenu[gDungeonMenu.menuIndex].actionId); + PlayDungeonConfirmationSE(); + action->actionParameters[0].actionUseIndex = 0; + action->actionParameters[0].itemPos.x = 0; + action->actionParameters[0].itemPos.y = 0; + action->actionParameters[1].actionUseIndex = 0; + action->actionParameters[1].itemPos.x = 0; + action->actionParameters[1].itemPos.y = 0; + inputAction = 0; + break; + } + PlayDungeonCancelSE(); + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + inputAction = 1; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x2E); + if (inputAction != 2) + break; + } + + sub_803EAF0(0, 0); +} + +static void ShowAndPrintOnStairsMenu(DungeonPos *pos, WindowTemplates *windows, WindowHeader *header) +{ + const u8 *str; + + header->count = 1; + header->currId = 0; + header->width = 11; + header->f3 = 0; + DungeonShowWindows(windows, TRUE); + sub_80073B8(0); + switch (GetFloorType()) { + default: + case FLOOR_TYPE_NORMAL: + str = gUnknown_80FE70C; + break; + case FLOOR_TYPE_RESCUE: + str = gUnknown_80FE720; + break; + case FLOOR_TYPE_FIXED: + str = gUnknown_80FE724; + break; + } + PrintStringOnWindow(12, 0, str, 0, '\0'); + PrintStringOnWindow(8, 18, str, 0, '\0'); + sub_80073E0(0); +} + +static void AddStairsSubMenuOptions(Entity *mon) +{ + gDungeonSubMenuItemsCount = 0; + AddActionToDungeonSubMenu(ACTION_STAIRS, 0); + AddActionToDungeonSubMenu(ACTION_SHOW_INFO, 0); + sub_8045064(); +} + +// Again, almost identical to its Tile counterpart. +static void ShowStairsDescription(DungeonPos *pos) +{ + while (1) { + u8 floorType; + bool8 bPress; + struct subStruct_203B240 *statuses[4]; + MenuInputStructSub menuSub; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 26, + .height = 12, + .unk10 = 12, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + s32 i, statusesCount; + + sub_801317C(&menuSub); + header.count = 1; + header.currId = 0; + header.width = 16; + header.f3 = 0; + + DungeonShowWindows(&windows, FALSE); + floorType = GetFloorType(); + sub_80073B8(0); + PrintStringOnWindow(16, 0, gUnknown_80F8104[floorType], 0, '\0'); + PrintStringOnWindow(8, 24, gUnknown_80F7F70[floorType], 0, '\0'); + sub_80073E0(0); + statusesCount = sub_8097DF0(gUnknown_80F7F70[floorType], statuses); + while (1) { + if (statusesCount != 0) { + ShowStatusDescriptionMenuArrow(); + } + nullsub_34(&menuSub, 0); + DungeonRunFrameActions(0x16); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + PlayDungeonConfirmationSE(); + bPress = FALSE; + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + if (bPress || statusesCount == 0) + break; + + for (i = 0; i < statusesCount; i++) { + ShowStatusDescriptionMenu(statuses[i], &menuSub); + while (1) { + if (i < statusesCount - 1) { + ShowStatusDescriptionMenuArrow(); + } + nullsub_34(&menuSub, 0); + DungeonRunFrameActions(0x16); + if ((gRealInputs.pressed & A_BUTTON) || menuSub.a_button) { + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || menuSub.b_button) { + PlayDungeonCancelSE(); + break; + } + } + } + } + + sub_803EAF0(0, 0); +} + diff --git a/src/dungeon_menu_tile.c b/src/dungeon_menu_tile.c index dce1e0a7b..e0e76768f 100644 --- a/src/dungeon_menu_tile.c +++ b/src/dungeon_menu_tile.c @@ -143,7 +143,7 @@ static void AddTileSubMenuOptions(Entity *mon) { gDungeonSubMenuItemsCount = 0; AddActionToDungeonSubMenu(ACTION_STEPPED_ON_TRAP, 0); - AddActionToDungeonSubMenu(ACTION_SHOW_TRAP_INFO, 0); + AddActionToDungeonSubMenu(ACTION_SHOW_INFO, 0); sub_8045064(); } From 9cb12a8258e53d8b73c10539ae55ea459ada5f6a Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 3 Mar 2025 22:05:09 +0100 Subject: [PATCH 24/31] start others menu --- asm/code_805D8C8.s | 195 ---------------------------------- data/data_8106A4C.s | 9 -- include/dungeon_menu_others.h | 6 ++ ld_script.txt | 2 + src/dungeon_main.c | 2 +- src/dungeon_menu_others.c | 118 ++++++++++++++++++++ 6 files changed, 127 insertions(+), 205 deletions(-) create mode 100644 include/dungeon_menu_others.h create mode 100644 src/dungeon_menu_others.c diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 9eacde8f1..ad30d23fd 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -5,201 +5,6 @@ .text - - thumb_func_start ShowDungeonOthersMenu -ShowDungeonOthersMenu: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _08064C94 - ldr r0, [r0] - movs r1, 0xCB - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - movs r1, 0x4 - mov r9, r1 - cmp r0, 0 - beq _08064C02 - movs r0, 0x5 - mov r9, r0 -_08064C02: - ldr r1, _08064C98 - movs r0, 0 - str r0, [r1] - mov r10, r0 - ldr r6, _08064C9C - ldr r7, _08064CA0 - movs r1, 0x2A - adds r1, r6 - mov r8, r1 -_08064C14: - movs r5, 0 - bl sub_8065250 -_08064C1A: - adds r0, r6, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - ldrh r1, [r7, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08064C3E - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r6, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_08064C3E: - ldrh r1, [r7, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08064C56 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r6, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_08064C56: - ldrh r1, [r7, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08064C6A - adds r0, r6, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08064CAA -_08064C6A: - movs r1, 0x18 - ldrsh r0, [r6, r1] - cmp r0, 0x4 - bne _08064C8C - ldr r0, _08064C94 - ldr r0, [r0] - movs r1, 0xCB - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08064CA4 - bl IsBossFight - lsls r0, 24 - cmp r0, 0 - bne _08064CA4 -_08064C8C: - bl PlayDungeonConfirmationSE - b _08064CC0 - .align 2, 0 -_08064C94: .4byte gDungeon -_08064C98: .4byte gUnknown_202F2E0 -_08064C9C: .4byte gDungeonMenu -_08064CA0: .4byte gRealInputs -_08064CA4: - bl PlayDungeonCancelSE - b _08064CC0 -_08064CAA: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08064CBA - mov r1, r8 - ldrb r0, [r1] - cmp r0, 0 - beq _08064C1A -_08064CBA: - bl PlayDungeonCancelSE - movs r5, 0x1 -_08064CC0: - ldr r4, _08064D68 - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - mov r0, r10 - cmp r0, 0 - bne _08064C14 - cmp r5, 0 - bne _08064D4C - ldr r5, _08064D6C - movs r1, 0x18 - ldrsh r0, [r4, r1] - str r0, [r5] - cmp r0, 0 - bne _08064CE8 - bl sub_8064D74 -_08064CE8: - ldr r0, [r5] - cmp r0, 0x1 - bne _08064CF2 - bl sub_80650C0 -_08064CF2: - ldr r0, [r5] - cmp r0, 0x2 - bne _08064CFC - bl DisplayMessageLog -_08064CFC: - ldr r0, [r5] - cmp r0, 0x3 - bne _08064D06 - bl sub_806519C -_08064D06: - ldr r0, _08064D70 - ldr r0, [r0] - movs r1, 0xCB - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08064D2A - bl IsBossFight - lsls r0, 24 - cmp r0, 0 - bne _08064D2A - ldr r0, [r5] - cmp r0, 0x4 - bne _08064D2A - bl sub_8065FB4 -_08064D2A: - ldr r0, _08064D6C - ldr r0, [r0] - cmp r0, r9 - bne _08064D36 - bl sub_8065BF4 -_08064D36: - ldr r0, _08064D70 - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _08064D4C - bl GetLeaderActionId - lsls r0, 16 - cmp r0, 0 - bne _08064D4C - b _08064C14 -_08064D4C: - bl sub_8040A84 - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08064D68: .4byte gDungeonMenu -_08064D6C: .4byte gUnknown_202F2E0 -_08064D70: .4byte gDungeon - thumb_func_end ShowDungeonOthersMenu - thumb_func_start sub_8064D74 sub_8064D74: push {r4-r7,lr} diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index bd90f8ebf..e8f73d173 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -1,14 +1,5 @@ .section .rodata - -@ CreateFieldItemMenu - sub_8062CA8 - - - -@ CreateFieldDungeonMenu - CreateFieldOthersMenu - .align 2,0 - .string "pksdir0\0" - .align 2,0 .global gUnknown_8106CE8 diff --git a/include/dungeon_menu_others.h b/include/dungeon_menu_others.h new file mode 100644 index 000000000..3b6107abf --- /dev/null +++ b/include/dungeon_menu_others.h @@ -0,0 +1,6 @@ +#ifndef GUARD_DUNGEON_MENU_OTHERS_H +#define GUARD_DUNGEON_MENU_OTHERS_H + +void ShowDungeonOthersMenu(void); + +#endif diff --git a/ld_script.txt b/ld_script.txt index f841b7bc2..f514bc695 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -233,6 +233,7 @@ SECTIONS { src/dungeon_menu_moves.o(.text); src/dungeon_menu_tile.o(.text); src/dungeon_menu_stairs.o(.text); + src/dungeon_menu_others.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); src/code_805D8C8.o(.text); @@ -554,6 +555,7 @@ SECTIONS { src/dungeon_menu_moves.o(.rodata); src/dungeon_menu_tile.o(.rodata); src/dungeon_menu_stairs.o(.rodata); + src/dungeon_menu_others.o(.rodata); data/data_8106A4C.o(.rodata); src/code_8066D04.o(.rodata); data/data_8106A4C_2.o(.rodata); diff --git a/src/dungeon_main.c b/src/dungeon_main.c index 1a93e8edc..5c4d407f1 100644 --- a/src/dungeon_main.c +++ b/src/dungeon_main.c @@ -48,6 +48,7 @@ #include "dungeon_menu_moves.h" #include "dungeon_menu_tile.h" #include "dungeon_menu_stairs.h" +#include "dungeon_menu_others.h" #include "constants/dungeon.h" #include "constants/status.h" #include "constants/tactic.h" @@ -74,7 +75,6 @@ void sub_806A2BC(Entity *a0, u8 a1); bool8 sub_80701A4(Entity *a0); void sub_803E708(s32 a0, s32 a1); void sub_8040A78(void); -void ShowDungeonOthersMenu(void); void sub_8075680(u32); void sub_8094C88(void); void sub_8040A84(void); diff --git a/src/dungeon_menu_others.c b/src/dungeon_menu_others.c new file mode 100644 index 000000000..c445fc2fa --- /dev/null +++ b/src/dungeon_menu_others.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "globaldata.h" +#include "dungeon_menu_others.h" +#include "dungeon_submenu.h" +#include "dungeon.h" +#include "text.h" +#include "menu_input.h" +#include "input.h" +#include "code_8044CC8.h" +#include "dungeon_action.h" +#include "dungeon_util.h" +#include "dungeon_map_access.h" +#include "code_8045A00.h" +#include "code_8097DD0.h" +#include "dungeon_message.h" + +extern void PlayDungeonStartButtonSE(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); +extern void PlayDungeonCursorSE(u8 param_1); +extern void sub_803EAF0(u32, u8 *); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern void DungeonRunFrameActions(u32 a0); +extern void DungeonShowWindows(WindowTemplates *a0, bool8 a1); +extern void AddActionToDungeonSubMenu(u16 actionId, u8 param_2); +extern void sub_8045064(void); +extern void sub_8040A84(void); +extern bool8 IsBossFight(void); +extern u16 GetLeaderActionId(void); + +extern MenuInputStruct gDungeonMenu; +extern s32 gDungeonSubMenuItemsCount; +extern s32 gUnknown_202F2E0; + +void sub_8065250(void); +void sub_8064D74(void); +void sub_80650C0(void); +void sub_806519C(void); +void sub_8065FB4(void); +void sub_8065BF4(void); + +void ShowDungeonOthersMenu(void) +{ + bool8 unkAlwaysFalse; + s32 lastId = (gDungeon->unk644.unk14) ? 5 : 4; + + gUnknown_202F2E0 = 0; + unkAlwaysFalse = FALSE; + while (1) { + bool8 bPress = FALSE; + + sub_8065250(); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + if (gDungeonMenu.menuIndex != 4 || (gDungeon->unk644.unk14 && !IsBossFight())) { + PlayDungeonConfirmationSE(); + } + else { + PlayDungeonCancelSE(); + } + break; + } + else if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (unkAlwaysFalse) + continue; + if (bPress) + break; + + gUnknown_202F2E0 = gDungeonMenu.menuIndex; + if (gUnknown_202F2E0 == 0) { + sub_8064D74(); + } + if (gUnknown_202F2E0 == 1) { + sub_80650C0(); + } + if (gUnknown_202F2E0 == 2) { + DisplayMessageLog(); + } + if (gUnknown_202F2E0 == 3) { + sub_806519C(); + } + if (gDungeon->unk644.unk14 && !IsBossFight() && gUnknown_202F2E0 == 4) { + sub_8065FB4(); + } + if (gUnknown_202F2E0 == lastId) { + sub_8065BF4(); + } + + if (gDungeon->unk4) + break; + if (GetLeaderActionId() != ACTION_NOTHING) + break; + } + + sub_8040A84(); + sub_803EAF0(0, NULL); +} + +// From 34f4d6f7a70c15ab716e74ba0c2200a4ded6b0b3 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 4 Mar 2025 10:06:14 +0100 Subject: [PATCH 25/31] More others menu --- asm/code_805D8C8.s | 642 +---------------------------- include/constants/dungeon_action.h | 1 + include/structs/str_dungeon.h | 2 +- src/code_8042B34.c | 2 +- src/code_806FDF4.c | 9 +- src/dungeon_menu_others.c | 370 ++++++++++++++++- 6 files changed, 377 insertions(+), 649 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index ad30d23fd..0f9a482bf 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -5,620 +5,8 @@ .text - thumb_func_start sub_8064D74 -sub_8064D74: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r6, _08064DE0 - ldr r7, _08064DE4 - movs r0, 0x2A - adds r0, r6 - mov r8, r0 -_08064D84: - movs r5, 0 - bl CreateFieldGameOptionsMenu -_08064D8A: - adds r0, r6, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - ldrh r1, [r7, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08064DAE - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r6, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_08064DAE: - ldrh r1, [r7, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08064DC6 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r6, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_08064DC6: - ldrh r1, [r7, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08064DDA - adds r0, r6, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08064DE8 -_08064DDA: - bl PlayDungeonConfirmationSE - b _08064DFE - .align 2, 0 -_08064DE0: .4byte gDungeonMenu -_08064DE4: .4byte gRealInputs -_08064DE8: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08064DF8 - mov r1, r8 - ldrb r0, [r1] - cmp r0, 0 - beq _08064D8A -_08064DF8: - bl PlayDungeonCancelSE - movs r5, 0x1 -_08064DFE: - ldr r4, _08064E2C - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - cmp r5, 0 - bne _08064E56 - ldr r0, _08064E30 - ldr r1, _08064E34 - ldr r0, [r0] - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldr r0, [r0] - str r0, [r1] - movs r1, 0x18 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08064E38 - bl sub_8064E68 - b _08064E40 - .align 2, 0 -_08064E2C: .4byte gDungeonMenu -_08064E30: .4byte gGameOptionsRef -_08064E34: .4byte gUnknown_202F2E8 -_08064E38: - cmp r0, 0x1 - bne _08064E4C - bl sub_8064F50 -_08064E40: - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl sub_8065040 - b _08064D84 -_08064E4C: - cmp r0, 0x2 - bne _08064D84 - bl sub_806509C - b _08064D84 -_08064E56: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8064D74 - thumb_func_start sub_8064E68 -sub_8064E68: - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r7, 0 - ldr r0, _08064EDC - strh r7, [r0, 0x18] - adds r4, r0, 0 - ldr r6, _08064EE0 - movs r0, 0x2A - adds r0, r4 - mov r8, r0 -_08064E7E: - movs r7, 0 - movs r5, 0 - bl CreateFieldDungeonMenu -_08064E86: - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - ldrh r1, [r6, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08064EAA - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r4, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_08064EAA: - ldrh r1, [r6, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08064EC2 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r4, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_08064EC2: - ldrh r1, [r6, 0x4] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08064EE4 - movs r0, 0 - bl PlayDungeonCursorSE - movs r1, 0x18 - ldrsh r0, [r4, r1] - bl sub_8065A8C - b _08064F2E - .align 2, 0 -_08064EDC: .4byte gDungeonMenu -_08064EE0: .4byte gRealInputs -_08064EE4: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08064EFC - movs r0, 0 - bl PlayDungeonCursorSE - movs r2, 0x18 - ldrsh r0, [r4, r2] - bl sub_8065B3C - b _08064F2E -_08064EFC: - ldrh r1, [r6, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08064F0E - mov r2, r8 - ldrb r0, [r2] - cmp r0, 0 - beq _08064F14 -_08064F0E: - bl PlayDungeonConfirmationSE - b _08064F30 -_08064F14: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08064F24 - bl PlayDungeonCancelSE - movs r7, 0x1 - b _08064F30 -_08064F24: - bl sub_8065BEC - lsls r0, 24 - cmp r0, 0 - beq _08064E86 -_08064F2E: - movs r5, 0x1 -_08064F30: - ldr r0, _08064F4C - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - cmp r5, 0 - bne _08064E7E - adds r0, r7, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08064F4C: .4byte gDungeonMenu - thumb_func_end sub_8064E68 - thumb_func_start sub_8064F50 -sub_8064F50: - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r7, 0 - ldr r0, _08064FC8 - strh r7, [r0, 0x18] - adds r4, r0, 0 - ldr r6, _08064FCC - movs r0, 0x2A - adds r0, r4 - mov r8, r0 -_08064F66: - movs r7, 0 - movs r5, 0 - bl CreateFieldOthersMenu -_08064F6E: - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - ldrh r1, [r6, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08064F92 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r4, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_08064F92: - ldrh r1, [r6, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08064FAA - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r4, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_08064FAA: - ldrh r1, [r6, 0x4] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08064FD0 - movs r0, 0 - bl PlayDungeonCursorSE - movs r1, 0x18 - ldrsh r0, [r4, r1] - adds r0, 0x5 - bl sub_8065A8C - b _0806501C - .align 2, 0 -_08064FC8: .4byte gDungeonMenu -_08064FCC: .4byte gRealInputs -_08064FD0: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08064FEA - movs r0, 0 - bl PlayDungeonCursorSE - movs r2, 0x18 - ldrsh r0, [r4, r2] - adds r0, 0x5 - bl sub_8065B3C - b _0806501C -_08064FEA: - ldrh r1, [r6, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08064FFC - mov r2, r8 - ldrb r0, [r2] - cmp r0, 0 - beq _08065002 -_08064FFC: - bl PlayDungeonConfirmationSE - b _0806501E -_08065002: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08065012 - bl PlayDungeonCancelSE - movs r7, 0x1 - b _0806501E -_08065012: - bl sub_8065BF0 - lsls r0, 24 - cmp r0, 0 - beq _08064F6E -_0806501C: - movs r5, 0x1 -_0806501E: - ldr r0, _0806503C - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - cmp r5, 0 - bne _08064F66 - adds r0, r7, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0806503C: .4byte gDungeonMenu - thumb_func_end sub_8064F50 - - thumb_func_start sub_8065040 -sub_8065040: - push {r4,lr} - lsls r0, 24 - movs r4, 0 - cmp r0, 0 - beq _0806505C - ldr r0, _08065058 - bl GameOptionsNotChange - lsls r0, 24 - cmp r0, 0 - bne _0806505E - b _08065062 - .align 2, 0 -_08065058: .4byte gUnknown_202F2E8 -_0806505C: - movs r4, 0x1 -_0806505E: - cmp r4, 0 - beq _08065088 -_08065062: - ldr r0, _08065090 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl DisplayDungeonYesNoMessage - cmp r0, 0x1 - bne _08065088 - ldr r0, _08065094 - ldr r1, [r0] - ldr r0, _08065098 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r0, [r0] - str r0, [r1] - bl sub_803E13C - bl sub_8040238 -_08065088: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08065090: .4byte gUnknown_80FEBF8 -_08065094: .4byte gGameOptionsRef -_08065098: .4byte gUnknown_202F2E8 - thumb_func_end sub_8065040 - - thumb_func_start sub_806509C -sub_806509C: - push {lr} - ldr r0, _080650BC - ldr r1, [r0] - movs r0, 0 - movs r2, 0 - bl DisplayDungeonYesNoMessage - cmp r0, 0x1 - bne _080650B8 - movs r0, 0 - bl InitializeGameOptions - bl sub_803E13C -_080650B8: - pop {r0} - bx r0 - .align 2, 0 -_080650BC: .4byte gUnknown_80FEC28 - thumb_func_end sub_806509C - - thumb_func_start sub_80650C0 -sub_80650C0: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r0, 0 - mov r9, r0 - ldr r5, _08065134 - ldr r6, _08065138 - movs r1, 0x2A - adds r1, r5 - mov r8, r1 -_080650D6: - movs r7, 0 - bl sub_806544C -_080650DC: - adds r0, r5, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - ldrh r1, [r6, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08065100 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r5, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_08065100: - ldrh r1, [r6, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08065118 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r5, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_08065118: - ldrh r1, [r6, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0806512C - adds r0, r5, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _0806513C -_0806512C: - bl PlayDungeonConfirmationSE - b _08065152 - .align 2, 0 -_08065134: .4byte gDungeonMenu -_08065138: .4byte gRealInputs -_0806513C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0806514C - mov r1, r8 - ldrb r0, [r1] - cmp r0, 0 - beq _080650DC -_0806514C: - bl PlayDungeonCancelSE - movs r7, 0x1 -_08065152: - ldr r4, _08065178 - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - mov r0, r9 - cmp r0, 0 - bne _080650D6 - cmp r7, 0 - bne _0806518E - movs r1, 0x18 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0806517C - bl sub_80651D0 - b _08065184 - .align 2, 0 -_08065178: .4byte gDungeonMenu -_0806517C: - cmp r0, 0x1 - bne _08065184 - bl sub_80651FC -_08065184: - bl GetLeaderActionId - lsls r0, 16 - cmp r0, 0 - beq _080650D6 -_0806518E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80650C0 - - thumb_func_start sub_806519C -sub_806519C: - push {lr} - ldr r0, _080651CC - ldr r1, [r0] - movs r2, 0xCF - lsls r2, 3 - adds r0, r1, r2 - ldrb r0, [r0] - subs r2, 0x34 - adds r1, r2 - ldrb r1, [r1] - movs r2, 0 - bl sub_80319A4 -_080651B6: - movs r0, 0x47 - bl DungeonRunFrameActions - bl sub_80319F8 - cmp r0, 0 - beq _080651B6 - bl sub_8031A3C - pop {r0} - bx r0 - .align 2, 0 -_080651CC: .4byte gDungeon - thumb_func_end sub_806519C - - thumb_func_start sub_80651D0 -sub_80651D0: - push {lr} - ldr r0, _080651F0 - ldr r1, [r0] - movs r0, 0 - movs r2, 0 - bl DisplayDungeonYesNoMessage - cmp r0, 0x1 - bne _080651F4 - bl GetLeaderActionContainer - movs r1, 0x2B - bl SetMonsterActionFields - movs r0, 0 - b _080651F6 - .align 2, 0 -_080651F0: .4byte gUnknown_80FDE6C -_080651F4: - movs r0, 0x1 -_080651F6: - pop {r1} - bx r1 - thumb_func_end sub_80651D0 - - thumb_func_start sub_80651FC -sub_80651FC: - push {r4,r5,lr} - ldr r0, _08065238 - ldr r1, [r0] - movs r0, 0 - movs r2, 0 - bl DisplayDungeonYesNoMessage - adds r5, r0, 0 - cmp r5, 0x1 - bne _08065248 - bl GetLeaderActionContainer - movs r1, 0x2E - bl SetMonsterActionFields - ldr r4, _0806523C - bl GetLeader - adds r2, r0, 0 - adds r0, r4, 0 - movs r1, 0 - bl sub_8083AB0 - ldr r0, _08065240 - ldr r0, [r0] - ldr r1, _08065244 - adds r0, r1 - strb r5, [r0] - movs r0, 0 - b _0806524A - .align 2, 0 -_08065238: .4byte gUnknown_80FDEB8 -_0806523C: .4byte 0x0000021b -_08065240: .4byte gDungeon -_08065244: .4byte 0x00000654 -_08065248: - movs r0, 0x1 -_0806524A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80651FC thumb_func_start sub_8065250 sub_8065250: @@ -982,8 +370,8 @@ _0806556C: .4byte gUnknown_80FE8F4 _08065570: .4byte gUnknown_80F7C50 thumb_func_end sub_806544C - thumb_func_start CreateFieldGameOptionsMenu -CreateFieldGameOptionsMenu: + thumb_func_start sub_8065574 +sub_8065574: push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1130,10 +518,10 @@ _080656B0: .4byte gGameOptionsTextPtr _080656B4: .4byte gOptionsDungeonTextPtr _080656B8: .4byte gOptionsOthersTextPtr _080656BC: .4byte gUnknown_80FE748 - thumb_func_end CreateFieldGameOptionsMenu + thumb_func_end sub_8065574 - thumb_func_start CreateFieldDungeonMenu -CreateFieldDungeonMenu: + thumb_func_start sub_80656C0 +sub_80656C0: push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1425,10 +813,10 @@ _0806590E: bx r0 .align 2, 0 _08065944: .4byte gUnknown_202F2E8 - thumb_func_end CreateFieldDungeonMenu + thumb_func_end sub_80656C0 - thumb_func_start CreateFieldOthersMenu -CreateFieldOthersMenu: + thumb_func_start sub_8065948 +sub_8065948: push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1576,7 +964,7 @@ _08065A7C: .4byte gDungeonMenu _08065A80: .4byte gOptionsOthersTextPtr _08065A84: .4byte gOptionsWindowColorPtr _08065A88: .4byte gUnknown_202F2E8 - thumb_func_end CreateFieldOthersMenu + thumb_func_end sub_8065948 thumb_func_start sub_8065A8C sub_8065A8C: @@ -1790,8 +1178,8 @@ sub_8065BF0: bx lr thumb_func_end sub_8065BF0 - thumb_func_start sub_8065BF4 -sub_8065BF4: + thumb_func_start ShowHintsMenu +ShowHintsMenu: push {r4-r7,lr} mov r7, r8 push {r7} @@ -1878,7 +1266,7 @@ _08065CA0: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_8065BF4 + thumb_func_end ShowHintsMenu thumb_func_start sub_8065CAC sub_8065CAC: @@ -2253,8 +1641,8 @@ _08065FA0: _08065FB0: .4byte gUnknown_202EE3A thumb_func_end sub_8065DBC - thumb_func_start sub_8065FB4 -sub_8065FB4: + thumb_func_start ShowRecruitmentSearchMenu +ShowRecruitmentSearchMenu: push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2491,7 +1879,7 @@ _08066194: bx r0 .align 2, 0 _080661A8: .4byte 0x000009f8 - thumb_func_end sub_8065FB4 + thumb_func_end ShowRecruitmentSearchMenu thumb_func_start sub_80661AC sub_80661AC: diff --git a/include/constants/dungeon_action.h b/include/constants/dungeon_action.h index c4ff73040..d01f17a83 100644 --- a/include/constants/dungeon_action.h +++ b/include/constants/dungeon_action.h @@ -36,6 +36,7 @@ enum DungeonAction ACTION_STEPPED_ON_TRAP = 0x25, ACTION_STAIRS = 0x26, ACTION_THROW_STRAIGHT_PLAYER = 0x27, + ACTION_QUICK_SAVE = 0x2B, ACTION_USE_LINK_BOX = 0x2C, ACTION_GIVE_UP = 0x2E, ACTION_VIEW_IQ = 0x30, diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index a06ec3155..ce404ed26 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -249,7 +249,7 @@ typedef struct unkDungeon644 /* 0x8 */ unkStruct_Dungeon64C unk8; /* 0x10 */ u8 unk10; /* 0x11 */ u8 fill11[3]; - /* 0x14 */ u8 unk14; + /* 0x14 */ bool8 canRecruit; /* 0x15 */ u8 unk15; /* 0x16 */ u8 unk16; /* 0x17 */ u8 unk17; diff --git a/src/code_8042B34.c b/src/code_8042B34.c index 879cf7917..a33bbbd79 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -405,7 +405,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8) gDungeon->unk644.unk55 = 0; gDungeon->unk644.unk18 = r8->unk9; gDungeon->unk644.unk16 = r8->unkC; - gDungeon->unk644.unk14 = r8->unkA; + gDungeon->unk644.canRecruit = r8->unkA; gDungeon->unk644.unk15 = r8->unkB; gDungeon->unk644.unk17 = r8->unkD; gDungeon->unk644.unk19 = r8->unkE; diff --git a/src/code_806FDF4.c b/src/code_806FDF4.c index 964cce8c9..7aa696d21 100644 --- a/src/code_806FDF4.c +++ b/src/code_806FDF4.c @@ -332,8 +332,13 @@ bool8 sub_806F9BC(s16 species) FriendAreaCapacity auStack_18; id = species; - if (((gDungeon->unk644.unk14 == 0) || (sub_808529C(id) == 0)) || - ((id == MONSTER_MEW && (gDungeon->unk644.unk34 == 1)))) { + if (!gDungeon->unk644.canRecruit) { + return FALSE; + } + else if (sub_808529C(id) == 0) { + return FALSE; + } + else if (id == MONSTER_MEW && gDungeon->unk644.unk34 == 1) { return FALSE; } else if (id == MONSTER_LATIAS) diff --git a/src/dungeon_menu_others.c b/src/dungeon_menu_others.c index c445fc2fa..a4ecae4a1 100644 --- a/src/dungeon_menu_others.c +++ b/src/dungeon_menu_others.c @@ -10,9 +10,13 @@ #include "dungeon_action.h" #include "dungeon_util.h" #include "dungeon_map_access.h" +#include "dungeon_leader.h" #include "code_8045A00.h" #include "code_8097DD0.h" #include "dungeon_message.h" +#include "game_options.h" +#include "post_office_guide2.h" +#include "dungeon_main.h" extern void PlayDungeonStartButtonSE(void); extern void PlayDungeonCancelSE(void); @@ -27,22 +31,54 @@ extern void sub_8045064(void); extern void sub_8040A84(void); extern bool8 IsBossFight(void); extern u16 GetLeaderActionId(void); +extern void sub_803E13C(void); +extern void sub_8040238(void); +extern void sub_8083AB0(s16 param_0, Entity * target, Entity * entity); extern MenuInputStruct gDungeonMenu; extern s32 gDungeonSubMenuItemsCount; extern s32 gUnknown_202F2E0; +extern GameOptions gUnknown_202F2E8; + +extern const u8 *const gUnknown_80FEBF8; +extern const u8 *const gUnknown_80FEC28; +extern const u8 *const gUnknown_80FDE6C; +extern const u8 *const gUnknown_80FDEB8; void sub_8065250(void); -void sub_8064D74(void); -void sub_80650C0(void); -void sub_806519C(void); -void sub_8065FB4(void); -void sub_8065BF4(void); +void ShowGameOptionsMenu(void); +void ShowQuickSaveGiveUpMenu(void); +void ShowMissionObjectivesMenu(void); +void ShowRecruitmentSearchMenu(void); +void ShowHintsMenu(void); +bool8 ShowDungeonOptions(void); +bool8 ShowOthersOptions(void); +void TrySetNewGameOptions(bool8 bPressed); +void AskToResetToDefault(void); +void sub_8065574(void); +void sub_80656C0(void); +void sub_8065948(void); +void sub_8065A8C(s32 optionId); +void sub_8065B3C(s32 optionId); +bool8 sub_8065BEC(void); +bool8 sub_8065BF0(void); +bool8 AskToQuickSave(void); +bool8 AskToGiveUp(void); +void sub_806544C(void); + +enum { + OTHERS_GAME_OPTIONS, + OTHERS_QUICKSAVE_GIVEUP, + OTHERS_MESSAGE_LOG, + OTHERS_MISSION_OBJECTIVES, + OTHERS_RECRUITMENT_SEARCH, + OTHERS_HINTS, +}; void ShowDungeonOthersMenu(void) { bool8 unkAlwaysFalse; - s32 lastId = (gDungeon->unk644.unk14) ? 5 : 4; + s32 hintsMenuId = (gDungeon->unk644.canRecruit) ? OTHERS_HINTS : OTHERS_HINTS - 1; gUnknown_202F2E0 = 0; unkAlwaysFalse = FALSE; @@ -63,7 +99,7 @@ void ShowDungeonOthersMenu(void) } if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { - if (gDungeonMenu.menuIndex != 4 || (gDungeon->unk644.unk14 && !IsBossFight())) { + if (gDungeonMenu.menuIndex != OTHERS_RECRUITMENT_SEARCH || (gDungeon->unk644.canRecruit && !IsBossFight())) { PlayDungeonConfirmationSE(); } else { @@ -86,23 +122,23 @@ void ShowDungeonOthersMenu(void) break; gUnknown_202F2E0 = gDungeonMenu.menuIndex; - if (gUnknown_202F2E0 == 0) { - sub_8064D74(); + if (gUnknown_202F2E0 == OTHERS_GAME_OPTIONS) { + ShowGameOptionsMenu(); } - if (gUnknown_202F2E0 == 1) { - sub_80650C0(); + if (gUnknown_202F2E0 == OTHERS_QUICKSAVE_GIVEUP) { + ShowQuickSaveGiveUpMenu(); } - if (gUnknown_202F2E0 == 2) { + if (gUnknown_202F2E0 == OTHERS_MESSAGE_LOG) { DisplayMessageLog(); } - if (gUnknown_202F2E0 == 3) { - sub_806519C(); + if (gUnknown_202F2E0 == OTHERS_MISSION_OBJECTIVES) { + ShowMissionObjectivesMenu(); } - if (gDungeon->unk644.unk14 && !IsBossFight() && gUnknown_202F2E0 == 4) { - sub_8065FB4(); + if (gDungeon->unk644.canRecruit && !IsBossFight() && gUnknown_202F2E0 == OTHERS_RECRUITMENT_SEARCH) { + ShowRecruitmentSearchMenu(); } - if (gUnknown_202F2E0 == lastId) { - sub_8065BF4(); + if (gUnknown_202F2E0 == hintsMenuId) { + ShowHintsMenu(); } if (gDungeon->unk4) @@ -115,4 +151,302 @@ void ShowDungeonOthersMenu(void) sub_803EAF0(0, NULL); } +enum { + GAME_OPTION_DUNGEON, + GAME_OPTION_OTHERS, + GAME_OPTION_DEFAULT, +}; + +void ShowGameOptionsMenu(void) +{ + while (1) { + bool8 bPress = FALSE; + + sub_8065574(); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (bPress) + break; + + gUnknown_202F2E8 = *gGameOptionsRef; + if (gDungeonMenu.menuIndex == GAME_OPTION_DUNGEON) { + bPress = ShowDungeonOptions(); + TrySetNewGameOptions(bPress); + } + else if (gDungeonMenu.menuIndex == GAME_OPTION_OTHERS) { + bPress = ShowOthersOptions(); + TrySetNewGameOptions(bPress); + } + else if (gDungeonMenu.menuIndex == GAME_OPTION_DEFAULT) { + AskToResetToDefault(); + } + } + + sub_803EAF0(0, NULL); +} + +enum { + OPTION_SPEED, + OPTION_FAR_OFF_PALS, + OPTION_DAMAGE_TURN, + OPTION_GRIDS, + OPTION_MAP, + OPTION_WINDOWS, +}; + +#define FIRST_OTHERS_OPTION OPTION_WINDOWS + +bool8 ShowDungeonOptions(void) +{ + bool8 dpadMoved; + bool8 bPress = FALSE; + + gDungeonMenu.menuIndex = 0; + while (1) { + bPress = FALSE; + dpadMoved = FALSE; + + sub_80656C0(); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if (gRealInputs.repeated & DPAD_LEFT) { + PlayDungeonCursorSE(FALSE); + sub_8065A8C(gDungeonMenu.menuIndex); + dpadMoved = TRUE; + break; + } + if (gRealInputs.repeated & DPAD_RIGHT) { + PlayDungeonCursorSE(FALSE); + sub_8065B3C(gDungeonMenu.menuIndex); + dpadMoved = TRUE; + break; + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonConfirmationSE(); + break; + } + if (gRealInputs.pressed & B_BUTTON) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + + if (sub_8065BEC()) { + dpadMoved = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (!dpadMoved) + break; + } + + return bPress; +} + +bool8 ShowOthersOptions(void) +{ + bool8 dpadMoved; + bool8 bPress = FALSE; + + gDungeonMenu.menuIndex = 0; + while (1) { + bPress = FALSE; + dpadMoved = FALSE; + + sub_8065948(); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if (gRealInputs.repeated & DPAD_LEFT) { + PlayDungeonCursorSE(FALSE); + sub_8065A8C(gDungeonMenu.menuIndex + FIRST_OTHERS_OPTION); + dpadMoved = TRUE; + break; + } + if (gRealInputs.repeated & DPAD_RIGHT) { + PlayDungeonCursorSE(FALSE); + sub_8065B3C(gDungeonMenu.menuIndex + FIRST_OTHERS_OPTION); + dpadMoved = TRUE; + break; + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonConfirmationSE(); + break; + } + if (gRealInputs.pressed & B_BUTTON) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + + if (sub_8065BF0()) { + dpadMoved = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (!dpadMoved) + break; + } + + return bPress; +} + +void TrySetNewGameOptions(bool8 bPressed) +{ + bool8 optionsChanged = FALSE; + + if (bPressed) { + if (!GameOptionsNotChange(&gUnknown_202F2E8)) + optionsChanged = TRUE; + } + else { + optionsChanged = TRUE; + } + + if (optionsChanged) { + if (DisplayDungeonYesNoMessage(0, gUnknown_80FEBF8, TRUE) == 1) { + *gGameOptionsRef = gUnknown_202F2E8; + sub_803E13C(); + sub_8040238(); + } + } +} + +void AskToResetToDefault(void) +{ + if (DisplayDungeonYesNoMessage(0, gUnknown_80FEC28, FALSE) == 1) { + InitializeGameOptions(FALSE); + sub_803E13C(); + } +} + +void ShowQuickSaveGiveUpMenu(void) +{ + bool8 unkAlwaysFalse = FALSE; + while (1) { + bool8 bPress = FALSE; + + sub_806544C(); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + + if (unkAlwaysFalse) + continue; + if (bPress) + break; + + if (gDungeonMenu.menuIndex == 0) { + AskToQuickSave(); + } + else if (gDungeonMenu.menuIndex == 1) { + AskToGiveUp(); + } + + if (GetLeaderActionId() != ACTION_NOTHING) + break; + } +} + +void ShowMissionObjectivesMenu(void) +{ + sub_80319A4(gDungeon->unk644.unk34, gDungeon->unk644.dungeonLocation.id, 0); + do { + DungeonRunFrameActions(0x47); + } while (sub_80319F8() == 0); + sub_8031A3C(); +} + +bool8 AskToQuickSave(void) +{ + if (DisplayDungeonYesNoMessage(NULL, gUnknown_80FDE6C, FALSE) != 1) { + return TRUE; + } + SetMonsterActionFields(GetLeaderActionContainer(), ACTION_QUICK_SAVE); + return FALSE; +} + +bool8 AskToGiveUp(void) +{ + if (DisplayDungeonYesNoMessage(NULL, gUnknown_80FDEB8, FALSE) != 1) { + return TRUE; + } + SetMonsterActionFields(GetLeaderActionContainer(), ACTION_GIVE_UP); + sub_8083AB0(0x21B, NULL, GetLeader()); + gDungeon->unk644.unk10 = 1; + return FALSE; +} + // From 9c2e1b2aa44250470ac149f31fe2feef2dcdd692 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 4 Mar 2025 13:38:19 +0100 Subject: [PATCH 26/31] menu dung documentation --- asm/code_805D8C8.s | 811 +------------------------------------ data/data_8106A4C.s | 6 - include/structs/str_text.h | 4 +- include/text.h | 6 +- src/code_8015080.c | 38 +- src/code_801EE10.c | 2 +- src/code_8031D70.c | 2 +- src/code_805D8C8.c | 12 +- src/code_8066D04.c | 4 +- src/dungeon_menu_items.c | 4 +- src/dungeon_menu_moves.c | 10 +- src/dungeon_menu_others.c | 312 +++++++++++++- src/dungeon_menu_team.c | 24 +- src/dungeon_message.c | 14 +- src/items.c | 2 +- src/menu_input.c | 36 +- src/moves.c | 2 +- src/options_menu2.c | 6 +- src/string_format.c | 4 +- src/text.c | 343 ++++++++-------- src/wigglytuff_shop2.c | 8 +- 21 files changed, 561 insertions(+), 1089 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 0f9a482bf..a3141d8c6 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,815 +6,6 @@ .text - - - thumb_func_start sub_8065250 -sub_8065250: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC8 - add r5, sp, 0x64 - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x68] - add r0, sp, 0x6C - movs r4, 0 - movs r7, 0 - movs r1, 0x2 - mov r9, r1 - mov r1, r9 - strh r1, [r0] - strh r1, [r0, 0x2] - add r0, sp, 0x70 - movs r1, 0x12 - mov r10, r1 - mov r1, r10 - strh r1, [r0] - adds r0, 0x2 - movs r1, 0x10 - mov r8, r1 - mov r1, r8 - strh r1, [r0] - add r0, sp, 0x74 - strh r1, [r0] - add r6, sp, 0xC4 - str r6, [sp, 0x78] - movs r1, 0x3 - str r1, [sp, 0x80] - add r0, sp, 0x94 - str r1, [r0, 0x4] - add r0, sp, 0xAC - str r1, [r0, 0x4] - add r0, sp, 0x4 - adds r1, r5, 0 - movs r2, 0x60 - bl memcpy - movs r0, 0x1 - strb r0, [r6] - strb r4, [r6, 0x1] - strb r4, [r6, 0x3] - ldr r4, _080653D0 - ldr r0, _080653D4 - ldr r0, [r0] - strh r0, [r4, 0x18] - ldr r1, _080653D8 - ldr r0, [r1] - movs r1, 0xCB - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - movs r5, 0x5 - cmp r0, 0 - beq _080652D2 - movs r5, 0x6 -_080652D2: - strh r5, [r4, 0x1A] - strh r5, [r4, 0x1C] - strh r7, [r4, 0x1E] - strh r7, [r4, 0x20] - strh r7, [r4, 0x4] - mov r0, r8 - strh r0, [r4, 0x6] - strh r7, [r4, 0xC] - strh r7, [r4, 0xE] - strh r7, [r4, 0x14] - str r7, [r4] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - add r0, sp, 0x4 - mov r1, r10 - strh r1, [r0, 0xC] - adds r0, r5, 0 - movs r1, 0xC - bl sub_80095E4 - add r2, sp, 0x4 - adds r1, r2, 0 - adds r0, 0x2 - strh r0, [r1, 0x10] - strh r0, [r2, 0xE] - movs r0, 0xA - strb r0, [r6, 0x2] - adds r0, r1, 0 - mov r1, r9 - strh r1, [r0, 0x8] - movs r1, 0x1 - bl DungeonShowWindows - adds r0, r4, 0 - movs r1, 0 - bl sub_80137B0 - movs r0, 0 - bl sub_80073B8 - movs r5, 0 - ldr r0, _080653DC - ldr r2, [r0] - str r5, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - adds r0, r4, 0 - movs r1, 0 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldr r0, _080653E0 - ldr r2, [r0] - str r7, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - adds r0, r4, 0 - movs r1, 0x1 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldr r0, _080653E4 - ldr r2, [r0] - str r7, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - adds r0, r4, 0 - movs r1, 0x2 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldr r0, _080653E8 - ldr r2, [r0] - str r7, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r5, 0x4 - adds r0, r4, 0 - movs r1, 0x3 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldr r0, _080653EC - ldr r2, [r0] - str r7, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, _080653D8 - ldr r0, [r1] - movs r1, 0xCB - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0806540E - bl IsBossFight - lsls r0, 24 - cmp r0, 0 - bne _080653F4 - movs r5, 0x5 - adds r0, r4, 0 - movs r1, 0x4 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldr r0, _080653F0 - ldr r2, [r0] - str r7, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - b _0806540E - .align 2, 0 -_080653D0: .4byte gDungeonMenu -_080653D4: .4byte gUnknown_202F2E0 -_080653D8: .4byte gDungeon -_080653DC: .4byte gUnknown_80FE8F8 -_080653E0: .4byte gUnknown_80FE9CC -_080653E4: .4byte gUnknown_80FE9E8 -_080653E8: .4byte gUnknown_80FE9F8 -_080653EC: .4byte gUnknown_80FEA10 -_080653F0: .4byte gUnknown_80FEA28 -_080653F4: - movs r5, 0x5 - adds r0, r4, 0 - movs r1, 0x4 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldr r0, _08065440 - ldr r2, [r0] - str r7, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow -_0806540E: - ldr r0, _08065444 - adds r1, r5, 0 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldr r0, _08065448 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - add sp, 0xC8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08065440: .4byte gUnknown_80FEA44 -_08065444: .4byte gDungeonMenu -_08065448: .4byte gUnknown_80FEA50 - thumb_func_end sub_8065250 - - thumb_func_start sub_806544C -sub_806544C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC8 - add r0, sp, 0x64 - mov r10, r0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x68] - add r0, sp, 0x6C - movs r4, 0 - movs r5, 0 - movs r1, 0x2 - mov r9, r1 - mov r2, r9 - strh r2, [r0] - strh r2, [r0, 0x2] - add r0, sp, 0x70 - movs r7, 0x12 - strh r7, [r0] - adds r0, 0x2 - movs r6, 0x10 - strh r6, [r0] - add r0, sp, 0x74 - strh r6, [r0] - add r0, sp, 0xC4 - mov r8, r0 - str r0, [sp, 0x78] - movs r1, 0x3 - str r1, [sp, 0x80] - add r0, sp, 0x94 - str r1, [r0, 0x4] - add r0, sp, 0xAC - str r1, [r0, 0x4] - add r0, sp, 0x4 - mov r1, r10 - movs r2, 0x60 - bl memcpy - movs r0, 0x1 - mov r1, r8 - strb r0, [r1] - strb r4, [r1, 0x1] - strb r4, [r1, 0x3] - ldr r4, _08065568 - strh r5, [r4, 0x18] - mov r2, r9 - strh r2, [r4, 0x1A] - strh r2, [r4, 0x1C] - strh r5, [r4, 0x1E] - strh r5, [r4, 0x20] - strh r5, [r4, 0x4] - strh r6, [r4, 0x6] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - strh r5, [r4, 0x14] - str r5, [r4] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - add r0, sp, 0x4 - strh r7, [r0, 0xC] - movs r0, 0x2 - movs r1, 0xC - bl sub_80095E4 - add r2, sp, 0x4 - adds r1, r2, 0 - adds r0, 0x2 - strh r0, [r1, 0x10] - strh r0, [r2, 0xE] - movs r0, 0xA - mov r1, r8 - strb r0, [r1, 0x2] - adds r0, r2, 0 - mov r2, r9 - strh r2, [r0, 0x8] - movs r1, 0x1 - bl DungeonShowWindows - adds r0, r4, 0 - movs r1, 0 - bl sub_80137B0 - movs r0, 0 - bl sub_80073B8 - ldr r0, _0806556C - ldr r2, [r0] - str r5, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - adds r0, r4, 0 - movs r1, 0 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldr r6, _08065570 - movs r2, 0xAC - lsls r2, 1 - adds r0, r6, r2 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - adds r0, r4, 0 - movs r1, 0x1 - bl GetMenuEntryYCoord - adds r1, r0, 0 - movs r2, 0xB8 - lsls r2, 1 - adds r0, r6, r2 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - add sp, 0xC8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08065568: .4byte gDungeonMenu -_0806556C: .4byte gUnknown_80FE8F4 -_08065570: .4byte gUnknown_80F7C50 - thumb_func_end sub_806544C - - thumb_func_start sub_8065574 -sub_8065574: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xD4 - add r0, sp, 0x10 - mov r10, r0 - add r7, sp, 0x70 - adds r0, r7, 0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x74] - add r0, sp, 0x78 - movs r4, 0 - movs r6, 0 - movs r1, 0x2 - strh r1, [r0] - strh r1, [r0, 0x2] - add r0, sp, 0x7C - movs r1, 0xC - strh r1, [r0] - adds r0, 0x2 - movs r1, 0x10 - mov r9, r1 - mov r1, r9 - strh r1, [r0] - add r0, sp, 0x80 - strh r1, [r0] - add r0, sp, 0x84 - add r1, sp, 0xD0 - mov r8, r1 - str r1, [r0] - add r0, sp, 0x88 - movs r5, 0x3 - str r5, [r0, 0x4] - add r0, sp, 0xA0 - str r5, [r0, 0x4] - add r0, sp, 0xB8 - str r5, [r0, 0x4] - mov r0, r10 - adds r1, r7, 0 - movs r2, 0x60 - bl memcpy - movs r0, 0x1 - mov r1, r8 - strb r0, [r1] - strb r4, [r1, 0x1] - strb r4, [r1, 0x3] - ldr r4, _080656AC - strh r6, [r4, 0x18] - strh r5, [r4, 0x1A] - strh r5, [r4, 0x1C] - strh r6, [r4, 0x1E] - strh r6, [r4, 0x20] - strh r6, [r4, 0x4] - mov r0, r9 - strh r0, [r4, 0x6] - strh r6, [r4, 0xC] - strh r6, [r4, 0xE] - strh r6, [r4, 0x14] - str r6, [r4] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - movs r0, 0xC - mov r1, r10 - strh r0, [r1, 0xC] - movs r0, 0x3 - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - mov r1, r10 - strh r0, [r1, 0x10] - strh r0, [r1, 0xE] - movs r0, 0xA - mov r1, r8 - strb r0, [r1, 0x2] - movs r1, 0x2 - mov r0, r10 - strh r1, [r0, 0x8] - movs r1, 0x1 - bl DungeonShowWindows - adds r0, r4, 0 - movs r1, 0 - bl sub_80137B0 - adds r0, r4, 0 - movs r1, 0 - bl GetMenuEntryYCoord - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0x1 - bl GetMenuEntryYCoord - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x2 - bl GetMenuEntryYCoord - str r0, [sp, 0xC] - movs r0, 0 - bl sub_80073B8 - ldr r0, _080656B0 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [sp, 0x4] - ldr r0, _080656B4 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [sp, 0x8] - ldr r0, _080656B8 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [sp, 0xC] - ldr r0, _080656BC - ldr r2, [r0] - str r6, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - add sp, 0xD4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080656AC: .4byte gDungeonMenu -_080656B0: .4byte gGameOptionsTextPtr -_080656B4: .4byte gOptionsDungeonTextPtr -_080656B8: .4byte gOptionsOthersTextPtr -_080656BC: .4byte gUnknown_80FE748 - thumb_func_end sub_8065574 - - thumb_func_start sub_80656C0 -sub_80656C0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xDC - add r0, sp, 0x18 - mov r9, r0 - add r7, sp, 0x78 - adds r0, r7, 0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x7C] - add r0, sp, 0x80 - movs r5, 0 - movs r1, 0x2 - mov r10, r1 - mov r2, r10 - strh r2, [r0] - strh r2, [r0, 0x2] - add r1, sp, 0x84 - movs r0, 0x12 - strh r0, [r1] - mov r0, sp - adds r0, 0x86 - movs r3, 0x10 - mov r8, r3 - mov r4, r8 - strh r4, [r0] - add r0, sp, 0x88 - strh r4, [r0] - add r0, sp, 0x8C - add r6, sp, 0xD8 - str r6, [r0] - add r0, sp, 0x90 - movs r1, 0x3 - str r1, [r0, 0x4] - add r0, sp, 0xA8 - str r1, [r0, 0x4] - add r0, sp, 0xC0 - str r1, [r0, 0x4] - mov r0, r9 - adds r1, r7, 0 - movs r2, 0x60 - bl memcpy - adds r1, r7, 0 - ldr r0, _0806583C - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - movs r0, 0x1 - strb r0, [r6] - movs r0, 0 - strb r0, [r6, 0x1] - strb r0, [r6, 0x3] - ldr r4, _08065840 - movs r0, 0x5 - strh r0, [r4, 0x1A] - strh r0, [r4, 0x1C] - strh r5, [r4, 0x1E] - strh r5, [r4, 0x20] - strh r5, [r4, 0x4] - mov r1, r8 - strh r1, [r4, 0x6] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - strh r5, [r4, 0x14] - str r5, [r4] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - movs r0, 0x18 - mov r2, r9 - strh r0, [r2, 0xC] - movs r0, 0x5 - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - mov r3, r9 - strh r0, [r3, 0x10] - strh r0, [r3, 0xE] - movs r0, 0xA - strb r0, [r6, 0x2] - mov r0, r10 - strh r0, [r3, 0x8] - mov r0, r9 - movs r1, 0x1 - bl DungeonShowWindows - adds r0, r4, 0 - movs r1, 0 - bl sub_80137B0 - adds r0, r4, 0 - movs r1, 0 - bl GetMenuEntryYCoord - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0x1 - bl GetMenuEntryYCoord - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x2 - bl GetMenuEntryYCoord - str r0, [sp, 0xC] - adds r0, r4, 0 - movs r1, 0x3 - bl GetMenuEntryYCoord - str r0, [sp, 0x10] - adds r0, r4, 0 - movs r1, 0x4 - bl GetMenuEntryYCoord - str r0, [sp, 0x14] - movs r0, 0 - bl sub_80073B8 - ldr r0, _08065844 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [sp, 0x4] - ldr r0, _08065848 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [sp, 0x8] - ldr r0, _0806584C - ldr r2, [r0] - str r5, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [sp, 0xC] - ldr r0, _08065850 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [sp, 0x10] - ldr r0, _08065854 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [sp, 0x14] - ldr r0, _08065858 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r0, _0806585C - ldrb r0, [r0] - adds r4, r7, 0 - cmp r0, 0 - beq _08065860 - ldr r2, [sp, 0x4] - adds r2, 0xA - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - movs r1, 0x88 - movs r3, 0x15 - bl sub_80078A4 - b _08065872 - .align 2, 0 -_0806583C: .4byte gUnknown_8106CE8 -_08065840: .4byte gDungeonMenu -_08065844: .4byte gOptionsDungeonTextPtr -_08065848: .4byte gUnknown_80FE764 -_0806584C: .4byte gUnknown_80FE788 -_08065850: .4byte gUnknown_80FE7A8 -_08065854: .4byte gUnknown_80FE7C0 -_08065858: .4byte gUnknown_80FE7E4 -_0806585C: .4byte gUnknown_202F2E8 -_08065860: - ldr r2, [sp, 0x4] - adds r2, 0xA - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - movs r1, 0x50 - movs r3, 0x16 - bl sub_80078A4 -_08065872: - ldr r0, _08065890 - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _08065894 - ldr r2, [sp, 0x8] - adds r2, 0xA - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - movs r1, 0x88 - movs r3, 0x16 - bl sub_80078A4 - b _080658A6 - .align 2, 0 -_08065890: .4byte gUnknown_202F2E8 -_08065894: - ldr r2, [sp, 0x8] - adds r2, 0xA - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - movs r1, 0x50 - movs r3, 0x12 - bl sub_80078A4 -_080658A6: - ldr r0, _080658C4 - ldrb r0, [r0, 0x2] - cmp r0, 0 - beq _080658C8 - ldr r2, [sp, 0xC] - adds r2, 0xA - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - movs r1, 0x88 - movs r3, 0x10 - bl sub_80078A4 - b _080658DA - .align 2, 0 -_080658C4: .4byte gUnknown_202F2E8 -_080658C8: - ldr r2, [sp, 0xC] - adds r2, 0xA - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - movs r1, 0x50 - movs r3, 0xC - bl sub_80078A4 -_080658DA: - ldr r0, _080658F8 - ldrb r0, [r0, 0x3] - cmp r0, 0 - beq _080658FC - ldr r2, [sp, 0x10] - adds r2, 0xA - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - movs r1, 0x88 - movs r3, 0xC - bl sub_80078A4 - b _0806590E - .align 2, 0 -_080658F8: .4byte gUnknown_202F2E8 -_080658FC: - ldr r2, [sp, 0x10] - adds r2, 0xA - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - movs r1, 0x50 - movs r3, 0x10 - bl sub_80078A4 -_0806590E: - ldr r0, _08065944 - ldrb r1, [r0, 0x4] - lsls r0, r1, 2 - adds r1, r0, r1 - lsls r1, 3 - adds r1, 0x50 - ldr r2, [sp, 0x14] - adds r2, 0xA - adds r0, r4, r0 - ldr r3, [r0] - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - bl sub_80078A4 - movs r0, 0 - bl sub_80073E0 - add sp, 0xDC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08065944: .4byte gUnknown_202F2E8 - thumb_func_end sub_80656C0 - thumb_func_start sub_8065948 sub_8065948: push {r4-r7,lr} @@ -947,7 +138,7 @@ _08065A0A: movs r0, 0x7 str r0, [sp] movs r0, 0 - bl sub_80078A4 + bl AddDoubleUnderScoreHighlight movs r0, 0 bl sub_80073E0 add sp, 0xCC diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index e8f73d173..261929a6b 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -2,12 +2,6 @@ .align 2,0 - .global gUnknown_8106CE8 -gUnknown_8106CE8: @ 8106CE8 - .byte 0x10, 0x00, 0x00, 0x00 - .byte 0x19, 0x00, 0x00, 0x00 - .byte 0x1b, 0x00, 0x00, 0x00 - .global gUnknown_8106CF4 gUnknown_8106CF4: @ 8106CF4 .byte 0x13, 0x00, 0x00, 0x00 diff --git a/include/structs/str_text.h b/include/structs/str_text.h index 686d85608..7eee2f5f7 100644 --- a/include/structs/str_text.h +++ b/include/structs/str_text.h @@ -4,8 +4,8 @@ // size: 0x48 typedef struct Window { - s16 unk0; - s16 unk2; + s16 x; + s16 y; s16 unk4; s16 unk6; s16 unk8; diff --git a/include/text.h b/include/text.h index ac8b7a4bd..b735bc7e4 100644 --- a/include/text.h +++ b/include/text.h @@ -66,12 +66,12 @@ void SetCharacterMask(int a0); void ShowWindows(const WindowTemplates *windows, bool8 a1, bool8 a2); void RestoreUnkTextStruct_8006518(WindowTemplates *unkData); u32 sub_8006544(u32 index); -void sub_8007334(s32 a0); +void sub_8007334(s32 windowId); void sub_80073B8(s32 a0); void sub_80073E0(s32 a0); u32 xxx_call_draw_char(s32 x, s32 y, u32 a2, u32 color, u32 a4); -void sub_80078A4(u32 a0, s32 x, s32 y, s32 a3, u32 color); -void sub_800792C(u32 a0, s32 x, s32 y, s32 a3, u32 color); +void AddDoubleUnderScoreHighlight(u32 windowId, s32 x, s32 y, s32 width, u32 color); +void AddUnderScoreHighlight(u32 windowId, s32 x, s32 y, s32 width, u32 color); void sub_8007A78(u32 a0, s32 x, s32 y, s32 a3, u32 color); void sub_8007B7C(u32 a0, s32 x, s32 y, s32 a3, u32 color); void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6); diff --git a/src/code_8015080.c b/src/code_8015080.c index 40a86da0e..ba719a8f7 100644 --- a/src/code_8015080.c +++ b/src/code_8015080.c @@ -640,34 +640,34 @@ bool8 sub_8015748(void) void sub_80157D8(void) { - Window *txtPtr = &gWindows[1]; + Window *window = &gWindows[1]; // Note: for cases 4 and 5, the code is identical except for different position structs. if (gUnknown_203B1FC->unk0 == 4) { s32 x, y; - x = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].x + (txtPtr->unk0 * 8); + x = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].x + (window->x * 8); SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, x); - y = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].y + (txtPtr->unk2 * 8) + 5; + y = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].y + (window->y * 8) + 5; SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); } else if (gUnknown_203B1FC->unk0 == 5) { s32 x, y; - x = gUnknown_80DB098[gUnknown_203B1FC->unk1C].x + (txtPtr->unk0 * 8); + x = gUnknown_80DB098[gUnknown_203B1FC->unk1C].x + (window->x * 8); SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, x); - y = gUnknown_80DB098[gUnknown_203B1FC->unk1C].y + (txtPtr->unk2 * 8) + 5; + y = gUnknown_80DB098[gUnknown_203B1FC->unk1C].y + (window->y * 8) + 5; SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); } else { s32 x, y; - x = gUnknown_203B1FC->unk1E[gUnknown_203B1FC->unk1C] + (gUnknown_203B1FC->unk8A[gUnknown_203B1FC->unk1C] / 2) + 30 + (txtPtr->unk0 * 8); + x = gUnknown_203B1FC->unk1E[gUnknown_203B1FC->unk1C] + (gUnknown_203B1FC->unk8A[gUnknown_203B1FC->unk1C] / 2) + 30 + (window->x * 8); SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, (u16) x); - y = (txtPtr->unk2 * 8) + 34; + y = (window->y * 8) + 34; SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); } } @@ -675,7 +675,7 @@ void sub_80157D8(void) void sub_80158BC(void) { s32 x, y; - Window *txtPtr = &gWindows[0]; + Window *window = &gWindows[0]; u32 var; switch (sub_8012AE8()) { @@ -702,8 +702,8 @@ void sub_80158BC(void) gUnknown_203B1FC->unk17 = 8; } - x = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].x + (txtPtr->unk0 * 8) - 5; - y = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].y + (txtPtr->unk2 * 8) + 1; + x = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].x + (window->x * 8) - 5; + y = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].y + (window->y * 8) + 1; SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, x); SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, y); } @@ -769,8 +769,8 @@ void sub_8015A08(u32 unused) } } - sub_800792C(0, 0, 0, 0xE0, 0xE); - sub_800792C(0, 0, 0x47, 0xE0, 0xE); + AddUnderScoreHighlight(0, 0, 0, 0xE0, 0xE); + AddUnderScoreHighlight(0, 0, 0x47, 0xE0, 0xE); sub_8007A78(0, 0, 0, 0x48, 0xE); sub_8007A78(0, 0xDF, 0, 0x48, 0xE); sub_80073E0(0); @@ -783,14 +783,14 @@ void sub_8015C1C(void) CallPrepareTextbox_8008C54(1); sub_80073B8(1); if (gUnknown_203B1FC->unk4 != 0) { - sub_800792C(1, 0, 0, 0xE0, 0xE); - sub_800792C(1, 0, 0x37, 0xE0, 0xE); + AddUnderScoreHighlight(1, 0, 0, 0xE0, 0xE); + AddUnderScoreHighlight(1, 0, 0x37, 0xE0, 0xE); sub_8007A78(1, 0, 0, 0x38, 0xE); sub_8007A78(1, 0xDF, 0, 0x38, 0xE); } else { - sub_800792C(1, 0, 0, 0xB0, 0xE); - sub_800792C(1, 0, 0x27, 0xB0, 0xE); + AddUnderScoreHighlight(1, 0, 0, 0xB0, 0xE); + AddUnderScoreHighlight(1, 0, 0x27, 0xB0, 0xE); sub_8007A78(1, 0, 0, 0x28, 0xE); sub_8007A78(1, 0xAF, 0, 0x28, 0xE); } @@ -827,7 +827,7 @@ void sub_8015C1C(void) case 1: case 2: case 3: - sub_80078A4(1, 38, 33, sub_8016028(), 4); + AddDoubleUnderScoreHighlight(1, 38, 33, sub_8016028(), 4); if (sub_8015FEC(gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk1B) > sub_8016028()) { sprintfStatic(text, _("{COLOR RED}%s{RESET}"), gUnknown_203B1FC->unkF8); } @@ -850,7 +850,7 @@ void sub_8015E10(u8 *a0, s32 a1, s32 _a2) s32 a2 = (s16) _a2; for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DAFC0); i++) { - sub_80078A4(a1, gUnknown_80DAFC0[i].x, gUnknown_80DAFC0[i].y + 11 + a2, 11, 5); + AddDoubleUnderScoreHighlight(a1, gUnknown_80DAFC0[i].x, gUnknown_80DAFC0[i].y + 11 + a2, 11, 5); } for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DAFC0) && a0[i] != 0; i++) { @@ -876,7 +876,7 @@ void sub_8015EB4(u8 *a0, s32 a1, s32 _a2) s32 a2 = (s16) _a2; for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DB098); i++) { - sub_80078A4(a1, gUnknown_80DB098[i].x, gUnknown_80DB098[i].y + 11 + a2, 12, 5); + AddDoubleUnderScoreHighlight(a1, gUnknown_80DB098[i].x, gUnknown_80DB098[i].y + 11 + a2, 12, 5); } for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DB098) && a0[i] != 0; i++) { diff --git a/src/code_801EE10.c b/src/code_801EE10.c index 1e7d99c40..ce71e75c9 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -320,7 +320,7 @@ void sub_801F280(bool8 param_1) linkChain = MoveFlagLinkChain(move); x = !linkChain ? 0x8 : 0xD; if (!linkChain && i != 0) { - sub_800792C(gUnknown_203B270->unk50,0xc,y - 2,0x78,7); + AddUnderScoreHighlight(gUnknown_203B270->unk50,0xc,y - 2,0x78,7); } PrintFormattedStringOnWindow(x,y,gUnknown_80DC2A0,gUnknown_203B270->unk50,0); // {ARG_MOVE_ITEM_0} } diff --git a/src/code_8031D70.c b/src/code_8031D70.c index 1b951474f..987c8e593 100644 --- a/src/code_8031D70.c +++ b/src/code_8031D70.c @@ -170,7 +170,7 @@ void DrawSOSPasswordScreen(void) rowIndex = index % 0x12; x = rowIndex * 0xb + 6; sub_8012C60(x,y,buffer[index],color,gUnknown_203B334->unk10); // Draw character - sub_80078A4(gUnknown_203B334->unk10,x,y + 0xA,10,COLOR_CYAN); // Draw underscore beneath character + AddDoubleUnderScoreHighlight(gUnknown_203B334->unk10,x,y + 0xA,10,COLOR_CYAN); // Draw underscore beneath character } sub_80073E0(gUnknown_203B334->unk10); } diff --git a/src/code_805D8C8.c b/src/code_805D8C8.c index 93755abac..87f3c0b39 100644 --- a/src/code_805D8C8.c +++ b/src/code_805D8C8.c @@ -39,7 +39,7 @@ void sub_8068310(s32 size, u16 **param_2) void sub_8068344(void) { if ((gDungeonFramesCounter & 8) != 0) { - Window *ptr = &gWindows[0]; + Window *window = &gWindows[0]; SpriteOAM sprite = {0}; SpriteSetAffine1(&sprite, 0); @@ -53,8 +53,8 @@ void sub_8068344(void) SpriteSetTileNum(&sprite, 0x3F0); SpriteSetPriority(&sprite, 0); SpriteSetPalNum(&sprite, 15); - SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x8); - SpriteSetX(&sprite, (ptr->unk0 * 8) + 0x40); + SpriteSetY(&sprite, (window->y * 8) + 0x8); + SpriteSetX(&sprite, (window->x * 8) + 0x40); AddSprite(&sprite,0x100,NULL,NULL); } } @@ -63,7 +63,7 @@ void sub_8068344(void) void sub_80684C4(void) { if ((gDungeonFramesCounter & 8) != 0) { - Window *ptr = &gWindows[0]; + Window *window = &gWindows[0]; SpriteOAM sprite = {0}; SpriteSetAffine1(&sprite, 0); @@ -77,8 +77,8 @@ void sub_80684C4(void) SpriteSetTileNum(&sprite, 0x3F0); SpriteSetPriority(&sprite, 0); SpriteSetPalNum(&sprite, 15); - SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x70); - SpriteSetX(&sprite, (ptr->unk0 * 8) + 0x40); + SpriteSetY(&sprite, (window->y * 8) + 0x70); + SpriteSetX(&sprite, (window->x * 8) + 0x40); AddSprite(&sprite,0x100,NULL,NULL); } } diff --git a/src/code_8066D04.c b/src/code_8066D04.c index 240eee648..1aef855c1 100644 --- a/src/code_8066D04.c +++ b/src/code_8066D04.c @@ -1295,8 +1295,8 @@ void sub_806806C(PokemonStruct1 *a0) sub_808FF20(&unkStruct, a0, gDungeon->unk644.unk16); CreatePokemonInfoTabScreen(spF8[r7], r7, &unkStruct, &var_C8, 0); - gDungeonMenu.unkC = (gWindows[0].unk0 + 15) * 8; - gDungeonMenu.unkE = ((gWindows[0].unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (gWindows[0].x + 15) * 8; + gDungeonMenu.unkE = ((gWindows[0].y + 1) * 8) - 2; while (1) { s32 r5; diff --git a/src/dungeon_menu_items.c b/src/dungeon_menu_items.c index 8a4527921..2ee3ce904 100644 --- a/src/dungeon_menu_items.c +++ b/src/dungeon_menu_items.c @@ -448,8 +448,8 @@ static void PrintOnDungeonItemsMenu(s32 a0, Entity *a1, bool8 showWhichWindow, b DungeonShowWindows(windows, 1); txtStrPtr = &gWindows[0]; - gDungeonMenu.unkC = (txtStrPtr->unk0 + 0x10) * 8; - gDungeonMenu.unkE = ((txtStrPtr->unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (txtStrPtr->x + 0x10) * 8; + gDungeonMenu.unkE = ((txtStrPtr->y + 1) * 8) - 2; sub_80137B0(&gDungeonMenu, 0x70); sub_80073B8(0); x = ((a0 - r10) * 8) + 0xC; diff --git a/src/dungeon_menu_moves.c b/src/dungeon_menu_moves.c index 0b6f06b44..7fadce616 100644 --- a/src/dungeon_menu_moves.c +++ b/src/dungeon_menu_moves.c @@ -472,8 +472,8 @@ static void ShowMovesMenuWindows(Entity *entity, EntityInfo *entInfo, u8 a2, Win windows->id[2] = windowNew; DungeonShowWindows(windows, TRUE); sub_80137B0(&gDungeonMenu, 0); - gDungeonMenu.unkC = (gWindows[0].unk0 + 16) * 8; - gDungeonMenu.unkE = ((gWindows[0].unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (gWindows[0].x + 16) * 8; + gDungeonMenu.unkE = ((gWindows[0].y + 1) * 8) - 2; SetMessageArgument_2(gFormatBuffer_Monsters[0], entInfo, 0); for (i = 0; i < MAX_MON_MOVES; i++) { Move *move = &entInfo->moves.moves[i]; @@ -525,7 +525,7 @@ static void PrintMoveNamesOnWindow(s32 count, Entity *entity, Move *moves, s32 w else { x = 8; if (i != 0) { - sub_80078A4(windowId, 12, y - 2, 120, 7); + AddDoubleUnderScoreHighlight(windowId, 12, y - 2, 120, 7); } } PrintFormattedStringOnWindow(x, y, _("{MOVE_ITEM_0}"), windowId, '\0'); @@ -644,8 +644,8 @@ static void ShowMovesInfoWindow(Move *moves, s32 firstMoveId, s32 movesCount) gDungeonMenu.unk1E = currId; gDungeonMenu.unk20 = count; - gDungeonMenu.unkC = (gWindows[0].unk0 + 23) * 8; - gDungeonMenu.unkE = ((gWindows[0].unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (gWindows[0].x + 23) * 8; + gDungeonMenu.unkE = ((gWindows[0].y + 1) * 8) - 2; gDungeonMenu.unk14.x = 0; gDungeonMenu.unk4 = 0; gDungeonMenu.firstEntryY = 16; diff --git a/src/dungeon_menu_others.c b/src/dungeon_menu_others.c index a4ecae4a1..ceccb4f5d 100644 --- a/src/dungeon_menu_others.c +++ b/src/dungeon_menu_others.c @@ -44,8 +44,26 @@ extern const u8 *const gUnknown_80FEBF8; extern const u8 *const gUnknown_80FEC28; extern const u8 *const gUnknown_80FDE6C; extern const u8 *const gUnknown_80FDEB8; +extern const u8 *const gUnknown_80FEA44; +extern const u8 *const gUnknown_80FEA50; +extern const u8 *const gUnknown_80FEA28; +extern const u8 *const gUnknown_80FEA10; +extern const u8 *const gUnknown_80FE9F8; +extern const u8 *const gUnknown_80FE9E8; +extern const u8 *const gUnknown_80FE9CC; +extern const u8 *const gUnknown_80FE8F8; +extern const u8 *const gUnknown_80FE8F4; +extern const u8 *const gGameOptionsTextPtr; +extern const u8 *const gOptionsDungeonTextPtr; +extern const u8 *const gOptionsOthersTextPtr; +extern const u8 *const gUnknown_80FE748; +extern const u8 *const gUnknown_80FE764; +extern const u8 *const gUnknown_80FE7C0; +extern const u8 *const gUnknown_80FE788; +extern const u8 *const gUnknown_80FE7A8; +extern const u8 *const gUnknown_80FE7E4; -void sub_8065250(void); +void PrintOthersMenuOptions(void); void ShowGameOptionsMenu(void); void ShowQuickSaveGiveUpMenu(void); void ShowMissionObjectivesMenu(void); @@ -55,8 +73,8 @@ bool8 ShowDungeonOptions(void); bool8 ShowOthersOptions(void); void TrySetNewGameOptions(bool8 bPressed); void AskToResetToDefault(void); -void sub_8065574(void); -void sub_80656C0(void); +void PrintGameOptions(void); +void PrintDungeonOptions(void); void sub_8065948(void); void sub_8065A8C(s32 optionId); void sub_8065B3C(s32 optionId); @@ -64,7 +82,7 @@ bool8 sub_8065BEC(void); bool8 sub_8065BF0(void); bool8 AskToQuickSave(void); bool8 AskToGiveUp(void); -void sub_806544C(void); +void PrintQuickSaveMenuOptions(void); enum { OTHERS_GAME_OPTIONS, @@ -73,6 +91,7 @@ enum { OTHERS_MISSION_OBJECTIVES, OTHERS_RECRUITMENT_SEARCH, OTHERS_HINTS, + OTHERS_COUNT }; void ShowDungeonOthersMenu(void) @@ -85,7 +104,7 @@ void ShowDungeonOthersMenu(void) while (1) { bool8 bPress = FALSE; - sub_8065250(); + PrintOthersMenuOptions(); while (1) { AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x24); @@ -162,7 +181,7 @@ void ShowGameOptionsMenu(void) while (1) { bool8 bPress = FALSE; - sub_8065574(); + PrintGameOptions(); while (1) { AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x24); @@ -217,7 +236,7 @@ enum { OPTION_WINDOWS, }; -#define FIRST_OTHERS_OPTION OPTION_WINDOWS +#define DUNGEON_OPTIONS_COUNT OPTION_WINDOWS bool8 ShowDungeonOptions(void) { @@ -229,7 +248,7 @@ bool8 ShowDungeonOptions(void) bPress = FALSE; dpadMoved = FALSE; - sub_80656C0(); + PrintDungeonOptions(); while (1) { AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x24); @@ -305,13 +324,13 @@ bool8 ShowOthersOptions(void) if (gRealInputs.repeated & DPAD_LEFT) { PlayDungeonCursorSE(FALSE); - sub_8065A8C(gDungeonMenu.menuIndex + FIRST_OTHERS_OPTION); + sub_8065A8C(gDungeonMenu.menuIndex + DUNGEON_OPTIONS_COUNT); dpadMoved = TRUE; break; } if (gRealInputs.repeated & DPAD_RIGHT) { PlayDungeonCursorSE(FALSE); - sub_8065B3C(gDungeonMenu.menuIndex + FIRST_OTHERS_OPTION); + sub_8065B3C(gDungeonMenu.menuIndex + DUNGEON_OPTIONS_COUNT); dpadMoved = TRUE; break; } @@ -376,7 +395,7 @@ void ShowQuickSaveGiveUpMenu(void) while (1) { bool8 bPress = FALSE; - sub_806544C(); + PrintQuickSaveMenuOptions(); while (1) { AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x24); @@ -449,4 +468,275 @@ bool8 AskToGiveUp(void) return FALSE; } +void PrintOthersMenuOptions(void) +{ + s32 optionsCount, currOptionId; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + header.count = 1; + header.currId = 0; + header.f3 = 0; + gDungeonMenu.menuIndex = gUnknown_202F2E0; + optionsCount = (gDungeon->unk644.canRecruit) ? OTHERS_COUNT : OTHERS_COUNT - 1; + gDungeonMenu.unk1A = optionsCount; + gDungeonMenu.unk1C = optionsCount; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + windows.id[0].width = 18; + windows.id[0].height = windows.id[0].unk10 = sub_80095E4(optionsCount, 12) + 2; + header.width = 10; + windows.id[0].pos.x = 2; + DungeonShowWindows(&windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + sub_80073B8(0); + currOptionId = 0; + PrintFormattedStringOnWindow(16, 0, gUnknown_80FE8F8, 0, '\0'); + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId++), gUnknown_80FE9CC, 0, '\0'); + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId++), gUnknown_80FE9E8, 0, '\0'); + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId++), gUnknown_80FE9F8, 0, '\0'); + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId++), gUnknown_80FEA10, 0, '\0'); + if (gDungeon->unk644.canRecruit) { + if (!IsBossFight()) { + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId++), gUnknown_80FEA28, 0, '\0'); + } + else { + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId++), gUnknown_80FEA44, 0, '\0'); + } + } + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId), gUnknown_80FEA50, 0, '\0'); + + sub_80073E0(0); +} + +struct Struct_80F7C50 +{ + const u8 *str; + s32 val; +}; + +// TODO: Fix this table in other file + +extern const struct Struct_80F7C50 gUnknown_80F7C50[]; + +void PrintQuickSaveMenuOptions(void) +{ + s32 optionsCount, currOptionId; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + header.count = 1; + header.currId = 0; + header.f3 = 0; + gDungeonMenu.menuIndex = 0; + optionsCount = 2; + gDungeonMenu.unk1A = optionsCount; + gDungeonMenu.unk1C = optionsCount; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + windows.id[0].width = 18; + windows.id[0].height = windows.id[0].unk10 = sub_80095E4(optionsCount, 12) + 2; + header.width = 10; + windows.id[0].pos.x = 2; + DungeonShowWindows(&windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + sub_80073B8(0); + currOptionId = 0; + PrintFormattedStringOnWindow(16, 0, gUnknown_80FE8F4, 0, '\0'); + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId++), gUnknown_80F7C50[43].str, 0, '\0'); + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, currOptionId++), gUnknown_80F7C50[46].str, 0, '\0'); + + sub_80073E0(0); +} + +void PrintGameOptions(void) +{ + s32 optionsCount; + s32 y[3]; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 12, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + header.count = 1; + header.currId = 0; + header.f3 = 0; + gDungeonMenu.menuIndex = 0; + optionsCount = 3; + gDungeonMenu.unk1A = optionsCount; + gDungeonMenu.unk1C = optionsCount; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + windows.id[0].width = 12; + windows.id[0].height = windows.id[0].unk10 = sub_80095E4(optionsCount, 12) + 2; + header.width = 10; + windows.id[0].pos.x = 2; + DungeonShowWindows(&windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + + y[0] = GetMenuEntryYCoord(&gDungeonMenu, 0); + y[1] = GetMenuEntryYCoord(&gDungeonMenu, 1); + y[2] = GetMenuEntryYCoord(&gDungeonMenu, 2); + sub_80073B8(0); + PrintFormattedStringOnWindow(16, 0, gGameOptionsTextPtr, 0, '\0'); + PrintFormattedStringOnWindow(8, y[0], gOptionsDungeonTextPtr, 0, '\0'); + PrintFormattedStringOnWindow(8, y[1], gOptionsOthersTextPtr, 0, '\0'); + PrintFormattedStringOnWindow(8, y[2], gUnknown_80FE748, 0, '\0'); + sub_80073E0(0); +} + +void PrintDungeonOptions(void) +{ + s32 y[DUNGEON_OPTIONS_COUNT]; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + s32 arr[] = {16, 25, 27}; + + header.count = 1; + header.currId = 0; + header.f3 = 0; + + gDungeonMenu.unk1A = DUNGEON_OPTIONS_COUNT; + gDungeonMenu.unk1C = DUNGEON_OPTIONS_COUNT; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + windows.id[0].width = 24; + windows.id[0].height = windows.id[0].unk10 = sub_80095E4(DUNGEON_OPTIONS_COUNT, 12) + 2; + header.width = 10; + windows.id[0].pos.x = 2; + DungeonShowWindows(&windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + + y[0] = GetMenuEntryYCoord(&gDungeonMenu, 0); + y[1] = GetMenuEntryYCoord(&gDungeonMenu, 1); + y[2] = GetMenuEntryYCoord(&gDungeonMenu, 2); + y[3] = GetMenuEntryYCoord(&gDungeonMenu, 3); + y[4] = GetMenuEntryYCoord(&gDungeonMenu, 4); + sub_80073B8(0); + PrintFormattedStringOnWindow(16, 0, gOptionsDungeonTextPtr, 0, '\0'); + PrintFormattedStringOnWindow(8, y[0], gUnknown_80FE764, 0, '\0'); + PrintFormattedStringOnWindow(8, y[1], gUnknown_80FE788, 0, '\0'); + PrintFormattedStringOnWindow(8, y[2], gUnknown_80FE7A8, 0, '\0'); + PrintFormattedStringOnWindow(8, y[3], gUnknown_80FE7C0, 0, '\0'); + PrintFormattedStringOnWindow(8, y[4], gUnknown_80FE7E4, 0, '\0'); + + if (gUnknown_202F2E8.dungeonSpeed != DUNGEON_SPEED_SLOW) { + AddDoubleUnderScoreHighlight(0, 136, y[0] + 10, 21, 7); + } + else { + AddDoubleUnderScoreHighlight(0, 80, y[0] + 10, 22, 7); + } + + if (gUnknown_202F2E8.FarOffPals != FAROFFPALS_SELF) { + AddDoubleUnderScoreHighlight(0, 136, y[1] + 10, 22, 7); + } + else { + AddDoubleUnderScoreHighlight(0, 80, y[1] + 10, 18, 7); + } + + if (gUnknown_202F2E8.damageTurn) { + AddDoubleUnderScoreHighlight(0, 136, y[2] + 10, 16, 7); + } + else { + AddDoubleUnderScoreHighlight(0, 80, y[2] + 10, 12, 7); + } + + if (gUnknown_202F2E8.gridEnable) { + AddDoubleUnderScoreHighlight(0, 136, y[3] + 10, 12, 7); + } + else { + AddDoubleUnderScoreHighlight(0, 80, y[3] + 10, 16, 7); + } + + AddDoubleUnderScoreHighlight(0, 80 + (gUnknown_202F2E8.mapOption * 40), y[4] + 10, arr[gUnknown_202F2E8.mapOption], 7); + + sub_80073E0(0); +} + // diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index d19d678a0..c1a572ede 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -810,7 +810,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) bool8 hasIqSkills = FALSE; bool8 hasStatusProblems = FALSE; bool8 addCursorSprite = TRUE; - Window *unkTxtStr1Ptr = &gWindows[0]; + Window *mainWindow = &gWindows[0]; sTeamWindowHeader.count = totalSubWindows; sTeamWindowHeader.currId = currSubWindowId; @@ -821,8 +821,8 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) CreatePokemonInfoTabScreen(subWindowIds[currSubWindowId], currSubWindowId, &unkMonStruct, &unkInfoTabStruct, 0); gDungeonMenu.unk1E = currSubWindowId; gDungeonMenu.unk20 = totalSubWindows; - gDungeonMenu.unkC = (unkTxtStr1Ptr->unk0 + 15) * 8; - gDungeonMenu.unkE = ((unkTxtStr1Ptr->unk2 + 1) * 8) - 2; + gDungeonMenu.unkC = (mainWindow->x + 15) * 8; + gDungeonMenu.unkE = ((mainWindow->y + 1) * 8) - 2; gDungeonMenu.unk14.x = 0; gDungeonMenu.unk4 = 0; gDungeonMenu.firstEntryY = 16; @@ -1197,7 +1197,7 @@ void ShowDungeonSummaryOrIQMenu(ActionContainer *a0, bool8 showIq) static void ShowUpArrowSprite(void) { if ((gDungeonFramesCounter & 8) != 0) { - Window *txtStrPtr = &gWindows[0]; + Window *window = &gWindows[0]; SpriteOAM sprite = {0}; SpriteSetAffine1(&sprite, 0); @@ -1211,8 +1211,8 @@ static void ShowUpArrowSprite(void) SpriteSetTileNum(&sprite, 0x3F0); SpriteSetPriority(&sprite, 0); SpriteSetPalNum(&sprite, 15); - SpriteSetY(&sprite, (txtStrPtr->unk2 * 8) + 0x8); - SpriteSetX(&sprite, (txtStrPtr->unk0 * 8) + 0x40); + SpriteSetY(&sprite, (window->y * 8) + 0x8); + SpriteSetX(&sprite, (window->x * 8) + 0x40); AddSprite(&sprite, 0x100, NULL, NULL); } @@ -1222,7 +1222,7 @@ static void ShowUpArrowSprite(void) static void ShowDownArrowSprite(void) { if ((gDungeonFramesCounter & 8) != 0) { - Window *ptr = &gWindows[0]; + Window *window = &gWindows[0]; SpriteOAM sprite = {0}; SpriteSetAffine1(&sprite, 0); @@ -1236,8 +1236,8 @@ static void ShowDownArrowSprite(void) SpriteSetTileNum(&sprite, 0x3F0); SpriteSetPriority(&sprite, 0); SpriteSetPalNum(&sprite, 15); - SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x70); - SpriteSetX(&sprite, (ptr->unk0 * 8) + 0x40); + SpriteSetY(&sprite, (window->y * 8) + 0x70); + SpriteSetX(&sprite, (window->x * 8) + 0x40); AddSprite(&sprite,0x100,NULL,NULL); } } @@ -1245,7 +1245,7 @@ static void ShowDownArrowSprite(void) void ShowStatusDescriptionMenuArrow(void) { if ((gDungeonFramesCounter & 8) != 0) { - Window *ptr = &gWindows[0]; + Window *window = &gWindows[0]; SpriteSetAffine1(&gUnknown_202F268, 0); SpriteSetAffine2(&gUnknown_202F268, 0); @@ -1258,7 +1258,7 @@ void ShowStatusDescriptionMenuArrow(void) SpriteSetTileNum(&gUnknown_202F268, 0x3F0); SpriteSetPriority(&gUnknown_202F268, 0); SpriteSetPalNum(&gUnknown_202F268, 15); - SpriteSetY(&gUnknown_202F268, (ptr->unk2 * 8) + 0x60); + SpriteSetY(&gUnknown_202F268, (window->y * 8) + 0x60); SpriteSetX(&gUnknown_202F268, 0x70); AddSprite(&gUnknown_202F268,0x100,NULL,NULL); } @@ -1616,7 +1616,7 @@ static void PrintMoveNamesOnBottomWindow(Entity *entity) else { x = 8; if (i != 0) { - sub_80078A4(2, 12, y - 2, 120, 7); + AddDoubleUnderScoreHighlight(2, 12, y - 2, 120, 7); } } PrintFormattedStringOnWindow(x, y, _("{MOVE_ITEM_0}"), 2, '\0'); diff --git a/src/dungeon_message.c b/src/dungeon_message.c index 15c821c3b..2b8b37720 100644 --- a/src/dungeon_message.c +++ b/src/dungeon_message.c @@ -255,7 +255,7 @@ void xxx_draw_string_80524F0(void) sp.unk10 = 7; sub_80073B8(0); if (strPtr->unk1C054[id] != 0 && strPtr->unk1C066 >= 8) { - sub_80078A4(0, 0, strPtr->unk1C066 - 1, 0xE0, 7); + AddDoubleUnderScoreHighlight(0, 0, strPtr->unk1C066 - 1, 0xE0, 7); } while (1) { @@ -930,7 +930,7 @@ static void PutStringsOnMessageLog(void) if (msgLogString->unk0) { if (msgLogString->unk1) { - sub_80078A4(0, 0, y, 0xE0, 7); + AddDoubleUnderScoreHighlight(0, 0, y, 0xE0, 7); } PrintStringOnWindow(8, y + 3, msgLogString->str, 0, 0xD); y += 14; @@ -978,7 +978,7 @@ static bool8 TryScrollLogUp(s32 a0) if (msgLogString->unk0) { sub_80087EC(0, 0, 0, 0xD0, 0x10); if (msgLogString->unk1) { - sub_80078A4(0, 0, y, 0xE0, 7); + AddDoubleUnderScoreHighlight(0, 0, y, 0xE0, 7); } PrintStringOnWindow(8, y + 3, msgLogString->str, 0, 0xD); } @@ -1028,7 +1028,7 @@ static bool8 TryScrollLogDown(s32 a0) if (msgLogString->unk0) { sub_80087EC(0, 0, y, 0x68, 0x10); if (msgLogString->unk1) { - sub_80078A4(0, 0, y, 0xE0, 7); + AddDoubleUnderScoreHighlight(0, 0, y, 0xE0, 7); } PrintStringOnWindow(8, y + 3, msgLogString->str, 0, 0xD); } @@ -1046,7 +1046,7 @@ static bool8 TryScrollLogDown(s32 a0) static void CreateMessageLogArrow(bool8 upArrow, s32 y) { - struct Window *unkStr = &gWindows[0]; + struct Window *window = &gWindows[0]; if (!(gDungeonFramesCounter & 8)) { SpriteSetAffine1(&sMessageLogArrowSpriteOAM, 0); SpriteSetAffine2(&sMessageLogArrowSpriteOAM, 0); @@ -1055,8 +1055,8 @@ static void CreateMessageLogArrow(bool8 upArrow, s32 y) SpriteSetBpp(&sMessageLogArrowSpriteOAM, 0); SpriteSetMatrixNum(&sMessageLogArrowSpriteOAM, (upArrow != FALSE) ? (16) : 0); SpriteSetPalNum(&sMessageLogArrowSpriteOAM, 15); - SpriteSetY(&sMessageLogArrowSpriteOAM, (unkStr->unk2 * 8) + y); - SpriteSetX(&sMessageLogArrowSpriteOAM, (unkStr->unk0 * 8) + 92); + SpriteSetY(&sMessageLogArrowSpriteOAM, (window->y * 8) + y); + SpriteSetX(&sMessageLogArrowSpriteOAM, (window->x * 8) + 92); SpriteSetShape(&sMessageLogArrowSpriteOAM, 1); SpriteSetSize(&sMessageLogArrowSpriteOAM, 0); SpriteSetPriority(&sMessageLogArrowSpriteOAM, 0); diff --git a/src/items.c b/src/items.c index f8cc8f8a5..fa898c3b8 100644 --- a/src/items.c +++ b/src/items.c @@ -654,7 +654,7 @@ u32 sub_80913E0(Item* slot, u32 a2, struct subStruct_203B240 ** a3) u32 result; InitPokemonMove(buffer8, move); - sub_80078A4(a2, 4, 82, 200, COLOR_WHITE_2); + AddDoubleUnderScoreHighlight(a2, 4, 82, 200, COLOR_WHITE_2); PrintFormattedStringOnWindow(4, 84, gPtrTypeText, a2, 0); moves_data = GetMoveType(buffer8); typestring = GetUnformattedTypeString(moves_data); diff --git a/src/menu_input.c b/src/menu_input.c index 91603ba4b..efc42afec 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -700,12 +700,12 @@ void sub_8013660(MenuInputStruct *param_1) void UpdateMenuCursorSpriteCoords(MenuInputStruct *param_1) { s32 index; - Window *temp; + Window *window; index = param_1->unk0; - temp = &gWindows[index]; - param_1->unk8.x = temp->unk0 * 8 + param_1->unk4; - param_1->unk8.y = temp->unk2 * 8 + GetMenuEntryYCoord(param_1, param_1->menuIndex); + window = &gWindows[index]; + param_1->unk8.x = window->x * 8 + param_1->unk4; + param_1->unk8.y = window->y * 8 + GetMenuEntryYCoord(param_1, param_1->menuIndex); } void MoveMenuCursorDown(MenuInputStruct *param_1) @@ -931,10 +931,10 @@ void sub_8013984(MenuInputStruct *param_1) { s32 iVar2; s32 iVar4; - Window *ptr; + Window *window; iVar4 = param_1->unk0; - ptr = &gWindows[iVar4]; + window = &gWindows[iVar4]; if (param_1->unk1C == 0) param_1->unk1C++; @@ -957,7 +957,7 @@ void sub_8013984(MenuInputStruct *param_1) param_1->unk4 = 0; - if (ptr->unkC == 6) + if (window->unkC == 6) param_1->firstEntryY = 16; else param_1->firstEntryY = 0; @@ -965,9 +965,9 @@ void sub_8013984(MenuInputStruct *param_1) if (param_1->unk20 < 2) param_1->unkC = 0; else - param_1->unkC = (ptr->unk0 + ptr->unk4 - 2) * 8; + param_1->unkC = (window->x + window->unk4 - 2) * 8; - param_1->unkE = (ptr->unk2 + 1) * 8 - 2; + param_1->unkE = (window->y + 1) * 8 - 2; } void sub_8013A54(MenuInputStruct *param_1) @@ -1078,16 +1078,16 @@ void sub_8013C68(unkStructFor8013AA0 *a0) } for (i = 0; i < a0->unk10; i++) - sub_800792C(a0->unk14, a0->unk1C - ((i + 1) * 12) - 1, a0->unk20 + 10, 11, 5); + AddUnderScoreHighlight(a0->unk14, a0->unk1C - ((i + 1) * 12) - 1, a0->unk20 + 10, 11, 5); } void sub_8013D10(unkStructFor8013AA0 *a0) { s32 x, y; u8 uVar4; - Window *ptr; + Window *window; - ptr = &gWindows[a0->unk14]; + window = &gWindows[a0->unk14]; uVar4 = a0->unk24; switch (sub_8012AE8()) { @@ -1105,10 +1105,10 @@ void sub_8013D10(unkStructFor8013AA0 *a0) a0->unk26 = 8; } - x = (a0->unk1C - ((a0->unk24 + 1) * 12) + (ptr->unk0 * 8)) - 3; + x = (a0->unk1C - ((a0->unk24 + 1) * 12) + (window->x * 8)) - 3; SpriteSetX(&a0->unk28, x); - y = a0->unk20 + (ptr->unk2 * 8) - 7; + y = a0->unk20 + (window->y * 8) - 7; SpriteSetY(&a0->unk28, y); } @@ -1152,7 +1152,7 @@ static bool8 sub_8013DD0(unkStructFor8013AA0 *a0) void sub_8013E54(void) { - Window *ptr = &gWindows[0]; + Window *window = &gWindows[0]; SpriteOAM SStack_18 = {0}; SpriteSetAffine1(&SStack_18, 0); @@ -1166,7 +1166,7 @@ void sub_8013E54(void) SpriteSetTileNum(&SStack_18, 0x3F0); SpriteSetPriority(&SStack_18, 0); SpriteSetPalNum(&SStack_18, 15); - SpriteSetY(&SStack_18, (ptr->unk2 * 8) + 0x80); + SpriteSetY(&SStack_18, (window->y * 8) + 0x80); SpriteSetX(&SStack_18, 112); AddSprite(&SStack_18,0x100,0,0x0); @@ -1174,7 +1174,7 @@ void sub_8013E54(void) void sub_8013F84(void) { - Window *ptr = &gWindows[0]; + Window *window = &gWindows[0]; SpriteOAM SStack_18 = {0}; SpriteSetAffine1(&SStack_18, 0); @@ -1188,7 +1188,7 @@ void sub_8013F84(void) SpriteSetTileNum(&SStack_18, 0x3F0); SpriteSetPriority(&SStack_18, 0); SpriteSetPalNum(&SStack_18, 15); - SpriteSetY(&SStack_18, (ptr->unk2 * 8) + 0x60); + SpriteSetY(&SStack_18, (window->y * 8) + 0x60); SpriteSetX(&SStack_18, 112); AddSprite(&SStack_18,0x100,0,0x0); diff --git a/src/moves.c b/src/moves.c index 4b2c5fbb4..edad645eb 100644 --- a/src/moves.c +++ b/src/moves.c @@ -1403,7 +1403,7 @@ static void unk_MovePrintData(Move *move, s32 y) s32 power; const u8 *text; - sub_80078A4(y, 4, 72, 200, COLOR_WHITE_2); + AddDoubleUnderScoreHighlight(y, 4, 72, 200, COLOR_WHITE_2); sub_8092D54(gFormatBuffer_Monsters[0], move); PrintFormattedStringOnWindow(4, 74, gUnknown_810CF00, y, 0); PrintFormattedStringOnWindow(4, 86, gPtrTypeText, y, 0); diff --git a/src/options_menu2.c b/src/options_menu2.c index b7f943857..cb0a936b2 100644 --- a/src/options_menu2.c +++ b/src/options_menu2.c @@ -110,15 +110,15 @@ static void CreateOptionsMenu(void) switch (sUnknown_203B260->optionsMenu->windowColor) { case WINDOW_COLOR_BLUE: length = sub_8008ED0(sBlue); - sub_80078A4(sUnknown_203B260->unk44, (sUnknown_203B260->optionsMenu->windowColor * 40) + 80, y + 10, length, COLOR_WHITE_2); + AddDoubleUnderScoreHighlight(sUnknown_203B260->unk44, (sUnknown_203B260->optionsMenu->windowColor * 40) + 80, y + 10, length, COLOR_WHITE_2); break; case WINDOW_COLOR_RED: length = sub_8008ED0(sRed); - sub_80078A4(sUnknown_203B260->unk44, (sUnknown_203B260->optionsMenu->windowColor * 40) + 80, y + 10, length, COLOR_WHITE_2); + AddDoubleUnderScoreHighlight(sUnknown_203B260->unk44, (sUnknown_203B260->optionsMenu->windowColor * 40) + 80, y + 10, length, COLOR_WHITE_2); break; case WINDOW_COLOR_GREEN: length = sub_8008ED0(sGreen); - sub_80078A4(sUnknown_203B260->unk44, (sUnknown_203B260->optionsMenu->windowColor * 40) + 80, y + 10, length, COLOR_WHITE_2); + AddDoubleUnderScoreHighlight(sUnknown_203B260->unk44, (sUnknown_203B260->optionsMenu->windowColor * 40) + 80, y + 10, length, COLOR_WHITE_2); break; } diff --git a/src/string_format.c b/src/string_format.c index f2daf62bd..03197d8c1 100644 --- a/src/string_format.c +++ b/src/string_format.c @@ -260,7 +260,7 @@ void CreateMenuDialogueBoxAndPortrait(const u8 *text, void *a1, u32 r9, const Me gUnknown_202E748.unk0 = 4; gUnknown_202E748.unk2 = 4; gUnknown_202E748.unk8 = 0x70; - gUnknown_202E748.unkA = (gWindows[0].unk2 * 8) + 34; + gUnknown_202E748.unkA = (gWindows[0].y * 8) + 34; gUnknown_202E748.unk10 = 7; gUnknown_202E748.unk1C = 0; gUnknown_202E748.unk20 = 0; @@ -541,7 +541,7 @@ void DrawDialogueBoxString(void) } gUnknown_202E748.unk8 = 0x70; - gUnknown_202E748.unkA = (gWindows[0].unk2 * 8) + 34; + gUnknown_202E748.unkA = (gWindows[0].y * 8) + 34; } keepLooping = FALSE; } diff --git a/src/text.c b/src/text.c index 8e06ef5e2..5f9cd9a6c 100644 --- a/src/text.c +++ b/src/text.c @@ -71,7 +71,7 @@ static void sub_8006C44(Window *a0, s32 a1, u16 *a2, u8 a3); static void sub_8006E94(Window *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4); static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5); static void nullsub_129(u32 a0, s32 x, s32 y, s32 a3, u32 color); -static void sub_8007958(Window *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color); +static void AddUnderScoreHighlightInternal(Window *windows, u32 windowId, s32 x, s32 y, s32 width, u32 color); static void sub_8007AA4(struct Window *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color); static void sub_8007BA8(Window *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color); static void sub_8007D00(Window *a0, u32 a1, s32 x, s32 y, s32 a4, s32 color); @@ -333,112 +333,110 @@ u32 sub_8006544(u32 index) } // a1 is a VRAM pointer -static void AddWindow(Window *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, const WindowTemplate *winTemplate, bool8 a6, u32 a7, DungeonPos *a8, u8 a9) +static void AddWindow(Window *windows, u32 *a1, u32 *a2, u16 *a3, u32 windowId, const WindowTemplate *winTemplate, bool8 a6, u32 a7, DungeonPos *positionModifier, u8 a9) { - Window *t1; - s32 iVar3; - s32 iVar5; + Window *newWindow; + s32 x, y; s32 iVar6; s32 numI; u32 uVar1; s32 temp; - s32 i; - s32 j; + s32 i, j; - t1 = &a0[a4]; - iVar3 = winTemplate->pos.x + a8->x; - iVar5 = winTemplate->pos.y + a8->y; - t1->unk0 = iVar3; - t1->unk2 = iVar5; - t1->unk4 = winTemplate->width; - t1->unk8 = winTemplate->unk10; - t1->unk6 = winTemplate->height; - t1->unkC = winTemplate->type; - t1->unk10 = a7; + newWindow = &windows[windowId]; + x = winTemplate->pos.x + positionModifier->x; + y = winTemplate->pos.y + positionModifier->y; + newWindow->x = x; + newWindow->y = y; + newWindow->unk4 = winTemplate->width; + newWindow->unk8 = winTemplate->unk10; + newWindow->unk6 = winTemplate->height; + newWindow->unkC = winTemplate->type; + newWindow->unk10 = a7; - if (t1->unkC == 6) - t1->unk14 = a7; + if (newWindow->unkC == 6) + newWindow->unk14 = a7; else - t1->unk14 = a7 + winTemplate->unk12 * t1->unk4; + newWindow->unk14 = a7 + winTemplate->unk12 * newWindow->unk4; - t1->unk18 = &a2[t1->unk10 * 8]; - t1->unk1C = &a2[t1->unk14 * 8]; - t1->unk24 = winTemplate->unk12; - t1->unk28 = &a1[t1->unk14 * 8]; + newWindow->unk18 = &a2[newWindow->unk10 * 8]; + newWindow->unk1C = &a2[newWindow->unk14 * 8]; + newWindow->unk24 = winTemplate->unk12; + newWindow->unk28 = &a1[newWindow->unk14 * 8]; - if (t1->unkC == 6) - t1->unk2C = t1->unk4 * (t1->unk6 + winTemplate->unk12) * 32; + if (newWindow->unkC == 6) + newWindow->unk2C = newWindow->unk4 * (newWindow->unk6 + winTemplate->unk12) * 32; else - t1->unk2C = t1->unk4 * t1->unk6 * 32; + newWindow->unk2C = newWindow->unk4 * newWindow->unk6 * 32; - t1->unk30 = 0; - t1->unk34 = 0; - t1->unk38 = 0; - t1->unk20 = (t1->unk4 * 8) - 8; - t1->unk45 = t1->unkC == 0; + newWindow->unk30 = 0; + newWindow->unk34 = 0; + newWindow->unk38 = 0; + newWindow->unk20 = (newWindow->unk4 * 8) - 8; + newWindow->unk45 = newWindow->unkC == 0; - if (t1->unk8 == 0) + if (newWindow->unk8 == 0) return; if ((winTemplate->unk0 & 0xA0) != 0x80) { - temp = iVar5 - 1; + temp = y - 1; - if (t1->unkC == 6) { - uVar1 = a6 ? t1->unk14 : 0; + if (newWindow->unkC == 6) { + uVar1 = a6 ? newWindow->unk14 : 0; - sub_8006E94(t1, temp, uVar1, winTemplate->header, a3); + sub_8006E94(newWindow, temp, uVar1, winTemplate->header, a3); - temp = iVar5 + 2; - uVar1 = a6 ? t1->unk14 + t1->unk4 * (winTemplate->unk12 + 2) : 0; - numI = t1->unk6 - 2; + temp = y + 2; + uVar1 = a6 ? newWindow->unk14 + newWindow->unk4 * (winTemplate->unk12 + 2) : 0; + numI = newWindow->unk6 - 2; } else { - sub_800677C(t1, temp, a3, a9); + sub_800677C(newWindow, temp, a3, a9); - temp = iVar5; - uVar1 = a6 ? t1->unk14 : 0; - numI = t1->unk6; + temp = y; + uVar1 = a6 ? newWindow->unk14 : 0; + numI = newWindow->unk6; } for (i = 0; i < numI; i++) { - iVar6 = iVar3 - 1; - sub_80069CC(t1, iVar6, temp, i, a3); - iVar6 = iVar3; + iVar6 = x - 1; + sub_80069CC(newWindow, iVar6, temp, i, a3); + iVar6 = x; - for (j = 0; j < t1->unk4; j++) { - sub_8006AC4(t1, iVar6, temp, uVar1, a3); + for (j = 0; j < newWindow->unk4; j++) { + sub_8006AC4(newWindow, iVar6, temp, uVar1, a3); iVar6++; if (a6) uVar1++; } - sub_8006B70(t1, iVar6, temp, i, a3); + sub_8006B70(newWindow, iVar6, temp, i, a3); temp++; } - sub_8006C44(t1, temp, a3, a9); + sub_8006C44(newWindow, temp, a3, a9); } if ((winTemplate->unk0 & 0x80) == 0) - PrepareTextbox_8008C6C(a0, a4); + PrepareTextbox_8008C6C(windows, windowId); - t1->unk46 = 0; + newWindow->unk46 = 0; } -static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3) +static void sub_800677C(Window *window, s32 a1, u16 *a2, u8 a3) { s32 iVar5; s32 i; - iVar5 = a0->unk0 - 1; + iVar5 = window->x - 1; if (a1 > 28) return; if (a1 < 0) return; - switch (a0->unkC) { + switch (window->unkC) { case 0: case 1: case 2: @@ -451,7 +449,7 @@ static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3) else (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; - for (i = 0; i < a0->unk4; i++) { + for (i = 0; i < window->unk4; i++) { (a2 + a1 * 0x20)[iVar5] = 0xF2D9; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; @@ -467,7 +465,7 @@ static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3) (a2 + a1 * 0x20)[iVar5] = 0xF2E8; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; - for (i = 0; i < a0->unk4; i++) { + for (i = 0; i < window->unk4; i++) { (a2 + a1 * 0x20)[iVar5] = 0xF2E9; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; @@ -479,7 +477,7 @@ static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3) case 5: (a2 + a1 * 0x20)[iVar5] = 0xF2DC; iVar5++; - for (i = 0; i < a0->unk4; i++) { + for (i = 0; i < window->unk4; i++) { (a2 + a1 * 0x20)[iVar5] = 0xF2DD; iVar5++; } @@ -489,7 +487,7 @@ static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3) case 7: (a2 + a1 * 0x20)[iVar5] = 0xF293; iVar5++; - for (i = 0; i < a0->unk4; i++) { + for (i = 0; i < window->unk4; i++) { (a2 + a1 * 0x20)[iVar5] = 0xF297; iVar5++; } @@ -499,14 +497,14 @@ static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3) } } -static void sub_80069CC(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) +static void sub_80069CC(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) { if (a2 > 28) return; if (a2 < 0) return; - switch (a0->unkC) { + switch (window->unkC) { case 1: case 2: break; @@ -516,7 +514,7 @@ static void sub_80069CC(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; } - if (a3 == a0->unk6 - 1) { + if (a3 == window->unk6 - 1) { (a4 + a2 * 0x20)[a1] = 0xFA97; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; @@ -540,14 +538,14 @@ static void sub_80069CC(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) } } -static void sub_8006AC4(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) +static void sub_8006AC4(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) { if (a2 > 28) return; if (a2 < 0) return; - switch (a0->unkC) { + switch (window->unkC) { case 2: (a4 + a2 * 0x20)[a1] = a3 | 0xF000; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF278; @@ -567,14 +565,14 @@ static void sub_8006AC4(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) } } -static void sub_8006B70(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) +static void sub_8006B70(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) { if (a2 > 28) return; if (a2 < 0) return; - switch (a0->unkC) { + switch (window->unkC) { case 1: case 2: break; @@ -584,7 +582,7 @@ static void sub_8006B70(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; } - if (a3 == a0->unk6 - 1) { + if (a3 == window->unk6 - 1) { (a4 + a2 * 0x20)[a1] = 0xFE97; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; @@ -608,19 +606,19 @@ static void sub_8006B70(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4) } } -static void sub_8006C44(Window *a0, s32 a1, u16 *a2, u8 a3) +static void sub_8006C44(Window *window, s32 a1, u16 *a2, u8 a3) { s32 iVar5; s32 i; - iVar5 = a0->unk0 - 1; + iVar5 = window->x - 1; if (a1 > 28) return; if (a1 < 0) return; - switch (a0->unkC) { + switch (window->unkC) { case 0: case 1: case 2: @@ -633,7 +631,7 @@ static void sub_8006C44(Window *a0, s32 a1, u16 *a2, u8 a3) else (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; - for (i = 0; i < a0->unk4; i++) { + for (i = 0; i < window->unk4; i++) { (a2 + a1 * 0x20)[iVar5] = 0xFAD9; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; @@ -649,7 +647,7 @@ static void sub_8006C44(Window *a0, s32 a1, u16 *a2, u8 a3) (a2 + a1 * 0x20)[iVar5] = 0xFAE8; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; - for (i = 0; i < a0->unk4; i++) { + for (i = 0; i < window->unk4; i++) { (a2 + a1 * 0x20)[iVar5] = 0xFAE9; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; @@ -661,7 +659,7 @@ static void sub_8006C44(Window *a0, s32 a1, u16 *a2, u8 a3) case 5: (a2 + a1 * 0x20)[iVar5] = 0xFADC; iVar5++; - for (i = 0; i < a0->unk4; i++) { + for (i = 0; i < window->unk4; i++) { (a2 + a1 * 0x20)[iVar5] = 0xFADD; iVar5++; } @@ -671,7 +669,7 @@ static void sub_8006C44(Window *a0, s32 a1, u16 *a2, u8 a3) case 7: (a2 + a1 * 0x20)[iVar5] = 0xFA93; iVar5++; - for (i = 0; i < a0->unk4; i++) { + for (i = 0; i < window->unk4; i++) { (a2 + a1 * 0x20)[iVar5] = 0xFA97; iVar5++; } @@ -1462,15 +1460,15 @@ static void sub_8006E94(Window *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 "_08007330: .4byte 0x0000f6d8"); } -void sub_8007334(s32 a0) +void sub_8007334(s32 windowId) { s32 i, j; - struct Window *textStructPtr = &gWindows[a0]; - s32 r5 = textStructPtr->unk14; - s32 r6 = textStructPtr->unk2; - for (i = 0; i < textStructPtr->unk6; i++) { - s32 id = textStructPtr->unk0; - for (j = 0; j < textStructPtr->unk4; j++) { + struct Window *window = &gWindows[windowId]; + s32 r5 = window->unk14; + s32 r6 = window->y; + for (i = 0; i < window->unk6; i++) { + s32 id = window->x; + for (j = 0; j < window->unk4; j++) { gUnknown_202B038[0][r6][id] &= ~0x3ff; gUnknown_202B038[0][r6][id] |= r5; id++; @@ -1725,10 +1723,10 @@ static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 return sp0->unk6 + sCharacterSpacing; } -void sub_80078A4(u32 a0, s32 x, s32 y, s32 a3, u32 color) +void AddDoubleUnderScoreHighlight(u32 windowId, s32 x, s32 y, s32 width, u32 color) { - sub_800792C(a0, x, y, a3, color); - sub_800792C(a0, x, y + 1, a3, sTextShadowMask & 0xF); + AddUnderScoreHighlight(windowId, x, y, width, color); + AddUnderScoreHighlight(windowId, x, y + 1, width, sTextShadowMask & 0xF); } UNUSED static void sub_80078E8(u32 a0, s32 x, s32 y, s32 a3, u32 color) @@ -1737,67 +1735,66 @@ UNUSED static void sub_80078E8(u32 a0, s32 x, s32 y, s32 a3, u32 color) nullsub_129(a0, x, y + 1, a3, sTextShadowMask & 0xF); } -void sub_800792C(u32 a0, s32 x, s32 y, s32 a3, u32 color) +void AddUnderScoreHighlight(u32 windowId, s32 x, s32 y, s32 width, u32 color) { - sub_8007958(gWindows, a0, x, y, a3, color); + AddUnderScoreHighlightInternal(gWindows, windowId, x, y, width, color); } -static void nullsub_129(u32 a0, s32 x, s32 y, s32 a3, u32 color) +static void nullsub_129(u32 windowId, s32 x, s32 y, s32 width, u32 color) { } -static void sub_8007958(Window *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color) +static void AddUnderScoreHighlightInternal(Window *windows, u32 windowId, s32 x, s32 y, s32 width, u32 color) { u32 uVar4; u32 *dest; s32 r4; const struct unkShiftData *shiftData; - Window *r5; + Window *window; s32 r6; u32 r9; - s32 lol; - r5 = &a0[a1]; + window = &windows[windowId]; r9 = gUnknown_80B853C[color & 0xF]; r4 = y / 8; - dest = r5->unk18 + (((r5->unk4 * r4) + (x / 8)) * 8); + dest = window->unk18 + (((window->unk4 * r4) + (x / 8)) * 8); dest += (r4 * -8) + y; r6 = x / 8; - if (y / 8 >= r5->unk8) { + if (y / 8 >= window->unk8) { return; } else { const u32 unkBits[] = {0, 0xF, 0xFF, 0xFFF, 0xFFFF, 0xFFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF}; - for (; a4 > 0; a4 -= 8) { - lol = a4; - if (lol > 7) - lol = 8; + for (; width > 0; width -= 8) { + s32 currWidth = width; + if (currWidth > 7) + currWidth = 8; shiftData = &gCharMasksOffsets[x + (x / 8 * -8)]; - uVar4 = unkBits[lol]; + uVar4 = unkBits[currWidth]; uVar4 = (uVar4 & 0x11111111) + (uVar4 & r9); if (uVar4 != 0) { - if (r6 < r5->unk4) { + if (r6 < window->unk4) { dest[0] |= (shiftData->bytesA & uVar4) << shiftData->shift_left; - if (r5->unk3C > dest) - r5->unk3C = dest; - if (r5->unk40 < dest) - r5->unk40 = dest; + if (window->unk3C > dest) + window->unk3C = dest; + if (window->unk40 < dest) + window->unk40 = dest; } - if (r6 < r5->unk4 - 1) { + if (r6 < window->unk4 - 1) { dest += 8; dest[0] |= (uVar4 & shiftData->bytesB) >> shiftData->shift_right; - if (r5->unk40 < dest) - r5->unk40 = dest; + if (window->unk40 < dest) + window->unk40 = dest; dest -= 8; } } @@ -2288,24 +2285,24 @@ UNUSED static void nullsub_160(void) static void sub_8007E64(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) { s32 i, j; - Window *strPtr = &a0[a2]; + Window *window = &a0[a2]; a3 /= 8; a4 /= 8; a5 /= 8; a6 /= 8; a8 *= 4096; - if (a4 < strPtr->unk8) { - s32 id = (strPtr->unk4 * a4) + a3; - u32 *unk18Ptr = &strPtr->unk18[id * 8]; + if (a4 < window->unk8) { + s32 id = (window->unk4 * a4) + a3; + u32 *unk18Ptr = &window->unk18[id * 8]; for (i = 0; i < a6; i++) { s32 xMaybe = a3; u32 *loopUnk18Ptr = unk18Ptr; for (j = 0; j < a5; j++) { - if (xMaybe < strPtr->unk4) { - if (strPtr->unk3C > loopUnk18Ptr) { - strPtr->unk3C = loopUnk18Ptr; + if (xMaybe < window->unk4) { + if (window->unk3C > loopUnk18Ptr) { + window->unk3C = loopUnk18Ptr; } *(loopUnk18Ptr++) = *(a7++); *(loopUnk18Ptr++) = *(a7++); @@ -2315,12 +2312,12 @@ static void sub_8007E64(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 *(loopUnk18Ptr++) = *(a7++); *(loopUnk18Ptr++) = *(a7++); *(loopUnk18Ptr++) = *a7; - if (strPtr->unk40 < loopUnk18Ptr) { - strPtr->unk40 = loopUnk18Ptr; + if (window->unk40 < loopUnk18Ptr) { + window->unk40 = loopUnk18Ptr; } a7++; - a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] &= 0xFFF; - a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] |= a8; + a1[window->y + a4][window->x + xMaybe] &= 0xFFF; + a1[window->y + a4][window->x + xMaybe] |= a8; } else { loopUnk18Ptr += 8; @@ -2329,9 +2326,9 @@ static void sub_8007E64(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 xMaybe++; } a4++; - unk18Ptr += strPtr->unk20; + unk18Ptr += window->unk20; unk18Ptr += 8; - if (a4 >= strPtr->unk8) + if (a4 >= window->unk8) break; } } @@ -2366,24 +2363,24 @@ UNUSED static void nullsub_161(void) static void sub_8008030(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8) { s32 i, j; - Window *strPtr = &a0[a2]; + Window *window = &a0[a2]; a3 /= 8; a4 /= 8; a5 /= 8; a6 /= 8; a8 *= 4096; - if (a4 < strPtr->unk8) { - u32 *unk18Ptr = &strPtr->unk18[((strPtr->unk4 * a4) + (a3 + a5)) * 8]; + if (a4 < window->unk8) { + u32 *unk18Ptr = &window->unk18[((window->unk4 * a4) + (a3 + a5)) * 8]; for (i = 0; i < a6; i++) { s32 xMaybe = a3 + a5; u32 *loopUnk18Ptr = unk18Ptr; for (j = 0; j < a5; j++) { xMaybe--; loopUnk18Ptr -= 8; - if (xMaybe < strPtr->unk4) { - if (strPtr->unk3C > loopUnk18Ptr) { - strPtr->unk3C = loopUnk18Ptr; + if (xMaybe < window->unk4) { + if (window->unk3C > loopUnk18Ptr) { + window->unk3C = loopUnk18Ptr; } loopUnk18Ptr[0] = FlipPixelsHorizontally(*(a7++)); loopUnk18Ptr[1] = FlipPixelsHorizontally(*(a7++)); @@ -2393,20 +2390,20 @@ static void sub_8008030(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 loopUnk18Ptr[5] = FlipPixelsHorizontally(*(a7++)); loopUnk18Ptr[6] = FlipPixelsHorizontally(*(a7++)); loopUnk18Ptr[7] = FlipPixelsHorizontally(*(a7++)); - if (strPtr->unk40 < loopUnk18Ptr + 8) { - strPtr->unk40 = loopUnk18Ptr + 8; + if (window->unk40 < loopUnk18Ptr + 8) { + window->unk40 = loopUnk18Ptr + 8; } - a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] &= 0xFFF; - a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] |= a8; + a1[window->y + a4][window->x + xMaybe] &= 0xFFF; + a1[window->y + a4][window->x + xMaybe] |= a8; } else { a7 += 8; } } a4++; - unk18Ptr += strPtr->unk20; + unk18Ptr += window->unk20; unk18Ptr += 8; - if (a4 >= strPtr->unk8) + if (a4 >= window->unk8) break; } } @@ -2416,22 +2413,22 @@ static void sub_8008030(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 UNUSED static void sub_80081A4(s32 a0, s32 a3, s32 a4, s32 a7Id) { s32 i, j, a5, a6; - Window *strPtr = &gWindows[a0]; + Window *window = &gWindows[a0]; const u32 *a7 = gUnknown_80B86B4[a7Id]; a3 /= 8; a4 /= 8; a5 = 2; a6 = 2; - if (a4 < strPtr->unk8) { - s32 id = (strPtr->unk4 * a4) + a3; - u32 *unk18Ptr = &strPtr->unk28[id * 8]; + if (a4 < window->unk8) { + s32 id = (window->unk4 * a4) + a3; + u32 *unk18Ptr = &window->unk28[id * 8]; for (i = 0; i < a6; i++) { s32 xMaybe = a3; u32 *loopUnk18Ptr = unk18Ptr; for (j = 0; j < a5; j++) { - if (xMaybe < strPtr->unk4) { + if (xMaybe < window->unk4) { *(loopUnk18Ptr++) = *(a7++); *(loopUnk18Ptr++) = *(a7++); *(loopUnk18Ptr++) = *(a7++); @@ -2449,9 +2446,9 @@ UNUSED static void sub_80081A4(s32 a0, s32 a3, s32 a4, s32 a7Id) xMaybe++; } a4++; - unk18Ptr += strPtr->unk20; + unk18Ptr += window->unk20; unk18Ptr += 8; - if (a4 >= strPtr->unk8) + if (a4 >= window->unk8) break; } } @@ -2469,20 +2466,20 @@ UNUSED static void nullsub_162(void) static void DisplayMonPortrait(Window *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4) { s32 i, j; - Window *strPtr = &a0[a2]; + Window *window = &a0[a2]; a4 *= 4096; - DecompressAT((u8 *)strPtr->unk18, (strPtr->unk4 * 32) * strPtr->unk8, compressedData); - for (i = 0; i < strPtr->unk8; i++) { - for (j = 0; j < strPtr->unk4; j++) { - a1[strPtr->unk2 + i][strPtr->unk0 + j] &= 0xFFF; - a1[strPtr->unk2 + i][strPtr->unk0 + j] |= a4; + DecompressAT((u8 *)window->unk18, (window->unk4 * 32) * window->unk8, compressedData); + for (i = 0; i < window->unk8; i++) { + for (j = 0; j < window->unk4; j++) { + a1[window->y + i][window->x + j] &= 0xFFF; + a1[window->y + i][window->x + j] |= a4; } } - strPtr->unk30 = strPtr->unk28; - strPtr->unk34 = strPtr->unk1C; - strPtr->unk38 = strPtr->unk2C; - strPtr->unk44 = 1; + window->unk30 = window->unk28; + window->unk34 = window->unk1C; + window->unk38 = window->unk2C; + window->unk44 = 1; } static void sub_8008334(u32 *r7, u32 *r12) @@ -2561,25 +2558,25 @@ UNUSED static void nullsub_164(void) static void sub_80084A4(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 a8) { s32 i, j; - Window *strPtr = &a0[a2]; + Window *window = &a0[a2]; a3 /= 8; a4 /= 8; a5 /= 8; a6 /= 8; a8 *= 4096; - if (a4 < strPtr->unk8) { + if (a4 < window->unk8) { for (i = 0; i < a6; i++) { s32 xMaybe = a3; for (j = 0; j < a5; j++) { - if (xMaybe < strPtr->unk4) { - a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] &= 0xFFF; - a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] |= a8; + if (xMaybe < window->unk4) { + a1[window->y + a4][window->x + xMaybe] &= 0xFFF; + a1[window->y + a4][window->x + xMaybe] |= a8; } xMaybe++; } a4++; - if (a4 >= strPtr->unk8) + if (a4 >= window->unk8) break; } } @@ -3059,8 +3056,8 @@ static void PrepareTextbox_8008C6C(Window *strArr, u32 strId) if (strPtr->unkC == 6) { strPtr->unk46 = 1; - sub_8007958(strArr, strId, 0, 10, strPtr->unk4 * 8, 0xE); - sub_8007958(strArr, strId, 0, 11, strPtr->unk4 * 8, 0xD); + AddUnderScoreHighlightInternal(strArr, strId, 0, 10, strPtr->unk4 * 8, 0xE); + AddUnderScoreHighlightInternal(strArr, strId, 0, 11, strPtr->unk4 * 8, 0xD); strPtr->unk46 = 0; } @@ -3300,7 +3297,7 @@ UNUSED static s32 sub_80091A8(s32 a0) return a0 + 1; } -static const u8 *HandleTextFormat(Window *strArr, const u8 *str, struct UnkDrawStringStruct *sp) +static const u8 *HandleTextFormat(Window *windows, const u8 *str, struct UnkDrawStringStruct *sp) { while (1) { if (str[0] == '#') { @@ -3358,7 +3355,7 @@ static const u8 *HandleTextFormat(Window *strArr, const u8 *str, struct UnkDrawS } else if (str[1] == '+') { str += 2; - sp->unk0 = (strArr[0].unk4 * 8) - sub_8008ED0(str); + sp->unk0 = (windows[0].unk4 * 8) - sub_8008ED0(str); sp->unk0 /= 2; } else if (str[1] == 'C') { @@ -3392,8 +3389,8 @@ static const u8 *HandleTextFormat(Window *strArr, const u8 *str, struct UnkDrawS } else if (str[1] == 'W') { str += 2; - sp->unk8 = ((strArr[0].unk0 * 8) + sp->unk0) - 2; - sp->unkA = ((strArr[0].unk2 * 8) + sp->unk2) + 3; + sp->unk8 = ((windows[0].x * 8) + sp->unk0) - 2; + sp->unkA = ((windows[0].y * 8) + sp->unk2) + 3; sp->unk20 = 1; break; } @@ -3461,16 +3458,16 @@ void sub_8009408(s32 from, s32 to) gUnknown_20274A5 = TRUE; } -UNUSED static void sub_8009488(s32 strArrId) +UNUSED static void sub_8009488(s32 windowId) { s32 i, j; s32 id0, id1; - Window *strPtr = &gWindows[strArrId]; + Window *window = &gWindows[windowId]; - id0 = strPtr->unk2; - for (i = 0; i < strPtr->unk6; i++) { - id1 = strPtr->unk0; - for (j = 0; j < strPtr->unk4; j++) { + id0 = window->y; + for (i = 0; i < window->unk6; i++) { + id1 = window->x; + for (j = 0; j < window->unk4; j++) { gUnknown_202B038[0][id0][id1] &= 0xFC00; gUnknown_202B038[1][id0][id1] = 0xF27A; id1++; @@ -3483,15 +3480,15 @@ UNUSED static void nullsub_172(void) { } -void sub_8009524(s32 strArrId) +void sub_8009524(s32 windowId) { s32 i, j; - Window *strPtr = &gWindows[strArrId]; - s32 id0 = strPtr->unk2 - 1; + Window *window = &gWindows[windowId]; + s32 id0 = window->y - 1; - for (i = 0; i < strPtr->unk6 + 2; i++) { - s32 id1 = strPtr->unk0 - 1; - for (j = 0; j < strPtr->unk4 + 2; j++) { + for (i = 0; i < window->unk6 + 2; i++) { + s32 id1 = window->x - 1; + for (j = 0; j < window->unk4 + 2; j++) { gUnknown_202B038[0][id0][id1] &= 0xFC00; gUnknown_202B038[1][id0][id1] = 0xF27A; id1++; diff --git a/src/wigglytuff_shop2.c b/src/wigglytuff_shop2.c index 446519a94..db1635cfa 100644 --- a/src/wigglytuff_shop2.c +++ b/src/wigglytuff_shop2.c @@ -96,14 +96,14 @@ static void PopulateWigglytuffShopFriendAreaInfoScreen(void) else PrintStringOnWindow(32, 60, sInhabitants, sWigglytuffShop2Work->unk74, 0); - sub_800792C(sWigglytuffShop2Work->unk74, 4, 64, 20, 4); + AddUnderScoreHighlight(sWigglytuffShop2Work->unk74, 4, 64, 20, 4); if (sWigglytuffShop2Work->unkD != 0) - sub_800792C(sWigglytuffShop2Work->unk74, 184, 64, 20, 4); + AddUnderScoreHighlight(sWigglytuffShop2Work->unk74, 184, 64, 20, 4); else - sub_800792C(sWigglytuffShop2Work->unk74, 94, 64, 110, 4); + AddUnderScoreHighlight(sWigglytuffShop2Work->unk74, 94, 64, 110, 4); - sub_800792C(sWigglytuffShop2Work->unk74, 4, 130, 200, 4); + AddUnderScoreHighlight(sWigglytuffShop2Work->unk74, 4, 130, 200, 4); sub_8007A78(sWigglytuffShop2Work->unk74, 3, 64, 67, 4); sub_8007A78(sWigglytuffShop2Work->unk74, 204, 64, 67, 4); From 5a972144b91ef97366b73b785080b5fbbcd0c937 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 4 Mar 2025 14:23:57 +0100 Subject: [PATCH 27/31] more dungeon menu others --- asm/code_805D8C8.s | 151 ---------- data/data_8106A4C.s | 6 - include/structs/str_text.h | 8 +- src/dungeon_menu_others.c | 69 ++++- src/menu_input.c | 33 +-- src/text.c | 590 ++++++++++++++++++------------------- 6 files changed, 375 insertions(+), 482 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index a3141d8c6..b1c53275f 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,157 +6,6 @@ .text - thumb_func_start sub_8065948 -sub_8065948: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xCC - add r0, sp, 0x64 - mov r10, r0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x68] - add r0, sp, 0x6C - movs r4, 0 - movs r5, 0 - movs r1, 0x2 - mov r9, r1 - mov r2, r9 - strh r2, [r0] - strh r2, [r0, 0x2] - add r1, sp, 0x70 - movs r0, 0x12 - strh r0, [r1] - mov r0, sp - adds r0, 0x72 - movs r6, 0x10 - strh r6, [r0] - add r0, sp, 0x74 - strh r6, [r0] - add r3, sp, 0xC4 - mov r8, r3 - str r3, [sp, 0x78] - movs r1, 0x3 - str r1, [sp, 0x80] - add r0, sp, 0x94 - str r1, [r0, 0x4] - add r0, sp, 0xAC - str r1, [r0, 0x4] - add r0, sp, 0x4 - mov r1, r10 - movs r2, 0x60 - bl memcpy - mov r1, r10 - ldr r0, _08065A78 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - movs r0, 0x1 - mov r7, r8 - strb r0, [r7] - strb r4, [r7, 0x1] - strb r4, [r7, 0x3] - ldr r4, _08065A7C - strh r0, [r4, 0x1A] - strh r0, [r4, 0x1C] - strh r5, [r4, 0x1E] - strh r5, [r4, 0x20] - strh r5, [r4, 0x4] - strh r6, [r4, 0x6] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - strh r5, [r4, 0x14] - str r5, [r4] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - add r1, sp, 0x4 - movs r0, 0x18 - strh r0, [r1, 0xC] - movs r0, 0x1 - movs r1, 0xC - bl sub_80095E4 - add r2, sp, 0x4 - adds r1, r2, 0 - adds r0, 0x2 - strh r0, [r1, 0x10] - strh r0, [r2, 0xE] - movs r0, 0xA - strb r0, [r7, 0x2] - adds r0, r1, 0 - mov r1, r9 - strh r1, [r0, 0x8] - movs r1, 0x1 - bl DungeonShowWindows - adds r0, r4, 0 - movs r1, 0 - bl sub_80137B0 - movs r4, 0 - mov r7, r10 - add r6, sp, 0xC8 - adds r5, r6, 0 -_08065A0A: - ldr r0, _08065A7C - adds r1, r4, 0 - bl GetMenuEntryYCoord - stm r5!, {r0} - adds r4, 0x1 - cmp r4, 0 - ble _08065A0A - movs r0, 0 - bl sub_80073B8 - ldr r0, _08065A80 - ldr r2, [r0] - movs r4, 0 - str r4, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, [r6] - ldr r0, _08065A84 - ldr r2, [r0] - str r4, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r0, _08065A88 - ldrb r1, [r0, 0x8] - lsls r3, r1, 2 - adds r1, r3, r1 - lsls r1, 3 - adds r1, 0x50 - add r0, sp, 0xC8 - ldr r2, [r0] - adds r2, 0xA - adds r3, r7, r3 - ldr r3, [r3] - movs r0, 0x7 - str r0, [sp] - movs r0, 0 - bl AddDoubleUnderScoreHighlight - movs r0, 0 - bl sub_80073E0 - add sp, 0xCC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08065A78: .4byte gUnknown_8106CF4 -_08065A7C: .4byte gDungeonMenu -_08065A80: .4byte gOptionsOthersTextPtr -_08065A84: .4byte gOptionsWindowColorPtr -_08065A88: .4byte gUnknown_202F2E8 - thumb_func_end sub_8065948 - thumb_func_start sub_8065A8C sub_8065A8C: push {lr} diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index 261929a6b..5ac73a213 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -2,12 +2,6 @@ .align 2,0 - .global gUnknown_8106CF4 -gUnknown_8106CF4: @ 8106CF4 - .byte 0x13, 0x00, 0x00, 0x00 - .byte 0x11, 0x00, 0x00, 0x00 - .byte 0x19, 0x00, 0x00, 0x00 - @ sub_8065FB4 - sub_8066358 .string "pksdir0\0" .align 2,0 diff --git a/include/structs/str_text.h b/include/structs/str_text.h index 7eee2f5f7..2d4c4e152 100644 --- a/include/structs/str_text.h +++ b/include/structs/str_text.h @@ -6,10 +6,10 @@ typedef struct Window { s16 x; s16 y; - s16 unk4; - s16 unk6; + s16 width; + s16 height; s16 unk8; - u32 unkC; + s32 type; u32 unk10; u32 unk14; u32 *unk18; @@ -56,7 +56,9 @@ typedef struct WindowTemplate #define WINDOW_TYPE_0 0 #define WINDOW_TYPE_WITHOUT_BORDER 1 +#define WINDOW_TYPE_2 2 #define WINDOW_TYPE_NORMAL 3 +#define WINDOW_TYPE_4 4 #define WINDOW_TYPE_FILL_TRANSPARENT 5 #define WINDOW_TYPE_WITH_HEADER 6 #define WINDOW_TYPE_7 7 diff --git a/src/dungeon_menu_others.c b/src/dungeon_menu_others.c index ceccb4f5d..98d7c9da2 100644 --- a/src/dungeon_menu_others.c +++ b/src/dungeon_menu_others.c @@ -62,6 +62,8 @@ extern const u8 *const gUnknown_80FE7C0; extern const u8 *const gUnknown_80FE788; extern const u8 *const gUnknown_80FE7A8; extern const u8 *const gUnknown_80FE7E4; +extern const u8 *const gOptionsOthersTextPtr; +extern const u8 *const gOptionsWindowColorPtr; void PrintOthersMenuOptions(void); void ShowGameOptionsMenu(void); @@ -75,7 +77,7 @@ void TrySetNewGameOptions(bool8 bPressed); void AskToResetToDefault(void); void PrintGameOptions(void); void PrintDungeonOptions(void); -void sub_8065948(void); +void PrintOthersOptions(void); void sub_8065A8C(s32 optionId); void sub_8065B3C(s32 optionId); bool8 sub_8065BEC(void); @@ -234,9 +236,11 @@ enum { OPTION_GRIDS, OPTION_MAP, OPTION_WINDOWS, + OPTION_COUNT }; #define DUNGEON_OPTIONS_COUNT OPTION_WINDOWS +#define OTHERS_OPTIONS_COUNT (OPTION_COUNT - DUNGEON_OPTIONS_COUNT) bool8 ShowDungeonOptions(void) { @@ -309,7 +313,7 @@ bool8 ShowOthersOptions(void) bPress = FALSE; dpadMoved = FALSE; - sub_8065948(); + PrintOthersOptions(); while (1) { AddMenuCursorSprite(&gDungeonMenu); DungeonRunFrameActions(0x24); @@ -669,7 +673,7 @@ void PrintDungeonOptions(void) [3] = WINDOW_DUMMY, } }; - s32 arr[] = {16, 25, 27}; + s32 mapOptionUnderscoreWidths[] = {16, 25, 27}; header.count = 1; header.currId = 0; @@ -734,7 +738,64 @@ void PrintDungeonOptions(void) AddDoubleUnderScoreHighlight(0, 80, y[3] + 10, 16, 7); } - AddDoubleUnderScoreHighlight(0, 80 + (gUnknown_202F2E8.mapOption * 40), y[4] + 10, arr[gUnknown_202F2E8.mapOption], 7); + AddDoubleUnderScoreHighlight(0, 80 + (gUnknown_202F2E8.mapOption * 40), y[4] + 10, mapOptionUnderscoreWidths[gUnknown_202F2E8.mapOption], 7); + + sub_80073E0(0); +} + +void PrintOthersOptions(void) +{ + s32 i; + s32 y[OTHERS_OPTIONS_COUNT]; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + s32 underscoreWidths[] = {19, 17, 25}; + + header.count = 1; + header.currId = 0; + header.f3 = 0; + + gDungeonMenu.unk1A = OTHERS_OPTIONS_COUNT; + gDungeonMenu.unk1C = OTHERS_OPTIONS_COUNT; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + windows.id[0].width = 24; + windows.id[0].height = windows.id[0].unk10 = sub_80095E4(OTHERS_OPTIONS_COUNT, 12) + 2; + header.width = 10; + windows.id[0].pos.x = 2; + DungeonShowWindows(&windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + + for (i = 0; i < OTHERS_OPTIONS_COUNT; i++) { + y[i] = GetMenuEntryYCoord(&gDungeonMenu, i); + } + sub_80073B8(0); + + PrintFormattedStringOnWindow(16, 0, gOptionsOthersTextPtr, 0, '\0'); + PrintFormattedStringOnWindow(8, y[0], gOptionsWindowColorPtr, 0, '\0'); + AddDoubleUnderScoreHighlight(0, 80 + (gUnknown_202F2E8.windowColor * 40), y[0] + 10, underscoreWidths[gUnknown_202F2E8.windowColor], 7); sub_80073E0(0); } diff --git a/src/menu_input.c b/src/menu_input.c index efc42afec..a973b4795 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -386,21 +386,20 @@ void sub_8012EBC(MenuStruct *param_1) const u32 *colorArray; s32 counter; s32 index; - WindowTemplates textStack; + WindowTemplates winTemplates; u8 buffer[256]; - Window *ptr_text; - WindowTemplate *ptr_text2; + Window *window; if (param_1->unk4D) { sub_80073B8(param_1->index); index = param_1->index; - ptr_text = &gWindows[index]; + window = &gWindows[index]; - if (ptr_text->unkC == 6) { - ptr_text2 = &textStack.id[index]; - RestoreUnkTextStruct_8006518(&textStack); + if (window->type == WINDOW_TYPE_WITH_HEADER) { + WindowTemplate *windowTemplate = &winTemplates.id[index]; + RestoreUnkTextStruct_8006518(&winTemplates); x = sub_8008ED0(param_1->unk0); - PrintFormattedStringOnWindow(((ptr_text2->header->width * 8 - x) / 2) + 8, 0, param_1->unk0, param_1->index, 0); + PrintFormattedStringOnWindow(((windowTemplate->header->width * 8 - x) / 2) + 8, 0, param_1->unk0, param_1->index, 0); } colorArray = param_1->menuTextColorArray; @@ -538,20 +537,18 @@ bool8 sub_8013114(MenuStruct *param_1, s32 *menuAction) return FALSE; } -static void sub_8013134(MenuInputStruct *param_1, u32 menuItemCounter, u32 index) +static void sub_8013134(MenuInputStruct *param_1, u32 menuItemCounter, u32 windowId) { - Window *temp; + Window *window = &gWindows[windowId]; - temp = &gWindows[index]; - - param_1->unk0 = index; + param_1->unk0 = windowId; param_1->menuIndex = 0; param_1->unk1A = menuItemCounter; param_1->unk1C = menuItemCounter; param_1->unk1E = 0; param_1->unk4 = 0; - if (temp->unkC == 6) + if (window->type == WINDOW_TYPE_WITH_HEADER) param_1->firstEntryY = 16; else param_1->firstEntryY = 2; @@ -798,12 +795,12 @@ void sub_80137B0(MenuInputStruct *param_1, s32 param_2) iVar2 = param_2 << 8; } else { - if (gWindows[param_1->unk0].unkC == 6) + if (gWindows[param_1->unk0].type == WINDOW_TYPE_WITH_HEADER) iVar1 = 16; else iVar1 = 0; - iVar2 = (gWindows[param_1->unk0].unk6 * 8 - iVar1) << 8; + iVar2 = (gWindows[param_1->unk0].height * 8 - iVar1) << 8; } param_1->unk10 = iVar2 / param_1->unk1C; @@ -957,7 +954,7 @@ void sub_8013984(MenuInputStruct *param_1) param_1->unk4 = 0; - if (window->unkC == 6) + if (window->type== WINDOW_TYPE_WITH_HEADER) param_1->firstEntryY = 16; else param_1->firstEntryY = 0; @@ -965,7 +962,7 @@ void sub_8013984(MenuInputStruct *param_1) if (param_1->unk20 < 2) param_1->unkC = 0; else - param_1->unkC = (window->x + window->unk4 - 2) * 8; + param_1->unkC = (window->x + window->width - 2) * 8; param_1->unkE = (window->y + 1) * 8 - 2; } diff --git a/src/text.c b/src/text.c index 5f9cd9a6c..efebe14f8 100644 --- a/src/text.c +++ b/src/text.c @@ -62,7 +62,7 @@ EWRAM_INIT void (*gIwramTextFunc4)(s32 a0) = sub_8272A78; EWRAM_INIT u8 gUnknown_203B090 = 0; static void ShowWindowsInternal(const WindowTemplates *a0, bool8 a1, bool8 a2, DungeonPos *a3); -static void AddWindow(Window *a0, u32 *a1, u32 *a2, u16 *a3, u32 a4, const WindowTemplate *a5, bool8 a6, u32 a7, DungeonPos *a8, u8 a9); +static void AddWindow(Window *windows, u32 *vram, u32 *a2, u16 *a3, u32 windowId, const WindowTemplate *winTemplate, bool8 a6, s32 firstBlockId, DungeonPos *positionModifier, u8 a9); static void sub_800677C(Window *a0, s32 a1, u16 *a2, u8 a3); static void sub_80069CC(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4); static void sub_8006AC4(Window *a0, s32 a1, s32 a2, s32 a3, u16 *a4); @@ -182,7 +182,7 @@ void LoadCharmaps(void) sCharHeight[1] = 12; for (k = 0; k < 4; k++) { - gWindows[k].unk4 = 0; + gWindows[k].width = 0; gWindows[k].unk8 = 0; gWindows[k].unk46 = 0; } @@ -282,9 +282,7 @@ void ShowWindows(const WindowTemplates *winTemplates, bool8 a1, bool8 a2) static void ShowWindowsInternal(const WindowTemplates *winTemplates, bool8 a1, bool8 a2, DungeonPos *positionModifier) { s32 i; - u32 r9; - - r9 = 2; + s32 area = 2; if (winTemplates == NULL) winTemplates = &sDummyWindows; @@ -297,9 +295,9 @@ static void ShowWindowsInternal(const WindowTemplates *winTemplates, bool8 a1, b sSavedWindows.id[i] = winTemplates->id[i]; if (winTemplates->id[i].width != 0) { - AddWindow(gWindows, (u32 *)VRAM, sUnknown_20274B4, &gUnknown_202B038[0][0][0], gUnknown_80B8804[i], &winTemplates->id[i], a1, r9, positionModifier, 0); + AddWindow(gWindows, (u32 *)VRAM, sUnknown_20274B4, &gUnknown_202B038[0][0][0], gUnknown_80B8804[i], &winTemplates->id[i], a1, area, positionModifier, 0); sub_80089AC(&winTemplates->id[i], positionModifier); - r9 += winTemplates->id[i].width * winTemplates->id[i].unk10; + area += winTemplates->id[i].width * winTemplates->id[i].unk10; } } @@ -332,90 +330,86 @@ u32 sub_8006544(u32 index) return gUnknown_80B8814[index]; } -// a1 is a VRAM pointer -static void AddWindow(Window *windows, u32 *a1, u32 *a2, u16 *a3, u32 windowId, const WindowTemplate *winTemplate, bool8 a6, u32 a7, DungeonPos *positionModifier, u8 a9) +static void AddWindow(Window *windows, u32 *vram, u32 *a2, u16 *a3, u32 windowId, const WindowTemplate *winTemplate, bool8 a6, s32 firstBlockId, DungeonPos *positionModifier, u8 a9) { Window *newWindow; s32 x, y; - s32 iVar6; s32 numI; u32 uVar1; - s32 temp; - s32 i, j; - newWindow = &windows[windowId]; x = winTemplate->pos.x + positionModifier->x; y = winTemplate->pos.y + positionModifier->y; newWindow->x = x; newWindow->y = y; - newWindow->unk4 = winTemplate->width; + newWindow->width = winTemplate->width; newWindow->unk8 = winTemplate->unk10; - newWindow->unk6 = winTemplate->height; - newWindow->unkC = winTemplate->type; - newWindow->unk10 = a7; + newWindow->height = winTemplate->height; + newWindow->type = winTemplate->type; + newWindow->unk10 = firstBlockId; - if (newWindow->unkC == 6) - newWindow->unk14 = a7; + if (newWindow->type == WINDOW_TYPE_WITH_HEADER) + newWindow->unk14 = firstBlockId; else - newWindow->unk14 = a7 + winTemplate->unk12 * newWindow->unk4; + newWindow->unk14 = firstBlockId + winTemplate->unk12 * newWindow->width; newWindow->unk18 = &a2[newWindow->unk10 * 8]; newWindow->unk1C = &a2[newWindow->unk14 * 8]; newWindow->unk24 = winTemplate->unk12; - newWindow->unk28 = &a1[newWindow->unk14 * 8]; + newWindow->unk28 = &vram[newWindow->unk14 * 8]; - if (newWindow->unkC == 6) - newWindow->unk2C = newWindow->unk4 * (newWindow->unk6 + winTemplate->unk12) * 32; + if (newWindow->type == WINDOW_TYPE_WITH_HEADER) + newWindow->unk2C = newWindow->width * (newWindow->height + winTemplate->unk12) * 32; else - newWindow->unk2C = newWindow->unk4 * newWindow->unk6 * 32; + newWindow->unk2C = newWindow->width * newWindow->height * 32; newWindow->unk30 = 0; newWindow->unk34 = 0; newWindow->unk38 = 0; - newWindow->unk20 = (newWindow->unk4 * 8) - 8; - newWindow->unk45 = newWindow->unkC == 0; + newWindow->unk20 = (newWindow->width * 8) - 8; + newWindow->unk45 = newWindow->type == WINDOW_TYPE_0; if (newWindow->unk8 == 0) return; if ((winTemplate->unk0 & 0xA0) != 0x80) { - temp = y - 1; + s32 newY = y - 1; + s32 i, j; - if (newWindow->unkC == 6) { + if (newWindow->type == WINDOW_TYPE_WITH_HEADER) { uVar1 = a6 ? newWindow->unk14 : 0; - sub_8006E94(newWindow, temp, uVar1, winTemplate->header, a3); + sub_8006E94(newWindow, newY, uVar1, winTemplate->header, a3); - temp = y + 2; - uVar1 = a6 ? newWindow->unk14 + newWindow->unk4 * (winTemplate->unk12 + 2) : 0; - numI = newWindow->unk6 - 2; + newY = y + 2; + uVar1 = a6 ? newWindow->unk14 + newWindow->width * (winTemplate->unk12 + 2) : 0; + numI = newWindow->height - 2; } else { - sub_800677C(newWindow, temp, a3, a9); + sub_800677C(newWindow, newY, a3, a9); - temp = y; + newY = y; uVar1 = a6 ? newWindow->unk14 : 0; - numI = newWindow->unk6; + numI = newWindow->height; } for (i = 0; i < numI; i++) { - iVar6 = x - 1; - sub_80069CC(newWindow, iVar6, temp, i, a3); - iVar6 = x; + s32 newX = x - 1; + sub_80069CC(newWindow, newX, newY, i, a3); + newX = x; - for (j = 0; j < newWindow->unk4; j++) { - sub_8006AC4(newWindow, iVar6, temp, uVar1, a3); + for (j = 0; j < newWindow->width; j++) { + sub_8006AC4(newWindow, newX, newY, uVar1, a3); - iVar6++; + newX++; if (a6) uVar1++; } - sub_8006B70(newWindow, iVar6, temp, i, a3); - temp++; + sub_8006B70(newWindow, newX, newY, i, a3); + newY++; } - sub_8006C44(newWindow, temp, a3, a9); + sub_8006C44(newWindow, newY, a3, a9); } if ((winTemplate->unk0 & 0x80) == 0) @@ -436,20 +430,20 @@ static void sub_800677C(Window *window, s32 a1, u16 *a2, u8 a3) if (a1 < 0) return; - switch (window->unkC) { - case 0: - case 1: - case 2: - case 6: + switch (window->type) { + case WINDOW_TYPE_0: + case WINDOW_TYPE_WITHOUT_BORDER: + case WINDOW_TYPE_2: + case WINDOW_TYPE_WITH_HEADER: break; - case 3: + case WINDOW_TYPE_NORMAL: (a2 + a1 * 0x20)[iVar5] = 0xF2D8; if (a3 != 0) (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF293; else (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; - for (i = 0; i < window->unk4; i++) { + for (i = 0; i < window->width; i++) { (a2 + a1 * 0x20)[iVar5] = 0xF2D9; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; @@ -461,11 +455,11 @@ static void sub_800677C(Window *window, s32 a1, u16 *a2, u8 a3) else (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; break; - case 4: + case WINDOW_TYPE_4: (a2 + a1 * 0x20)[iVar5] = 0xF2E8; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; - for (i = 0; i < window->unk4; i++) { + for (i = 0; i < window->width; i++) { (a2 + a1 * 0x20)[iVar5] = 0xF2E9; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; @@ -474,20 +468,20 @@ static void sub_800677C(Window *window, s32 a1, u16 *a2, u8 a3) (a2 + a1 * 0x20)[iVar5] = 0xF6E8; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; break; - case 5: + case WINDOW_TYPE_FILL_TRANSPARENT: (a2 + a1 * 0x20)[iVar5] = 0xF2DC; iVar5++; - for (i = 0; i < window->unk4; i++) { + for (i = 0; i < window->width; i++) { (a2 + a1 * 0x20)[iVar5] = 0xF2DD; iVar5++; } (a2 + a1 * 0x20)[iVar5] = 0xF6DC; break; - case 7: + case WINDOW_TYPE_7: (a2 + a1 * 0x20)[iVar5] = 0xF293; iVar5++; - for (i = 0; i < window->unk4; i++) { + for (i = 0; i < window->width; i++) { (a2 + a1 * 0x20)[iVar5] = 0xF297; iVar5++; } @@ -504,35 +498,35 @@ static void sub_80069CC(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) if (a2 < 0) return; - switch (window->unkC) { - case 1: - case 2: + switch (window->type) { + case WINDOW_TYPE_WITHOUT_BORDER: + case WINDOW_TYPE_2: break; - case 0: + case WINDOW_TYPE_0: if (a3 == 0) { (a4 + a2 * 0x20)[a1] = 0xF297; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; } - if (a3 == window->unk6 - 1) { + if (a3 == window->height - 1) { (a4 + a2 * 0x20)[a1] = 0xFA97; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; } // Fallthrough - case 3: - case 6: + case WINDOW_TYPE_NORMAL: + case WINDOW_TYPE_WITH_HEADER: (a4 + a2 * 0x20)[a1] = 0xF2DA; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; - case 4: + case WINDOW_TYPE_4: (a4 + a2 * 0x20)[a1] = 0xF2EA; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; - case 5: + case WINDOW_TYPE_FILL_TRANSPARENT: (a4 + a2 * 0x20)[a1] = 0xF2DE; break; - case 7: + case WINDOW_TYPE_7: (a4 + a2 * 0x20)[a1] = 0xF2B6; break; } @@ -545,21 +539,21 @@ static void sub_8006AC4(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) if (a2 < 0) return; - switch (window->unkC) { - case 2: + switch (window->type) { + case WINDOW_TYPE_2: (a4 + a2 * 0x20)[a1] = a3 | 0xF000; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF278; break; - case 0: - case 1: - case 3: - case 4: - case 6: + case WINDOW_TYPE_0: + case WINDOW_TYPE_WITHOUT_BORDER: + case WINDOW_TYPE_NORMAL: + case WINDOW_TYPE_4: + case WINDOW_TYPE_WITH_HEADER: (a4 + a2 * 0x20)[a1] = a3 | 0xF000; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; - case 5: - case 7: + case WINDOW_TYPE_FILL_TRANSPARENT: + case WINDOW_TYPE_7: (a4 + a2 * 0x20)[a1] = a3 | 0xF000; break; } @@ -572,35 +566,35 @@ static void sub_8006B70(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) if (a2 < 0) return; - switch (window->unkC) { - case 1: - case 2: + switch (window->type) { + case WINDOW_TYPE_WITHOUT_BORDER: + case WINDOW_TYPE_2: break; - case 0: + case WINDOW_TYPE_0: if (a3 == 0) { (a4 + a2 * 0x20)[a1] = 0xF697; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; } - if (a3 == window->unk6 - 1) { + if (a3 == window->height - 1) { (a4 + a2 * 0x20)[a1] = 0xFE97; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; } // Fallthrough - case 3: - case 6: + case WINDOW_TYPE_NORMAL: + case WINDOW_TYPE_WITH_HEADER: (a4 + a2 * 0x20)[a1] = 0xF6DA; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; - case 4: + case WINDOW_TYPE_4: (a4 + a2 * 0x20)[a1] = 0xF6EA; (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; break; - case 5: + case WINDOW_TYPE_FILL_TRANSPARENT: (a4 + a2 * 0x20)[a1] = 0xF6DE; break; - case 7: + case WINDOW_TYPE_7: (a4 + a2 * 0x20)[a1] = 0xF6B6; break; } @@ -618,20 +612,20 @@ static void sub_8006C44(Window *window, s32 a1, u16 *a2, u8 a3) if (a1 < 0) return; - switch (window->unkC) { - case 0: - case 1: - case 2: + switch (window->type) { + case WINDOW_TYPE_0: + case WINDOW_TYPE_WITHOUT_BORDER: + case WINDOW_TYPE_2: break; - case 3: - case 6: + case WINDOW_TYPE_NORMAL: + case WINDOW_TYPE_WITH_HEADER: (a2 + a1 * 0x20)[iVar5] = 0xFAD8; if (a3 != 0) (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xFA93; else (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; - for (i = 0; i < window->unk4; i++) { + for (i = 0; i < window->width; i++) { (a2 + a1 * 0x20)[iVar5] = 0xFAD9; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; @@ -643,11 +637,11 @@ static void sub_8006C44(Window *window, s32 a1, u16 *a2, u8 a3) else (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; break; - case 4: + case WINDOW_TYPE_4: (a2 + a1 * 0x20)[iVar5] = 0xFAE8; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; - for (i = 0; i < window->unk4; i++) { + for (i = 0; i < window->width; i++) { (a2 + a1 * 0x20)[iVar5] = 0xFAE9; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; iVar5++; @@ -656,20 +650,20 @@ static void sub_8006C44(Window *window, s32 a1, u16 *a2, u8 a3) (a2 + a1 * 0x20)[iVar5] = 0xFEE8; (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; break; - case 5: + case WINDOW_TYPE_FILL_TRANSPARENT: (a2 + a1 * 0x20)[iVar5] = 0xFADC; iVar5++; - for (i = 0; i < window->unk4; i++) { + for (i = 0; i < window->width; i++) { (a2 + a1 * 0x20)[iVar5] = 0xFADD; iVar5++; } (a2 + a1 * 0x20)[iVar5] = 0xFEDC; break; - case 7: + case WINDOW_TYPE_7: (a2 + a1 * 0x20)[iVar5] = 0xFA93; iVar5++; - for (i = 0; i < window->unk4; i++) { + for (i = 0; i < window->width; i++) { (a2 + a1 * 0x20)[iVar5] = 0xFA97; iVar5++; } @@ -1466,9 +1460,9 @@ void sub_8007334(s32 windowId) struct Window *window = &gWindows[windowId]; s32 r5 = window->unk14; s32 r6 = window->y; - for (i = 0; i < window->unk6; i++) { + for (i = 0; i < window->height; i++) { s32 id = window->x; - for (j = 0; j < window->unk4; j++) { + for (j = 0; j < window->width; j++) { gUnknown_202B038[0][r6][id] &= ~0x3ff; gUnknown_202B038[0][r6][id] |= r5; id++; @@ -1482,40 +1476,36 @@ UNUSED static void nullsub_154(void) { } -void sub_80073B8(s32 a0) +void sub_80073B8(s32 windowId) { - Window *r1; + Window *window = &gWindows[windowId]; - r1 = &gWindows[a0]; - - r1->unk3C = &r1->unk1C[(u32)r1->unk2C >> 2]; - r1->unk40 = r1->unk1C; - r1->unk46 = 1; + window->unk3C = &window->unk1C[(u32)window->unk2C >> 2]; + window->unk40 = window->unk1C; + window->unk46 = 1; } UNUSED static void nullsub_155(void) { } -void sub_80073E0(s32 a0) +void sub_80073E0(s32 windowId) { - Window *r1; + Window *window = &gWindows[windowId]; - r1 = &gWindows[a0]; + if (window->unk44 == 0) { + window->unk30 = &window->unk28[window->unk3C - window->unk1C]; + window->unk34 = window->unk3C; + window->unk38 = (window->unk40 - window->unk3C + 1) * 4; - if (r1->unk44 == 0) { - r1->unk30 = &r1->unk28[r1->unk3C - r1->unk1C]; - r1->unk34 = r1->unk3C; - r1->unk38 = (r1->unk40 - r1->unk3C + 1) * 4; + if (window->unk38 >= window->unk2C) + window->unk38 = window->unk2C; - if (r1->unk38 >= r1->unk2C) - r1->unk38 = r1->unk2C; - - if (r1->unk38 < 0) - r1->unk38 = 0; + if (window->unk38 < 0) + window->unk38 = 0; } - r1->unk46 = 0; + window->unk46 = 0; } UNUSED static void nullsub_156(void) @@ -1532,7 +1522,7 @@ UNUSED static bool8 sub_8007464(void) return FALSE; } -static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 a5) +static u32 xxx_draw_char(struct Window *windows, s32 x, s32 y, u32 a3, u32 color, u32 windowId) { u32 *r3; const struct unkShiftData *shiftData; @@ -1542,7 +1532,7 @@ static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 const u16 *local_3c; s32 i; s32 xDiv8, yDiv8; - struct Window *r5 = &a0[a5]; + struct Window *window = &windows[windowId]; s32 sp18 = gUnknown_80B853C[color & 0xF]; u8 var_2C; u32 r4; @@ -1569,47 +1559,47 @@ static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 } if (sp0->unkA & 1) { - r3 = r5->unk18 + ((((y / 8) * r5->unk4) + (x / 8)) * 8); + r3 = window->unk18 + ((((y / 8) * window->width) + (x / 8)) * 8); r3 += y - (y / 8 * 8); shiftData = &gCharMasksOffsets[x - ((x / 8) * 8)]; xDiv8 = x / 8; yDiv8 = y / 8; - if (yDiv8 < r5->unk8) { + if (yDiv8 < window->unk8) { for (i = 0; i < sCharHeight[sCurrentCharmap]; i++) { r2 = (local_44[1] << 0x10) | (local_44[0]); if (r2 != 0) { - if (xDiv8 < r5->unk4) { + if (xDiv8 < window->width) { *r3 |= (shiftData->bytesA & r2) << shiftData->shift_left; - if (r5->unk3C > r3) - r5->unk3C = r3; - if (r5->unk40 < r3) - r5->unk40 = r3; + if (window->unk3C > r3) + window->unk3C = r3; + if (window->unk40 < r3) + window->unk40 = r3; } - if (xDiv8 < r5->unk4 - 1) { + if (xDiv8 < window->width - 1) { r3 += 8; r2 &= shiftData->bytesB; *r3 |= (r2) >> shiftData->shift_right; - if (r5->unk40 < r3) - r5->unk40 = r3; + if (window->unk40 < r3) + window->unk40 = r3; r3 -= 8; } } r2 = local_44[2]; if (r2 != 0) { - if (xDiv8 < r5->unk4 - 1) { + if (xDiv8 < window->width - 1) { r3 += 8; *r3 |= (r2 & shiftData->bytesA) << shiftData->shift_left; - if (r5->unk40 < r3) - r5->unk40 = r3; + if (window->unk40 < r3) + window->unk40 = r3; r3 -= 8; } - if (xDiv8 < r5->unk4 - 2) { + if (xDiv8 < window->width - 2) { r3 += 16; *r3 |= (r2 & shiftData->bytesB) >> shiftData->shift_right; - if (r5->unk40 < r3) - r5->unk40 = r3; + if (window->unk40 < r3) + window->unk40 = r3; r3 -= 16; } } @@ -1618,9 +1608,9 @@ static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 r3++; y++; if (y % 8 == 0) { - r3 += r5->unk20; + r3 += window->unk20; yDiv8++; - if (yDiv8 >= r5->unk8) + if (yDiv8 >= window->unk8) break; } } @@ -1630,13 +1620,13 @@ static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 bool8 notFirstIteration = FALSE; u32 r1; - r3 = r5->unk18 + ((((y / 8) * r5->unk4) + (x / 8)) * 8); + r3 = window->unk18 + ((((y / 8) * window->width) + (x / 8)) * 8); r3 += y - (y / 8 * 8); shiftData = &gCharMasksOffsets[x - ((x / 8) * 8)]; xDiv8 = x / 8; yDiv8 = y / 8; - if (yDiv8 < r5->unk8) { + if (yDiv8 < window->unk8) { for (i = 0; i < sCharHeight[sCurrentCharmap]; i++) { r4 = (local_44[1] << 0x10) | (local_44[0]); r2 = (0x11111111 & r4) + (sp18 & r4); @@ -1655,18 +1645,18 @@ static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 } if (r2 != 0) { - if (xDiv8 < r5->unk4) { + if (xDiv8 < window->width) { *r3 |= (r2 & shiftData->bytesA) << shiftData->shift_left; - if (r5->unk3C > r3) - r5->unk3C = r3; - if (r5->unk40 < r3) - r5->unk40 = r3; + if (window->unk3C > r3) + window->unk3C = r3; + if (window->unk40 < r3) + window->unk40 = r3; } - if (xDiv8 < r5->unk4 - 1) { + if (xDiv8 < window->width - 1) { r3 += 8; *r3 |= (r2 & shiftData->bytesB) >> shiftData->shift_right; - if (r5->unk40 < r3) - r5->unk40 = r3; + if (window->unk40 < r3) + window->unk40 = r3; r3 -= 8; } } @@ -1688,18 +1678,18 @@ static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 } if (r2 != 0) { - if (xDiv8 < r5->unk4 - 1) { + if (xDiv8 < window->width - 1) { r3 += 8; *r3 |= (r2 & shiftData->bytesA) << shiftData->shift_left; - if (r5->unk40 < r3) - r5->unk40 = r3; + if (window->unk40 < r3) + window->unk40 = r3; r3 -= 8; } - if (xDiv8 < r5->unk4 - 2) { + if (xDiv8 < window->width - 2) { r3 += 16; *r3 |= (r2 & shiftData->bytesB) >> shiftData->shift_right; - if (r5->unk40 < r3) - r5->unk40 = r3; + if (window->unk40 < r3) + window->unk40 = r3; r3 -= 16; } } @@ -1711,9 +1701,9 @@ static u32 xxx_draw_char(struct Window *a0, s32 x, s32 y, u32 a3, u32 color, u32 r3++; y++; if (y % 8 == 0) { - r3 += r5->unk20; + r3 += window->unk20; yDiv8++; - if (yDiv8 >= r5->unk8) + if (yDiv8 >= window->unk8) break; } } @@ -1759,7 +1749,7 @@ static void AddUnderScoreHighlightInternal(Window *windows, u32 windowId, s32 x, r4 = y / 8; - dest = window->unk18 + (((window->unk4 * r4) + (x / 8)) * 8); + dest = window->unk18 + (((window->width * r4) + (x / 8)) * 8); dest += (r4 * -8) + y; r6 = x / 8; @@ -1780,7 +1770,7 @@ static void AddUnderScoreHighlightInternal(Window *windows, u32 windowId, s32 x, uVar4 = (uVar4 & 0x11111111) + (uVar4 & r9); if (uVar4 != 0) { - if (r6 < window->unk4) { + if (r6 < window->width) { dest[0] |= (shiftData->bytesA & uVar4) << shiftData->shift_left; if (window->unk3C > dest) @@ -1789,7 +1779,7 @@ static void AddUnderScoreHighlightInternal(Window *windows, u32 windowId, s32 x, window->unk40 = dest; } - if (r6 < window->unk4 - 1) { + if (r6 < window->width - 1) { dest += 8; dest[0] |= (uVar4 & shiftData->bytesB) >> shiftData->shift_right; @@ -1814,40 +1804,40 @@ UNUSED static void nullsub_157(void) { } -static void sub_8007AA4(struct Window *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color) +static void sub_8007AA4(struct Window *windows, u32 windowId, s32 x, s32 y, s32 a4, u32 color) { - struct Window *r4 = &a0[a1]; + struct Window *window = &windows[windowId]; u32 ip = gUnknown_80B853C[color & 0xF] + 0x11111111; const u32 unkBits[] = {0xF, 0xF0, 0xF00, 0xF000, 0xF0000, 0xF00000, 0xF000000, 0xF0000000}; s32 r3 = y / 8; - u32 *dest = r4->unk18 + ((r4->unk4 * r3 + x / 8) * 8); + u32 *dest = window->unk18 + ((window->width * r3 + x / 8) * 8); s32 r2 = x / 8; dest += r3 * -8 + y; ip &= unkBits[x & 7]; - if (r2 < r4->unk4) { + if (r2 < window->width) { // This goto looks like a fakematch, but I couldn't get it to work otherwise. goto LOOP_MIDDLE; while (1) { y++; dest++; if ((y % 8) == 0) - dest += r4->unk20; + dest += window->unk20; a4--; LOOP_MIDDLE: if (a4 <= 0) return; - if (r3 >= r4->unk8) + if (r3 >= window->unk8) return; dest[0] |= ip; - if (r4->unk3C > dest) - r4->unk3C = dest; - if (r4->unk40 < dest) - r4->unk40 = dest; + if (window->unk3C > dest) + window->unk3C = dest; + if (window->unk40 < dest) + window->unk40 = dest; } } } @@ -2293,14 +2283,14 @@ static void sub_8007E64(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a6 /= 8; a8 *= 4096; if (a4 < window->unk8) { - s32 id = (window->unk4 * a4) + a3; + s32 id = (window->width * a4) + a3; u32 *unk18Ptr = &window->unk18[id * 8]; for (i = 0; i < a6; i++) { s32 xMaybe = a3; u32 *loopUnk18Ptr = unk18Ptr; for (j = 0; j < a5; j++) { - if (xMaybe < window->unk4) { + if (xMaybe < window->width) { if (window->unk3C > loopUnk18Ptr) { window->unk3C = loopUnk18Ptr; } @@ -2371,14 +2361,14 @@ static void sub_8008030(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a6 /= 8; a8 *= 4096; if (a4 < window->unk8) { - u32 *unk18Ptr = &window->unk18[((window->unk4 * a4) + (a3 + a5)) * 8]; + u32 *unk18Ptr = &window->unk18[((window->width * a4) + (a3 + a5)) * 8]; for (i = 0; i < a6; i++) { s32 xMaybe = a3 + a5; u32 *loopUnk18Ptr = unk18Ptr; for (j = 0; j < a5; j++) { xMaybe--; loopUnk18Ptr -= 8; - if (xMaybe < window->unk4) { + if (xMaybe < window->width) { if (window->unk3C > loopUnk18Ptr) { window->unk3C = loopUnk18Ptr; } @@ -2421,14 +2411,14 @@ UNUSED static void sub_80081A4(s32 a0, s32 a3, s32 a4, s32 a7Id) a5 = 2; a6 = 2; if (a4 < window->unk8) { - s32 id = (window->unk4 * a4) + a3; + s32 id = (window->width * a4) + a3; u32 *unk18Ptr = &window->unk28[id * 8]; for (i = 0; i < a6; i++) { s32 xMaybe = a3; u32 *loopUnk18Ptr = unk18Ptr; for (j = 0; j < a5; j++) { - if (xMaybe < window->unk4) { + if (xMaybe < window->width) { *(loopUnk18Ptr++) = *(a7++); *(loopUnk18Ptr++) = *(a7++); *(loopUnk18Ptr++) = *(a7++); @@ -2469,9 +2459,9 @@ static void DisplayMonPortrait(Window *a0, u16 a1[32][32], s32 a2, const u8 *com Window *window = &a0[a2]; a4 *= 4096; - DecompressAT((u8 *)window->unk18, (window->unk4 * 32) * window->unk8, compressedData); + DecompressAT((u8 *)window->unk18, (window->width * 32) * window->unk8, compressedData); for (i = 0; i < window->unk8; i++) { - for (j = 0; j < window->unk4; j++) { + for (j = 0; j < window->width; j++) { a1[window->y + i][window->x + j] &= 0xFFF; a1[window->y + i][window->x + j] |= a4; } @@ -2515,23 +2505,23 @@ UNUSED static void nullsub_163(void) { } -static void DisplayMonPortraitFlipped(Window *a0, s32 a1, const u8 *compressedData, s32 a3) +static void DisplayMonPortraitFlipped(Window *windows, s32 windowId, const u8 *compressedData, s32 a3) { s32 i, j; - Window *strPtr = &a0[a1]; + Window *window = &windows[windowId]; - DisplayMonPortraitSprite(a1, compressedData, a3); - for (i = 0; i < strPtr->unk8; i++) { - s32 r8 = strPtr->unk4 / 2; - if (strPtr->unk4 & 1) + DisplayMonPortraitSprite(windowId, compressedData, a3); + for (i = 0; i < window->unk8; i++) { + s32 r8 = window->width / 2; + if (window->width & 1) r8++; for (j = 0; j < r8; j++) { u32 *r4, *r5; - s32 unk4Mul = strPtr->unk4 * i; + s32 unk4Mul = window->width * i; - r4 = &strPtr->unk18[(unk4Mul + j) * 8]; + r4 = &window->unk18[(unk4Mul + j) * 8]; unk4Mul--; - r5 = &strPtr->unk18[(unk4Mul + (strPtr->unk4 - j)) * 8]; + r5 = &window->unk18[(unk4Mul + (window->width - j)) * 8]; sub_8008334(r4++, r5++); sub_8008334(r4++, r5++); @@ -2569,7 +2559,7 @@ static void sub_80084A4(Window *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 for (i = 0; i < a6; i++) { s32 xMaybe = a3; for (j = 0; j < a5; j++) { - if (xMaybe < window->unk4) { + if (xMaybe < window->width) { a1[window->y + a4][window->x + xMaybe] &= 0xFFF; a1[window->y + a4][window->x + xMaybe] |= a8; } @@ -2683,11 +2673,11 @@ static const u32 gUnknown_80B8868[] = 0xFFF00000, 0xFF000000, 0xF0000000 }; -UNUSED static void sub_80086C8(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) +UNUSED static void sub_80086C8(Window *windows, s32 windowId, s32 a2, s32 a3, s32 a4, s32 a5) { u32 *r5; s32 r2, r0, r1; - Window *strPtr = &a0[a1]; + Window *window = &windows[windowId]; if (a2 < 0) { a4 += a2; @@ -2698,17 +2688,17 @@ UNUSED static void sub_80086C8(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a a3 = 0; } - if (a4 + a2 > strPtr->unk4 * 8) { - a4 = (strPtr->unk4 * 8) - a2; + if (a4 + a2 > window->width * 8) { + a4 = (window->width * 8) - a2; } - if (a3 + a5 > strPtr->unk8 * 8) { - a5 = (strPtr->unk8 * 8) - a3; + if (a3 + a5 > window->unk8 * 8) { + a5 = (window->unk8 * 8) - a3; } - r2 = strPtr->unk4 * (a3 / 8); + r2 = window->width * (a3 / 8); r0 = 8 * (r2 + (a2 / 8)); r1 = a3 - ((a3 / 8) * 8); - r5 = &strPtr->unk18[r0 + r1]; + r5 = &window->unk18[r0 + r1]; while (a5 > 0) { u32 *loopPtr; s32 r4, r6; @@ -2716,8 +2706,8 @@ UNUSED static void sub_80086C8(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a loopPtr = r5; r4 = a4; r6 = a2; - if (strPtr->unk3C > r5) { - strPtr->unk3C = r5; + if (window->unk3C > r5) { + window->unk3C = r5; } while (r4 > 0) { @@ -2741,12 +2731,12 @@ UNUSED static void sub_80086C8(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a } a5--; a3++; - if (strPtr->unk40 < r5) { - strPtr->unk40 = r5; + if (window->unk40 < r5) { + window->unk40 = r5; } r5++; if (!(a3 & 7)) { - r5 = &r5[strPtr->unk20]; + r5 = &r5[window->unk20]; } } } @@ -2760,18 +2750,18 @@ UNUSED static void nullsub_176(void) { } -static void sub_8008818(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) +static void sub_8008818(Window *windows, s32 windowId, s32 a2, s32 a3, s32 a4, s32 a5) { s32 i, j; - Window *strPtr = &a0[a1]; + Window *window = &windows[windowId]; s32 a2Div = a2 / 8; s32 a3Div = a3 / 8; for (i = 0; i < a5; i += 8) { - u32 *ptr = &strPtr->unk18[((strPtr->unk4 * a3Div) + a2Div) * 8]; + u32 *ptr = &window->unk18[((window->width * a3Div) + a2Div) * 8]; for (j = 0; j < a4; j += 8) { - if (strPtr->unk3C > ptr) { - strPtr->unk3C = ptr; + if (window->unk3C > ptr) { + window->unk3C = ptr; } *(ptr++) = 0; *(ptr++) = 0; @@ -2781,8 +2771,8 @@ static void sub_8008818(Window *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5) *(ptr++) = 0; *(ptr++) = 0; *ptr = 0; - if (strPtr->unk40 < ptr) { - strPtr->unk40 = ptr; + if (window->unk40 < ptr) { + window->unk40 = ptr; } ptr++; } @@ -2801,28 +2791,28 @@ bool8 xxx_call_update_bg_vram(void) return ret; } -static bool8 xxx_update_bg_vram(Window *a0) +static bool8 xxx_update_bg_vram(Window *windows) { s32 i, j; u32 r5; bool8 ret = FALSE; - for (i = 0; i < 4; i++) { - Window *strPtr = &a0[i]; - if (strPtr->unk4 == 0) + for (i = 0; i < MAX_WINDOWS; i++) { + Window *window = &windows[i]; + if (window->width == 0) continue; - r5 = strPtr->unk38; + r5 = window->unk38; if (r5 == 0) continue; - if (strPtr->unk45) { + if (window->unk45) { u32 *r2, *r1; - CpuCopy(strPtr->unk28, strPtr->unk18, 0xD00); + CpuCopy(window->unk28, window->unk18, 0xD00); // The reason for void casts is because we want to add 0xD00/r5 directly to pointers. Because pointers are u32, without the casts, it would multiply the value by 4. - r2 = (void *)(strPtr->unk18) + 0xD00; - r1 = (void *)(strPtr->unk28) + 0xD00; - for (j = 0; j < strPtr->unk4; j++) { + r2 = (void *)(window->unk18) + 0xD00; + r1 = (void *)(window->unk28) + 0xD00; + for (j = 0; j < window->width; j++) { *(r1++) = *(r2++); *(r1++) = *(r2++); *(r1++) = *(r2++); @@ -2833,17 +2823,17 @@ static bool8 xxx_update_bg_vram(Window *a0) *(r1++) = 0xFFFFFFFF; r2 += 3; } - strPtr->unk38 = 0; + window->unk38 = 0; } else { - CpuCopy(strPtr->unk30, strPtr->unk34, r5); - strPtr->unk34 += (r5 / 4); - strPtr->unk30 = (void *)(strPtr->unk30) + r5; - strPtr->unk38 -= r5; + CpuCopy(window->unk30, window->unk34, r5); + window->unk34 += (r5 / 4); + window->unk30 = (void *)(window->unk30) + r5; + window->unk38 -= r5; } - if (strPtr->unk38 == 0) { - strPtr->unk44 = 0; + if (window->unk38 == 0) { + window->unk44 = 0; } ret = TRUE; } @@ -3024,21 +3014,21 @@ UNUSED static void nullsub_169(void) { } -static void PrepareTextbox_8008C6C(Window *strArr, u32 strId) +static void PrepareTextbox_8008C6C(Window *windows, u32 windowId) { s32 i; - Window *strPtr = &strArr[strId]; + Window *window = &windows[windowId]; - if (!strPtr->unk45) { - s32 count = (strPtr->unk4 * strPtr->unk8) * 32; + if (!window->unk45) { + s32 count = (window->width * window->unk8) * 32; for (i = 0; i < count; i += 32) { - CpuClear(&strPtr->unk18[i / 4u], 32); + CpuClear(&window->unk18[i / 4u], 32); } } else { - s32 count = (strPtr->unk4 * (strPtr->unk8 - 1)) * 32; - u32 *ptr = strPtr->unk18; - for (i = 0; i < strPtr->unk4; i++) { + s32 count = (window->width * (window->unk8 - 1)) * 32; + u32 *ptr = window->unk18; + for (i = 0; i < window->width; i++) { *(ptr++) = 0xFFFFFFFF; *(ptr++) = 0xEEEEEEEE; *(ptr++) = 0xDDDDDDDD; @@ -3054,17 +3044,17 @@ static void PrepareTextbox_8008C6C(Window *strArr, u32 strId) } } - if (strPtr->unkC == 6) { - strPtr->unk46 = 1; - AddUnderScoreHighlightInternal(strArr, strId, 0, 10, strPtr->unk4 * 8, 0xE); - AddUnderScoreHighlightInternal(strArr, strId, 0, 11, strPtr->unk4 * 8, 0xD); - strPtr->unk46 = 0; + if (window->type == WINDOW_TYPE_WITH_HEADER) { + window->unk46 = 1; + AddUnderScoreHighlightInternal(windows, windowId, 0, 10, window->width * 8, 0xE); + AddUnderScoreHighlightInternal(windows, windowId, 0, 11, window->width * 8, 0xD); + window->unk46 = 0; } - strPtr->unk30 = strPtr->unk28; - strPtr->unk34 = strPtr->unk1C; - strPtr->unk38 = strPtr->unk2C; - strPtr->unk44 = 1; + window->unk30 = window->unk28; + window->unk34 = window->unk1C; + window->unk38 = window->unk2C; + window->unk44 = 1; } bool8 sub_8008D8C(u32 strId) @@ -3355,7 +3345,7 @@ static const u8 *HandleTextFormat(Window *windows, const u8 *str, struct UnkDraw } else if (str[1] == '+') { str += 2; - sp->unk0 = (windows[0].unk4 * 8) - sub_8008ED0(str); + sp->unk0 = (windows[0].width * 8) - sub_8008ED0(str); sp->unk0 /= 2; } else if (str[1] == 'C') { @@ -3465,9 +3455,9 @@ UNUSED static void sub_8009488(s32 windowId) Window *window = &gWindows[windowId]; id0 = window->y; - for (i = 0; i < window->unk6; i++) { + for (i = 0; i < window->height; i++) { id1 = window->x; - for (j = 0; j < window->unk4; j++) { + for (j = 0; j < window->width; j++) { gUnknown_202B038[0][id0][id1] &= 0xFC00; gUnknown_202B038[1][id0][id1] = 0xF27A; id1++; @@ -3486,9 +3476,9 @@ void sub_8009524(s32 windowId) Window *window = &gWindows[windowId]; s32 id0 = window->y - 1; - for (i = 0; i < window->unk6 + 2; i++) { + for (i = 0; i < window->height + 2; i++) { s32 id1 = window->x - 1; - for (j = 0; j < window->unk4 + 2; j++) { + for (j = 0; j < window->width + 2; j++) { gUnknown_202B038[0][id0][id1] &= 0xFC00; gUnknown_202B038[1][id0][id1] = 0xF27A; id1++; @@ -3645,31 +3635,31 @@ IWRAM_INIT void ScrollDownWindow(s32 windowId) ScrollDownWindowInternal(gWindows, windowId); } -IWRAM_INIT static void ScrollDownWindowInternal(Window *txtStructs, s32 windowId) +IWRAM_INIT static void ScrollDownWindowInternal(Window *windows, s32 windowId) { - Window *txtStructPtr = &txtStructs[windowId]; + Window *window = &windows[windowId]; - if (txtStructPtr->unk8 > 0) { + if (window->unk8 > 0) { s32 i, j; u32 *dstPtr; s32 n; s32 id8, id9; - if (txtStructPtr->unkC == 6) { - s32 unk4 = txtStructPtr->unk4; - s32 dstAdd = ((txtStructPtr->unk24 + 2) * 8); + if (window->type == WINDOW_TYPE_WITH_HEADER) { + s32 unk4 = window->width; + s32 dstAdd = ((window->unk24 + 2) * 8); dstAdd *= unk4; - dstPtr = txtStructPtr->unk18 + dstAdd; - n = txtStructPtr->unk8 - 2; + dstPtr = window->unk18 + dstAdd; + n = window->unk8 - 2; } else { - dstPtr = txtStructPtr->unk18; - n = txtStructPtr->unk8; + dstPtr = window->unk18; + n = window->unk8; } - id8 = txtStructPtr->unk20 + 8; - id9 = txtStructPtr->unk20 + 9; - for (i = 0; i < txtStructPtr->unk4; i++) { + id8 = window->unk20 + 8; + id9 = window->unk20 + 9; + for (i = 0; i < window->width; i++) { s32 to = n - 1; u32 *loopPtr = dstPtr; for (j = 0; j < to; j++) { @@ -3696,10 +3686,10 @@ IWRAM_INIT static void ScrollDownWindowInternal(Window *txtStructs, s32 windowId dstPtr += 8; } - txtStructPtr->unk30 = txtStructPtr->unk28; - txtStructPtr->unk34 = txtStructPtr->unk1C; - txtStructPtr->unk38 = txtStructPtr->unk2C; - txtStructPtr->unk44 = 1; + window->unk30 = window->unk28; + window->unk34 = window->unk1C; + window->unk38 = window->unk2C; + window->unk44 = 1; } } @@ -3708,31 +3698,31 @@ IWRAM_INIT void ScrollUpWindow(s32 windowId) ScrollUpWindowInternal(gWindows, windowId); } -IWRAM_INIT static void ScrollUpWindowInternal(Window *txtStructs, s32 windowId) +IWRAM_INIT static void ScrollUpWindowInternal(Window *windows, s32 windowId) { - Window *txtStructPtr = &txtStructs[windowId]; + Window *window = &windows[windowId]; - if (txtStructPtr->unk8 > 0) { + if (window->unk8 > 0) { s32 i, j; u32 *dstPtr; s32 n; s32 id8; s32 unk4, unk8, dstAdd; - if (txtStructPtr->unkC == 6) { - n = txtStructPtr->unk8 - 2; + if (window->type == WINDOW_TYPE_WITH_HEADER) { + n = window->unk8 - 2; } else { - n = txtStructPtr->unk8; + n = window->unk8; } - unk8 = txtStructPtr->unk8 - 1; - unk4 =txtStructPtr->unk4; + unk8 = window->unk8 - 1; + unk4 = window->width; dstAdd = (unk8 * unk4) * 8; - dstPtr = txtStructPtr->unk18 + dstAdd; + dstPtr = window->unk18 + dstAdd; - id8 = txtStructPtr->unk20 + 8; - for (i = 0; i < txtStructPtr->unk4; i++) { + id8 = window->unk20 + 8; + for (i = 0; i < window->width; i++) { u32 lastTwo = 0; s32 to = n - 1; u32 *loopPtr = dstPtr; @@ -3775,10 +3765,10 @@ IWRAM_INIT static void ScrollUpWindowInternal(Window *txtStructs, s32 windowId) dstPtr += 8; } - txtStructPtr->unk30 = txtStructPtr->unk28; - txtStructPtr->unk34 = txtStructPtr->unk1C; - txtStructPtr->unk38 = txtStructPtr->unk2C; - txtStructPtr->unk44 = 1; + window->unk30 = window->unk28; + window->unk34 = window->unk1C; + window->unk38 = window->unk2C; + window->unk44 = 1; } } @@ -3787,15 +3777,15 @@ IWRAM_INIT void sub_82729A4(s32 id) sub_82729B8(gWindows, id); } -IWRAM_INIT static void sub_82729B8(Window *txtStructs, s32 id) +IWRAM_INIT static void sub_82729B8(Window *windows, s32 id) { s32 i, j; - Window *txtStructPtr = &txtStructs[id]; - u32 *dstPtr = txtStructPtr->unk18; - s32 id8 = txtStructPtr->unk20 + 8; - s32 id9 = txtStructPtr->unk20 + 9; + Window *window = &windows[id]; + u32 *dstPtr = window->unk18; + s32 id8 = window->unk20 + 8; + s32 id9 = window->unk20 + 9; - for (i = 0; i < txtStructPtr->unk4; i++) { + for (i = 0; i < window->width; i++) { u32 *loopPtr; dstPtr[3] = dstPtr[5]; @@ -3830,10 +3820,10 @@ IWRAM_INIT static void sub_82729B8(Window *txtStructs, s32 id) dstPtr += 8; } - txtStructPtr->unk30 = txtStructPtr->unk28; - txtStructPtr->unk34 = txtStructPtr->unk1C; - txtStructPtr->unk38 = txtStructPtr->unk2C; - txtStructPtr->unk44 = 1; + window->unk30 = window->unk28; + window->unk34 = window->unk1C; + window->unk38 = window->unk2C; + window->unk44 = 1; } IWRAM_INIT void sub_8272A78(s32 id) @@ -3841,14 +3831,14 @@ IWRAM_INIT void sub_8272A78(s32 id) sub_8272A8C(gWindows, id); } -IWRAM_INIT static void sub_8272A8C(Window *txtStructs, s32 id) +IWRAM_INIT static void sub_8272A8C(Window *windows, s32 id) { s32 i, j; - Window *txtStructPtr = &txtStructs[id]; - u32 *dstPtr = txtStructPtr->unk18; - s32 id8 = txtStructPtr->unk20 + 8; + Window *window = &windows[id]; + u32 *dstPtr = window->unk18; + s32 id8 = window->unk20 + 8; - for (i = 0; i < txtStructPtr->unk4; i++) { + for (i = 0; i < window->width; i++) { u32 *loopPtr; dstPtr[3] = 0; @@ -3883,10 +3873,10 @@ IWRAM_INIT static void sub_8272A8C(Window *txtStructs, s32 id) dstPtr += 8; } - txtStructPtr->unk30 = txtStructPtr->unk28; - txtStructPtr->unk34 = txtStructPtr->unk1C; - txtStructPtr->unk38 = txtStructPtr->unk2C; - txtStructPtr->unk44 = 1; + window->unk30 = window->unk28; + window->unk34 = window->unk1C; + window->unk38 = window->unk2C; + window->unk44 = 1; } // Needed to match, because without it the alignment is different. From 6ea0f8381890061513f02a9bd527eddd91041f11 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 4 Mar 2025 16:01:11 +0100 Subject: [PATCH 28/31] more dungeon menu others --- asm/code_805D8C8.s | 676 -------------------------------------- src/dungeon_menu_others.c | 294 ++++++++++++++++- 2 files changed, 284 insertions(+), 686 deletions(-) diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index b1c53275f..867f68db9 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -5,682 +5,6 @@ .text - - thumb_func_start sub_8065A8C -sub_8065A8C: - push {lr} - cmp r0, 0x5 - bhi _08065B38 - lsls r0, 2 - ldr r1, _08065A9C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08065A9C: .4byte _08065AA0 - .align 2, 0 -_08065AA0: - .4byte _08065AB8 - .4byte _08065ACC - .4byte _08065AE0 - .4byte _08065AF4 - .4byte _08065B08 - .4byte _08065B22 -_08065AB8: - ldr r2, _08065AC8 - movs r1, 0 - ldrb r0, [r2] - cmp r0, 0 - bne _08065AC4 - movs r1, 0x1 -_08065AC4: - strb r1, [r2] - b _08065B38 - .align 2, 0 -_08065AC8: .4byte gUnknown_202F2E8 -_08065ACC: - ldr r2, _08065ADC - movs r1, 0 - ldrb r0, [r2, 0x1] - cmp r0, 0 - bne _08065AD8 - movs r1, 0x1 -_08065AD8: - strb r1, [r2, 0x1] - b _08065B38 - .align 2, 0 -_08065ADC: .4byte gUnknown_202F2E8 -_08065AE0: - ldr r2, _08065AF0 - movs r1, 0 - ldrb r0, [r2, 0x2] - cmp r0, 0 - bne _08065AEC - movs r1, 0x1 -_08065AEC: - strb r1, [r2, 0x2] - b _08065B38 - .align 2, 0 -_08065AF0: .4byte gUnknown_202F2E8 -_08065AF4: - ldr r2, _08065B04 - movs r1, 0 - ldrb r0, [r2, 0x3] - cmp r0, 0 - bne _08065B00 - movs r1, 0x1 -_08065B00: - strb r1, [r2, 0x3] - b _08065B38 - .align 2, 0 -_08065B04: .4byte gUnknown_202F2E8 -_08065B08: - ldr r1, _08065B18 - ldrb r0, [r1, 0x4] - cmp r0, 0 - bne _08065B1C - movs r0, 0x2 - strb r0, [r1, 0x4] - b _08065B38 - .align 2, 0 -_08065B18: .4byte gUnknown_202F2E8 -_08065B1C: - subs r0, 0x1 - strb r0, [r1, 0x4] - b _08065B38 -_08065B22: - ldr r1, _08065B30 - ldrb r0, [r1, 0x8] - cmp r0, 0 - bne _08065B34 - movs r0, 0x2 - b _08065B36 - .align 2, 0 -_08065B30: .4byte gUnknown_202F2E8 -_08065B34: - subs r0, 0x1 -_08065B36: - strb r0, [r1, 0x8] -_08065B38: - pop {r0} - bx r0 - thumb_func_end sub_8065A8C - - thumb_func_start sub_8065B3C -sub_8065B3C: - push {lr} - cmp r0, 0x5 - bhi _08065BE8 - lsls r0, 2 - ldr r1, _08065B4C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08065B4C: .4byte _08065B50 - .align 2, 0 -_08065B50: - .4byte _08065B68 - .4byte _08065B7C - .4byte _08065B90 - .4byte _08065BA4 - .4byte _08065BB8 - .4byte _08065BD2 -_08065B68: - ldr r2, _08065B78 - movs r1, 0 - ldrb r0, [r2] - cmp r0, 0 - bne _08065B74 - movs r1, 0x1 -_08065B74: - strb r1, [r2] - b _08065BE8 - .align 2, 0 -_08065B78: .4byte gUnknown_202F2E8 -_08065B7C: - ldr r2, _08065B8C - movs r1, 0 - ldrb r0, [r2, 0x1] - cmp r0, 0 - bne _08065B88 - movs r1, 0x1 -_08065B88: - strb r1, [r2, 0x1] - b _08065BE8 - .align 2, 0 -_08065B8C: .4byte gUnknown_202F2E8 -_08065B90: - ldr r2, _08065BA0 - movs r1, 0 - ldrb r0, [r2, 0x2] - cmp r0, 0 - bne _08065B9C - movs r1, 0x1 -_08065B9C: - strb r1, [r2, 0x2] - b _08065BE8 - .align 2, 0 -_08065BA0: .4byte gUnknown_202F2E8 -_08065BA4: - ldr r2, _08065BB4 - movs r1, 0 - ldrb r0, [r2, 0x3] - cmp r0, 0 - bne _08065BB0 - movs r1, 0x1 -_08065BB0: - strb r1, [r2, 0x3] - b _08065BE8 - .align 2, 0 -_08065BB4: .4byte gUnknown_202F2E8 -_08065BB8: - ldr r1, _08065BC8 - ldrb r0, [r1, 0x4] - cmp r0, 0x2 - bne _08065BCC - movs r0, 0 - strb r0, [r1, 0x4] - b _08065BE8 - .align 2, 0 -_08065BC8: .4byte gUnknown_202F2E8 -_08065BCC: - adds r0, 0x1 - strb r0, [r1, 0x4] - b _08065BE8 -_08065BD2: - ldr r1, _08065BE0 - ldrb r0, [r1, 0x8] - cmp r0, 0x2 - bne _08065BE4 - movs r0, 0 - b _08065BE6 - .align 2, 0 -_08065BE0: .4byte gUnknown_202F2E8 -_08065BE4: - adds r0, 0x1 -_08065BE6: - strb r0, [r1, 0x8] -_08065BE8: - pop {r0} - bx r0 - thumb_func_end sub_8065B3C - - thumb_func_start sub_8065BEC -sub_8065BEC: - movs r0, 0 - bx lr - thumb_func_end sub_8065BEC - - thumb_func_start sub_8065BF0 -sub_8065BF0: - movs r0, 0 - bx lr - thumb_func_end sub_8065BF0 - - thumb_func_start ShowHintsMenu -ShowHintsMenu: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r5, _08065C60 - ldr r6, _08065C64 - movs r0, 0x2A - adds r0, r5 - mov r8, r0 -_08065C04: - movs r7, 0 - bl sub_8065CAC -_08065C0A: - adds r0, r5, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - ldrh r1, [r6, 0x4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08065C2E - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r5, 0 - movs r1, 0x1 - bl MoveMenuCursorDownWrapAround -_08065C2E: - ldrh r1, [r6, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08065C46 - movs r0, 0x1 - bl PlayDungeonCursorSE - adds r0, r5, 0 - movs r1, 0x1 - bl MoveMenuCursorUpWrapAround -_08065C46: - ldrh r1, [r6, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08065C5A - adds r0, r5, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08065C68 -_08065C5A: - bl PlayDungeonConfirmationSE - b _08065C7E - .align 2, 0 -_08065C60: .4byte gDungeonMenu -_08065C64: .4byte gRealInputs -_08065C68: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08065C78 - mov r1, r8 - ldrb r0, [r1] - cmp r0, 0 - beq _08065C0A -_08065C78: - bl PlayDungeonCancelSE - movs r7, 0x1 -_08065C7E: - ldr r4, _08065C9C - adds r0, r4, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - cmp r7, 0 - bne _08065CA0 - movs r1, 0x18 - ldrsh r0, [r4, r1] - bl sub_8065DBC - b _08065C04 - .align 2, 0 -_08065C9C: .4byte gDungeonMenu -_08065CA0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ShowHintsMenu - - thumb_func_start sub_8065CAC -sub_8065CAC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC8 - add r0, sp, 0x64 - mov r10, r0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x68] - add r0, sp, 0x6C - movs r4, 0 - movs r5, 0 - movs r1, 0x2 - mov r9, r1 - mov r1, r9 - strh r1, [r0] - strh r1, [r0, 0x2] - add r0, sp, 0x70 - movs r7, 0xC - strh r7, [r0] - adds r0, 0x2 - movs r6, 0x10 - strh r6, [r0] - add r0, sp, 0x74 - strh r6, [r0] - add r0, sp, 0xC4 - mov r8, r0 - str r0, [sp, 0x78] - movs r1, 0x3 - str r1, [sp, 0x80] - add r0, sp, 0x94 - str r1, [r0, 0x4] - add r0, sp, 0xAC - str r1, [r0, 0x4] - add r0, sp, 0x4 - mov r1, r10 - movs r2, 0x60 - bl memcpy - movs r0, 0x1 - mov r1, r8 - strb r0, [r1] - strb r4, [r1, 0x1] - strb r4, [r1, 0x3] - ldr r4, _08065DB0 - strh r5, [r4, 0x18] - movs r0, 0x7 - strh r0, [r4, 0x1A] - strh r0, [r4, 0x1C] - strh r5, [r4, 0x1E] - strh r5, [r4, 0x20] - strh r5, [r4, 0x4] - strh r6, [r4, 0x6] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - strh r5, [r4, 0x14] - str r5, [r4] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - add r0, sp, 0x4 - strh r7, [r0, 0xC] - movs r0, 0x7 - movs r1, 0xC - bl sub_80095E4 - add r2, sp, 0x4 - adds r1, r2, 0 - adds r0, 0x2 - strh r0, [r1, 0x10] - strh r0, [r2, 0xE] - movs r0, 0xA - mov r1, r8 - strb r0, [r1, 0x2] - adds r0, r2, 0 - mov r1, r9 - strh r1, [r0, 0x8] - movs r1, 0x1 - bl DungeonShowWindows - adds r0, r4, 0 - movs r1, 0 - bl sub_80137B0 - movs r0, 0 - bl sub_80073B8 - ldr r0, _08065DB4 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x10 - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r4, 0 - ldr r5, _08065DB8 -_08065D7A: - ldr r0, _08065DB0 - adds r1, r4, 0 - bl GetMenuEntryYCoord - adds r1, r0, 0 - ldm r5!, {r2} - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r3, 0 - bl PrintFormattedStringOnWindow - adds r4, 0x1 - cmp r4, 0x6 - ble _08065D7A - movs r0, 0 - bl sub_80073E0 - add sp, 0xC8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08065DB0: .4byte gDungeonMenu -_08065DB4: .4byte gUnknown_80FF770 -_08065DB8: .4byte gUnknown_80FF774 - thumb_func_end sub_8065CAC - - thumb_func_start sub_8065DBC -sub_8065DBC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xEC - adds r6, r0, 0 - ldr r0, _08065F28 - ldr r0, [r0] - ldrb r1, [r0, 0x9] - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - str r0, [sp, 0xC8] - mov r0, sp - adds r0, 0x6C - str r0, [sp, 0xD4] - mov r1, sp - adds r1, 0x70 - str r1, [sp, 0xD8] - mov r2, sp - adds r2, 0x72 - str r2, [sp, 0xDC] - adds r0, 0x8 - str r0, [sp, 0xE0] - adds r1, 0xC - str r1, [sp, 0xE4] - adds r2, 0x22 - str r2, [sp, 0xE8] - adds r0, 0x38 - str r0, [sp, 0xD0] - subs r1, 0x18 - str r1, [sp, 0xCC] - movs r2, 0x10 - mov r10, r2 - ldr r5, _08065F2C - add r0, sp, 0xC4 - mov r9, r0 - add r1, sp, 0x4 - mov r8, r1 -_08065E0C: - movs r7, 0 - ldr r0, [sp, 0xCC] - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x68] - movs r0, 0x2 - ldr r2, [sp, 0xD4] - strh r0, [r2] - strh r0, [r2, 0x2] - movs r0, 0xC - ldr r1, [sp, 0xD8] - strh r0, [r1] - mov r0, r10 - ldr r2, [sp, 0xDC] - strh r0, [r2] - ldr r1, [sp, 0xE0] - strh r0, [r1] - mov r2, r9 - str r2, [sp, 0x78] - movs r0, 0x3 - ldr r1, [sp, 0xE4] - str r0, [r1, 0x4] - ldr r2, [sp, 0xE8] - str r0, [r2, 0x4] - ldr r1, [sp, 0xD0] - str r0, [r1, 0x4] - add r0, sp, 0x4 - ldr r1, [sp, 0xCC] - movs r2, 0x60 - bl memcpy - movs r1, 0x7 - add r0, sp, 0xC4 - strb r1, [r0] - mov r2, r9 - strb r6, [r2, 0x1] - movs r0, 0 - strb r0, [r2, 0x3] - strh r6, [r5, 0x1E] - strh r1, [r5, 0x20] - strh r7, [r5, 0x1A] - strh r7, [r5, 0x18] - strh r7, [r5, 0x1C] - strh r7, [r5, 0x4] - mov r1, r10 - strh r1, [r5, 0x6] - strh r7, [r5, 0x14] - str r7, [r5] - adds r0, r5, 0 - adds r0, 0x28 - bl sub_801317C - movs r0, 0x18 - mov r2, r8 - strh r0, [r2, 0xC] - movs r0, 0x8 - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - mov r1, r8 - strh r0, [r1, 0x10] - strh r0, [r1, 0xE] - movs r0, 0xA - mov r2, r9 - strb r0, [r2, 0x2] - movs r0, 0x2 - strh r0, [r1, 0x8] - add r0, sp, 0x4 - movs r1, 0x1 - bl DungeonShowWindows - ldr r1, _08065F30 - movs r2, 0 - ldrsh r0, [r1, r2] - adds r0, 0x13 - lsls r0, 3 - strh r0, [r5, 0xC] - movs r2, 0x2 - ldrsh r0, [r1, r2] - adds r0, 0x1 - lsls r0, 3 - subs r0, 0x2 - strh r0, [r5, 0xE] - movs r0, 0 - bl sub_80073B8 - lsls r0, r6, 3 - adds r0, 0x10 - ldr r1, _08065F34 - lsls r4, r6, 2 - adds r1, r4, r1 - ldr r2, [r1] - str r7, [sp] - movs r1, 0 - movs r3, 0 - bl PrintFormattedStringOnWindow - ldr r1, _08065F38 - ldr r2, [sp, 0xC8] - lsls r0, r2, 5 - adds r4, r0 - adds r4, r1 - ldr r2, [r4] - str r7, [sp] - movs r0, 0x8 - movs r1, 0x10 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 -_08065EF4: - adds r0, r5, 0 - bl AddMenuCursorSprite - movs r0, 0x24 - bl DungeonRunFrameActions - ldr r0, _08065F3C - ldrh r1, [r0, 0x2] - mov r0, r10 - ands r0, r1 - cmp r0, 0 - bne _08065F16 - adds r0, r5, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - beq _08065F40 -_08065F16: - movs r0, 0 - bl PlayDungeonCursorSE - adds r6, 0x1 - cmp r6, 0x7 - bne _08065F64 - movs r6, 0 - b _08065F64 - .align 2, 0 -_08065F28: .4byte gGameOptionsRef -_08065F2C: .4byte gDungeonMenu -_08065F30: .4byte gWindows -_08065F34: .4byte gUnknown_80FF774 -_08065F38: .4byte gUnknown_80FF7EC -_08065F3C: .4byte gRealInputs -_08065F40: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08065F52 - adds r0, r5, 0 - adds r0, 0x2C - ldrb r0, [r0] - cmp r0, 0 - beq _08065F68 -_08065F52: - movs r0, 0 - bl PlayDungeonCursorSE - subs r6, 0x1 - movs r0, 0x1 - negs r0, r0 - cmp r6, r0 - bne _08065F64 - movs r6, 0x6 -_08065F64: - movs r7, 0x1 - b _08065F94 -_08065F68: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08065F7A - adds r0, r5, 0 - adds r0, 0x29 - ldrb r0, [r0] - cmp r0, 0 - beq _08065F80 -_08065F7A: - bl PlayDungeonConfirmationSE - b _08065F94 -_08065F80: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08065F90 - ldr r1, _08065FB0 - ldrb r0, [r1] - cmp r0, 0 - beq _08065EF4 -_08065F90: - bl PlayDungeonCancelSE -_08065F94: - movs r0, 0x24 - bl DungeonRunFrameActions - cmp r7, 0 - beq _08065FA0 - b _08065E0C -_08065FA0: - add sp, 0xEC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08065FB0: .4byte gUnknown_202EE3A - thumb_func_end sub_8065DBC - thumb_func_start ShowRecruitmentSearchMenu ShowRecruitmentSearchMenu: push {r4-r7,lr} diff --git a/src/dungeon_menu_others.c b/src/dungeon_menu_others.c index 98d7c9da2..0415109b0 100644 --- a/src/dungeon_menu_others.c +++ b/src/dungeon_menu_others.c @@ -52,6 +52,7 @@ extern const u8 *const gUnknown_80FE9F8; extern const u8 *const gUnknown_80FE9E8; extern const u8 *const gUnknown_80FE9CC; extern const u8 *const gUnknown_80FE8F8; +extern const u8 *const gUnknown_80FF770; extern const u8 *const gUnknown_80FE8F4; extern const u8 *const gGameOptionsTextPtr; extern const u8 *const gOptionsDungeonTextPtr; @@ -78,13 +79,15 @@ void AskToResetToDefault(void); void PrintGameOptions(void); void PrintDungeonOptions(void); void PrintOthersOptions(void); -void sub_8065A8C(s32 optionId); -void sub_8065B3C(s32 optionId); -bool8 sub_8065BEC(void); -bool8 sub_8065BF0(void); +void ChangeGameOptionLeft(s32 optionId); +void ChangeGameOptionRight(s32 optionId); +bool8 UnknownDungeonOption(void); +bool8 UnknownOthersOption(void); bool8 AskToQuickSave(void); bool8 AskToGiveUp(void); void PrintQuickSaveMenuOptions(void); +void PrintHintsMenu(void); +void ShowChosenHintWindow(s32 hintId); enum { OTHERS_GAME_OPTIONS, @@ -267,13 +270,13 @@ bool8 ShowDungeonOptions(void) if (gRealInputs.repeated & DPAD_LEFT) { PlayDungeonCursorSE(FALSE); - sub_8065A8C(gDungeonMenu.menuIndex); + ChangeGameOptionLeft(gDungeonMenu.menuIndex); dpadMoved = TRUE; break; } if (gRealInputs.repeated & DPAD_RIGHT) { PlayDungeonCursorSE(FALSE); - sub_8065B3C(gDungeonMenu.menuIndex); + ChangeGameOptionRight(gDungeonMenu.menuIndex); dpadMoved = TRUE; break; } @@ -288,7 +291,7 @@ bool8 ShowDungeonOptions(void) break; } - if (sub_8065BEC()) { + if (UnknownDungeonOption()) { dpadMoved = TRUE; break; } @@ -328,13 +331,13 @@ bool8 ShowOthersOptions(void) if (gRealInputs.repeated & DPAD_LEFT) { PlayDungeonCursorSE(FALSE); - sub_8065A8C(gDungeonMenu.menuIndex + DUNGEON_OPTIONS_COUNT); + ChangeGameOptionLeft(gDungeonMenu.menuIndex + DUNGEON_OPTIONS_COUNT); dpadMoved = TRUE; break; } if (gRealInputs.repeated & DPAD_RIGHT) { PlayDungeonCursorSE(FALSE); - sub_8065B3C(gDungeonMenu.menuIndex + DUNGEON_OPTIONS_COUNT); + ChangeGameOptionRight(gDungeonMenu.menuIndex + DUNGEON_OPTIONS_COUNT); dpadMoved = TRUE; break; } @@ -349,7 +352,7 @@ bool8 ShowOthersOptions(void) break; } - if (sub_8065BF0()) { + if (UnknownOthersOption()) { dpadMoved = TRUE; break; } @@ -800,4 +803,275 @@ void PrintOthersOptions(void) sub_80073E0(0); } +void ChangeGameOptionLeft(s32 optionId) +{ + switch (optionId) { + case OPTION_SPEED: + gUnknown_202F2E8.dungeonSpeed = (gUnknown_202F2E8.dungeonSpeed == DUNGEON_SPEED_SLOW) ? DUNGEON_SPEED_FAST : DUNGEON_SPEED_SLOW; + break; + case OPTION_FAR_OFF_PALS: + gUnknown_202F2E8.FarOffPals = (gUnknown_202F2E8.FarOffPals == 0) ? 1 : 0; + break; + case OPTION_DAMAGE_TURN: + gUnknown_202F2E8.damageTurn = (gUnknown_202F2E8.damageTurn == 0) ? 1 : 0; + break; + case OPTION_GRIDS: + gUnknown_202F2E8.gridEnable = (gUnknown_202F2E8.gridEnable == 0) ? 1 : 0; + break; + case OPTION_MAP: + if (gUnknown_202F2E8.mapOption == 0) { + gUnknown_202F2E8.mapOption = MAP_OPTION_SHADE; + } + else { + gUnknown_202F2E8.mapOption--; + } + break; + case OPTION_WINDOWS: + if (gUnknown_202F2E8.windowColor == 0) { + gUnknown_202F2E8.windowColor = WINDOW_COLOR_GREEN; + } + else { + gUnknown_202F2E8.windowColor--; + } + break; + } +} + +void ChangeGameOptionRight(s32 optionId) +{ + switch (optionId) { + case OPTION_SPEED: + gUnknown_202F2E8.dungeonSpeed = (gUnknown_202F2E8.dungeonSpeed == DUNGEON_SPEED_SLOW) ? DUNGEON_SPEED_FAST : DUNGEON_SPEED_SLOW; + break; + case OPTION_FAR_OFF_PALS: + gUnknown_202F2E8.FarOffPals = (gUnknown_202F2E8.FarOffPals == 0) ? 1 : 0; + break; + case OPTION_DAMAGE_TURN: + gUnknown_202F2E8.damageTurn = (gUnknown_202F2E8.damageTurn == 0) ? 1 : 0; + break; + case OPTION_GRIDS: + gUnknown_202F2E8.gridEnable = (gUnknown_202F2E8.gridEnable == 0) ? 1 : 0; + break; + case OPTION_MAP: + if (gUnknown_202F2E8.mapOption == MAP_OPTION_SHADE) { + gUnknown_202F2E8.mapOption = 0; + } + else { + gUnknown_202F2E8.mapOption++; + } + break; + case OPTION_WINDOWS: + if (gUnknown_202F2E8.windowColor == WINDOW_COLOR_GREEN) { + gUnknown_202F2E8.windowColor = 0; + } + else { + gUnknown_202F2E8.windowColor++; + } + break; + } +} + +// Different in Blue maybe? +bool8 UnknownDungeonOption(void) +{ + return FALSE; +} + +bool8 UnknownOthersOption(void) +{ + return FALSE; +} + +enum +{ + HINTS_CONTROLS, + HINTS_ORIENTATION, + HINTS_SEEDS, + HINTS_MOVES, + HINTS_RANGE, + HINTS_LINKING_MOVES, + HINTS_POKEMON_TYPES, + HINTS_TOUCH_SCREEN, + HINTS_COUNT, +}; + +#define HINTS_COUNT_RED_VERSION HINTS_COUNT - 1 // No Touch Screen Hints in Red + +void ShowHintsMenu(void) +{ + while (1) { + bool8 bPress = FALSE; + + PrintHintsMenu(); + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (gRealInputs.repeated & DPAD_DOWN) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorDownWrapAround(&gDungeonMenu, TRUE); + } + if (gRealInputs.repeated & DPAD_UP) { + PlayDungeonCursorSE(TRUE); + MoveMenuCursorUpWrapAround(&gDungeonMenu, TRUE); + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + bPress = TRUE; + break; + } + } + + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if (bPress) + break; + + ShowChosenHintWindow(gDungeonMenu.menuIndex); + } +} + +extern const u8 *const gUnknown_80FF774[]; + +void PrintHintsMenu(void) +{ + s32 i; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 12, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + header.count = 1; + header.currId = 0; + header.f3 = 0; + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1A = HINTS_COUNT_RED_VERSION; + gDungeonMenu.unk1C = HINTS_COUNT_RED_VERSION; + gDungeonMenu.unk1E = 0; + gDungeonMenu.unk20 = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unkC = 0; + gDungeonMenu.unkE = 0; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + windows.id[0].width = 12; + windows.id[0].height = windows.id[0].unk10 = sub_80095E4(HINTS_COUNT_RED_VERSION, 12) + 2; + header.width = 10; + windows.id[0].pos.x = 2; + DungeonShowWindows(&windows, TRUE); + sub_80137B0(&gDungeonMenu, 0); + sub_80073B8(0); + PrintFormattedStringOnWindow(16, 0, gUnknown_80FF770, 0, '\0'); + for (i = 0; i < HINTS_COUNT_RED_VERSION; i++) { + PrintFormattedStringOnWindow(8, GetMenuEntryYCoord(&gDungeonMenu, i), gUnknown_80FF774[i], 0, '\0'); + } + sub_80073E0(0); +} + +extern const u8 *const gUnknown_80FF7EC[2][HINTS_COUNT]; + +void ShowChosenHintWindow(s32 hintId) +{ + bool8 unk9 = (gGameOptionsRef->unk9 != 0); + + while (1) { + bool8 dpadPressed = FALSE; + WindowHeader header; + WindowTemplates windows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 12, + .height = 16, + .unk10 = 16, + .unk12 = 0, + .header = &header, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } + }; + + header.count = HINTS_COUNT_RED_VERSION; + header.currId = hintId; + header.f3 = 0; + gDungeonMenu.unk1E = hintId; + gDungeonMenu.unk20 = HINTS_COUNT_RED_VERSION; + gDungeonMenu.unk1A = 0; + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1C = 0; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + windows.id[0].width = 24; + windows.id[0].height = windows.id[0].unk10 = sub_80095E4(HINTS_COUNT, 12) + 2; + header.width = 10; + windows.id[0].pos.x = 2; + DungeonShowWindows(&windows, TRUE); + gDungeonMenu.unkC = (gWindows[0].x + 19) * 8; + gDungeonMenu.unkE = ((gWindows[0].y + 1) * 8) - 2; + sub_80073B8(0); + PrintFormattedStringOnWindow(16 + hintId * 8, 0, gUnknown_80FF774[hintId], 0, '\0'); + PrintFormattedStringOnWindow(8, 16, gUnknown_80FF7EC[unk9][hintId], 0, '\0'); + sub_80073E0(0); + + while (1) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x24); + if ((gRealInputs.pressed & DPAD_RIGHT) || gDungeonMenu.unk28.dpad_right) { + PlayDungeonCursorSE(FALSE); + if (++hintId == HINTS_COUNT_RED_VERSION) { + hintId = 0; + } + dpadPressed = TRUE; + break; + } + if ((gRealInputs.pressed & DPAD_LEFT) || gDungeonMenu.unk28.dpad_left) { + PlayDungeonCursorSE(FALSE); + if (--hintId == -1) { + hintId = HINTS_COUNT_RED_VERSION - 1; + } + dpadPressed = TRUE; + break; + } + + if ((gRealInputs.pressed & A_BUTTON) || gDungeonMenu.unk28.a_button) { + PlayDungeonConfirmationSE(); + break; + } + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + break; + } + } + + DungeonRunFrameActions(0x24); + if (!dpadPressed) + break; + } +} + // From aa4cbaef158d26ac0665ba76f8286b23623548f1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 4 Mar 2025 16:16:19 +0100 Subject: [PATCH 29/31] dungeon menu others done --- data/data_8106A4C.s | 4 - include/dungeon_menu_recruitment.h | 6 + ld_script.txt | 2 + src/dungeon_menu_others.c | 175 +++++++++++++++-------------- src/dungeon_menu_recruitment.c | 3 + sym_ewram.txt | 7 +- 6 files changed, 100 insertions(+), 97 deletions(-) create mode 100644 include/dungeon_menu_recruitment.h create mode 100644 src/dungeon_menu_recruitment.c diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index 5ac73a213..dafea69c9 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -2,10 +2,6 @@ .align 2,0 -@ sub_8065FB4 - sub_8066358 - .string "pksdir0\0" - .align 2,0 - .global gUnknown_8106D08 gUnknown_8106D08: @ 8106D08 .byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x12, 0x00, 0x0e, 0x00, 0x12, 0x00, 0x02, 0x00, 0x3c, 0xb4, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 diff --git a/include/dungeon_menu_recruitment.h b/include/dungeon_menu_recruitment.h new file mode 100644 index 000000000..b12b0bd61 --- /dev/null +++ b/include/dungeon_menu_recruitment.h @@ -0,0 +1,6 @@ +#ifndef GUARD_DUNGEON_MENU_RECRUITMENT_H +#define GUARD_DUNGEON_MENU_RECRUITMENT_H + +void ShowRecruitmentSearchMenu(void); + +#endif diff --git a/ld_script.txt b/ld_script.txt index f514bc695..c0d0f5a16 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -234,6 +234,7 @@ SECTIONS { src/dungeon_menu_tile.o(.text); src/dungeon_menu_stairs.o(.text); src/dungeon_menu_others.o(.text); + src/dungeon_menu_recruitment.o(.text); asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); src/code_805D8C8.o(.text); @@ -556,6 +557,7 @@ SECTIONS { src/dungeon_menu_tile.o(.rodata); src/dungeon_menu_stairs.o(.rodata); src/dungeon_menu_others.o(.rodata); + src/dungeon_menu_recruitment.o(.rodata); data/data_8106A4C.o(.rodata); src/code_8066D04.o(.rodata); data/data_8106A4C_2.o(.rodata); diff --git a/src/dungeon_menu_others.c b/src/dungeon_menu_others.c index 0415109b0..ba8653d69 100644 --- a/src/dungeon_menu_others.c +++ b/src/dungeon_menu_others.c @@ -1,6 +1,7 @@ #include "global.h" #include "globaldata.h" #include "dungeon_menu_others.h" +#include "dungeon_menu_recruitment.h" #include "dungeon_submenu.h" #include "dungeon.h" #include "text.h" @@ -37,8 +38,6 @@ extern void sub_8083AB0(s16 param_0, Entity * target, Entity * entity); extern MenuInputStruct gDungeonMenu; extern s32 gDungeonSubMenuItemsCount; -extern s32 gUnknown_202F2E0; -extern GameOptions gUnknown_202F2E8; extern const u8 *const gUnknown_80FEBF8; extern const u8 *const gUnknown_80FEC28; @@ -63,31 +62,37 @@ extern const u8 *const gUnknown_80FE7C0; extern const u8 *const gUnknown_80FE788; extern const u8 *const gUnknown_80FE7A8; extern const u8 *const gUnknown_80FE7E4; +extern const u8 *const gUnknown_80FA61C; +extern const u8 *const gUnknown_80FA5F4; extern const u8 *const gOptionsOthersTextPtr; extern const u8 *const gOptionsWindowColorPtr; +extern const u8 *const gUnknown_80FF774[]; -void PrintOthersMenuOptions(void); -void ShowGameOptionsMenu(void); -void ShowQuickSaveGiveUpMenu(void); -void ShowMissionObjectivesMenu(void); -void ShowRecruitmentSearchMenu(void); -void ShowHintsMenu(void); -bool8 ShowDungeonOptions(void); -bool8 ShowOthersOptions(void); -void TrySetNewGameOptions(bool8 bPressed); -void AskToResetToDefault(void); -void PrintGameOptions(void); -void PrintDungeonOptions(void); -void PrintOthersOptions(void); -void ChangeGameOptionLeft(s32 optionId); -void ChangeGameOptionRight(s32 optionId); -bool8 UnknownDungeonOption(void); -bool8 UnknownOthersOption(void); -bool8 AskToQuickSave(void); -bool8 AskToGiveUp(void); -void PrintQuickSaveMenuOptions(void); -void PrintHintsMenu(void); -void ShowChosenHintWindow(s32 hintId); +static void PrintOthersMenuOptions(void); +static void ShowGameOptionsMenu(void); +static void ShowQuickSaveGiveUpMenu(void); +static void ShowMissionObjectivesMenu(void); +static void ShowHintsMenu(void); +static bool8 ShowDungeonOptions(void); +static bool8 ShowOthersOptions(void); +static void TrySetNewGameOptions(bool8 bPressed); +static void AskToResetToDefault(void); +static void PrintGameOptions(void); +static void PrintDungeonOptions(void); +static void PrintOthersOptions(void); +static void ChangeGameOptionLeft(s32 optionId); +static void ChangeGameOptionRight(s32 optionId); +static bool8 UnknownDungeonOption(void); +static bool8 UnknownOthersOption(void); +static bool8 AskToQuickSave(void); +static bool8 AskToGiveUp(void); +static void PrintQuickSaveMenuOptions(void); +static void PrintHintsMenu(void); +static void ShowChosenHintWindow(s32 hintId); + +EWRAM_DATA static s32 sOthersCursorId = 0; +UNUSED EWRAM_DATA static u8 sUnused[4] = {0}; +EWRAM_DATA static GameOptions sChangedGameOptions = {0}; enum { OTHERS_GAME_OPTIONS, @@ -104,7 +109,7 @@ void ShowDungeonOthersMenu(void) bool8 unkAlwaysFalse; s32 hintsMenuId = (gDungeon->unk644.canRecruit) ? OTHERS_HINTS : OTHERS_HINTS - 1; - gUnknown_202F2E0 = 0; + sOthersCursorId = 0; unkAlwaysFalse = FALSE; while (1) { bool8 bPress = FALSE; @@ -145,23 +150,23 @@ void ShowDungeonOthersMenu(void) if (bPress) break; - gUnknown_202F2E0 = gDungeonMenu.menuIndex; - if (gUnknown_202F2E0 == OTHERS_GAME_OPTIONS) { + sOthersCursorId = gDungeonMenu.menuIndex; + if (sOthersCursorId == OTHERS_GAME_OPTIONS) { ShowGameOptionsMenu(); } - if (gUnknown_202F2E0 == OTHERS_QUICKSAVE_GIVEUP) { + if (sOthersCursorId == OTHERS_QUICKSAVE_GIVEUP) { ShowQuickSaveGiveUpMenu(); } - if (gUnknown_202F2E0 == OTHERS_MESSAGE_LOG) { + if (sOthersCursorId == OTHERS_MESSAGE_LOG) { DisplayMessageLog(); } - if (gUnknown_202F2E0 == OTHERS_MISSION_OBJECTIVES) { + if (sOthersCursorId == OTHERS_MISSION_OBJECTIVES) { ShowMissionObjectivesMenu(); } - if (gDungeon->unk644.canRecruit && !IsBossFight() && gUnknown_202F2E0 == OTHERS_RECRUITMENT_SEARCH) { + if (gDungeon->unk644.canRecruit && !IsBossFight() && sOthersCursorId == OTHERS_RECRUITMENT_SEARCH) { ShowRecruitmentSearchMenu(); } - if (gUnknown_202F2E0 == hintsMenuId) { + if (sOthersCursorId == hintsMenuId) { ShowHintsMenu(); } @@ -181,7 +186,7 @@ enum { GAME_OPTION_DEFAULT, }; -void ShowGameOptionsMenu(void) +static void ShowGameOptionsMenu(void) { while (1) { bool8 bPress = FALSE; @@ -215,7 +220,7 @@ void ShowGameOptionsMenu(void) if (bPress) break; - gUnknown_202F2E8 = *gGameOptionsRef; + sChangedGameOptions = *gGameOptionsRef; if (gDungeonMenu.menuIndex == GAME_OPTION_DUNGEON) { bPress = ShowDungeonOptions(); TrySetNewGameOptions(bPress); @@ -245,7 +250,7 @@ enum { #define DUNGEON_OPTIONS_COUNT OPTION_WINDOWS #define OTHERS_OPTIONS_COUNT (OPTION_COUNT - DUNGEON_OPTIONS_COUNT) -bool8 ShowDungeonOptions(void) +static bool8 ShowDungeonOptions(void) { bool8 dpadMoved; bool8 bPress = FALSE; @@ -306,7 +311,7 @@ bool8 ShowDungeonOptions(void) return bPress; } -bool8 ShowOthersOptions(void) +static bool8 ShowOthersOptions(void) { bool8 dpadMoved; bool8 bPress = FALSE; @@ -367,12 +372,12 @@ bool8 ShowOthersOptions(void) return bPress; } -void TrySetNewGameOptions(bool8 bPressed) +static void TrySetNewGameOptions(bool8 bPressed) { bool8 optionsChanged = FALSE; if (bPressed) { - if (!GameOptionsNotChange(&gUnknown_202F2E8)) + if (!GameOptionsNotChange(&sChangedGameOptions)) optionsChanged = TRUE; } else { @@ -381,14 +386,14 @@ void TrySetNewGameOptions(bool8 bPressed) if (optionsChanged) { if (DisplayDungeonYesNoMessage(0, gUnknown_80FEBF8, TRUE) == 1) { - *gGameOptionsRef = gUnknown_202F2E8; + *gGameOptionsRef = sChangedGameOptions; sub_803E13C(); sub_8040238(); } } } -void AskToResetToDefault(void) +static void AskToResetToDefault(void) { if (DisplayDungeonYesNoMessage(0, gUnknown_80FEC28, FALSE) == 1) { InitializeGameOptions(FALSE); @@ -396,7 +401,7 @@ void AskToResetToDefault(void) } } -void ShowQuickSaveGiveUpMenu(void) +static void ShowQuickSaveGiveUpMenu(void) { bool8 unkAlwaysFalse = FALSE; while (1) { @@ -446,7 +451,7 @@ void ShowQuickSaveGiveUpMenu(void) } } -void ShowMissionObjectivesMenu(void) +static void ShowMissionObjectivesMenu(void) { sub_80319A4(gDungeon->unk644.unk34, gDungeon->unk644.dungeonLocation.id, 0); do { @@ -455,7 +460,7 @@ void ShowMissionObjectivesMenu(void) sub_8031A3C(); } -bool8 AskToQuickSave(void) +static bool8 AskToQuickSave(void) { if (DisplayDungeonYesNoMessage(NULL, gUnknown_80FDE6C, FALSE) != 1) { return TRUE; @@ -464,7 +469,7 @@ bool8 AskToQuickSave(void) return FALSE; } -bool8 AskToGiveUp(void) +static bool8 AskToGiveUp(void) { if (DisplayDungeonYesNoMessage(NULL, gUnknown_80FDEB8, FALSE) != 1) { return TRUE; @@ -475,7 +480,7 @@ bool8 AskToGiveUp(void) return FALSE; } -void PrintOthersMenuOptions(void) +static void PrintOthersMenuOptions(void) { s32 optionsCount, currOptionId; WindowHeader header; @@ -499,7 +504,7 @@ void PrintOthersMenuOptions(void) header.count = 1; header.currId = 0; header.f3 = 0; - gDungeonMenu.menuIndex = gUnknown_202F2E0; + gDungeonMenu.menuIndex = sOthersCursorId; optionsCount = (gDungeon->unk644.canRecruit) ? OTHERS_COUNT : OTHERS_COUNT - 1; gDungeonMenu.unk1A = optionsCount; gDungeonMenu.unk1C = optionsCount; @@ -548,7 +553,7 @@ struct Struct_80F7C50 extern const struct Struct_80F7C50 gUnknown_80F7C50[]; -void PrintQuickSaveMenuOptions(void) +static void PrintQuickSaveMenuOptions(void) { s32 optionsCount, currOptionId; WindowHeader header; @@ -600,7 +605,7 @@ void PrintQuickSaveMenuOptions(void) sub_80073E0(0); } -void PrintGameOptions(void) +static void PrintGameOptions(void) { s32 optionsCount; s32 y[3]; @@ -656,7 +661,7 @@ void PrintGameOptions(void) sub_80073E0(0); } -void PrintDungeonOptions(void) +static void PrintDungeonOptions(void) { s32 y[DUNGEON_OPTIONS_COUNT]; WindowHeader header; @@ -713,40 +718,40 @@ void PrintDungeonOptions(void) PrintFormattedStringOnWindow(8, y[3], gUnknown_80FE7C0, 0, '\0'); PrintFormattedStringOnWindow(8, y[4], gUnknown_80FE7E4, 0, '\0'); - if (gUnknown_202F2E8.dungeonSpeed != DUNGEON_SPEED_SLOW) { + if (sChangedGameOptions.dungeonSpeed != DUNGEON_SPEED_SLOW) { AddDoubleUnderScoreHighlight(0, 136, y[0] + 10, 21, 7); } else { AddDoubleUnderScoreHighlight(0, 80, y[0] + 10, 22, 7); } - if (gUnknown_202F2E8.FarOffPals != FAROFFPALS_SELF) { + if (sChangedGameOptions.FarOffPals != FAROFFPALS_SELF) { AddDoubleUnderScoreHighlight(0, 136, y[1] + 10, 22, 7); } else { AddDoubleUnderScoreHighlight(0, 80, y[1] + 10, 18, 7); } - if (gUnknown_202F2E8.damageTurn) { + if (sChangedGameOptions.damageTurn) { AddDoubleUnderScoreHighlight(0, 136, y[2] + 10, 16, 7); } else { AddDoubleUnderScoreHighlight(0, 80, y[2] + 10, 12, 7); } - if (gUnknown_202F2E8.gridEnable) { + if (sChangedGameOptions.gridEnable) { AddDoubleUnderScoreHighlight(0, 136, y[3] + 10, 12, 7); } else { AddDoubleUnderScoreHighlight(0, 80, y[3] + 10, 16, 7); } - AddDoubleUnderScoreHighlight(0, 80 + (gUnknown_202F2E8.mapOption * 40), y[4] + 10, mapOptionUnderscoreWidths[gUnknown_202F2E8.mapOption], 7); + AddDoubleUnderScoreHighlight(0, 80 + (sChangedGameOptions.mapOption * 40), y[4] + 10, mapOptionUnderscoreWidths[sChangedGameOptions.mapOption], 7); sub_80073E0(0); } -void PrintOthersOptions(void) +static void PrintOthersOptions(void) { s32 i; s32 y[OTHERS_OPTIONS_COUNT]; @@ -798,86 +803,86 @@ void PrintOthersOptions(void) PrintFormattedStringOnWindow(16, 0, gOptionsOthersTextPtr, 0, '\0'); PrintFormattedStringOnWindow(8, y[0], gOptionsWindowColorPtr, 0, '\0'); - AddDoubleUnderScoreHighlight(0, 80 + (gUnknown_202F2E8.windowColor * 40), y[0] + 10, underscoreWidths[gUnknown_202F2E8.windowColor], 7); + AddDoubleUnderScoreHighlight(0, 80 + (sChangedGameOptions.windowColor * 40), y[0] + 10, underscoreWidths[sChangedGameOptions.windowColor], 7); sub_80073E0(0); } -void ChangeGameOptionLeft(s32 optionId) +static void ChangeGameOptionLeft(s32 optionId) { switch (optionId) { case OPTION_SPEED: - gUnknown_202F2E8.dungeonSpeed = (gUnknown_202F2E8.dungeonSpeed == DUNGEON_SPEED_SLOW) ? DUNGEON_SPEED_FAST : DUNGEON_SPEED_SLOW; + sChangedGameOptions.dungeonSpeed = (sChangedGameOptions.dungeonSpeed == DUNGEON_SPEED_SLOW) ? DUNGEON_SPEED_FAST : DUNGEON_SPEED_SLOW; break; case OPTION_FAR_OFF_PALS: - gUnknown_202F2E8.FarOffPals = (gUnknown_202F2E8.FarOffPals == 0) ? 1 : 0; + sChangedGameOptions.FarOffPals = (sChangedGameOptions.FarOffPals == 0) ? 1 : 0; break; case OPTION_DAMAGE_TURN: - gUnknown_202F2E8.damageTurn = (gUnknown_202F2E8.damageTurn == 0) ? 1 : 0; + sChangedGameOptions.damageTurn = (sChangedGameOptions.damageTurn == 0) ? 1 : 0; break; case OPTION_GRIDS: - gUnknown_202F2E8.gridEnable = (gUnknown_202F2E8.gridEnable == 0) ? 1 : 0; + sChangedGameOptions.gridEnable = (sChangedGameOptions.gridEnable == 0) ? 1 : 0; break; case OPTION_MAP: - if (gUnknown_202F2E8.mapOption == 0) { - gUnknown_202F2E8.mapOption = MAP_OPTION_SHADE; + if (sChangedGameOptions.mapOption == 0) { + sChangedGameOptions.mapOption = MAP_OPTION_SHADE; } else { - gUnknown_202F2E8.mapOption--; + sChangedGameOptions.mapOption--; } break; case OPTION_WINDOWS: - if (gUnknown_202F2E8.windowColor == 0) { - gUnknown_202F2E8.windowColor = WINDOW_COLOR_GREEN; + if (sChangedGameOptions.windowColor == 0) { + sChangedGameOptions.windowColor = WINDOW_COLOR_GREEN; } else { - gUnknown_202F2E8.windowColor--; + sChangedGameOptions.windowColor--; } break; } } -void ChangeGameOptionRight(s32 optionId) +static void ChangeGameOptionRight(s32 optionId) { switch (optionId) { case OPTION_SPEED: - gUnknown_202F2E8.dungeonSpeed = (gUnknown_202F2E8.dungeonSpeed == DUNGEON_SPEED_SLOW) ? DUNGEON_SPEED_FAST : DUNGEON_SPEED_SLOW; + sChangedGameOptions.dungeonSpeed = (sChangedGameOptions.dungeonSpeed == DUNGEON_SPEED_SLOW) ? DUNGEON_SPEED_FAST : DUNGEON_SPEED_SLOW; break; case OPTION_FAR_OFF_PALS: - gUnknown_202F2E8.FarOffPals = (gUnknown_202F2E8.FarOffPals == 0) ? 1 : 0; + sChangedGameOptions.FarOffPals = (sChangedGameOptions.FarOffPals == 0) ? 1 : 0; break; case OPTION_DAMAGE_TURN: - gUnknown_202F2E8.damageTurn = (gUnknown_202F2E8.damageTurn == 0) ? 1 : 0; + sChangedGameOptions.damageTurn = (sChangedGameOptions.damageTurn == 0) ? 1 : 0; break; case OPTION_GRIDS: - gUnknown_202F2E8.gridEnable = (gUnknown_202F2E8.gridEnable == 0) ? 1 : 0; + sChangedGameOptions.gridEnable = (sChangedGameOptions.gridEnable == 0) ? 1 : 0; break; case OPTION_MAP: - if (gUnknown_202F2E8.mapOption == MAP_OPTION_SHADE) { - gUnknown_202F2E8.mapOption = 0; + if (sChangedGameOptions.mapOption == MAP_OPTION_SHADE) { + sChangedGameOptions.mapOption = 0; } else { - gUnknown_202F2E8.mapOption++; + sChangedGameOptions.mapOption++; } break; case OPTION_WINDOWS: - if (gUnknown_202F2E8.windowColor == WINDOW_COLOR_GREEN) { - gUnknown_202F2E8.windowColor = 0; + if (sChangedGameOptions.windowColor == WINDOW_COLOR_GREEN) { + sChangedGameOptions.windowColor = 0; } else { - gUnknown_202F2E8.windowColor++; + sChangedGameOptions.windowColor++; } break; } } // Different in Blue maybe? -bool8 UnknownDungeonOption(void) +static bool8 UnknownDungeonOption(void) { return FALSE; } -bool8 UnknownOthersOption(void) +static bool8 UnknownOthersOption(void) { return FALSE; } @@ -897,7 +902,7 @@ enum #define HINTS_COUNT_RED_VERSION HINTS_COUNT - 1 // No Touch Screen Hints in Red -void ShowHintsMenu(void) +static void ShowHintsMenu(void) { while (1) { bool8 bPress = FALSE; @@ -935,9 +940,7 @@ void ShowHintsMenu(void) } } -extern const u8 *const gUnknown_80FF774[]; - -void PrintHintsMenu(void) +static void PrintHintsMenu(void) { s32 i; WindowHeader header; @@ -989,7 +992,7 @@ void PrintHintsMenu(void) extern const u8 *const gUnknown_80FF7EC[2][HINTS_COUNT]; -void ShowChosenHintWindow(s32 hintId) +static void ShowChosenHintWindow(s32 hintId) { bool8 unk9 = (gGameOptionsRef->unk9 != 0); @@ -1073,5 +1076,3 @@ void ShowChosenHintWindow(s32 hintId) break; } } - -// diff --git a/src/dungeon_menu_recruitment.c b/src/dungeon_menu_recruitment.c new file mode 100644 index 000000000..cf5c8a465 --- /dev/null +++ b/src/dungeon_menu_recruitment.c @@ -0,0 +1,3 @@ +#include "global.h" +#include "globaldata.h" +#include "dungeon_menu_recruitment.h" diff --git a/sym_ewram.txt b/sym_ewram.txt index 63d6da5e2..578d8366e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -156,12 +156,7 @@ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */ .space 0x4 .include "src/dungeon_menu_moves.o" .space 0x4 - -gUnknown_202F2E0: /* 202F2E0 (sub_8064BE0 - sub_8065250) */ - .space 0x8 - -gUnknown_202F2E8: /* 202F2E8 (sub_8064D74 - sub_8065B3C) */ - .space 0x10 + .include "src/dungeon_menu_others.o" gUnknown_202F2F8: /* 202F2F8 (sub_8065FB4 - sub_8066358) */ .space 0x4 From d75dd097e07d5819288e53677ddec769b9d9021b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 5 Mar 2025 09:03:32 +0100 Subject: [PATCH 30/31] code_805D8C8 esta muerto --- asm/code_805D8C8.s | 953 --------------------------------- data/data_8106A4C.s | 6 - include/dungeon_message.h | 4 + include/exclusive_pokemon.h | 2 +- ld_script.txt | 1 - src/dungeon_menu_others.c | 1 - src/dungeon_menu_recruitment.c | 382 +++++++++++++ src/dungeon_menu_team.c | 2 - src/dungeon_message.c | 4 - src/exclusive_pokemon.c | 6 +- sym_ewram_init.txt | 2 +- 11 files changed, 390 insertions(+), 973 deletions(-) delete mode 100644 asm/code_805D8C8.s diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s deleted file mode 100644 index 867f68db9..000000000 --- a/asm/code_805D8C8.s +++ /dev/null @@ -1,953 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start ShowRecruitmentSearchMenu -ShowRecruitmentSearchMenu: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _08065FE0 - add sp, r4 - movs r0, 0 - mov r10, r0 - ldr r4, _08065FE4 - ldr r0, [r4] - ldr r1, _08065FE8 - adds r0, r1 - ldrb r0, [r0] - bl IsRecruitingEnabled - lsls r0, 24 - cmp r0, 0 - bne _08065FF0 - ldr r0, _08065FEC - b _08065FFE - .align 2, 0 -_08065FE0: .4byte 0xfffff608 -_08065FE4: .4byte gDungeon -_08065FE8: .4byte 0x00000644 -_08065FEC: .4byte gUnknown_80FA5F4 -_08065FF0: - ldr r0, [r4] - ldr r2, _0806600C - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _08066014 - ldr r0, _08066010 -_08065FFE: - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl DisplayDungeonMessage - b _08066194 - .align 2, 0 -_0806600C: .4byte 0x0000065d -_08066010: .4byte gUnknown_80FA61C -_08066014: - mov r0, sp - bl sub_80664FC - ldr r6, _08066130 -_0806601C: - movs r0, 0 - mov r8, r0 - mov r1, r10 - lsls r0, r1, 2 - add r0, r10 - lsls r0, 6 - subs r0, r1 - lsls r0, 2 - add r0, sp - mov r9, r0 - ldr r0, _08066134 - strb r1, [r0, 0x1] - ldr r0, _08066138 - movs r1, 0x1 - bl DungeonShowWindows - mov r2, r8 - strh r2, [r6, 0x1A] - strh r2, [r6, 0x18] - strh r2, [r6, 0x1C] - mov r0, r10 - strh r0, [r6, 0x1E] - movs r0, 0x2 - strh r0, [r6, 0x20] - strh r2, [r6, 0x4] - movs r0, 0x10 - strh r0, [r6, 0x6] - strh r2, [r6, 0x14] - mov r1, r8 - str r1, [r6] - adds r0, r6, 0 - adds r0, 0x28 - bl sub_801317C - ldr r0, _0806613C - mov r2, r8 - str r2, [r0] - movs r1, 0 - ldr r0, _08066140 - strb r1, [r0] - mov r0, r9 - mov r1, r10 - bl sub_80661AC - ldr r1, _08066144 - movs r2, 0 - ldrsh r0, [r1, r2] - adds r0, 0x10 - lsls r0, 3 - strh r0, [r6, 0xC] - movs r2, 0x2 - ldrsh r0, [r1, r2] - adds r0, 0x1 - lsls r0, 3 - subs r0, 0x2 - strh r0, [r6, 0xE] -_0806608C: - movs r5, 0 - ldr r0, _08066140 - strb r5, [r0] - movs r0, 0 - ldr r1, _08066148 - bl sub_8014140 - adds r4, r0, 0 - mov r0, r9 - adds r1, r4, 0 - bl sub_8066288 - lsls r0, 24 - lsrs r0, 24 - negs r1, r0 - orrs r1, r0 - lsrs r5, r1, 31 - mov r0, r9 - adds r1, r4, 0 - bl sub_8066358 - lsls r0, 24 - cmp r0, 0 - beq _080660BE - movs r5, 0x1 -_080660BE: - cmp r5, 0 - bne _080660CE - ldr r0, _08066130 - bl AddMenuCursorSprite - movs r0, 0x45 - bl DungeonRunFrameActions -_080660CE: - ldr r2, _08066140 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080660E2 - movs r0, 0x1 - movs r1, 0x8 - bl sub_8066434 -_080660E2: - ldr r0, _08066140 - ldrb r1, [r0] - movs r7, 0x2 - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _080660F8 - movs r0, 0 - movs r1, 0x70 - bl sub_8066434 -_080660F8: - ldr r5, _0806614C - ldrh r1, [r5, 0x2] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0 - bne _0806611A - ldr r4, _08066130 - adds r0, r4, 0 - adds r0, 0x2C - ldrb r0, [r0] - cmp r0, 0 - bne _0806611A - adds r0, r4, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - beq _08066150 -_0806611A: - movs r0, 0 - bl PlayDungeonCursorSE - movs r0, 0 - mov r1, r10 - cmp r1, 0 - bne _0806612A - movs r0, 0x1 -_0806612A: - mov r10, r0 - b _08066184 - .align 2, 0 -_08066130: .4byte gDungeonMenu -_08066134: .4byte gUnknown_203B43C -_08066138: .4byte gUnknown_8106D08 -_0806613C: .4byte gUnknown_202F2F8 -_08066140: .4byte gUnknown_202F2FC -_08066144: .4byte gWindows -_08066148: .4byte gUnknown_8106D68 -_0806614C: .4byte gRealInputs -_08066150: - bl sub_80048C8 - lsls r0, 24 - cmp r0, 0 - bne _0806608C - ldrh r1, [r5, 0x2] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _0806616E - adds r0, r4, 0 - adds r0, 0x2A - ldrb r0, [r0] - cmp r0, 0 - beq _08066174 -_0806616E: - bl PlayDungeonCancelSE - b _0806618C -_08066174: - movs r0, 0xC - ands r0, r1 - cmp r0, 0 - beq _0806608C - bl PlayDungeonConfirmationSE - movs r2, 0x1 - mov r8, r2 -_08066184: - mov r0, r8 - cmp r0, 0 - bne _0806618C - b _0806601C -_0806618C: - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 -_08066194: - ldr r3, _080661A8 - add sp, r3 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080661A8: .4byte 0x000009f8 - thumb_func_end ShowRecruitmentSearchMenu - - thumb_func_start sub_80661AC -sub_80661AC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x44 - adds r6, r0, 0 - adds r5, r1, 0 - ldr r0, _080661DC - ldr r4, [r0] - movs r0, 0x20 - mov r8, r0 - movs r0, 0 - bl sub_80073B8 - cmp r5, 0 - bne _080661E4 - ldr r0, _080661E0 - ldr r2, [r0] - str r5, [sp] - movs r0, 0xC - movs r1, 0 - movs r3, 0 - bl PrintStringOnWindow - b _080661F6 - .align 2, 0 -_080661DC: .4byte gUnknown_202F2F8 -_080661E0: .4byte gUnknown_80FEA68 -_080661E4: - ldr r0, _08066254 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x14 - movs r1, 0 - movs r3, 0 - bl PrintStringOnWindow -_080661F6: - movs r1, 0x9F - lsls r1, 3 - adds r0, r6, r1 - ldr r1, [r0] - cmp r1, 0 - beq _08066260 - movs r7, 0x7 - lsls r0, r4, 1 - adds r5, r0, r6 -_08066208: - cmp r4, 0 - blt _08066244 - movs r1, 0x9F - lsls r1, 3 - adds r0, r6, r1 - ldr r0, [r0] - cmp r4, r0 - bge _08066244 - movs r1, 0xD4 - lsls r1, 2 - adds r0, r6, r1 - adds r0, r4 - ldrb r2, [r0] - add r0, sp, 0x4 - ldr r1, _08066258 - bl sprintfStatic - movs r0, 0 - ldrsh r1, [r5, r0] - ldr r0, _0806625C - bl sub_808D930 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - mov r1, r8 - add r2, sp, 0x4 - movs r3, 0 - bl PrintFormattedStringOnWindow -_08066244: - subs r7, 0x1 - adds r5, 0x2 - adds r4, 0x1 - movs r1, 0xC - add r8, r1 - cmp r7, 0 - bge _08066208 - b _08066270 - .align 2, 0 -_08066254: .4byte gUnknown_80FEA80 -_08066258: .4byte gUnknown_8106D8C -_0806625C: .4byte gFormatBuffer_Monsters -_08066260: - ldr r0, _08066284 - ldr r2, [r0] - str r1, [sp] - movs r0, 0x8 - mov r1, r8 - movs r3, 0 - bl PrintStringOnWindow -_08066270: - movs r0, 0 - bl sub_80073E0 - add sp, 0x44 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08066284: .4byte gUnknown_80FEA8C - thumb_func_end sub_80661AC - - thumb_func_start sub_8066288 -sub_8066288: - push {r4,r5,lr} - sub sp, 0x44 - adds r5, r0, 0 - adds r3, r1, 0 - ldr r0, _080662B8 - ldr r4, [r0] - cmp r4, 0 - beq _080662B4 - subs r4, 0x1 - ldr r2, _080662BC - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080662C0 - ldrh r1, [r0, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _080662C4 - cmp r3, 0x1 - beq _080662C4 -_080662B4: - movs r0, 0 - b _0806633E - .align 2, 0 -_080662B8: .4byte gUnknown_202F2F8 -_080662BC: .4byte gUnknown_202F2FC -_080662C0: .4byte gRealInputs -_080662C4: - movs r0, 0 - bl PlayDungeonCursorSE - movs r0, 0 - bl sub_80073B8 - movs r0, 0x10 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0x10 - movs r3, 0x90 - bl sub_80087EC - ldr r1, _08066348 - movs r2, 0xD4 - lsls r2, 2 - adds r0, r5, r2 - adds r0, r4 - ldrb r2, [r0] - add r0, sp, 0x4 - bl sprintfStatic - ldr r0, _0806634C - lsls r1, r4, 1 - adds r1, r5, r1 - movs r2, 0 - ldrsh r1, [r1, r2] - bl sub_808D930 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x14 - add r2, sp, 0x4 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - movs r0, 0x45 - bl DungeonRunFrameActions - ldr r5, _08066350 - movs r4, 0x5 -_08066320: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0x45 - bl DungeonRunFrameActions - subs r4, 0x1 - cmp r4, 0 - bge _08066320 - ldr r1, _08066354 - ldr r0, [r1] - subs r0, 0x1 - str r0, [r1] - movs r0, 0x1 -_0806633E: - add sp, 0x44 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08066348: .4byte gUnknown_8106D8C -_0806634C: .4byte gFormatBuffer_Monsters -_08066350: .4byte ScrollUpWindowFunc -_08066354: .4byte gUnknown_202F2F8 - thumb_func_end sub_8066288 - - thumb_func_start sub_8066358 -sub_8066358: - push {r4-r6,lr} - sub sp, 0x44 - adds r5, r0, 0 - adds r3, r1, 0 - ldr r0, _08066394 - ldr r0, [r0] - adds r4, r0, 0 - adds r4, 0x8 - movs r6, 0x80 - movs r1, 0x9F - lsls r1, 3 - adds r0, r5, r1 - ldr r0, [r0] - cmp r0, r4 - ble _08066390 - ldr r2, _08066398 - ldrb r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0806639C - ldrh r1, [r0, 0x4] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _080663A0 - cmp r3, 0x2 - beq _080663A0 -_08066390: - movs r0, 0 - b _0806641A - .align 2, 0 -_08066394: .4byte gUnknown_202F2F8 -_08066398: .4byte gUnknown_202F2FC -_0806639C: .4byte gRealInputs -_080663A0: - movs r0, 0 - bl PlayDungeonCursorSE - movs r0, 0 - bl sub_80073B8 - movs r0, 0x10 - str r0, [sp] - movs r0, 0 - movs r1, 0 - adds r2, r6, 0 - movs r3, 0x48 - bl sub_80087EC - ldr r1, _08066424 - movs r2, 0xD4 - lsls r2, 2 - adds r0, r5, r2 - adds r0, r4 - ldrb r2, [r0] - add r0, sp, 0x4 - bl sprintfStatic - ldr r0, _08066428 - lsls r1, r4, 1 - adds r1, r5, r1 - movs r2, 0 - ldrsh r1, [r1, r2] - bl sub_808D930 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - adds r1, r6, 0 - add r2, sp, 0x4 - movs r3, 0 - bl PrintFormattedStringOnWindow - movs r0, 0 - bl sub_80073E0 - movs r0, 0xD - bl DungeonRunFrameActions - ldr r5, _0806642C - movs r4, 0x5 -_080663FC: - ldr r1, [r5] - movs r0, 0 - bl _call_via_r1 - movs r0, 0xD - bl DungeonRunFrameActions - subs r4, 0x1 - cmp r4, 0 - bge _080663FC - ldr r1, _08066430 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - movs r0, 0x1 -_0806641A: - add sp, 0x44 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08066424: .4byte gUnknown_8106D8C -_08066428: .4byte gFormatBuffer_Monsters -_0806642C: .4byte ScrollDownWindowFunc -_08066430: .4byte gUnknown_202F2F8 - thumb_func_end sub_8066358 - - thumb_func_start sub_8066434 -sub_8066434: - push {r4-r7,lr} - mov r12, r1 - lsls r0, 24 - lsrs r2, r0, 24 - ldr r7, _080664C8 - ldr r0, _080664CC - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - bne _080664C0 - ldr r0, _080664D0 - ldrh r1, [r0] - ldr r3, _080664D4 - ands r3, r1 - ldr r1, _080664D8 - ands r3, r1 - ldr r1, _080664DC - ands r3, r1 - ldr r1, _080664E0 - ands r3, r1 - ldr r1, _080664E4 - ands r3, r1 - negs r1, r2 - orrs r1, r2 - asrs r1, 31 - movs r2, 0x80 - lsls r2, 6 - ands r2, r1 - ldrh r1, [r0, 0x2] - ldr r4, _080664E8 - ands r4, r1 - orrs r4, r2 - movs r5, 0xF - ldr r2, _080664EC - movs r6, 0x2 - ldrsh r1, [r7, r6] - lsls r1, 3 - add r1, r12 - ands r1, r2 - lsls r1, 4 - ldrh r2, [r0, 0x6] - ands r5, r2 - orrs r5, r1 - strh r5, [r0, 0x6] - movs r2, 0 - ldrsh r1, [r7, r2] - lsls r1, 3 - adds r1, 0x40 - ldr r2, _080664F0 - ands r1, r2 - movs r2, 0xFE - lsls r2, 8 - ands r4, r2 - orrs r4, r1 - movs r2, 0x80 - lsls r2, 7 - ldr r1, _080664F4 - ands r3, r1 - orrs r3, r2 - strh r3, [r0] - ands r4, r1 - strh r4, [r0, 0x2] - ldr r1, _080664F8 - strh r1, [r0, 0x4] - movs r1, 0x7F - movs r2, 0 - movs r3, 0 - bl AddSprite -_080664C0: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080664C8: .4byte gWindows -_080664CC: .4byte gDungeonFramesCounter -_080664D0: .4byte gUnknown_202F300 -_080664D4: .4byte 0x0000feff -_080664D8: .4byte 0x0000fdff -_080664DC: .4byte 0x0000f3ff -_080664E0: .4byte 0x0000efff -_080664E4: .4byte 0x0000dfff -_080664E8: .4byte 0x0000c1ff -_080664EC: .4byte 0x00000fff -_080664F0: .4byte 0x000001ff -_080664F4: .4byte 0x00003fff -_080664F8: .4byte 0x0000f3f0 - thumb_func_end sub_8066434 - - thumb_func_start sub_80664FC -sub_80664FC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C0 - str r0, [sp, 0x1A8] - movs r7, 0 - ldr r2, _08066604 - ldr r3, _08066608 - movs r1, 0 -_08066512: - mov r4, sp - adds r0, r4, r7 - strb r1, [r0] - adds r7, 0x1 - cmp r7, r2 - ble _08066512 - movs r4, 0 - adds r1, r3, 0 - ldr r0, [r3] - ldr r7, _0806660C - adds r0, r7 - ldr r0, [r0] - cmp r4, r0 - bge _08066578 - ldr r6, _08066610 -_08066530: - movs r5, 0x1 - ldr r2, [r1] - lsls r0, r4, 3 - adds r0, r2, r0 - ldr r7, _08066614 - adds r1, r0, r7 - movs r7, 0 - ldrsh r1, [r1, r7] - movs r7, 0xD1 - lsls r7, 6 - adds r0, r7 - movs r7, 0 - ldrsh r0, [r0, r7] - cmp r1, 0 - bne _08066554 - cmp r0, 0 - beq _08066566 - movs r5, 0x2 -_08066554: - adds r0, r2, r6 - str r3, [sp, 0x1BC] - bl ExtractSpeciesIndex - lsls r0, 16 - asrs r0, 16 - add r0, sp - strb r5, [r0] - ldr r3, [sp, 0x1BC] -_08066566: - adds r6, 0x8 - adds r4, 0x1 - ldr r1, _08066608 - ldr r0, [r1] - ldr r2, _0806660C - adds r0, r2 - ldr r0, [r0] - cmp r4, r0 - blt _08066530 -_08066578: - ldr r0, [r3] - ldr r4, _08066618 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _0806658A - add r1, sp, 0x17C - movs r0, 0x1 - strb r0, [r1] -_0806658A: - movs r0, 0x5 -_0806658C: - subs r0, 0x1 - cmp r0, 0 - bge _0806658C - movs r7, 0 -_08066594: - movs r0, 0 - mov r8, r0 - movs r1, 0x1 - adds r2, r7, 0x1 - str r2, [sp, 0x1AC] - lsls r4, r7, 2 - str r4, [sp, 0x1B0] -_080665A2: - lsls r0, r1, 16 - asrs r6, r0, 16 - movs r0, 0x7 - mov r10, r0 - movs r2, 0 - mov r9, r2 - mov r4, sp - adds r0, r4, r6 - ldrb r0, [r0] - adds r1, 0x1 - str r1, [sp, 0x1B4] - cmp r0, 0 - bne _080665BE - b _08066704 -_080665BE: - cmp r7, 0 - bne _08066620 - adds r0, r6, 0 - bl sub_806F9BC - lsls r0, 24 - cmp r0, 0 - bne _080665D0 - b _08066704 -_080665D0: - adds r0, r6, 0 - bl IsExclusivePokemonUnlocked - lsls r0, 24 - cmp r0, 0 - bne _080665DE - b _08066704 -_080665DE: - adds r0, r6, 0 - bl GetRecruitRate - lsls r0, 16 - ldr r1, _0806661C - cmp r0, r1 - bne _080665EE - b _08066704 -_080665EE: - cmp r6, 0x97 - bne _0806669E - movs r0, 0x7A - bl sub_80860A8 - lsls r0, 24 - cmp r0, 0 - bne _08066600 - b _08066704 -_08066600: - b _0806669E - .align 2, 0 -_08066604: .4byte 0x000001a7 -_08066608: .4byte gDungeon -_0806660C: .4byte 0x000037e4 -_08066610: .4byte 0x0000343c -_08066614: .4byte 0x0000343e -_08066618: .4byte 0x0000066e -_0806661C: .4byte 0xfc190000 -_08066620: - movs r5, 0 - ldr r0, _080666CC - ldr r2, [r0] - movs r4, 0x1 - movs r3, 0xCE - lsls r3, 1 -_0806662C: - ldrb r1, [r2] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0806663E - movs r1, 0x8 - ldrsh r0, [r2, r1] - cmp r0, r6 - beq _08066646 -_0806663E: - adds r2, 0x58 - adds r5, 0x1 - cmp r5, r3 - ble _0806662C -_08066646: - ldr r0, _080666D0 - cmp r5, r0 - beq _08066650 - movs r2, 0x1 - mov r9, r2 -_08066650: - mov r4, r9 - cmp r4, 0 - bne _0806669E - movs r5, 0 - ldr r2, _080666CC -_0806665A: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _080666D4 - adds r1, r0 - ldr r0, [r2] - adds r4, r0, r1 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806668C - movs r1, 0xA - ldrsh r0, [r4, r1] - str r2, [sp, 0x1B8] - bl sub_806A564 - lsls r0, 24 - ldr r2, [sp, 0x1B8] - cmp r0, 0 - bne _0806668C - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, r6 - beq _08066692 -_0806668C: - adds r5, 0x1 - cmp r5, 0x3 - ble _0806665A -_08066692: - cmp r5, 0x4 - beq _0806669E - movs r2, 0x1 - mov r9, r2 - movs r4, 0x6 - mov r10, r4 -_0806669E: - cmp r7, 0 - bne _080666D8 - mov r1, sp - adds r0, r1, r6 - ldrb r0, [r0] - cmp r0, 0x2 - bne _080666B0 - movs r2, 0x2 - mov r10, r2 -_080666B0: - mov r4, r8 - lsls r0, r4, 1 - ldr r1, [sp, 0x1A8] - adds r0, r1, r0 - strh r6, [r0] - movs r2, 0xD4 - lsls r2, 2 - adds r0, r1, r2 - add r0, r8 - mov r4, r10 - strb r4, [r0] - movs r0, 0x1 - add r8, r0 - b _08066704 - .align 2, 0 -_080666CC: .4byte gRecruitedPokemonRef -_080666D0: .4byte 0x0000019d -_080666D4: .4byte 0x00008df8 -_080666D8: - mov r1, r9 - cmp r1, 0 - beq _08066704 - ldr r2, [sp, 0x1B0] - adds r0, r2, r7 - lsls r0, 6 - subs r0, r7 - lsls r0, 2 - ldr r4, [sp, 0x1A8] - adds r0, r4 - mov r2, r8 - lsls r1, r2, 1 - adds r1, r0, r1 - strh r6, [r1] - movs r4, 0xD4 - lsls r4, 2 - adds r0, r4 - add r0, r8 - mov r1, r10 - strb r1, [r0] - movs r2, 0x1 - add r8, r2 -_08066704: - ldr r1, [sp, 0x1B4] - ldr r0, _08066740 - cmp r1, r0 - bgt _0806670E - b _080665A2 -_0806670E: - ldr r4, [sp, 0x1B0] - adds r0, r4, r7 - lsls r0, 6 - subs r0, r7 - lsls r0, 2 - ldr r7, [sp, 0x1A8] - adds r0, r7 - movs r1, 0x9F - lsls r1, 3 - adds r0, r1 - mov r2, r8 - str r2, [r0] - ldr r7, [sp, 0x1AC] - cmp r7, 0x1 - bgt _0806672E - b _08066594 -_0806672E: - add sp, 0x1C0 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08066740: .4byte 0x000001a3 - thumb_func_end sub_80664FC - - .align 2, 0 diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index dafea69c9..0836e9bc5 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -2,12 +2,6 @@ .align 2,0 - .global gUnknown_8106D08 -gUnknown_8106D08: @ 8106D08 - .byte 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x12, 0x00, 0x0e, 0x00, 0x12, 0x00, 0x02, 0x00, 0x3c, 0xb4, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .global gUnknown_8106D68 gUnknown_8106D68: @ 8106D68 .byte 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x38, 0x00, 0x68, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/include/dungeon_message.h b/include/dungeon_message.h index f8122c2c7..ea4fe1788 100644 --- a/include/dungeon_message.h +++ b/include/dungeon_message.h @@ -4,6 +4,10 @@ #include "structs/dungeon_entity.h" #include "string_format.h" +// These flags are used in dungeon message and dungeon menu recruitment file. It's possible these are general scroll flags and should be put elsewhere, like text.h, assuming more files actually use it. +#define FLAG_CAN_SCROLL_UP 0x1 +#define FLAG_CAN_SCROLL_DOWN 0x2 + struct MonDialogueSpriteInfo { s16 species; diff --git a/include/exclusive_pokemon.h b/include/exclusive_pokemon.h index e4818501f..a400fb5cc 100644 --- a/include/exclusive_pokemon.h +++ b/include/exclusive_pokemon.h @@ -55,7 +55,7 @@ bool8 sub_8098100(u8 param_1); bool8 sub_8098134(s16 pokeID); void SetTutorialFlag(s32 param_1); bool32 GetTutorialFlag(s32 param_1); -bool8 IsExclusivePokemonUnlocked(s16 pokeID); +bool8 IsExclusivePokemonUnlocked(s32 pokeID); void UnlockExclusivePokemon(s16 pokeID); void WriteExclusivePokemon(DataSerializer *r0); void ReadExclusivePokemon(DataSerializer *r0); diff --git a/ld_script.txt b/ld_script.txt index c0d0f5a16..cc5814a09 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -235,7 +235,6 @@ SECTIONS { src/dungeon_menu_stairs.o(.text); src/dungeon_menu_others.o(.text); src/dungeon_menu_recruitment.o(.text); - asm/code_805D8C8.o(.text); src/code_8066D04.o(.text); src/code_805D8C8.o(.text); asm/code_805D8C8_1.o(.text); diff --git a/src/dungeon_menu_others.c b/src/dungeon_menu_others.c index ba8653d69..07fc9b430 100644 --- a/src/dungeon_menu_others.c +++ b/src/dungeon_menu_others.c @@ -37,7 +37,6 @@ extern void sub_8040238(void); extern void sub_8083AB0(s16 param_0, Entity * target, Entity * entity); extern MenuInputStruct gDungeonMenu; -extern s32 gDungeonSubMenuItemsCount; extern const u8 *const gUnknown_80FEBF8; extern const u8 *const gUnknown_80FEC28; diff --git a/src/dungeon_menu_recruitment.c b/src/dungeon_menu_recruitment.c index cf5c8a465..f7b627785 100644 --- a/src/dungeon_menu_recruitment.c +++ b/src/dungeon_menu_recruitment.c @@ -1,3 +1,385 @@ #include "global.h" #include "globaldata.h" #include "dungeon_menu_recruitment.h" +#include "dungeon.h" +#include "text.h" +#include "menu_input.h" +#include "input.h" +#include "dungeon_message.h" +#include "pokemon.h" +#include "pokemon_3.h" +#include "sprite.h" +#include "exclusive_pokemon.h" + +extern const u8 gUnknown_8106D68[]; + +extern void PlayDungeonStartButtonSE(void); +extern void PlayDungeonCancelSE(void); +extern void PlayDungeonConfirmationSE(void); +extern void PlayDungeonCursorSE(u8 param_1); +extern void sub_803EAF0(u32, u8 *); +extern bool8 CanSubMenuItemBeChosen(s32 param_1); +extern void DungeonRunFrameActions(u32 a0); +extern void DungeonShowWindows(const WindowTemplates *a0, bool8 a1); +extern void AddActionToDungeonSubMenu(u16 actionId, u8 param_2); +extern u16 GetLeaderActionId(void); +extern u32 sub_8014140(s32 a0, const void *a1); +extern void sprintfStatic(char *buffer, const char *text, ...); +extern u8 sub_806F9BC(s32); +extern bool8 sub_80860A8(u8 id); +extern bool8 sub_806A564(s32 r0); + +extern MenuInputStruct gDungeonMenu; +extern s32 gDungeonFramesCounter; + +struct MonRecruitList +{ + s16 speciesIds[MONSTER_MAX]; + u8 monColor[MONSTER_MAX]; + s32 count; +}; + +static void sub_80661AC(struct MonRecruitList *tabData, s32 tabId); +static bool8 TryScrollUp(struct MonRecruitList *tabData, s32 a1); +static bool8 TryScrollDown(struct MonRecruitList *tabData, s32 a1); +static void CreateScrollingArrow(bool8 upArrow, s32 y); +static void sub_80664FC(struct MonRecruitList *tabsData); + +extern const u8 *const gUnknown_80FA61C; +extern const u8 *const gUnknown_80FA5F4; +extern const u8 *const gUnknown_80FEA68; +extern const u8 *const gUnknown_80FEA80; +extern const u8 *const gUnknown_80FEA8C; + +extern s32 gUnknown_202F2F8; +extern u8 gUnknown_202F2FC; +extern SpriteOAM gUnknown_202F300; + +enum { + TAB_POTENTIAL_RECRUITS, + TAB_RECRUITED_MONS, + TABS_COUNT +}; + +static EWRAM_INIT WindowHeader sRecruitmentWindowHeader = {2, 0, 13, 0}; + +static const WindowTemplates sRecruitmentSearchWindows = { + .id = { + [0] = { + .type = WINDOW_TYPE_WITH_HEADER, + .pos = {2, 2}, + .width = 18, + .height = 14, + .unk10 = 18, + .unk12 = 2, + .header = &sRecruitmentWindowHeader, + }, + [1] = WINDOW_DUMMY, + [2] = WINDOW_DUMMY, + [3] = WINDOW_DUMMY, + } +}; + +void ShowRecruitmentSearchMenu(void) +{ + s32 currTabId = 0; + + if (!IsRecruitingEnabled(gDungeon->unk644.dungeonLocation.id)) { + DisplayDungeonMessage(NULL, gUnknown_80FA5F4, TRUE); + } + else if (gDungeon->unk644.unk19) { + DisplayDungeonMessage(NULL, gUnknown_80FA61C, TRUE); + } + else { + struct MonRecruitList tabsData[2]; + + sub_80664FC(tabsData); + while (1) { + bool8 closeWindow = FALSE; + struct MonRecruitList *currTabData = &tabsData[currTabId]; + + sRecruitmentWindowHeader.currId = currTabId; + DungeonShowWindows(&sRecruitmentSearchWindows, TRUE); + gDungeonMenu.unk1A = 0; + gDungeonMenu.menuIndex = 0; + gDungeonMenu.unk1C = 0; + gDungeonMenu.unk1E = currTabId; + gDungeonMenu.unk20 = 2; + gDungeonMenu.unk4 = 0; + gDungeonMenu.firstEntryY = 16; + gDungeonMenu.unk14.x = 0; + gDungeonMenu.unk0 = 0; + sub_801317C(&gDungeonMenu.unk28); + gUnknown_202F2F8 = 0; + gUnknown_202F2FC = 0; + sub_80661AC(currTabData, currTabId); + gDungeonMenu.unkC = (gWindows[0].x + 16) * 8; + gDungeonMenu.unkE = ((gWindows[0].y + 1) * 8) - 2; + + while (1) { + s32 unkVar; + bool8 scroll = FALSE; + + gUnknown_202F2FC = 0; + unkVar = sub_8014140(0, gUnknown_8106D68); + if (TryScrollUp(currTabData, unkVar)) { + scroll = TRUE; + } + if (TryScrollDown(currTabData, unkVar)) { + scroll = TRUE; + } + + if (!scroll) { + AddMenuCursorSprite(&gDungeonMenu); + DungeonRunFrameActions(0x45); + } + + if (gUnknown_202F2FC & FLAG_CAN_SCROLL_UP) { + CreateScrollingArrow(TRUE, 8); + } + if (gUnknown_202F2FC & FLAG_CAN_SCROLL_DOWN) { + CreateScrollingArrow(FALSE, 0x70); + } + + if ((gRealInputs.pressed & (DPAD_LEFT | DPAD_RIGHT)) || gDungeonMenu.unk28.dpad_left || gDungeonMenu.unk28.dpad_right) { + PlayDungeonCursorSE(FALSE); + currTabId = (currTabId == 0) ? 1 : 0; + break; + } + + if (sub_80048C8()) + continue; + if ((gRealInputs.pressed & B_BUTTON) || gDungeonMenu.unk28.b_button) { + PlayDungeonCancelSE(); + closeWindow = TRUE; + break; + } + if ((gRealInputs.pressed & (SELECT_BUTTON | START_BUTTON))) { + PlayDungeonConfirmationSE(); + closeWindow = TRUE; + break; + } + } + + if (closeWindow) + break; + } + + sub_803EAF0(0, NULL); + } +} + +extern const u8 gUnknown_8106D8C[]; + +static void sub_80661AC(struct MonRecruitList *tabData, s32 tabId) +{ + u8 text[64]; + s32 i; + s32 menuMonId = gUnknown_202F2F8; + s32 y = 32; + + sub_80073B8(0); + if (tabId == TAB_POTENTIAL_RECRUITS) { + PrintStringOnWindow(12, 0, gUnknown_80FEA68, 0, '\0'); + } + else { + PrintStringOnWindow(20, 0, gUnknown_80FEA80, 0, '\0'); + } + + if (tabData->count != 0) { + for (i = 0; i < 8; i++, menuMonId++, y += 12) { + if (menuMonId >= 0 && menuMonId < tabData->count) { + sprintfStatic(text, gUnknown_8106D8C, tabData->monColor[menuMonId]); + sub_808D930(gFormatBuffer_Monsters[0], tabData->speciesIds[menuMonId]); + PrintFormattedStringOnWindow(8, y, text, 0, '\0'); + } + } + } + else { + PrintStringOnWindow(8, y, gUnknown_80FEA8C, 0, '\0'); + } + sub_80073E0(0); +} + +static bool8 TryScrollUp(struct MonRecruitList *tabData, s32 a1) +{ + s32 i; + u8 text[64]; + s32 menuMonId = gUnknown_202F2F8; + if (menuMonId == 0) + return FALSE; + + menuMonId--; + gUnknown_202F2FC |= FLAG_CAN_SCROLL_UP; + if (!(gRealInputs.repeated & DPAD_UP) && a1 != 1) { + return FALSE; + } + else { + PlayDungeonCursorSE(FALSE); + sub_80073B8(0); + sub_80087EC(0, 0, 16, 144, 16); + sprintfStatic(text, gUnknown_8106D8C, tabData->monColor[menuMonId]); + sub_808D930(gFormatBuffer_Monsters[0], tabData->speciesIds[menuMonId]); + PrintFormattedStringOnWindow(8, 20, text, 0, '\0'); + sub_80073E0(0); + DungeonRunFrameActions(0x45); + for (i = 0; i < 6; i++) { + ScrollUpWindowFunc(0); + DungeonRunFrameActions(0x45); + } + gUnknown_202F2F8--; + return TRUE; + } +} + +static bool8 TryScrollDown(struct MonRecruitList *tabData, s32 a1) +{ + s32 i; + u8 text[64]; + s32 menuMonId = gUnknown_202F2F8 + 8; + s32 y = 128; + if (tabData->count <= menuMonId) + return FALSE; + + gUnknown_202F2FC |= FLAG_CAN_SCROLL_DOWN; + if (!(gRealInputs.repeated & DPAD_DOWN) && a1 != 2) { + return FALSE; + } + else { + PlayDungeonCursorSE(FALSE); + sub_80073B8(0); + sub_80087EC(0, 0, y, 72, 16); + sprintfStatic(text, gUnknown_8106D8C, tabData->monColor[menuMonId]); + sub_808D930(gFormatBuffer_Monsters[0], tabData->speciesIds[menuMonId]); + PrintFormattedStringOnWindow(8, y, text, 0, '\0'); + sub_80073E0(0); + DungeonRunFrameActions(13); + for (i = 0; i < 6; i++) { + ScrollDownWindowFunc(0); + DungeonRunFrameActions(13); + } + gUnknown_202F2F8++; + return TRUE; + } +} + +// Almost identical to CreateMessageLogArrow +static void CreateScrollingArrow(bool8 upArrow, s32 y) +{ + struct Window *window = &gWindows[0]; + if (!(gDungeonFramesCounter & 8)) { + SpriteSetAffine1(&gUnknown_202F300, 0); + SpriteSetAffine2(&gUnknown_202F300, 0); + SpriteSetObjMode(&gUnknown_202F300, 0); + SpriteSetMosaic(&gUnknown_202F300, 0); + SpriteSetBpp(&gUnknown_202F300, 0); + SpriteSetMatrixNum(&gUnknown_202F300, (upArrow != FALSE) ? (16) : 0); + SpriteSetPalNum(&gUnknown_202F300, 15); + SpriteSetY(&gUnknown_202F300, (window->y * 8) + y); + SpriteSetX(&gUnknown_202F300, (window->x * 8) + 64); + SpriteSetShape(&gUnknown_202F300, 1); + SpriteSetSize(&gUnknown_202F300, 0); + SpriteSetPriority(&gUnknown_202F300, 0); + SpriteSetPalNum(&gUnknown_202F300, 15); + SpriteSetTileNum(&gUnknown_202F300, 0x3f0); + + AddSprite(&gUnknown_202F300, 127, NULL, NULL); + } +} + +static void sub_80664FC(struct MonRecruitList *tabsData) +{ + s32 i, id, dummy; + u8 spArray[MONSTER_MAX]; + + for (i = 0; i < MONSTER_MAX; i++) { + spArray[i] = 0; + } + + for (id = 0; id < gDungeon->unk37E4; id++) { + u8 byte = 1; + s32 val1 = gDungeon->unk343C[id].unk2[0]; + s32 val2 = gDungeon->unk343C[id].unk2[1]; + if (val1 == 0) { + if (val2 == 0) + continue; + byte = 2; + } + spArray[ExtractSpeciesIndex(&gDungeon->unk343C[id])] = byte; + } + + if (gDungeon->unk644.unk2A) { + spArray[MONSTER_KECLEON] = 1; + } + + // ??? + for (dummy = 0; dummy < 6; dummy++) {;} + + for (i = 0; i < TABS_COUNT; i++) { + s32 count = 0; + s32 j; + // Line below is only to trick compiler into generating matching stack pattern. + dummy = tabsData[i].count; + for (j = 1; j < MONSTER_MUNCHLAX; j++) { + s32 k; + s32 speciesId = (s16) j; + s32 monNameColor = 7; + bool8 monIsRecruited = FALSE; + + + if (spArray[speciesId] == 0) + continue; + + if (i == TAB_POTENTIAL_RECRUITS) { + u32 recruitRate, unrecruitableRate; + if (!sub_806F9BC(speciesId)) + continue; + if (!IsExclusivePokemonUnlocked(speciesId)) + continue; + // Weird casting needed to match... + recruitRate = (u16) GetRecruitRate(speciesId); + unrecruitableRate = (u16) -999; + if (recruitRate == unrecruitableRate) + continue; + if (speciesId == MONSTER_MEW && !sub_80860A8(122)) + continue; + } + else { + for (k = 0; k < NUM_MONSTERS; k++) { + if (PokemonFlag1(&gRecruitedPokemonRef->pokemon[k]) && gRecruitedPokemonRef->pokemon[k].speciesNum == speciesId) + break; + } + if (k != NUM_MONSTERS) { + monIsRecruited = TRUE; + } + + if (!monIsRecruited) { + for (k = 0; k < 4; k++) { + PokemonStruct2 *mon = &gRecruitedPokemonRef->pokemon2[k]; + if (PokemonFlag1Struct2(mon) && !sub_806A564(mon->unkA) && mon->speciesNum == speciesId) + break; + } + if (k != 4) { + monIsRecruited = TRUE; + monNameColor = 6; + } + } + } + + if (i == TAB_POTENTIAL_RECRUITS) { + if (spArray[speciesId] == 2) { + monNameColor = 2; + } + tabsData[TAB_POTENTIAL_RECRUITS].speciesIds[count] = speciesId; + tabsData[TAB_POTENTIAL_RECRUITS].monColor[count] = monNameColor; + count++; + } + else if (monIsRecruited) { + tabsData[i].speciesIds[count] = speciesId; + tabsData[i].monColor[count] = monNameColor; + count++; + } + } + tabsData[i].count = count; + } +} diff --git a/src/dungeon_menu_team.c b/src/dungeon_menu_team.c index c1a572ede..17eb834b9 100644 --- a/src/dungeon_menu_team.c +++ b/src/dungeon_menu_team.c @@ -149,8 +149,6 @@ static UNUSED EWRAM_DATA u8 sUnused[4] = {0}; EWRAM_DATA static SpriteOAM gUnknown_202F268 = {0}; EWRAM_DATA static WindowHeader sTeamWindowHeader = {0}; -EWRAM_INIT u8 gUnknown_203B43C[4] = {2, 0, 0xD, 0}; // TODO: Move to a better file and figure out the array count. Apparently it's only written to. - struct UnkFieldTeamMenuStruct { s32 unk0; diff --git a/src/dungeon_message.c b/src/dungeon_message.c index 2b8b37720..10e3ab7ee 100644 --- a/src/dungeon_message.c +++ b/src/dungeon_message.c @@ -61,10 +61,6 @@ static EWRAM_DATA u8 sMessageLogFlags = 0; static EWRAM_DATA SpriteOAM sMessageLogArrowSpriteOAM = {0}; EWRAM_INIT u8 gUnknown_203B434 = 1; -// Used for sMessageLogFlags -#define FLAG_CAN_SCROLL_UP 0x1 -#define FLAG_CAN_SCROLL_DOWN 0x2 - void sub_80521D0(void) { s32 i; diff --git a/src/exclusive_pokemon.c b/src/exclusive_pokemon.c index a4dde740f..96a7c7900 100644 --- a/src/exclusive_pokemon.c +++ b/src/exclusive_pokemon.c @@ -168,12 +168,10 @@ bool32 GetTutorialFlag(s32 index) } } -bool8 IsExclusivePokemonUnlocked(s16 pokeID) +bool8 IsExclusivePokemonUnlocked(s32 pokeID) { s32 index; - s32 pokeID_s32; - - pokeID_s32 = pokeID; + s32 pokeID_s32 = (s16) pokeID; for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) { diff --git a/sym_ewram_init.txt b/sym_ewram_init.txt index 64ee09983..23cd1a349 100644 --- a/sym_ewram_init.txt +++ b/sym_ewram_init.txt @@ -115,7 +115,7 @@ .include "src/dungeon_message.o" .include "src/dungeon_move.o" .include "src/dungeon_main.o" -.include "src/dungeon_menu_team.o" +.include "src/dungeon_menu_recruitment.o" .include "src/dungeon_ai_items.o" .include "src/code_807CD9C.o" .include "src/dungeon_leader.o" From cb192314874cbe6774e26cf2a04fa3e617712f82 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 5 Mar 2025 09:51:47 +0100 Subject: [PATCH 31/31] code_805D8C8_1.c final touches --- data/data_8106A4C.s | 8 ---- src/dungeon_menu_recruitment.c | 86 +++++++++++++++++----------------- sym_ewram.txt | 10 +--- 3 files changed, 43 insertions(+), 61 deletions(-) diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index 0836e9bc5..050c8543c 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -2,14 +2,6 @@ .align 2,0 - .global gUnknown_8106D68 -gUnknown_8106D68: @ 8106D68 - .byte 0x01, 0x00, 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x38, 0x00, 0x68, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_8106D8C -gUnknown_8106D8C: @ 8106D8C - .string "{color}%d{POKEMON_0}\0" @ ??? .align 2,0 diff --git a/src/dungeon_menu_recruitment.c b/src/dungeon_menu_recruitment.c index f7b627785..5e6f895c6 100644 --- a/src/dungeon_menu_recruitment.c +++ b/src/dungeon_menu_recruitment.c @@ -11,8 +11,6 @@ #include "sprite.h" #include "exclusive_pokemon.h" -extern const u8 gUnknown_8106D68[]; - extern void PlayDungeonStartButtonSE(void); extern void PlayDungeonCancelSE(void); extern void PlayDungeonConfirmationSE(void); @@ -39,11 +37,11 @@ struct MonRecruitList s32 count; }; -static void sub_80661AC(struct MonRecruitList *tabData, s32 tabId); +static void PrintAvailableMons(struct MonRecruitList *tabData, s32 tabId); static bool8 TryScrollUp(struct MonRecruitList *tabData, s32 a1); static bool8 TryScrollDown(struct MonRecruitList *tabData, s32 a1); static void CreateScrollingArrow(bool8 upArrow, s32 y); -static void sub_80664FC(struct MonRecruitList *tabsData); +static void SetRecruitableMons(struct MonRecruitList *tabsData); extern const u8 *const gUnknown_80FA61C; extern const u8 *const gUnknown_80FA5F4; @@ -51,9 +49,10 @@ extern const u8 *const gUnknown_80FEA68; extern const u8 *const gUnknown_80FEA80; extern const u8 *const gUnknown_80FEA8C; -extern s32 gUnknown_202F2F8; -extern u8 gUnknown_202F2FC; -extern SpriteOAM gUnknown_202F300; +EWRAM_DATA static s32 sScrollId = 0; +EWRAM_DATA static u8 sScrollFlags = 0; +EWRAM_DATA static SpriteOAM sScrollingArrowOAM = {0}; +EWRAM_INIT static WindowHeader sRecruitmentWindowHeader = {2, 0, 13, 0}; enum { TAB_POTENTIAL_RECRUITS, @@ -61,7 +60,6 @@ enum { TABS_COUNT }; -static EWRAM_INIT WindowHeader sRecruitmentWindowHeader = {2, 0, 13, 0}; static const WindowTemplates sRecruitmentSearchWindows = { .id = { @@ -80,6 +78,8 @@ static const WindowTemplates sRecruitmentSearchWindows = { } }; +static const u8 gUnknown_8106D68[] = {1, 0, 56, 0, 0, 0, 24, 0, 24, 0, 0, 0, 2, 0, 56, 0, 104, 0, 24, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + void ShowRecruitmentSearchMenu(void) { s32 currTabId = 0; @@ -93,7 +93,7 @@ void ShowRecruitmentSearchMenu(void) else { struct MonRecruitList tabsData[2]; - sub_80664FC(tabsData); + SetRecruitableMons(tabsData); while (1) { bool8 closeWindow = FALSE; struct MonRecruitList *currTabData = &tabsData[currTabId]; @@ -110,9 +110,9 @@ void ShowRecruitmentSearchMenu(void) gDungeonMenu.unk14.x = 0; gDungeonMenu.unk0 = 0; sub_801317C(&gDungeonMenu.unk28); - gUnknown_202F2F8 = 0; - gUnknown_202F2FC = 0; - sub_80661AC(currTabData, currTabId); + sScrollId = 0; + sScrollFlags = 0; + PrintAvailableMons(currTabData, currTabId); gDungeonMenu.unkC = (gWindows[0].x + 16) * 8; gDungeonMenu.unkE = ((gWindows[0].y + 1) * 8) - 2; @@ -120,7 +120,7 @@ void ShowRecruitmentSearchMenu(void) s32 unkVar; bool8 scroll = FALSE; - gUnknown_202F2FC = 0; + sScrollFlags = 0; unkVar = sub_8014140(0, gUnknown_8106D68); if (TryScrollUp(currTabData, unkVar)) { scroll = TRUE; @@ -134,10 +134,10 @@ void ShowRecruitmentSearchMenu(void) DungeonRunFrameActions(0x45); } - if (gUnknown_202F2FC & FLAG_CAN_SCROLL_UP) { + if (sScrollFlags & FLAG_CAN_SCROLL_UP) { CreateScrollingArrow(TRUE, 8); } - if (gUnknown_202F2FC & FLAG_CAN_SCROLL_DOWN) { + if (sScrollFlags & FLAG_CAN_SCROLL_DOWN) { CreateScrollingArrow(FALSE, 0x70); } @@ -169,13 +169,11 @@ void ShowRecruitmentSearchMenu(void) } } -extern const u8 gUnknown_8106D8C[]; - -static void sub_80661AC(struct MonRecruitList *tabData, s32 tabId) +static void PrintAvailableMons(struct MonRecruitList *tabData, s32 tabId) { u8 text[64]; s32 i; - s32 menuMonId = gUnknown_202F2F8; + s32 menuMonId = sScrollId; s32 y = 32; sub_80073B8(0); @@ -189,7 +187,7 @@ static void sub_80661AC(struct MonRecruitList *tabData, s32 tabId) if (tabData->count != 0) { for (i = 0; i < 8; i++, menuMonId++, y += 12) { if (menuMonId >= 0 && menuMonId < tabData->count) { - sprintfStatic(text, gUnknown_8106D8C, tabData->monColor[menuMonId]); + sprintfStatic(text, _("{color}%d{POKEMON_0}"), tabData->monColor[menuMonId]); sub_808D930(gFormatBuffer_Monsters[0], tabData->speciesIds[menuMonId]); PrintFormattedStringOnWindow(8, y, text, 0, '\0'); } @@ -205,12 +203,12 @@ static bool8 TryScrollUp(struct MonRecruitList *tabData, s32 a1) { s32 i; u8 text[64]; - s32 menuMonId = gUnknown_202F2F8; + s32 menuMonId = sScrollId; if (menuMonId == 0) return FALSE; menuMonId--; - gUnknown_202F2FC |= FLAG_CAN_SCROLL_UP; + sScrollFlags |= FLAG_CAN_SCROLL_UP; if (!(gRealInputs.repeated & DPAD_UP) && a1 != 1) { return FALSE; } @@ -218,7 +216,7 @@ static bool8 TryScrollUp(struct MonRecruitList *tabData, s32 a1) PlayDungeonCursorSE(FALSE); sub_80073B8(0); sub_80087EC(0, 0, 16, 144, 16); - sprintfStatic(text, gUnknown_8106D8C, tabData->monColor[menuMonId]); + sprintfStatic(text, _("{color}%d{POKEMON_0}"), tabData->monColor[menuMonId]); sub_808D930(gFormatBuffer_Monsters[0], tabData->speciesIds[menuMonId]); PrintFormattedStringOnWindow(8, 20, text, 0, '\0'); sub_80073E0(0); @@ -227,7 +225,7 @@ static bool8 TryScrollUp(struct MonRecruitList *tabData, s32 a1) ScrollUpWindowFunc(0); DungeonRunFrameActions(0x45); } - gUnknown_202F2F8--; + sScrollId--; return TRUE; } } @@ -236,12 +234,12 @@ static bool8 TryScrollDown(struct MonRecruitList *tabData, s32 a1) { s32 i; u8 text[64]; - s32 menuMonId = gUnknown_202F2F8 + 8; + s32 menuMonId = sScrollId + 8; s32 y = 128; if (tabData->count <= menuMonId) return FALSE; - gUnknown_202F2FC |= FLAG_CAN_SCROLL_DOWN; + sScrollFlags |= FLAG_CAN_SCROLL_DOWN; if (!(gRealInputs.repeated & DPAD_DOWN) && a1 != 2) { return FALSE; } @@ -249,7 +247,7 @@ static bool8 TryScrollDown(struct MonRecruitList *tabData, s32 a1) PlayDungeonCursorSE(FALSE); sub_80073B8(0); sub_80087EC(0, 0, y, 72, 16); - sprintfStatic(text, gUnknown_8106D8C, tabData->monColor[menuMonId]); + sprintfStatic(text, _("{color}%d{POKEMON_0}"), tabData->monColor[menuMonId]); sub_808D930(gFormatBuffer_Monsters[0], tabData->speciesIds[menuMonId]); PrintFormattedStringOnWindow(8, y, text, 0, '\0'); sub_80073E0(0); @@ -258,7 +256,7 @@ static bool8 TryScrollDown(struct MonRecruitList *tabData, s32 a1) ScrollDownWindowFunc(0); DungeonRunFrameActions(13); } - gUnknown_202F2F8++; + sScrollId++; return TRUE; } } @@ -268,26 +266,26 @@ static void CreateScrollingArrow(bool8 upArrow, s32 y) { struct Window *window = &gWindows[0]; if (!(gDungeonFramesCounter & 8)) { - SpriteSetAffine1(&gUnknown_202F300, 0); - SpriteSetAffine2(&gUnknown_202F300, 0); - SpriteSetObjMode(&gUnknown_202F300, 0); - SpriteSetMosaic(&gUnknown_202F300, 0); - SpriteSetBpp(&gUnknown_202F300, 0); - SpriteSetMatrixNum(&gUnknown_202F300, (upArrow != FALSE) ? (16) : 0); - SpriteSetPalNum(&gUnknown_202F300, 15); - SpriteSetY(&gUnknown_202F300, (window->y * 8) + y); - SpriteSetX(&gUnknown_202F300, (window->x * 8) + 64); - SpriteSetShape(&gUnknown_202F300, 1); - SpriteSetSize(&gUnknown_202F300, 0); - SpriteSetPriority(&gUnknown_202F300, 0); - SpriteSetPalNum(&gUnknown_202F300, 15); - SpriteSetTileNum(&gUnknown_202F300, 0x3f0); + SpriteSetAffine1(&sScrollingArrowOAM, 0); + SpriteSetAffine2(&sScrollingArrowOAM, 0); + SpriteSetObjMode(&sScrollingArrowOAM, 0); + SpriteSetMosaic(&sScrollingArrowOAM, 0); + SpriteSetBpp(&sScrollingArrowOAM, 0); + SpriteSetMatrixNum(&sScrollingArrowOAM, (upArrow != FALSE) ? (16) : 0); + SpriteSetPalNum(&sScrollingArrowOAM, 15); + SpriteSetY(&sScrollingArrowOAM, (window->y * 8) + y); + SpriteSetX(&sScrollingArrowOAM, (window->x * 8) + 64); + SpriteSetShape(&sScrollingArrowOAM, 1); + SpriteSetSize(&sScrollingArrowOAM, 0); + SpriteSetPriority(&sScrollingArrowOAM, 0); + SpriteSetPalNum(&sScrollingArrowOAM, 15); + SpriteSetTileNum(&sScrollingArrowOAM, 0x3f0); - AddSprite(&gUnknown_202F300, 127, NULL, NULL); + AddSprite(&sScrollingArrowOAM, 127, NULL, NULL); } } -static void sub_80664FC(struct MonRecruitList *tabsData) +static void SetRecruitableMons(struct MonRecruitList *tabsData) { s32 i, id, dummy; u8 spArray[MONSTER_MAX]; diff --git a/sym_ewram.txt b/sym_ewram.txt index 578d8366e..9f7825b6e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -157,15 +157,7 @@ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */ .include "src/dungeon_menu_moves.o" .space 0x4 .include "src/dungeon_menu_others.o" - -gUnknown_202F2F8: /* 202F2F8 (sub_8065FB4 - sub_8066358) */ - .space 0x4 -gUnknown_202F2FC: /* 202F2FC (sub_8065FB4 - sub_8066358) */ - .space 0x4 - -gUnknown_202F300: /* 202F300 (sub_8066434) */ - .space 0x8 - + .include "src/dungeon_menu_recruitment.o" .include "src/code_8066D04.o" .include "src/dungeon_movement.o" .include "src/code_80718D8.o"