Decomp SpecificRecruitCheck

This commit is contained in:
slaw-22 2025-09-23 16:11:44 +00:00
parent 85bb9d5e1e
commit f62afbf45d
7 changed files with 817 additions and 800 deletions

View File

@ -7,7 +7,6 @@
.public ApplyDamageAndEffects
.public AuraBowIsActive
.public CalcTypeBasedDamageEffects
.public CanSeeTarget
.public CeilFixedPoint
.public ClampedLn
.public DAMAGE_FORMULA_AT_PREFACTOR
@ -26,14 +25,10 @@
.public DEFENSIVE_STAT_STAGE_MULTIPLIERS
.public DEF_SCARF_STAT_BOOST
.public DUNGEON_PTR
.public DebugRecruitingEnabled
.public Debug_Print0
.public DefenderAbilityIsActive__0230A940
.public DivideFixedPoint64
.public DungeonModeSetupAndShowNameKeyboard
.public DungeonRandInt
.public EnableAllLearnableIqSkills
.public EnsureCanStandCurrentTile
.public EntityIsValid__02308FBC
.public ExclusiveItemDefenseBoost
.public ExclusiveItemEffectIsActiveWithLogging
@ -47,36 +42,19 @@
.public GendersEqualNotGenderless
.public GendersNotEqualNotGenderless
.public GenerateStandardItem
.public GetActiveTeamMember
.public GetApparentWeather
.public GetDirectionTowardsPosition
.public GetEquivItemIndex
.public GetFirstEmptyMemberIdx
.public GetItemAtIdx
.public GetMessageLogPreprocessorArgs
.public GetMonsterGenderVeneer
.public GetMoveCategory
.public GetNameString
.public GetRecruitRate1
.public GetRecruitRate2
.public GetTypeMatchup
.public HandleFaint
.public HasPlayedOldGame
.public InitTeamMember
.public IntToFixedPoint64
.public IqSkillIsEnabled
.public IsCurrentMissionTypeExact
.public IsFullFloorFixedRoom
.public IsLegendaryChallengeFloor
.public IsMonsterOnTeam
.public IsMonster__0230A994
.public IsPunchMove
.public IsRecoilMove
.public IsRecruitingAllowed
.public IsRegularAttackOrProjectile
.public ItemIsActive__0230A9DC
.public ItemIsActive__0230E578
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public ME_FIRST_MULTIPLIER
.public MUNCH_BELT_STAT_BOOST
@ -98,66 +76,25 @@
.public PlayEffectAnimation0x1A9__022E617C
.public PlayEffectAnimationEntity
.public PointCameraToMonster
.public RECRUITMENT_LEVEL_BOOST_TABLE
.public ResetDamageData
.public RoundUpDiv256
.public SCOPE_LENS_CRIT_RATE_BOOST
.public SPECIAL_BAND_STAT_BOOST
.public SUPER_LUCK_CRIT_RATE_BOOST
.public SetItemAcquired
.public SetMessageLogPreprocessorArgsString
.public SetPokemonJoined
.public SetPreprocessorArgsIdVal
.public SetPreprocessorArgsStringToName
.public StrcpySimple
.public StrncpyName
.public StrncpySimpleNoPad
.public SubstitutePlaceholderStringTags
.public TYPE_ADVANTAGE_MASTER_CRIT_RATE
.public TYPE_MATCHUP_COMBINATOR_TABLE
.public UpdateStateFlags
.public ZINC_BAND_STAT_BOOST
.public _s32_div_f
.public abs
.public ov10_022BDE50
.public ov10_022BF964
.public ov10_022C4410
.public ov10_022C441C
.public ov10_022C443C
.public ov10_022C447C
.public ov10_022C44FC
.public ov10_022C45B4
.public ov10_022C46FC
.public ov10_022C4700
.public ov10_022C4704
.public ov10_022C4708
.public ov10_022C470C
.public ov29_022E1B28
.public ov29_022E2470
.public ov29_022E68BC
.public ov29_022E8104
.public ov29_022E81F8
.public ov29_022EACAC
.public ov29_022FBDE0
.public ov29_02304A48
.public ov29_02305F60
.public ov29_0230E5A8
.public ov29_0230E5FC
.public ov29_0230E658
.public ov29_02337EC0
.public ov29_0234B1A4
.public ov29_0234BA54
.public ov29_0234D630
.public ov29_0234D7C0
.public ov29_0234D838
.public ov29_0234D8A0
.public ov29_0234EE10
.public ov29_02352838
.public ov29_02352894
.public ov29_02352984
.public ov29_02352990
.public ov29_0235299C
.public ov29_023535D4
.public sub_02056698
.public sub_020584FC
.public sub_020585B4

View File

@ -0,0 +1,69 @@
#pragma once
.public CanSeeTarget
.public DUNGEON_PTR
.public DungeonModeSetupAndShowNameKeyboard
.public DungeonRandInt
.public EnableAllLearnableIqSkills
.public EnsureCanStandCurrentTile
.public GetActiveTeamMember
.public GetDirectionTowardsPosition
.public GetFirstEmptyMemberIdx
.public GetMessageLogPreprocessorArgs
.public GetNameString
.public GetRecruitRate1
.public GetRecruitRate2
.public HandleFaint
.public HasPlayedOldGame
.public InitTeamMember
.public IqSkillIsEnabled
.public IsCurrentMissionTypeExact
.public IsFullFloorFixedRoom
.public IsLegendaryChallengeFloor
.public IsMonsterOnTeam
.public IsRecruitingAllowed
.public ItemIsActive__0230E578
.public LogMessageByIdWithPopupCheckUser
.public MonsterIsType
.public RECRUITMENT_LEVEL_BOOST_TABLE
.public SetMessageLogPreprocessorArgsString
.public SetPokemonJoined
.public SetPreprocessorArgsIdVal
.public SetPreprocessorArgsStringToName
.public SpecificRecruitCheck
.public StrcpySimple
.public StrncpyName
.public StrncpySimpleNoPad
.public SubstitutePlaceholderStringTags
.public abs
.public ov10_022C4410
.public ov10_022C441C
.public ov10_022C443C
.public ov10_022C447C
.public ov10_022C44FC
.public ov10_022C46FC
.public ov10_022C4700
.public ov10_022C4704
.public ov10_022C4708
.public ov10_022C470C
.public ov29_022E1B28
.public ov29_022E68BC
.public ov29_022E8104
.public ov29_022E81F8
.public ov29_022EACAC
.public ov29_022FBDE0
.public ov29_02304A48
.public ov29_02305F60
.public ov29_0230E5A8
.public ov29_0230E5FC
.public ov29_0230E658
.public ov29_02337EC0
.public ov29_0234B1A4
.public ov29_0234BA54
.public ov29_0234D630
.public ov29_0234D7C0
.public ov29_0234D838
.public ov29_0234D8A0
.public ov29_0234EE10
.public sub_02056698
.public sub_020584FC
.public sub_020585B4

