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); +} + + //