sub_8067A80

This commit is contained in:
DizzyEggg 2025-02-18 14:39:43 +01:00
parent 1ce273c082
commit afb9fbeaf8
4 changed files with 438 additions and 922 deletions

View File

@ -5,927 +5,6 @@
.text
thumb_func_start sub_8067794
sub_8067794:
push {r4-r7,lr}
sub sp, 0x40
adds r7, r1, 0
ldr r4, [r7, 0x70]
cmp r7, 0
bne _080677B4
ldr r0, _080677B0
ldr r1, [r0]
movs r0, 0
movs r2, 0x1
bl DisplayDungeonMessage
b _0806786C
.align 2, 0
_080677B0: .4byte gCannotFarewell
_080677B4:
ldr r0, _080677F0
adds r1, r7, 0
movs r2, 0
bl SubstitutePlaceholderStringTags
ldr r0, _080677F4
ldr r5, [r0]
ldr r0, _080677F8
ldr r6, [r0]
ldrb r2, [r4, 0xA]
cmp r2, 0
blt _08067834
ldr r1, _080677FC
movs r0, 0x64
muls r0, r2
ldr r2, _08067800
adds r0, r2
ldr r1, [r1]
adds r4, r1, r0
movs r1, 0xA
ldrsh r0, [r4, r1]
bl sub_806A564
lsls r0, 24
cmp r0, 0
beq _0806780C
ldr r0, _08067804
ldr r5, [r0]
ldr r0, _08067808
b _08067832
.align 2, 0
_080677F0: .4byte gFormatBuffer_Monsters
_080677F4: .4byte gSayFarewellQ
_080677F8: .4byte gUnknown_80F913C
_080677FC: .4byte gRecruitedPokemonRef
_08067800: .4byte 0x00008df8
_08067804: .4byte gUnknown_80F9114
_08067808: .4byte gMonDisappointedAndLeft
_0806780C:
movs r2, 0xA
ldrsh r0, [r4, r2]
bl sub_806A58C
lsls r0, 24
cmp r0, 0
beq _08067834
bl IsMakuhitaTrainingMaze
lsls r0, 24
cmp r0, 0
beq _0806782C
ldr r0, _08067828
b _0806782E
.align 2, 0
_08067828: .4byte gSendMonBackQ
_0806782C:
ldr r0, _08067874
_0806782E:
ldr r5, [r0]
ldr r0, _08067878
_08067832:
ldr r6, [r0]
_08067834:
movs r0, 0
adds r1, r5, 0
movs r2, 0
bl DisplayDungeonYesNoMessage
cmp r0, 0x1
bne _0806786C
ldr r4, _0806787C
mov r0, sp
adds r1, r4, 0
movs r2, 0x40
bl strncpy
ldr r1, _08067880
adds r0, r7, 0
movs r2, 0
bl sub_8068FE0
adds r0, r4, 0
mov r1, sp
movs r2, 0x40
bl strncpy
movs r0, 0
adds r1, r6, 0
movs r2, 0x1
bl DisplayDungeonMessage
_0806786C:
add sp, 0x40
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08067874: .4byte gSendMonBackWithItemQ
_08067878: .4byte gMonWentBack
_0806787C: .4byte gFormatBuffer_Monsters
_08067880: .4byte 0x0000021d
thumb_func_end sub_8067794
thumb_func_start HandleUseMovePlayerAction
HandleUseMovePlayerAction:
push {r4-r6,lr}
sub sp, 0x4
adds r5, r0, 0
movs r6, 0
b _0806789A
_0806788E:
ldr r1, _08067900
adds r0, r4, r1
ldrb r0, [r0]
cmp r0, 0
bne _080678C6
adds r6, 0x1
_0806789A:
adds r0, r5, 0
movs r1, 0x1
bl sub_8070828
cmp r6, r0
bge _080678C6
ldr r4, [r5, 0x70]
adds r0, r4, 0
adds r0, 0x50
ldrb r1, [r0]
movs r0, 0
str r0, [sp]
adds r0, r5, 0
movs r2, 0x1
movs r3, 0
bl sub_8055A00
bl sub_8044B28
lsls r0, 24
cmp r0, 0
beq _0806788E
_080678C6:
adds r0, r5, 0
movs r1, 0x1
bl sub_8057588
bl sub_8044B28
lsls r0, 24
cmp r0, 0
bne _080678F6
adds r0, r5, 0
bl EntityIsValid
lsls r0, 24
cmp r0, 0
beq _080678F0
ldr r0, [r5, 0x70]
adds r0, 0x50
ldrb r1, [r0]
adds r0, r5, 0
bl sub_806A9B4
_080678F0:
adds r0, r5, 0
bl sub_806A1B0
_080678F6:
add sp, 0x4
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08067900: .4byte 0x00000159
thumb_func_end HandleUseMovePlayerAction
thumb_func_start sub_8067904
sub_8067904:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x14
adds r5, r0, 0
lsls r1, 16
lsrs r1, 16
mov r9, r1
ldr r6, [r5, 0x70]
ldr r1, _08067940
movs r0, 0
str r0, [r1]
add r0, sp, 0x8
mov r1, r9
bl InitPokemonMove
adds r0, r6, 0
adds r0, 0xBC
ldrb r0, [r0]
cmp r0, 0x1
bne _0806794C
ldr r0, _08067944
adds r1, r5, 0
movs r2, 0
bl SubstitutePlaceholderStringTags
ldr r0, _08067948
b _08067962
.align 2, 0
_08067940: .4byte gUnknown_202F208
_08067944: .4byte gFormatBuffer_Monsters
_08067948: .4byte gMonCringing
_0806794C:
adds r0, r6, 0
adds r0, 0xAC
ldrb r0, [r0]
cmp r0, 0x4
bne _08067974
ldr r0, _0806796C
adds r1, r5, 0
movs r2, 0
bl SubstitutePlaceholderStringTags
ldr r0, _08067970
_08067962:
ldr r1, [r0]
adds r0, r5, 0
bl LogMessageByIdWithPopupCheckUser
b _08067A56
.align 2, 0
_0806796C: .4byte gFormatBuffer_Monsters
_08067970: .4byte gMonParalyzed
_08067974:
movs r0, 0xB0
lsls r0, 1
movs r1, 0
mov r10, r1
cmp r9, r0
bne _08067984
movs r2, 0x1
mov r10, r2
_08067984:
movs r0, 0
mov r8, r0
movs r7, 0
add r4, sp, 0x8
b _080679D2
_0806798E:
movs r1, 0xBC
lsls r1, 1
adds r0, r6, r1
strh r7, [r0]
ldrb r0, [r4]
movs r1, 0x8
orrs r0, r1
orrs r0, r7
movs r1, 0x4
orrs r0, r1
strb r0, [r4]
movs r0, 0xA
strb r0, [r4, 0x4]
str r7, [sp]
str r4, [sp, 0x4]
adds r0, r5, 0
mov r1, r10
movs r2, 0
movs r3, 0
bl TryUseChosenMove
adds r0, r5, 0
bl EntityIsValid
lsls r0, 24
cmp r0, 0
beq _080679DE
ldr r2, _08067A68
adds r0, r6, r2
ldrb r0, [r0]
cmp r0, 0
bne _080679DE
movs r0, 0x1
add r8, r0
_080679D2:
adds r0, r5, 0
movs r1, 0x1
bl sub_8070828
cmp r8, r0
blt _0806798E
_080679DE:
adds r0, r5, 0
bl EntityIsValid
lsls r0, 24
cmp r0, 0
beq _08067A56
movs r0, 0xB0
lsls r0, 1
cmp r9, r0
bne _08067A04
ldr r0, _08067A6C
ldr r0, [r0]
cmp r0, 0
bne _08067A04
ldr r0, _08067A70
ldr r1, [r0]
adds r0, r5, 0
bl LogMessageByIdWithPopupCheckUser
_08067A04:
ldrb r0, [r6, 0x7]
cmp r0, 0
beq _08067A50
movs r0, 0xB0
lsls r0, 1
cmp r9, r0
beq _08067A50
ldr r4, _08067A74
adds r3, r6, 0
adds r3, 0x46
ldrb r0, [r3]
lsls r0, 2
adds r0, r4
ldrh r0, [r0]
ldrh r1, [r5, 0x4]
adds r0, r1
lsls r0, 16
lsrs r0, 16
ldr r2, _08067A78
ldr r1, [sp, 0x10]
ands r1, r2
orrs r1, r0
str r1, [sp, 0x10]
ldrb r0, [r3]
lsls r0, 2
adds r0, r4
ldrh r0, [r0, 0x2]
ldrh r2, [r5, 0x6]
adds r0, r2
lsls r0, 16
ldr r2, _08067A7C
ands r1, r2
orrs r1, r0
str r1, [sp, 0x10]
add r0, sp, 0x10
movs r1, 0x1
bl sub_807FE44
_08067A50:
adds r0, r5, 0
bl sub_8071DA4
_08067A56:
add sp, 0x14
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08067A68: .4byte 0x00000159
_08067A6C: .4byte gUnknown_202F208
_08067A70: .4byte gUnknown_80FC690
_08067A74: .4byte gAdjacentTileOffsets
_08067A78: .4byte 0xffff0000
_08067A7C: .4byte 0x0000ffff
thumb_func_end sub_8067904
thumb_func_start sub_8067A80
sub_8067A80:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x6C
str r1, [sp, 0x68]
mov r8, r2
mov r9, r3
lsls r0, 24
lsrs r0, 24
str r0, [sp, 0x64]
ldr r1, _08067AC8
add r0, sp, 0x4
movs r2, 0x60
bl memcpy
ldr r1, _08067ACC
movs r0, 0
str r0, [r1]
mov r10, r0
cmp r10, r8
blt _08067AB0
b _08067ED8
_08067AB0:
ldr r5, _08067AD0
mov r4, r9
mov r3, r8
_08067AB6:
ldm r4!, {r2}
ldrh r1, [r2]
adds r0, r5, 0
ands r0, r1
strh r0, [r2]
subs r3, 0x1
cmp r3, 0
bne _08067AB6
b _08067ED8
.align 2, 0
_08067AC8: .4byte gUnknown_8106DC8
_08067ACC: .4byte gUnknown_202F30C
_08067AD0: .4byte 0x00007fff
_08067AD4:
movs r7, 0
ldr r1, _08067B98
movs r0, 0x1
strb r0, [r1]
strb r7, [r1, 0x1]
movs r0, 0xE
strb r0, [r1, 0x2]
strb r7, [r1, 0x3]
add r0, sp, 0x4
movs r1, 0x1
bl sub_803ECB4
ldr r5, _08067B9C
ldr r2, [r5]
ldr r0, [sp, 0x68]
str r0, [sp]
ldr r0, [sp, 0x64]
mov r1, r9
mov r3, r8
bl sub_8067F00
ldr r4, _08067BA0
mov r0, r8
cmp r0, 0x8
ble _08067B08
movs r0, 0x8
_08067B08:
strh r0, [r4, 0x1A]
mov r1, r10
strh r1, [r4, 0x18]
movs r0, 0x8
strh r0, [r4, 0x1C]
strh r7, [r4, 0x1E]
strh r7, [r4, 0x20]
strh r7, [r4, 0x4]
movs r0, 0x12
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
adds r0, r4, 0
movs r1, 0
bl sub_80137B0
adds r6, r5, 0
_08067B36:
ldr r0, _08067BA0
bl AddMenuCursorSprite
movs r5, 0
movs r7, 0
ldr r0, [r6]
mov r2, r8
subs r0, r2, r0
cmp r0, 0x8
ble _08067B50
movs r5, 0x1
bl sub_80684C4
_08067B50:
ldr r0, [r6]
cmp r0, 0
beq _08067B5C
movs r7, 0x1
bl sub_8068344
_08067B5C:
movs r0, 0
ldr r1, _08067BA4
bl sub_8014140
adds r4, r0, 0
movs r0, 0x37
bl sub_803E46C
cmp r4, 0x2
bne _08067BAC
cmp r5, 0
beq _08067BAC
ldr r0, [r6]
mov r3, r8
subs r0, r3, r0
cmp r0, 0x8
ble _08067BF0
ldr r5, _08067BA8
movs r4, 0x5
_08067B82:
ldr r1, [r5]
movs r0, 0
bl _call_via_r1
movs r0, 0x37
bl sub_803E46C
subs r4, 0x1
cmp r4, 0
bge _08067B82
b _08067BEA
.align 2, 0
_08067B98: .4byte gUnknown_202F308
_08067B9C: .4byte gUnknown_202F30C
_08067BA0: .4byte gUnknown_202EE10
_08067BA4: .4byte gUnknown_8106DA4
_08067BA8: .4byte gIwramTextFunc1
_08067BAC:
ldr r0, _08067BF8
ldrh r1, [r0, 0x4]
movs r0, 0x80
ands r0, r1
cmp r0, 0
beq _08067C0C
movs r0, 0x1
bl sub_8083CE0
ldr r1, _08067BFC
movs r2, 0x18
ldrsh r0, [r1, r2]
cmp r0, 0x7
bne _08067C04
ldr r0, [r6]
mov r3, r8
subs r0, r3, r0
cmp r0, 0x8
ble _08067BF0
ldr r5, _08067C00
movs r4, 0x5
_08067BD6:
ldr r1, [r5]
movs r0, 0
bl _call_via_r1
movs r0, 0x37
bl sub_803E46C
subs r4, 0x1
cmp r4, 0
bge _08067BD6
_08067BEA:
ldr r0, [r6]
adds r0, 0x1
str r0, [r6]
_08067BF0:
movs r7, 0
movs r0, 0x7
mov r10, r0
b _08067CF6
.align 2, 0
_08067BF8: .4byte gRealInputs
_08067BFC: .4byte gUnknown_202EE10
_08067C00: .4byte gIwramTextFunc1
_08067C04:
adds r0, r1, 0
movs r1, 0
bl sub_80136E0
_08067C0C:
cmp r4, 0x1
bne _08067C44
cmp r7, 0
beq _08067C44
ldr r0, [r6]
cmp r0, 0
beq _08067C38
ldr r5, _08067C40
movs r4, 0x5
_08067C1E:
ldr r1, [r5]
movs r0, 0
bl _call_via_r1
movs r0, 0x37
bl sub_803E46C
subs r4, 0x1
cmp r4, 0
bge _08067C1E
ldr r0, [r6]
subs r0, 0x1
str r0, [r6]
_08067C38:
movs r7, 0
movs r1, 0
mov r10, r1
b _08067CF6
.align 2, 0
_08067C40: .4byte gIwramTextFunc2
_08067C44:
ldr r0, _08067C8C
ldrh r1, [r0, 0x4]
movs r0, 0x40
ands r0, r1
cmp r0, 0
beq _08067CA0
movs r0, 0x1
bl sub_8083CE0
ldr r1, _08067C90
movs r2, 0x18
ldrsh r0, [r1, r2]
cmp r0, 0
bne _08067C98
ldr r0, [r6]
cmp r0, 0
beq _08067C84
ldr r5, _08067C94
movs r4, 0x5
_08067C6A:
ldr r1, [r5]
movs r0, 0
bl _call_via_r1
movs r0, 0x37
bl sub_803E46C
subs r4, 0x1
cmp r4, 0
bge _08067C6A
ldr r0, [r6]
subs r0, 0x1
str r0, [r6]
_08067C84:
movs r7, 0
movs r3, 0
mov r10, r3
b _08067CF6
.align 2, 0
_08067C8C: .4byte gRealInputs
_08067C90: .4byte gUnknown_202EE10
_08067C94: .4byte gIwramTextFunc2
_08067C98:
adds r0, r1, 0
movs r1, 0
bl sub_8013744
_08067CA0:
bl sub_80048C8
lsls r0, 24
cmp r0, 0
beq _08067CAC
b _08067B36
_08067CAC:
ldr r0, _08067CD4
ldrh r1, [r0, 0x2]
movs r0, 0x8
ands r0, r1
cmp r0, 0
bne _08067D40
movs r0, 0x1
ands r0, r1
cmp r0, 0
bne _08067CCC
ldr r2, _08067CD8
adds r0, r2, 0
adds r0, 0x29
ldrb r0, [r0]
cmp r0, 0
beq _08067CDC
_08067CCC:
bl sub_8083D08
movs r7, 0x1
b _08067CF6
.align 2, 0
_08067CD4: .4byte gRealInputs
_08067CD8: .4byte gUnknown_202EE10
_08067CDC:
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _08067CF0
adds r0, r2, 0
adds r0, 0x2A
ldrb r0, [r0]
cmp r0, 0
bne _08067CF0
b _08067B36
_08067CF0:
bl sub_8083D30
movs r7, 0x2
_08067CF6:
ldr r4, _08067D34
adds r0, r4, 0
bl AddMenuCursorSprite
movs r0, 0x37
bl sub_803E46C
cmp r7, 0
bne _08067D0A
b _08067AD4
_08067D0A:
cmp r7, 0x2
bne _08067D48
movs r1, 0x18
ldrsh r0, [r4, r1]
mov r10, r0
ldr r0, _08067D38
ldr r0, [r0]
ldr r2, [sp, 0x68]
cmp r0, r2
bge _08067D20
b _08067AD4
_08067D20:
ldr r0, _08067D3C
ldr r1, [r0]
movs r0, 0
movs r2, 0x1
bl DisplayDungeonYesNoMessage
cmp r0, 0x1
bne _08067D32
b _08067ED8
_08067D32:
b _08067AD4
.align 2, 0
_08067D34: .4byte gUnknown_202EE10
_08067D38: .4byte gUnknown_202F310
_08067D3C: .4byte gUnknown_80FDFB8
_08067D40:
bl sub_8083D1C
movs r7, 0x3
b _08067CF6
_08067D48:
cmp r7, 0x3
bne _08067D64
movs r0, 0x18
ldrsh r3, [r4, r0]
mov r10, r3
ldr r0, _08067D60
ldr r0, [r0]
add r0, r10
lsls r0, 2
add r0, r9
b _08067ED0
.align 2, 0
_08067D60: .4byte gUnknown_202F30C
_08067D64:
movs r2, 0x18
ldrsh r1, [r4, r2]
mov r10, r1
ldr r0, _08067DAC
ldr r0, [r0]
adds r4, r0, r1
ldr r1, _08067DB0
movs r0, 0
str r0, [r1]
movs r0, 0x29
movs r1, 0
bl sub_8044F5C
movs r0, 0x2A
movs r1, 0
bl sub_8044F5C
movs r0, 0x40
movs r1, 0
bl sub_8044F5C
lsls r0, r4, 2
add r0, r9
ldr r0, [r0]
ldrh r0, [r0]
movs r3, 0x80
lsls r3, 8
adds r1, r3, 0
ands r0, r1
cmp r0, 0
beq _08067DBC
movs r0, 0x29
bl sub_8044FF0
b _08067DC2
.align 2, 0
_08067DAC: .4byte gUnknown_202F30C
_08067DB0: .4byte gUnknown_202EE6C
_08067DB4:
bl sub_8083D08
movs r7, 0x1
b _08067E6E
_08067DBC:
movs r0, 0x2A
bl sub_8044FF0
_08067DC2:
lsls r0, r4, 2
mov r2, r9
adds r1, r0, r2
ldr r2, [r1]
ldrb r1, [r2, 0x2]
adds r6, r0, 0
cmp r1, 0
bne _08067DDC
ldrb r1, [r2, 0x4]
cmp r1, 0x40
beq _08067DDC
cmp r1, 0x41
bne _08067DE2
_08067DDC:
movs r0, 0x29
bl sub_8044FF0
_08067DE2:
bl sub_8045064
add r0, sp, 0x4
movs r1, 0x15
bl sub_805FC30
ldr r4, _08067EA0
ldr r5, _08067EA4
adds r7, r4, 0
adds r7, 0x2A
_08067DF6:
adds r0, r4, 0
bl AddMenuCursorSprite
movs r0, 0x37
bl sub_803E46C
ldrh r1, [r5, 0x4]
movs r0, 0x80
ands r0, r1
cmp r0, 0
beq _08067E1A
movs r0, 0x1
bl sub_8083CE0
adds r0, r4, 0
movs r1, 0x1
bl sub_80136E0
_08067E1A:
ldrh r1, [r5, 0x4]
movs r0, 0x40
ands r0, r1
cmp r0, 0
beq _08067E32
movs r0, 0x1
bl sub_8083CE0
adds r0, r4, 0
movs r1, 0x1
bl sub_8013744
_08067E32:
ldrh r1, [r5, 0x2]
movs r0, 0x1
ands r0, r1
cmp r0, 0
bne _08067E46
adds r0, r4, 0
adds r0, 0x29
ldrb r0, [r0]
cmp r0, 0
beq _08067E58
_08067E46:
movs r3, 0x18
ldrsh r0, [r4, r3]
bl sub_8044F3C
lsls r0, 24
cmp r0, 0
bne _08067DB4
bl sub_8083D30
_08067E58:
ldrh r1, [r5, 0x2]
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _08067E68
ldrb r0, [r7]
cmp r0, 0
beq _08067DF6
_08067E68:
bl sub_8083D30
movs r7, 0
_08067E6E:
ldr r4, _08067EA0
adds r0, r4, 0
bl AddMenuCursorSprite
movs r0, 0x37
bl sub_803E46C
cmp r7, 0
bne _08067E82
b _08067AD4
_08067E82:
movs r1, 0x18
ldrsh r0, [r4, r1]
cmp r0, 0
bne _08067EA8
mov r2, r9
adds r0, r6, r2
ldr r1, [r0]
ldrh r2, [r1]
movs r3, 0x80
lsls r3, 8
adds r0, r3, 0
orrs r0, r2
strh r0, [r1]
b _08067EBC
.align 2, 0
_08067EA0: .4byte gUnknown_202EE10
_08067EA4: .4byte gRealInputs
_08067EA8:
cmp r0, 0x1
bne _08067ECC
mov r1, r9
adds r0, r6, r1
ldr r2, [r0]
ldrh r0, [r2]
ldr r3, _08067EC8
adds r1, r3, 0
ands r0, r1
strh r0, [r2]
_08067EBC:
mov r0, r8
mov r1, r9
bl sub_8068310
b _08067AD4
.align 2, 0
_08067EC8: .4byte 0x00007fff
_08067ECC:
mov r1, r9
adds r0, r6, r1
_08067ED0:
ldr r0, [r0]
bl sub_806806C
b _08067AD4
_08067ED8:
mov r0, r8
mov r1, r9
bl sub_8068310
ldr r0, _08067EFC
ldr r0, [r0]
ldr r2, [sp, 0x68]
cmp r0, r2
bge _08067EEC
b _08067AD4
_08067EEC:
add sp, 0x6C
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08067EFC: .4byte gUnknown_202F310
thumb_func_end sub_8067A80
thumb_func_start sub_8067F00
sub_8067F00:
push {r4-r7,lr}

