code_805D8C8 esta muerto

This commit is contained in:
DizzyEggg
2025-03-05 09:03:32 +01:00
parent aa4cbaef15
commit d75dd097e0
11 changed files with 390 additions and 973 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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++)
{

View File

@@ -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"