View File

@ -2284,740 +2284,3 @@ ov29_0230DAB8: ; 0x0230DAB8
_0230F050: .word 0x00002497
#endif
arm_func_end ov29_0230DAB8
arm_func_start SpecificRecruitCheck
SpecificRecruitCheck: ; 0x0230DB14
stmdb sp!, {r4, lr}
ldr r1, _0230DBC8 ; =DUNGEON_PTR
mov r4, r0
ldr r1, [r1]
ldrb r1, [r1, #0x759]
cmp r1, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
bl DebugRecruitingEnabled
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
cmp r4, #0x97
ldreq r0, _0230DBC8 ; =DUNGEON_PTR
ldreq r0, [r0]
addeq r0, r0, #0x700
ldreqsb r0, [r0, #0x98]
cmpeq r0, #2
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldr r1, _0230DBCC ; =0x000001A3
cmp r4, r1
moveq r0, #0
ldmeqia sp!, {r4, pc}
cmp r4, #0x1a4
moveq r0, #0
ldmeqia sp!, {r4, pc}
add r0, r1, #2
cmp r4, r0
moveq r0, #0
ldmeqia sp!, {r4, pc}
sub r0, r1, #0xa
cmp r4, r0
moveq r0, #0
ldmeqia sp!, {r4, pc}
sub r0, r1, #9
cmp r4, r0
moveq r0, #0
ldmeqia sp!, {r4, pc}
sub r0, r1, #8
cmp r4, r0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r4, pc}
.align 2, 0
_0230DBC8: .word DUNGEON_PTR
_0230DBCC: .word 0x000001A3
arm_func_end SpecificRecruitCheck
arm_func_start RecruitCheck
RecruitCheck: ; 0x0230DBD0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r2, _0230E024 ; =DUNGEON_PTR
mov r8, r0
ldr r0, [r2]
mov r7, r1
ldrb r0, [r0, #0x748]
ldr r5, [r8, #0xb4]
ldr r6, [r7, #0xb4]
bl IsRecruitingAllowed
cmp r0, #0
beq _0230DC28
bl IsFullFloorFixedRoom
cmp r0, #0
bne _0230DC28
bl IsLegendaryChallengeFloor
cmp r0, #0
bne _0230DC28
mov r0, #0xa
mov r1, #6
bl IsCurrentMissionTypeExact
cmp r0, #0
beq _0230DC30
_0230DC28:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230DC30:
ldr r0, _0230E024 ; =DUNGEON_PTR
ldr r1, [r0]
ldrb r0, [r1, #0x75d]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrb r0, [r1, #0x748]
cmp r0, #0x5b
bne _0230DC70
ldrsh r1, [r6, #2]
ldr r0, _0230E028 ; =0x000001E6
cmp r1, r0
addne r0, r0, #0x258
cmpne r1, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230DC70:
ldrsh r0, [r6, #2]
cmp r0, #0x91
cmpne r0, #0x90
cmpne r0, #0x92
ldrne r2, _0230E02C ; =0x0000010F
cmpne r0, r2
subne r1, r2, #1
cmpne r0, r1
cmpne r0, #0x110
cmpne r0, #0x19c
addne r1, r2, #0x8e
cmpne r0, r1
addne r1, r2, #0x92
cmpne r0, r1
cmpne r0, #0x1a0
addne r1, r2, #0x93
cmpne r0, r1
addne r1, r2, #0x8a
cmpne r0, r1
addne r1, r2, #0x8b
cmpne r0, r1
addne r1, r2, #0x8c
cmpne r0, r1
beq _0230DCF0
ldr r1, _0230E030 ; =0xFFFFFDEA
add r1, r0, r1
mov r1, r1, lsl #0x10
mov r1, r1, asr #0x10
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
cmp r1, #1
bhi _0230DD04
_0230DCF0:
mov r1, #1
bl IsMonsterOnTeam
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230DD04:
mov r0, r6
bl ov29_022FBDE0
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrsh r0, [r6, #2]
bl SpecificRecruitCheck
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrsh r1, [r8, #4]
ldrsh r0, [r7, #4]
sub r0, r1, r0
bl abs
cmp r0, #1
bgt _0230DD5C
ldrsh r1, [r8, #6]
ldrsh r0, [r7, #6]
sub r0, r1, r0
bl abs
cmp r0, #1
ble _0230DD64
_0230DD5C:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230DD64:
ldrb r0, [r6, #0x48]
cmp r0, #0xfa
ldrneb r0, [r6, #0xbc]
cmpne r0, #7
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r7
mov r1, r8
bl CanSeeTarget
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, #1
bl ov29_022E1B28
bl ov29_022E81F8
ldrsh r0, [r6, #2]
mov r1, #1
bl IsMonsterOnTeam
mov sb, r0
mov r0, #0x3e8
bl DungeonRandInt
mov r4, r0
bl HasPlayedOldGame
cmp r0, #0
beq _0230DDE0
cmp sb, #0
bne _0230DDE0
ldrsh r0, [r6, #2]
bl GetRecruitRate2
mov r6, r0
b _0230DDEC
_0230DDE0:
ldrsh r0, [r6, #2]
bl GetRecruitRate1
mov r6, r0
_0230DDEC:
cmp r6, #0
ble _0230DDFC
cmp sb, #0
movne r6, r6, asr #1
_0230DDFC:
ldr r0, _0230E034 ; =0xFFFFFC19
cmp r6, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r8
mov r1, #0x35
bl ItemIsActive__0230E578
cmp r0, #0
ldrne r0, _0230E038 ; =ov10_022C44FC
ldrnesh r0, [r0]
addne r6, r6, r0
bne _0230DFD4
mov r0, r8
mov r1, #0x39
bl ItemIsActive__0230E578
cmp r0, #0
ldrne r0, _0230E03C ; =ov10_022C443C
ldrnesh r0, [r0]
addne r6, r6, r0
bne _0230DFD4
mov r0, r8
mov r1, #0x3a
bl ItemIsActive__0230E578
cmp r0, #0
ldrne r0, _0230E040 ; =ov10_022C447C
ldrnesh r0, [r0]
addne r6, r6, r0
bne _0230DFD4
mov r0, r8
mov r1, #0x3b
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DEA0
mov r0, r7
mov r1, #6
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E044 ; =ov10_022C441C
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DEA0:
mov r0, r8
mov r1, #0x3c
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DED4
mov r0, r7
mov r1, #2
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E048 ; =ov10_022C4410
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DED4:
mov r0, r8
mov r1, #0x3d
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DF08
mov r0, r7
mov r1, #9
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E04C ; =ov10_022C470C
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DF08:
mov r0, r8
mov r1, #0x3e
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DF3C
mov r0, r7
mov r1, #3
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E050 ; =ov10_022C4708
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DF3C:
mov r0, r8
mov r1, #0x3f
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DF70
mov r0, r7
mov r1, #0xd
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E054 ; =ov10_022C4704
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DF70:
mov r0, r8
mov r1, #0x40
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DFA4
mov r0, r7
mov r1, #4
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E058 ; =ov10_022C4700
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DFA4:
mov r0, r8
mov r1, #0x41
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DFD4
mov r0, r7
mov r1, #0xa
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E05C ; =ov10_022C46FC
ldrnesh r0, [r0]
addne r6, r6, r0
_0230DFD4:
mov r0, r8
mov r1, #0x1e
bl IqSkillIsEnabled
cmp r0, #0
ldrne r0, _0230E038 ; =ov10_022C44FC
ldrb r1, [r5, #0xa]
ldrnesh r0, [r0]
mov r1, r1, lsl #1
addne r6, r6, r0
ldr r0, _0230E060 ; =RECRUITMENT_LEVEL_BOOST_TABLE
ldrsh r0, [r0, r1]
add r0, r6, r0
cmp r4, r0
mov r0, #0
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl GetFirstEmptyMemberIdx
cmp r0, #0
movlt r0, #0
movge r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0230E024: .word DUNGEON_PTR
_0230E028: .word 0x000001E6
_0230E02C: .word 0x0000010F
_0230E030: .word 0xFFFFFDEA
_0230E034: .word 0xFFFFFC19
_0230E038: .word ov10_022C44FC
_0230E03C: .word ov10_022C443C
_0230E040: .word ov10_022C447C
_0230E044: .word ov10_022C441C
_0230E048: .word ov10_022C4410
_0230E04C: .word ov10_022C470C
_0230E050: .word ov10_022C4708
_0230E054: .word ov10_022C4704
_0230E058: .word ov10_022C4700
_0230E05C: .word ov10_022C46FC
_0230E060: .word RECRUITMENT_LEVEL_BOOST_TABLE
arm_func_end RecruitCheck
arm_func_start TryRecruit
TryRecruit: ; 0x0230E064
#ifdef JAPAN
#define TRY_RECRUIT_OFFSET -4
#define TRY_RECRUIT_OFFSET_2 -0x2C0
#else
#define TRY_RECRUIT_OFFSET 0
#define TRY_RECRUIT_OFFSET_2 0
#endif
#ifdef JAPAN
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
#else
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
#endif
sub sp, sp, #0x114 + TRY_RECRUIT_OFFSET
mov sl, r0
mov r0, #0xa
mov r5, #0
mov sb, r1
mov r8, r2
bl ov29_0234BA54
mov r0, r5
bl ov29_0234B1A4
bl ov29_0234D630
add r0, sb, #4
add r1, sl, #4
mvn r7, #0
bl GetDirectionTowardsPosition
mov r6, r0
ldr r4, [sb, #0xb4]
mov r0, r5
strb r0, [sb, #0x22]
mov r0, sl
mov r1, sb
bl ov29_02305F60
mov r1, r6
mov r0, sb
bl ov29_02304A48
ldrsh r0, [r4, #2]
mov r1, #1
bl IsMonsterOnTeam
cmp r0, #0
beq _0230E0FC
bl GetMessageLogPreprocessorArgs
mov r1, #1
str r1, [sp]
mov r1, r5
ldr r2, [sb, #0xb4]
mov r3, r1
bl SetPreprocessorArgsStringToName
b _0230E114
_0230E0FC:
bl GetMessageLogPreprocessorArgs
mov r1, r5
str r1, [sp]
ldr r2, [sb, #0xb4]
mov r3, r1
bl SetPreprocessorArgsStringToName
_0230E114:
bl GetMessageLogPreprocessorArgs
mov r1, r0
mov r3, #1
mov r2, #0
str r3, [sp]
ldr r0, _0230E55C ; =0x00000C77
mov r3, r2
bl ov29_0234D7C0
cmp r0, #2
moveq r4, #0
beq _0230E524
mov r4, #1
mov r0, #0
orr r1, r4, #2
strb r1, [sp, #0xac + TRY_RECRUIT_OFFSET]
strb r0, [sp, #0xad + TRY_RECRUIT_OFFSET]
ldrsh r2, [r8, #0xc]
ldr r1, _0230E560 ; =DUNGEON_PTR
sub r3, r0, #1
strb r2, [sp, #0xae + TRY_RECRUIT_OFFSET]
strh r4, [sp, #0xb2 + TRY_RECRUIT_OFFSET]
ldr r2, [r1]
ldrh r4, [r8, #0x44]
add r1, sp, #0x14
strh r4, [r1, #0xf2 + TRY_RECRUIT_OFFSET]
ldrh r4, [r8, #0x46]
strh r4, [r1, #0xf4 + TRY_RECRUIT_OFFSET]
strb r0, [sp, #0x104 + TRY_RECRUIT_OFFSET]
strh r3, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
strh r3, [sp, #0xb6 + TRY_RECRUIT_OFFSET]
ldrsh r1, [r8]
strh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET]
ldrb r1, [r2, #0x748]
strb r1, [sp, #0xaf + TRY_RECRUIT_OFFSET]
ldrb r1, [r2, #0x749]
add r2, sp, #0xac + TRY_RECRUIT_OFFSET
strb r1, [sp, #0xb0 + TRY_RECRUIT_OFFSET]
ldrsh r1, [r8, #6]
strh r1, [sp, #0xba + TRY_RECRUIT_OFFSET]
ldrsh r1, [r8, #6]
strh r1, [sp, #0xbc + TRY_RECRUIT_OFFSET]
ldrh r1, [r8, #0x14]
strh r1, [sp, #0xf0 + TRY_RECRUIT_OFFSET]
ldrh r1, [r8, #0x16]
strh r1, [sp, #0xf2 + TRY_RECRUIT_OFFSET]
ldrh r1, [r8, #0x18]
strh r1, [sp, #0xf4 + TRY_RECRUIT_OFFSET]
ldrh r1, [r8, #0x1a]
strh r1, [sp, #0xf6 + TRY_RECRUIT_OFFSET]
_0230E1D8:
add r4, r8, r0
ldrb r1, [r4, #8]
add r3, r2, r0
add r0, r0, #1
strb r1, [r3, #0x12]
ldrb r1, [r4, #0xa]
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
strb r1, [r3, #0x14]
cmp r0, #2
blt _0230E1D8
ldr r0, [r8, #0x10]
add r2, sp, #0xc8 + TRY_RECRUIT_OFFSET
str r0, [sp, #0xc4 + TRY_RECRUIT_OFFSET]
add r3, r8, #0x22
mov r1, #0x11
_0230E218:
ldrh r0, [r3], #2
subs r1, r1, #1
strh r0, [r2], #2
bne _0230E218
ldrh r0, [r8, #0x1c]
strh r0, [sp, #0xea + TRY_RECRUIT_OFFSET]
ldrh r0, [r8, #0x1e]
strh r0, [sp, #0xec + TRY_RECRUIT_OFFSET]
ldrh r0, [r8, #0x20]
strh r0, [sp, #0xee + TRY_RECRUIT_OFFSET]
ldrsh r0, [r8]
bl GetNameString
mov r1, r0
add r0, sp, #0x100
add r0, r0, #0xa + TRY_RECRUIT_OFFSET
mov r2, #0xa
bl StrncpyName
ldrsh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET]
ldrsh r2, [sp, #0xb2 + TRY_RECRUIT_OFFSET]
add r0, sp, #0xf8 + TRY_RECRUIT_OFFSET
bl EnableAllLearnableIqSkills
add r1, sp, #0x100
add r0, sp, #0x98
add r1, r1, #0xa + TRY_RECRUIT_OFFSET
#ifdef JAPAN
add r4, sp, #0x18
bl StrcpySimple
#else
mov r2, #0xa
add r4, sp, #0x18
bl StrncpySimpleNoPad
#endif
bl ov29_022EACAC
bl GetMessageLogPreprocessorArgs
mov r1, r0
mov r0, #1
str r0, [sp]
mov r2, #0
ldr r0, _0230E564 ; =0x00000C7B
mov r3, r2
bl ov29_0234D7C0
cmp r0, #1
bne _0230E2D4
bl ov29_0234D838
add r6, sp, #0x100
add r6, r6, #0xa + TRY_RECRUIT_OFFSET
_0230E2BC:
mov r0, r6
add r1, sp, #0x98
mov r2, #0
bl DungeonModeSetupAndShowNameKeyboard
cmp r0, #0
beq _0230E2BC
_0230E2D4:
add r1, sp, #0xac + TRY_RECRUIT_OFFSET
mov r0, r4
bl sub_020585B4
mov r1, r4
mov r0, #0
bl SetMessageLogPreprocessorArgsString
mov r0, #1
mov r1, #0
bl SetPreprocessorArgsIdVal
ldr r0, _0230E568 ; =0x00000C7E
bl ov29_0230E658
ldrsh r1, [r8, #2]
ldrsh r2, [r8, #4]
mov r0, sb
bl ov29_02337EC0
ldrsh r2, [r8, #2]
ldrsh r3, [r8, #4]
mov r0, sl
mov r1, sb
bl ov29_0230E5A8
cmp r0, #0
bne _0230E42C
add r0, sp, #0xac + TRY_RECRUIT_OFFSET
mvn r1, #0
bl ov29_0230E5FC
mov r7, r0
b _0230E410
_0230E340:
ldr r0, _0230E56C ; =0x00000C7F
bl ov29_0230E658
mvn r4, #0
_0230E34C:
bl ov29_0234D838
add r1, sp, #0x100
mov r0, sb
add r1, r1, #0xa + TRY_RECRUIT_OFFSET
bl ov29_0234EE10
movs r6, r0
beq _0230E3D4
cmp r6, sb
add r0, sp, #0x58
bne _0230E380
add r1, sp, #0xac + TRY_RECRUIT_OFFSET
bl sub_020585B4
b _0230E38C
_0230E380:
ldr r1, [r6, #0xb4]
ldrsh r1, [r1, #0xc]
bl sub_020584FC
_0230E38C:
mov r0, #0
add r1, sp, #0x58
bl SetMessageLogPreprocessorArgsString
mov r0, #1
mov r1, sl
mov r2, #0
bl SubstitutePlaceholderStringTags
bl GetMessageLogPreprocessorArgs
mov r1, #1
mov r2, #0
str r1, [sp]
mov r1, r0
mov r0, #0xc80 + TRY_RECRUIT_OFFSET_2
mov r3, r2
bl ov29_0234D7C0
mov fp, r0
cmp fp, r4
beq _0230E34C
_0230E3D4:
cmp fp, #2
cmpne r6, #0
beq _0230E410
ldr r0, _0230E56C ; =0x00000C7F
add r0, r0, #2
bl ov29_0230E658
mov r0, r6
bl ov29_022E68BC
ldr r1, _0230E570 ; =0x00000233
mov r0, r6
mov r2, sl
bl HandleFaint
cmp r6, sb
moveq r4, #1
beq _0230E524
_0230E410:
mov r0, sl
mov r1, sb
ldrsh r2, [r8, #2]
ldrsh r3, [r8, #4]
bl ov29_0230E5A8
cmp r0, #0
beq _0230E340
_0230E42C:
mov r6, #0
mov r4, r6
mov r5, #1
b _0230E468
_0230E43C:
mov r0, r6
bl GetActiveTeamMember
ldrb r0, [r0]
tst r0, #1
movne r0, r5
moveq r0, r4
tst r0, #0xff
beq _0230E470
add r0, r6, #1
mov r0, r0, lsl #0x10
mov r6, r0, asr #0x10
_0230E468:
cmp r6, #4
blt _0230E43C
_0230E470:
add r0, sp, #0xac + TRY_RECRUIT_OFFSET
mov r1, r7
strh r6, [sp, #0xb6 + TRY_RECRUIT_OFFSET]
bl ov29_0230E5FC
strh r0, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
ldrsh r1, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
mov r0, r6
bl sub_02056698
ldr r1, _0230E570 ; =0x00000233
mov r0, sb
mov r2, sl
bl HandleFaint
mov r0, r6
bl GetActiveTeamMember
mov r4, r0
add r7, sp, #0xac + TRY_RECRUIT_OFFSET
mov r6, r4
mov r5, #6
_0230E4B8:
ldmia r7!, {r0, r1, r2, r3}
stmia r6!, {r0, r1, r2, r3}
subs r5, r5, #1
bne _0230E4B8
ldmia r7, {r0, r1}
stmia r6, {r0, r1}
bl ov29_022E8104
bl ov29_022E81F8
add r1, sp, #0x14
mov r0, #0
str r1, [sp]
str r0, [sp, #4]
mov r0, #1
str r0, [sp, #8]
str r0, [sp, #0xc]
str r0, [sp, #0x10]
ldrsh r0, [r8]
ldrsh r1, [r8, #2]
ldrsh r2, [r8, #4]
mov r3, r4
bl InitTeamMember
ldrsh r0, [r4, #0xc]
bl SetPokemonJoined
bl ov29_022E8104
bl ov29_022E81F8
ldr r5, [sp, #0x14]
mov r4, #1
_0230E524:
mov r0, #1
bl ov29_0234D8A0
cmp r4, #0
bne _0230E540
ldr r1, _0230E574 ; =0x00000C78
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
_0230E540:
cmp r5, #0
beq _0230E550
mov r0, r5
bl EnsureCanStandCurrentTile
_0230E550:
mov r0, r4
add sp, sp, #0x114 + TRY_RECRUIT_OFFSET
#ifdef JAPAN
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
#else
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
#endif
.align 2, 0
_0230E55C: .word 0x00000C77 + TRY_RECRUIT_OFFSET_2
_0230E560: .word DUNGEON_PTR
_0230E564: .word 0x00000C7B + TRY_RECRUIT_OFFSET_2
_0230E568: .word 0x00000C7E + TRY_RECRUIT_OFFSET_2
_0230E56C: .word 0x00000C7F + TRY_RECRUIT_OFFSET_2
_0230E570: .word 0x00000233
_0230E574: .word 0x00000C78 + TRY_RECRUIT_OFFSET_2
arm_func_end TryRecruit

689
asm/overlay_29_0230DBD0.s Normal file
View File

@ -0,0 +1,689 @@
.include "asm/macros.inc"
.include "overlay_29_0230DBD0.inc"
.text
arm_func_start RecruitCheck
RecruitCheck: ; 0x0230DBD0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r2, _0230E024 ; =DUNGEON_PTR
mov r8, r0
ldr r0, [r2]
mov r7, r1
ldrb r0, [r0, #0x748]
ldr r5, [r8, #0xb4]
ldr r6, [r7, #0xb4]
bl IsRecruitingAllowed
cmp r0, #0
beq _0230DC28
bl IsFullFloorFixedRoom
cmp r0, #0
bne _0230DC28
bl IsLegendaryChallengeFloor
cmp r0, #0
bne _0230DC28
mov r0, #0xa
mov r1, #6
bl IsCurrentMissionTypeExact
cmp r0, #0
beq _0230DC30
_0230DC28:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230DC30:
ldr r0, _0230E024 ; =DUNGEON_PTR
ldr r1, [r0]
ldrb r0, [r1, #0x75d]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrb r0, [r1, #0x748]
cmp r0, #0x5b
bne _0230DC70
ldrsh r1, [r6, #2]
ldr r0, _0230E028 ; =0x000001E6
cmp r1, r0
addne r0, r0, #0x258
cmpne r1, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230DC70:
ldrsh r0, [r6, #2]
cmp r0, #0x91
cmpne r0, #0x90
cmpne r0, #0x92
ldrne r2, _0230E02C ; =0x0000010F
cmpne r0, r2
subne r1, r2, #1
cmpne r0, r1
cmpne r0, #0x110
cmpne r0, #0x19c
addne r1, r2, #0x8e
cmpne r0, r1
addne r1, r2, #0x92
cmpne r0, r1
cmpne r0, #0x1a0
addne r1, r2, #0x93
cmpne r0, r1
addne r1, r2, #0x8a
cmpne r0, r1
addne r1, r2, #0x8b
cmpne r0, r1
addne r1, r2, #0x8c
cmpne r0, r1
beq _0230DCF0
ldr r1, _0230E030 ; =0xFFFFFDEA
add r1, r0, r1
mov r1, r1, lsl #0x10
mov r1, r1, asr #0x10
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
cmp r1, #1
bhi _0230DD04
_0230DCF0:
mov r1, #1
bl IsMonsterOnTeam
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230DD04:
mov r0, r6
bl ov29_022FBDE0
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrsh r0, [r6, #2]
bl SpecificRecruitCheck
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrsh r1, [r8, #4]
ldrsh r0, [r7, #4]
sub r0, r1, r0
bl abs
cmp r0, #1
bgt _0230DD5C
ldrsh r1, [r8, #6]
ldrsh r0, [r7, #6]
sub r0, r1, r0
bl abs
cmp r0, #1
ble _0230DD64
_0230DD5C:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0230DD64:
ldrb r0, [r6, #0x48]
cmp r0, #0xfa
ldrneb r0, [r6, #0xbc]
cmpne r0, #7
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r7
mov r1, r8
bl CanSeeTarget
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, #1
bl ov29_022E1B28
bl ov29_022E81F8
ldrsh r0, [r6, #2]
mov r1, #1
bl IsMonsterOnTeam
mov sb, r0
mov r0, #0x3e8
bl DungeonRandInt
mov r4, r0
bl HasPlayedOldGame
cmp r0, #0
beq _0230DDE0
cmp sb, #0
bne _0230DDE0
ldrsh r0, [r6, #2]
bl GetRecruitRate2
mov r6, r0
b _0230DDEC
_0230DDE0:
ldrsh r0, [r6, #2]
bl GetRecruitRate1
mov r6, r0
_0230DDEC:
cmp r6, #0
ble _0230DDFC
cmp sb, #0
movne r6, r6, asr #1
_0230DDFC:
ldr r0, _0230E034 ; =0xFFFFFC19
cmp r6, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r8
mov r1, #0x35
bl ItemIsActive__0230E578
cmp r0, #0
ldrne r0, _0230E038 ; =ov10_022C44FC
ldrnesh r0, [r0]
addne r6, r6, r0
bne _0230DFD4
mov r0, r8
mov r1, #0x39
bl ItemIsActive__0230E578
cmp r0, #0
ldrne r0, _0230E03C ; =ov10_022C443C
ldrnesh r0, [r0]
addne r6, r6, r0
bne _0230DFD4
mov r0, r8
mov r1, #0x3a
bl ItemIsActive__0230E578
cmp r0, #0
ldrne r0, _0230E040 ; =ov10_022C447C
ldrnesh r0, [r0]
addne r6, r6, r0
bne _0230DFD4
mov r0, r8
mov r1, #0x3b
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DEA0
mov r0, r7
mov r1, #6
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E044 ; =ov10_022C441C
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DEA0:
mov r0, r8
mov r1, #0x3c
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DED4
mov r0, r7
mov r1, #2
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E048 ; =ov10_022C4410
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DED4:
mov r0, r8
mov r1, #0x3d
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DF08
mov r0, r7
mov r1, #9
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E04C ; =ov10_022C470C
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DF08:
mov r0, r8
mov r1, #0x3e
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DF3C
mov r0, r7
mov r1, #3
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E050 ; =ov10_022C4708
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DF3C:
mov r0, r8
mov r1, #0x3f
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DF70
mov r0, r7
mov r1, #0xd
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E054 ; =ov10_022C4704
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DF70:
mov r0, r8
mov r1, #0x40
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DFA4
mov r0, r7
mov r1, #4
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E058 ; =ov10_022C4700
ldrnesh r0, [r0]
addne r6, r6, r0
b _0230DFD4
_0230DFA4:
mov r0, r8
mov r1, #0x41
bl ItemIsActive__0230E578
cmp r0, #0
beq _0230DFD4
mov r0, r7
mov r1, #0xa
bl MonsterIsType
cmp r0, #0
ldrne r0, _0230E05C ; =ov10_022C46FC
ldrnesh r0, [r0]
addne r6, r6, r0
_0230DFD4:
mov r0, r8
mov r1, #0x1e
bl IqSkillIsEnabled
cmp r0, #0
ldrne r0, _0230E038 ; =ov10_022C44FC
ldrb r1, [r5, #0xa]
ldrnesh r0, [r0]
mov r1, r1, lsl #1
addne r6, r6, r0
ldr r0, _0230E060 ; =RECRUITMENT_LEVEL_BOOST_TABLE
ldrsh r0, [r0, r1]
add r0, r6, r0
cmp r4, r0
mov r0, #0
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl GetFirstEmptyMemberIdx
cmp r0, #0
movlt r0, #0
movge r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0230E024: .word DUNGEON_PTR
_0230E028: .word 0x000001E6
_0230E02C: .word 0x0000010F
_0230E030: .word 0xFFFFFDEA
_0230E034: .word 0xFFFFFC19
_0230E038: .word ov10_022C44FC
_0230E03C: .word ov10_022C443C
_0230E040: .word ov10_022C447C
_0230E044: .word ov10_022C441C
_0230E048: .word ov10_022C4410
_0230E04C: .word ov10_022C470C
_0230E050: .word ov10_022C4708
_0230E054: .word ov10_022C4704
_0230E058: .word ov10_022C4700
_0230E05C: .word ov10_022C46FC
_0230E060: .word RECRUITMENT_LEVEL_BOOST_TABLE
arm_func_end RecruitCheck
arm_func_start TryRecruit
TryRecruit: ; 0x0230E064
#ifdef JAPAN
#define TRY_RECRUIT_OFFSET -4
#define TRY_RECRUIT_OFFSET_2 -0x2C0
#else
#define TRY_RECRUIT_OFFSET 0
#define TRY_RECRUIT_OFFSET_2 0
#endif
#ifdef JAPAN
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
#else
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
#endif
sub sp, sp, #0x114 + TRY_RECRUIT_OFFSET
mov sl, r0
mov r0, #0xa
mov r5, #0
mov sb, r1
mov r8, r2
bl ov29_0234BA54
mov r0, r5
bl ov29_0234B1A4
bl ov29_0234D630
add r0, sb, #4
add r1, sl, #4
mvn r7, #0
bl GetDirectionTowardsPosition
mov r6, r0
ldr r4, [sb, #0xb4]
mov r0, r5
strb r0, [sb, #0x22]
mov r0, sl
mov r1, sb
bl ov29_02305F60
mov r1, r6
mov r0, sb
bl ov29_02304A48
ldrsh r0, [r4, #2]
mov r1, #1
bl IsMonsterOnTeam
cmp r0, #0
beq _0230E0FC
bl GetMessageLogPreprocessorArgs
mov r1, #1
str r1, [sp]
mov r1, r5
ldr r2, [sb, #0xb4]
mov r3, r1
bl SetPreprocessorArgsStringToName
b _0230E114
_0230E0FC:
bl GetMessageLogPreprocessorArgs
mov r1, r5
str r1, [sp]
ldr r2, [sb, #0xb4]
mov r3, r1
bl SetPreprocessorArgsStringToName
_0230E114:
bl GetMessageLogPreprocessorArgs
mov r1, r0
mov r3, #1
mov r2, #0
str r3, [sp]
ldr r0, _0230E55C ; =0x00000C77
mov r3, r2
bl ov29_0234D7C0
cmp r0, #2
moveq r4, #0
beq _0230E524
mov r4, #1
mov r0, #0
orr r1, r4, #2
strb r1, [sp, #0xac + TRY_RECRUIT_OFFSET]
strb r0, [sp, #0xad + TRY_RECRUIT_OFFSET]
ldrsh r2, [r8, #0xc]
ldr r1, _0230E560 ; =DUNGEON_PTR
sub r3, r0, #1
strb r2, [sp, #0xae + TRY_RECRUIT_OFFSET]
strh r4, [sp, #0xb2 + TRY_RECRUIT_OFFSET]
ldr r2, [r1]
ldrh r4, [r8, #0x44]
add r1, sp, #0x14
strh r4, [r1, #0xf2 + TRY_RECRUIT_OFFSET]
ldrh r4, [r8, #0x46]
strh r4, [r1, #0xf4 + TRY_RECRUIT_OFFSET]
strb r0, [sp, #0x104 + TRY_RECRUIT_OFFSET]
strh r3, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
strh r3, [sp, #0xb6 + TRY_RECRUIT_OFFSET]
ldrsh r1, [r8]
strh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET]
ldrb r1, [r2, #0x748]
strb r1, [sp, #0xaf + TRY_RECRUIT_OFFSET]
ldrb r1, [r2, #0x749]
add r2, sp, #0xac + TRY_RECRUIT_OFFSET
strb r1, [sp, #0xb0 + TRY_RECRUIT_OFFSET]
ldrsh r1, [r8, #6]
strh r1, [sp, #0xba + TRY_RECRUIT_OFFSET]
ldrsh r1, [r8, #6]
strh r1, [sp, #0xbc + TRY_RECRUIT_OFFSET]
ldrh r1, [r8, #0x14]
strh r1, [sp, #0xf0 + TRY_RECRUIT_OFFSET]
ldrh r1, [r8, #0x16]
strh r1, [sp, #0xf2 + TRY_RECRUIT_OFFSET]
ldrh r1, [r8, #0x18]
strh r1, [sp, #0xf4 + TRY_RECRUIT_OFFSET]
ldrh r1, [r8, #0x1a]
strh r1, [sp, #0xf6 + TRY_RECRUIT_OFFSET]
_0230E1D8:
add r4, r8, r0
ldrb r1, [r4, #8]
add r3, r2, r0
add r0, r0, #1
strb r1, [r3, #0x12]
ldrb r1, [r4, #0xa]
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
strb r1, [r3, #0x14]
cmp r0, #2
blt _0230E1D8
ldr r0, [r8, #0x10]
add r2, sp, #0xc8 + TRY_RECRUIT_OFFSET
str r0, [sp, #0xc4 + TRY_RECRUIT_OFFSET]
add r3, r8, #0x22
mov r1, #0x11
_0230E218:
ldrh r0, [r3], #2
subs r1, r1, #1
strh r0, [r2], #2
bne _0230E218
ldrh r0, [r8, #0x1c]
strh r0, [sp, #0xea + TRY_RECRUIT_OFFSET]
ldrh r0, [r8, #0x1e]
strh r0, [sp, #0xec + TRY_RECRUIT_OFFSET]
ldrh r0, [r8, #0x20]
strh r0, [sp, #0xee + TRY_RECRUIT_OFFSET]
ldrsh r0, [r8]
bl GetNameString
mov r1, r0
add r0, sp, #0x100
add r0, r0, #0xa + TRY_RECRUIT_OFFSET
mov r2, #0xa
bl StrncpyName
ldrsh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET]
ldrsh r2, [sp, #0xb2 + TRY_RECRUIT_OFFSET]
add r0, sp, #0xf8 + TRY_RECRUIT_OFFSET
bl EnableAllLearnableIqSkills
add r1, sp, #0x100
add r0, sp, #0x98
add r1, r1, #0xa + TRY_RECRUIT_OFFSET
#ifdef JAPAN
add r4, sp, #0x18
bl StrcpySimple
#else
mov r2, #0xa
add r4, sp, #0x18
bl StrncpySimpleNoPad
#endif
bl ov29_022EACAC
bl GetMessageLogPreprocessorArgs
mov r1, r0
mov r0, #1
str r0, [sp]
mov r2, #0
ldr r0, _0230E564 ; =0x00000C7B
mov r3, r2
bl ov29_0234D7C0
cmp r0, #1
bne _0230E2D4
bl ov29_0234D838
add r6, sp, #0x100
add r6, r6, #0xa + TRY_RECRUIT_OFFSET
_0230E2BC:
mov r0, r6
add r1, sp, #0x98
mov r2, #0
bl DungeonModeSetupAndShowNameKeyboard
cmp r0, #0
beq _0230E2BC
_0230E2D4:
add r1, sp, #0xac + TRY_RECRUIT_OFFSET
mov r0, r4
bl sub_020585B4
mov r1, r4
mov r0, #0
bl SetMessageLogPreprocessorArgsString
mov r0, #1
mov r1, #0
bl SetPreprocessorArgsIdVal
ldr r0, _0230E568 ; =0x00000C7E
bl ov29_0230E658
ldrsh r1, [r8, #2]
ldrsh r2, [r8, #4]
mov r0, sb
bl ov29_02337EC0
ldrsh r2, [r8, #2]
ldrsh r3, [r8, #4]
mov r0, sl
mov r1, sb
bl ov29_0230E5A8
cmp r0, #0
bne _0230E42C
add r0, sp, #0xac + TRY_RECRUIT_OFFSET
mvn r1, #0
bl ov29_0230E5FC
mov r7, r0
b _0230E410
_0230E340:
ldr r0, _0230E56C ; =0x00000C7F
bl ov29_0230E658
mvn r4, #0
_0230E34C:
bl ov29_0234D838
add r1, sp, #0x100
mov r0, sb
add r1, r1, #0xa + TRY_RECRUIT_OFFSET
bl ov29_0234EE10
movs r6, r0
beq _0230E3D4
cmp r6, sb
add r0, sp, #0x58
bne _0230E380
add r1, sp, #0xac + TRY_RECRUIT_OFFSET
bl sub_020585B4
b _0230E38C
_0230E380:
ldr r1, [r6, #0xb4]
ldrsh r1, [r1, #0xc]
bl sub_020584FC
_0230E38C:
mov r0, #0
add r1, sp, #0x58
bl SetMessageLogPreprocessorArgsString
mov r0, #1
mov r1, sl
mov r2, #0
bl SubstitutePlaceholderStringTags
bl GetMessageLogPreprocessorArgs
mov r1, #1
mov r2, #0
str r1, [sp]
mov r1, r0
mov r0, #0xc80 + TRY_RECRUIT_OFFSET_2
mov r3, r2
bl ov29_0234D7C0
mov fp, r0
cmp fp, r4
beq _0230E34C
_0230E3D4:
cmp fp, #2
cmpne r6, #0
beq _0230E410
ldr r0, _0230E56C ; =0x00000C7F
add r0, r0, #2
bl ov29_0230E658
mov r0, r6
bl ov29_022E68BC
ldr r1, _0230E570 ; =0x00000233
mov r0, r6
mov r2, sl
bl HandleFaint
cmp r6, sb
moveq r4, #1
beq _0230E524
_0230E410:
mov r0, sl
mov r1, sb
ldrsh r2, [r8, #2]
ldrsh r3, [r8, #4]
bl ov29_0230E5A8
cmp r0, #0
beq _0230E340
_0230E42C:
mov r6, #0
mov r4, r6
mov r5, #1
b _0230E468
_0230E43C:
mov r0, r6
bl GetActiveTeamMember
ldrb r0, [r0]
tst r0, #1
movne r0, r5
moveq r0, r4
tst r0, #0xff
beq _0230E470
add r0, r6, #1
mov r0, r0, lsl #0x10
mov r6, r0, asr #0x10
_0230E468:
cmp r6, #4
blt _0230E43C
_0230E470:
add r0, sp, #0xac + TRY_RECRUIT_OFFSET
mov r1, r7
strh r6, [sp, #0xb6 + TRY_RECRUIT_OFFSET]
bl ov29_0230E5FC
strh r0, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
ldrsh r1, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
mov r0, r6
bl sub_02056698
ldr r1, _0230E570 ; =0x00000233
mov r0, sb
mov r2, sl
bl HandleFaint
mov r0, r6
bl GetActiveTeamMember
mov r4, r0
add r7, sp, #0xac + TRY_RECRUIT_OFFSET
mov r6, r4
mov r5, #6
_0230E4B8:
ldmia r7!, {r0, r1, r2, r3}
stmia r6!, {r0, r1, r2, r3}
subs r5, r5, #1
bne _0230E4B8
ldmia r7, {r0, r1}
stmia r6, {r0, r1}
bl ov29_022E8104
bl ov29_022E81F8
add r1, sp, #0x14
mov r0, #0
str r1, [sp]
str r0, [sp, #4]
mov r0, #1
str r0, [sp, #8]
str r0, [sp, #0xc]
str r0, [sp, #0x10]
ldrsh r0, [r8]
ldrsh r1, [r8, #2]
ldrsh r2, [r8, #4]
mov r3, r4
bl InitTeamMember
ldrsh r0, [r4, #0xc]
bl SetPokemonJoined
bl ov29_022E8104
bl ov29_022E81F8
ldr r5, [sp, #0x14]
mov r4, #1
_0230E524:
mov r0, #1
bl ov29_0234D8A0
cmp r4, #0
bne _0230E540
ldr r1, _0230E574 ; =0x00000C78
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
_0230E540:
cmp r5, #0
beq _0230E550
mov r0, r5
bl EnsureCanStandCurrentTile
_0230E550:
mov r0, r4
add sp, sp, #0x114 + TRY_RECRUIT_OFFSET
#ifdef JAPAN
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
#else
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
#endif
.align 2, 0
_0230E55C: .word 0x00000C77 + TRY_RECRUIT_OFFSET_2
_0230E560: .word DUNGEON_PTR
_0230E564: .word 0x00000C7B + TRY_RECRUIT_OFFSET_2
_0230E568: .word 0x00000C7E + TRY_RECRUIT_OFFSET_2
_0230E56C: .word 0x00000C7F + TRY_RECRUIT_OFFSET_2
_0230E570: .word 0x00000233
_0230E574: .word 0x00000C78 + TRY_RECRUIT_OFFSET_2
arm_func_end TryRecruit

View File

@ -0,0 +1,9 @@
#ifndef PMDSKY_DUNGEON_RECRUITMENT_H
#define PMDSKY_DUNGEON_RECRUITMENT_H
#include "util.h"
bool8 SpecificRecruitCheck(u32 monster_id);
extern bool8 DebugRecruitingEnabled(u32 monster_id);
#endif //PMDSKY_DUNGEON_RECRUITMENT_H

View File

@ -491,6 +491,8 @@ Overlay OVY_29
Object src/dungeon_damage.o
Object asm/overlay_29_rodata_02352894.o
Object asm/overlay_29_0230BBAC.o
Object src/dungeon_recruitment.o
Object asm/overlay_29_0230DBD0.o
Object src/overlay_29_0230E578.o
Object asm/overlay_29_0230E5A8.o
Object src/dungeon_ai_items.o

48
src/dungeon_recruitment.c Normal file
View File

@ -0,0 +1,48 @@
#include "dungeon_recruitment.h"
#include "dungeon.h"
bool8 SpecificRecruitCheck(u32 monster_id) {
if (DUNGEON_PTR[0]->recruiting_enabled == FALSE) {
return FALSE;
}
// DebugRecruitingEnabled always returns TRUE
if (DebugRecruitingEnabled(monster_id) == FALSE) {
return FALSE;
}
if (monster_id == MONSTER_MEW) {
// The cast is needed to produce assembly code that matches the original.
// Accessing dungeon_objective using the enum directly gives
// different assembly code.
if (*(volatile s8 *)&DUNGEON_PTR[0]->dungeon_objective == OBJECTIVE_RESCUE) {
return FALSE;
}
}
if (monster_id == MONSTER_DEOXYS_ATTACK) {
return FALSE;
}
if (monster_id == MONSTER_DEOXYS_DEFENSE) {
return FALSE;
}
if (monster_id == MONSTER_DEOXYS_SPEED) {
return FALSE;
}
if (monster_id == MONSTER_REGIROCK) {
return FALSE;
}
if (monster_id == MONSTER_REGICE) {
return FALSE;
}
if (monster_id == MONSTER_REGISTEEL) {
return FALSE;
} else {
return TRUE;
}
}