9
include/dungeon_move.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef GUARD_DUNGEON_MOVE_H
#define GUARD_DUNGEON_MOVE_H
#include "structs/str_pokemon.h"
#include "structs/str_moves.h"
bool8 TryUseChosenMove(struct Entity *attacker, u32 r6, s32 itemId, u32 var_30, bool32 isLinkedMove, struct Move *move);
#endif

View File

@ -10,17 +10,27 @@
#include "position_util.h"
#include "dungeon_util.h"
#include "items.h"
#include "input.h"
#include "text.h"
#include "code_803E46C.h"
#include "string_format.h"
#include "dungeon_leader.h"
#include "status_checks_1.h"
#include "dungeon_ai_targeting.h"
#include "dungeon_engine.h"
#include "dungeon_move.h"
#include "dungeon_items.h"
#include "dungeon_random.h"
#include "code_8077274_1.h"
#include "code_8084778.h"
#include "pokemon.h"
#include "trap.h"
#include "moves.h"
#include "menu_input.h"
#include "dungeon_capabilities.h"
#include "constants/item.h"
#include "constants/dungeon.h"
#include "constants/move_id.h"
extern u8 *gUnknown_80F8BE0[];
extern u8 *gUnknown_80FF76C[];
@ -46,16 +56,40 @@ extern u8 *gNoExchangesHere[];
extern u8 *gSwappedGroundItem[];
extern const u8 *const gMonThrewItem2;
extern const u8 *const gMonThrewItem1;
extern const u8 *const gCannotFarewell;
extern const u8 *const gSayFarewellQ;
extern const u8 *const gUnknown_80FDFB8;
extern const u8 *const gUnknown_80F913C;
extern const u8 *const gCannotTalk;
extern const u8 *const gUnknown_80FE008;
extern const u8 *const gUnknown_80FDF74;
extern const u8 *const gUnknown_80FF674;
extern const u8 *const gUnknown_80F9114;
extern const u8 *const gMonDisappointedAndLeft;
extern const u8 *const gSendMonBackQ;
extern const u8 *const gSendMonBackWithItemQ;
extern const u8 *const gMonWentBack;
extern const u8 *const gMonCringing;
extern const u8 *const gMonParalyzed;
extern const u8 *const gUnknown_80FC690;
extern s32 gUnknown_202EE6C;
extern void sub_8071DA4(Entity *);
extern void sub_806A1B0(Entity *);
extern void sub_806A9B4(Entity *, u32);
extern void sub_8057588(Entity * pokemon, u8 param_2);
extern void sub_8068FE0(Entity *, u32, Entity *r2);
extern bool8 sub_806A58C(s16 a0);
extern bool8 sub_806A564(s16 r0);
extern void sub_8045C08(u8 *buffer, Item *item);
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);
u8 * sub_80464AC();
void sub_8044F5C(u16 param_1, u8 param_2);
void sub_8044DF0();
void sub_8042208(Entity *pokemon, u8 r1);
void sub_803E708();
@ -67,6 +101,8 @@ extern void sub_806A6E8(Entity *);
extern void sub_8044DF0(Entity *, u32, u32);
extern void sub_8045DB4(DungeonPos *, u32);
extern bool8 sub_80461C8(DungeonPos *, u32);
extern bool32 sub_8055A00(Entity *attacker, s32 firstMoveId, s32 var_34, s32 itemId, s32 arg_0);
extern bool8 sub_8044B28(void);
void HandlePickUpPlayerAction(Entity *entity)
{
@ -735,3 +771,395 @@ void sub_8067768(ActionContainer *a0)
Entity *targetEntity = gDungeon->teamPokemon[a0->actionParameters[0].actionUseIndex];
sub_8067794(GetLeader(), targetEntity, 0);
}
void sub_8067794(Entity *entity, Entity *targetEntity, s32 a2)
{
const u8 *stringPtr1;
const u8 *stringPtr2;
s32 teamIndex;
EntityInfo *info2 = GetEntInfo(targetEntity);
if (targetEntity == NULL) {
DisplayDungeonMessage(NULL, gCannotFarewell, TRUE);
return;
}
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], targetEntity, 0);
stringPtr1 = gSayFarewellQ;
stringPtr2 = gUnknown_80F913C;
teamIndex = info2->teamIndex;
if (teamIndex >= 0) {
PokemonStruct2 *pokeStruct = &gRecruitedPokemonRef->pokemon2[teamIndex];
if (sub_806A564(pokeStruct->unkA)) {
stringPtr1 = gUnknown_80F9114;
stringPtr2 = gMonDisappointedAndLeft;
}
else if (sub_806A58C(pokeStruct->unkA)) {
if (IsMakuhitaTrainingMaze()) {
stringPtr1 = gSendMonBackQ;
}
else {
stringPtr1 = gSendMonBackWithItemQ;
}
stringPtr2 = gMonWentBack;
}
}
if (DisplayDungeonYesNoMessage(NULL, stringPtr1, FALSE) == 1) {
u8 tempText[64];
strncpy(tempText, gFormatBuffer_Monsters[0], sizeof(tempText));
sub_8068FE0(targetEntity, 0x21D, 0);
strncpy(gFormatBuffer_Monsters[0], tempText, sizeof(tempText));
DisplayDungeonMessage(NULL, stringPtr2, TRUE);
}
}
void HandleUseMovePlayerAction(Entity *entity)
{
s32 i = 0;
while (i < sub_8070828(entity, TRUE)) {
EntityInfo *info = GetEntInfo(entity);
sub_8055A00(entity, info->action.actionParameters[1].actionUseIndex, 1, 0, 0);
if (sub_8044B28()) {
break;
}
if (info->unk159 != 0) {
break;
}
i++;
}
sub_8057588(entity, 1);
if (!sub_8044B28()) {
if (EntityIsValid(entity)) {
sub_806A9B4(entity, GetEntInfo(entity)->action.actionParameters[1].actionUseIndex);
}
sub_806A1B0(entity);
}
}
extern u32 gUnknown_202F208;
void sub_8067904(Entity *entity, u16 moveId)
{
Move move;
EntityInfo *info = GetEntInfo(entity);
gUnknown_202F208 = 0;
InitPokemonMove(&move, moveId);
if (info->cringeClassStatus.status == STATUS_CRINGE) {
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0);
LogMessageByIdWithPopupCheckUser(entity, gMonCringing);
}
else if (info->burnClassStatus.status == STATUS_PARALYSIS) {
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0);
LogMessageByIdWithPopupCheckUser(entity, gMonParalyzed);
}
else {
s32 i;
bool32 isStrugle;
if (moveId == MOVE_STRUGGLE) {
isStrugle = TRUE;
}
else {
isStrugle = FALSE;
}
i = 0;
while (i < sub_8070828(entity, TRUE)) {
info->abilityEffectFlags = 0;
move.moveFlags |= 8;
move.moveFlags |= 4;
move.PP = 10;
TryUseChosenMove(entity, isStrugle, 0, 0, FALSE, &move);
if (!EntityIsValid(entity) || info->unk159 != 0) {
break;
}
i++;
}
if (EntityIsValid(entity)) {
if (moveId == MOVE_STRUGGLE && gUnknown_202F208 == 0) {
LogMessageByIdWithPopupCheckUser(entity, gUnknown_80FC690);
}
if (info->isTeamLeader && moveId != MOVE_STRUGGLE) {
DungeonPos pos;
pos.x = entity->pos.x + gAdjacentTileOffsets[info->action.direction].x;
pos.y = entity->pos.y + gAdjacentTileOffsets[info->action.direction].y;
sub_807FE44(&pos, 1);
}
sub_8071DA4(entity);
}
}
}
typedef struct UnkTextStruct3 {
UnkTextStruct2 a0[4];
} UnkTextStruct3;
extern void sub_80684C4(void);
void sub_8045064(void);
extern void sub_8083CE0(u8 param_1);
extern void sub_8068344(void);
bool8 sub_8044F3C(s32 param_1);
void sub_8068310(s32 a0, PokemonStruct1 **a1);
void sub_8067F00(s32 a0, PokemonStruct1 **a1, s32 a2, s32 a3, s32 a4);
extern void sub_803ECB4(UnkTextStruct3 *a0, u8 a1);
u32 sub_8014140(s32 a0, const void *a1);
void sub_8083D1C(void);
void sub_8083D08(void);
void sub_8083D30(void);
void sub_806806C(PokemonStruct1 *a0);
void sub_805FC30(UnkTextStruct3 *a0, s32 a1);
extern const u8 gUnknown_8106DA4[];
extern MenuInputStruct gUnknown_202EE10;
extern const UnkTextStruct3 gUnknown_8106DC8;
extern s32 gUnknown_202F30C;
extern s32 gUnknown_202F310;
extern u8 gUnknown_202F308[];
void sub_8067A80(u8 a0, s32 a1, s32 a2, PokemonStruct1 **a3)
{
s32 i;
s32 r10;
UnkTextStruct3 spTxtStruct = gUnknown_8106DC8;
gUnknown_202F30C = 0;
r10 = 0;
for (i = 0; i < a2; i++) {
a3[i]->unk0 &= ~(0x8000);
}
while (1) {
sub_8068310(a2, a3);
if (gUnknown_202F310 >= a1)
break;
while (1) {
s32 r7 = 0, r5 = 0;
gUnknown_202F308[0] = 1;
gUnknown_202F308[1] = 0;
gUnknown_202F308[2] = 0xE;
gUnknown_202F308[3] = 0;
ASM_MATCH_TRICK(r7);
sub_803ECB4(&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.unk6 = 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);
while (1) {
s32 r4;
AddMenuCursorSprite(&gUnknown_202EE10);
r5 = 0;
r7 = 0;
if (a2 - gUnknown_202F30C > 8) {
r5 = 1;
sub_80684C4();
}
if (gUnknown_202F30C != 0) {
r7 = 1;
sub_8068344();
}
r4 = sub_8014140(0, gUnknown_8106DA4);
sub_803E46C(0x37);
if (r4 == 2 && r5) {
if (a2 - gUnknown_202F30C > 8) {
s32 i;
for (i = 0; i < 6; i++) {
gIwramTextFunc1(0);
sub_803E46C(0x37);
}
gUnknown_202F30C++;
}
r7 = 0;
r10 = 7;
break;
}
if (gRealInputs.repeated & DPAD_DOWN) {
sub_8083CE0(1);
if (gUnknown_202EE10.menuIndex == 7) {
if (a2 - gUnknown_202F30C > 8) {
s32 i;
for (i = 0; i < 6; i++) {
gIwramTextFunc1(0);
sub_803E46C(0x37);
}
gUnknown_202F30C++;
}
r7 = 0;
r10 = 7;
break;
}
sub_80136E0(&gUnknown_202EE10, 0);
}
if (r4 == 1 && r7 != 0) {
if (gUnknown_202F30C != 0) {
s32 i;
for (i = 0; i < 6; i++) {
gIwramTextFunc2(0);
sub_803E46C(0x37);
}
gUnknown_202F30C--;
}
r7 = 0;
r10 = 0;
break;
}
if (gRealInputs.repeated & DPAD_UP) {
sub_8083CE0(1);
if (gUnknown_202EE10.menuIndex == 0) {
if (gUnknown_202F30C != 0) {
s32 i;
for (i = 0; i < 6; i++) {
gIwramTextFunc2(0);
sub_803E46C(0x37);
}
gUnknown_202F30C--;
}
r7 = 0;
r10 = 0;
break;
}
sub_8013744(&gUnknown_202EE10, 0);
}
if (sub_80048C8()) {
continue;
}
if (gRealInputs.pressed & START_BUTTON) {
sub_8083D1C();
r7 = 3;
break;
}
if ((gRealInputs.pressed & A_BUTTON) || gUnknown_202EE10.unk28.a_button) {
sub_8083D08();
r7 = 1;
break;
}
if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) {
sub_8083D30();
r7 = 2;
break;
}
}
AddMenuCursorSprite(&gUnknown_202EE10);
sub_803E46C(0x37);
if (r7 == 0) {
continue;
}
else if (r7 == 2) {
r10 = gUnknown_202EE10.menuIndex;
if (gUnknown_202F310 < a1) {
continue;
}
if (DisplayDungeonYesNoMessage(NULL, gUnknown_80FDFB8, TRUE) == 1) {
break;
}
else {
continue;
}
}
else if (r7 == 3) {
r10 = gUnknown_202EE10.menuIndex;
sub_806806C(a3[gUnknown_202F30C + r10]);
continue;
}
else {
s32 arrId;
u8 locIdIsPartner;
r10 = gUnknown_202EE10.menuIndex;
arrId = gUnknown_202F30C + r10;
gUnknown_202EE6C = 0;
sub_8044F5C(0x29, 0);
sub_8044F5C(0x2A, 0);
sub_8044F5C(0x40, 0);
if (a3[arrId]->unk0 & 0x8000) {
sub_8044FF0(0x29);
}
else {
sub_8044FF0(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);
}
sub_8045064();
sub_805FC30(&spTxtStruct, 0x15);
while (1) {
AddMenuCursorSprite(&gUnknown_202EE10);
sub_803E46C(0x37);
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();
r7 = 1;
break;
}
sub_8083D30();
}
if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) {
sub_8083D30();
r7 = 0;
break;
}
}
AddMenuCursorSprite(&gUnknown_202EE10);
sub_803E46C(0x37);
if (r7 != 0) {
if (gUnknown_202EE10.menuIndex == 0) {
a3[arrId]->unk0 |= 0x8000;
sub_8068310(a2, a3);
}
else if (gUnknown_202EE10.menuIndex == 1) {
a3[arrId]->unk0 &= ~(0x8000);
sub_8068310(a2, a3);
}
else {
sub_806806C(a3[arrId]);
}
}
continue;
}
}
}
}

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "dungeon_move.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util.h"
#include "dungeon_message.h"
@ -304,7 +305,6 @@ s32 HandleDamagingMove(Entity *, Entity *, Move *, s24_8, s32);
static s32 TryHitTarget(Entity *attacker, Entity *target, Move *move, struct DamageStruct *dmgStruct, s16 unk);
static void TriggerTargetAbilityEffect(Entity *attacker);
static bool8 AccuracyCalc(Entity *attacker, Entity *target, Move *move, s32 accuracyType, bool8 selfAlwaysHits);
bool8 TryUseChosenMove(struct Entity *attacker, u32 r6, s32 itemId, u32 var_30, bool32 isLinkedMove, struct Move *move);
bool8 sub_8056468(Entity *entity, Move *move, const u8 *str, Entity **unkArray, bool32 itemId, bool8 arg_4, bool32 unused);
bool8 sub_805744C(Entity * pokemon, Move *move, bool8 param_3);
static void SetTargetsForMove(Entity **targetsArray, Entity *attacker, Move *move);