Decomp IsOutlaw

This commit is contained in:
slaw-22 2025-10-03 20:13:57 +00:00
parent 3dcfe927f9
commit 3302e441f3
26 changed files with 1804 additions and 1764 deletions

View File

@ -1,14 +1,4 @@
#pragma once
.public BoostIQ
.public DUNGEON_PTR
.public EntityIsValid__022F0590
.public ov29_022DE5F0
.public ov29_022EA370
.public ov29_0234B1A4
.public ov29_0234BA54
.public ov29_0234D630
.public ov29_0234D8A0
.public ov29_023535A4
.public ov29_0237C9A0
.public sub_0201D198
.public TeamMemberHasItemActive

View File

@ -0,0 +1,12 @@
#pragma once
.public DUNGEON_PTR
.public EntityIsValid__022F0590
.public ov29_022DE5F0
.public ov29_022EA370
.public ov29_0234B1A4
.public ov29_0234BA54
.public ov29_0234D630
.public ov29_0234D8A0
.public ov29_023535A4
.public ov29_0237C9A0
.public sub_0201D198

View File

@ -49,7 +49,7 @@
.public ov29_022EA370
.public ov29_022ECDE4
.public ov29_022EF7C4
.public ov29_022EFAE8
.public IsLoneOutlaw
.public ov29_022F9B8C
.public ov29_022FE048
.public ov29_022FFB90

View File

@ -1,50 +1,11 @@
#pragma once
.public _s32_div_f
.public CopySpawnEntriesMaster
.public DUNGEON_PTR
.public DungeonRngSetPrimary
.public DungeonRngSetSecondary
.public EnableAllLearnableIqSkills
.public EntityIsValid__022F7364
.public EntityIsValid__022FC99C
.public FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
.public GetActiveTeamMember
.public GetBodySize
.public GetDefensiveStatAtLevel
.public GetExp
.public GetExplorerMazeMonster
.public GetIdleAnimationId
.public GetMaxHpAtLevel
.public GetMonsterIdFromSpawnEntry
.public GetMonsterLevelFromSpawnEntry
.public GetMonsterMoves
.public GetOffensiveStatAtLevel
.public GetOutlawSpawnData
.public GetTile
.public GetTileSafe
.public GetTurnLimit
.public GroundToDungeonMoveset
.public InitAnimationControlWithSet__0201C0CC
.public InitMoveCheckId
.public InitTeamMember
.public IQ_SKILLS
.public IsCurrentMissionType
.public IsDestinationFloorWithFixedRoom
.public IsDestinationFloorWithMonster
.public IsFullFloorFixedRoom
.public IsInvalidSpawnTile
.public IsMonster__022F9720
.public IsSecretBazaarNpcBehavior
.public JoinedAtRangeCheck2Veneer
.public LoadWazaP2
.public ov29_022DDA54
.public ov29_022EFAE8
.public ov29_022FB83C
.public ov29_022FCD04
.public ov29_023021F0
.public ov29_02304830
.public ov29_02351E28
.public SetMonsterLevelAndId
.public SetSpriteIdForAnimationControl
.public sub_0200F9B4
.public UnloadCurrentWazaP
.public ov29_022DDA54
.public ov29_02304830

View File

@ -0,0 +1,40 @@
#pragma once
.public CopySpawnEntriesMaster
.public DUNGEON_PTR
.public DungeonRngSetPrimary
.public DungeonRngSetSecondary
.public EnableAllLearnableIqSkills
.public EntityIsValid__022FC99C
.public FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
.public GetActiveTeamMember
.public GetDefensiveStatAtLevel
.public GetExp
.public GetExplorerMazeMonster
.public GetMaxHpAtLevel
.public GetMonsterIdFromSpawnEntry
.public GetMonsterLevelFromSpawnEntry
.public GetMonsterMoves
.public GetOffensiveStatAtLevel
.public GetOutlawSpawnData
.public GetTile
.public GetTurnLimit
.public GroundToDungeonMoveset
.public IQ_SKILLS
.public InitMoveCheckId
.public InitTeamMember
.public IsCurrentMissionType
.public IsDestinationFloorWithFixedRoom
.public IsDestinationFloorWithMonster
.public IsFullFloorFixedRoom
.public IsInvalidSpawnTile
.public IsSecretBazaarNpcBehavior
.public JoinedAtRangeCheck2Veneer
.public LoadWazaP2
.public SetMonsterLevelAndId
.public UnloadCurrentWazaP
.public _s32_div_f
.public ov29_022FB83C
.public ov29_022FCD04
.public ov29_023021F0
.public ov29_02351E28
.public sub_0200F9B4

View File

@ -75,7 +75,7 @@
.public ov29_022E2018
.public ov29_022E2DFC
.public ov29_022E6644
.public ov29_022EFAE8
.public IsLoneOutlaw
.public ov29_022F9EA0
.public ov29_022FA1D8
.public ov29_022FB83C

View File

@ -10,4 +10,4 @@
.public IqSkillFlagTest
.public MIN_IQ_EXCLUSIVE_MOVE_USER
.public MIN_IQ_ITEM_MASTER
.public ov29_022FBDE0
.public IsLoneOutlawVeneer

View File

@ -93,7 +93,7 @@
.public ov29_022F9AF4
.public ov29_022FB98C
.public ov29_022FBD24
.public ov29_022FBDE0
.public IsLoneOutlawVeneer
.public ov29_02303E0C
.public ov29_02304830
.public ov29_02304A48

View File

@ -74,7 +74,7 @@
.public ov29_022E6784
.public ov29_022E8104
.public ov29_022E81F8
.public ov29_022FBDE0
.public IsLoneOutlawVeneer
.public ov29_022FBDF0
.public ov29_022FD7A0
.public ov29_0230D874

View File

@ -51,7 +51,7 @@
.public ov29_022E3580
.public ov29_022E7F7C
.public ov29_022EA408
.public ov29_022EFAE8
.public IsLoneOutlaw
.public ov29_0234217C
.public ov29_02342594
.public ov29_023427E4

View File

@ -49,777 +49,3 @@ _022EFAE4: .word 0x0002862C
_022EFAE4: .word 0x000286D0
#endif
arm_func_end TryActivateIqBooster
arm_func_start ov29_022EFAE8
ov29_022EFAE8: ; 0x022EFAE8
add r0, r0, #0xff
and r0, r0, #0xff
cmp r0, #3
movls r0, #1
movhi r0, #0
and r0, r0, #0xff
bx lr
arm_func_end ov29_022EFAE8
arm_func_start IsSecretBazaarNpcBehavior
IsSecretBazaarNpcBehavior: ; 0x022EFB04
add r0, r0, #0xf0
and r0, r0, #0xff
cmp r0, #4
movls r0, #1
movhi r0, #0
and r0, r0, #0xff
bx lr
arm_func_end IsSecretBazaarNpcBehavior
arm_func_start ov29_022EFB20
ov29_022EFB20: ; 0x022EFB20
stmdb sp!, {r3, lr}
cmp r0, #0
beq _022EFB48
mov r0, #0xa
bl ov29_0234BA54
mov r0, #0
bl ov29_0234B1A4
mov r0, #0xa
mov r1, #0x62
bl ov29_022EA370
_022EFB48:
bl ov29_0234D630
ldr r1, _022EFB7C ; =ov29_023535A4
mvn r2, #1
mov r0, #1
strb r2, [r1]
bl ov29_022DE5F0
ldr r1, _022EFB80 ; =ov29_0237C9A0
strh r0, [r1, #2]
mov r0, #0
bl ov29_022DE5F0
ldr r1, _022EFB80 ; =ov29_0237C9A0
strh r0, [r1]
ldmia sp!, {r3, pc}
.align 2, 0
_022EFB7C: .word ov29_023535A4
_022EFB80: .word ov29_0237C9A0
arm_func_end ov29_022EFB20
arm_func_start ov29_022EFB84
ov29_022EFB84: ; 0x022EFB84
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, #0
bl ov29_0234D8A0
cmp r4, #0
ldmeqia sp!, {r4, pc}
mov r0, #0xa
mov r1, #0x62
bl ov29_022EA370
ldmia sp!, {r4, pc}
arm_func_end ov29_022EFB84
arm_func_start ov29_022EFBAC
ov29_022EFBAC: ; 0x022EFBAC
ldr r1, _022F04E4 ; =0x000001FE
cmp r0, r1
bgt _022F0314
bge _022F04C4
cmp r0, #0x1d4
bgt _022F024C
bge _022F04C4
sub r2, r1, #0x53
cmp r0, r2
bgt _022F01E4
sub r1, r1, #0xe9
subs r1, r0, r1
addpl pc, pc, r1, lsl #2
b _022EFE40
_022EFBE4: ; jump table
b _022F04C4 ; case 0
b _022F04C4 ; case 1
b _022F04C4 ; case 2
b _022F04CC ; case 3
b _022F04DC ; case 4
b _022F04DC ; case 5
b _022F04DC ; case 6
b _022F04DC ; case 7
b _022F04DC ; case 8
b _022F04DC ; case 9
b _022F04DC ; case 10
b _022F04DC ; case 11
b _022F04CC ; case 12
b _022F04CC ; case 13
b _022F04DC ; case 14
b _022F04DC ; case 15
b _022F04DC ; case 16
b _022F04DC ; case 17
b _022F04C4 ; case 18
b _022F04DC ; case 19
b _022F04C4 ; case 20
b _022F04DC ; case 21
b _022F04DC ; case 22
b _022F04DC ; case 23
b _022F04DC ; case 24
b _022F04DC ; case 25
b _022F04DC ; case 26
b _022F04DC ; case 27
b _022F04DC ; case 28
b _022F04C4 ; case 29
b _022F04C4 ; case 30
b _022F04DC ; case 31
b _022F04DC ; case 32
b _022F04DC ; case 33
b _022F04DC ; case 34
b _022F04C4 ; case 35
b _022F04DC ; case 36
b _022F04DC ; case 37
b _022F04DC ; case 38
b _022F04DC ; case 39
b _022F04DC ; case 40
b _022F04DC ; case 41
b _022F04C4 ; case 42
b _022F04C4 ; case 43
b _022F04DC ; case 44
b _022F04DC ; case 45
b _022F04DC ; case 46
b _022F04DC ; case 47
b _022F04DC ; case 48
b _022F04DC ; case 49
b _022F04DC ; case 50
b _022F04DC ; case 51
b _022F04CC ; case 52
b _022F04DC ; case 53
b _022F04DC ; case 54
b _022F04DC ; case 55
b _022F04DC ; case 56
b _022F04DC ; case 57
b _022F04C4 ; case 58
b _022F04DC ; case 59
b _022F04DC ; case 60
b _022F04DC ; case 61
b _022F04DC ; case 62
b _022F04DC ; case 63
b _022F04CC ; case 64
b _022F04CC ; case 65
b _022F04DC ; case 66
b _022F04DC ; case 67
b _022F04DC ; case 68
b _022F04C4 ; case 69
b _022F04C4 ; case 70
b _022F04C4 ; case 71
b _022F04C4 ; case 72
b _022F04DC ; case 73
b _022F04DC ; case 74
b _022F04DC ; case 75
b _022F04C4 ; case 76
b _022F04DC ; case 77
b _022F04DC ; case 78
b _022F04DC ; case 79
b _022F04CC ; case 80
b _022F04C4 ; case 81
b _022F04DC ; case 82
b _022F04DC ; case 83
b _022F04C4 ; case 84
b _022F04CC ; case 85
b _022F04CC ; case 86
b _022F04DC ; case 87
b _022F04C4 ; case 88
b _022F04C4 ; case 89
b _022F04C4 ; case 90
b _022F04C4 ; case 91
b _022F04DC ; case 92
b _022F04DC ; case 93
b _022F04C4 ; case 94
b _022F04C4 ; case 95
b _022F04DC ; case 96
b _022F04DC ; case 97
b _022F04DC ; case 98
b _022F04DC ; case 99
b _022F04C4 ; case 100
b _022F04DC ; case 101
b _022F04C4 ; case 102
b _022F04C4 ; case 103
b _022F04C4 ; case 104
b _022F04C4 ; case 105
b _022F04DC ; case 106
b _022F04DC ; case 107
b _022F04C4 ; case 108
b _022F04DC ; case 109
b _022F04C4 ; case 110
b _022F04DC ; case 111
b _022F04DC ; case 112
b _022F04DC ; case 113
b _022F04DC ; case 114
b _022F04DC ; case 115
b _022F04DC ; case 116
b _022F04C4 ; case 117
b _022F04CC ; case 118
b _022F04DC ; case 119
b _022F04DC ; case 120
b _022F04CC ; case 121
b _022F04C4 ; case 122
b _022F04C4 ; case 123
b _022F04C4 ; case 124
b _022F04C4 ; case 125
b _022F04DC ; case 126
b _022F04DC ; case 127
b _022F04CC ; case 128
b _022F04C4 ; case 129
b _022F04C4 ; case 130
b _022F04DC ; case 131
b _022F04DC ; case 132
b _022F04C4 ; case 133
b _022F04DC ; case 134
b _022F04C4 ; case 135
b _022F04C4 ; case 136
b _022F04C4 ; case 137
b _022F04DC ; case 138
b _022F04C4 ; case 139
b _022F04C4 ; case 140
b _022F04C4 ; case 141
b _022F04C4 ; case 142
b _022F04C4 ; case 143
b _022F04C4 ; case 144
b _022F04DC ; case 145
b _022F04DC ; case 146
b _022F04DC ; case 147
b _022F04CC ; case 148
b _022F04CC ; case 149
b _022F04CC ; case 150
_022EFE40:
cmp r0, #0xee
bgt _022F0194
subs r1, r0, #0x29
addpl pc, pc, r1, lsl #2
b _022F016C
_022EFE54: ; jump table
b _022F04C4 ; case 0
b _022F04C4 ; case 1
b _022F04DC ; case 2
b _022F04DC ; case 3
b _022F04DC ; case 4
b _022F04DC ; case 5
b _022F04DC ; case 6
b _022F04DC ; case 7
b _022F04C4 ; case 8
b _022F04CC ; case 9
b _022F04CC ; case 10
b _022F04DC ; case 11
b _022F04CC ; case 12
b _022F04DC ; case 13
b _022F04DC ; case 14
b _022F04DC ; case 15
b _022F04DC ; case 16
b _022F04CC ; case 17
b _022F04CC ; case 18
b _022F04DC ; case 19
b _022F04DC ; case 20
b _022F04DC ; case 21
b _022F04DC ; case 22
b _022F04DC ; case 23
b _022F04D4 ; case 24
b _022F04DC ; case 25
b _022F04DC ; case 26
b _022F04DC ; case 27
b _022F04DC ; case 28
b _022F04DC ; case 29
b _022F04DC ; case 30
b _022F04C4 ; case 31
b _022F04C4 ; case 32
b _022F04C4 ; case 33
b _022F04DC ; case 34
b _022F04DC ; case 35
b _022F04DC ; case 36
b _022F04DC ; case 37
b _022F04DC ; case 38
b _022F04DC ; case 39
b _022F04C4 ; case 40
b _022F04C4 ; case 41
b _022F04DC ; case 42
b _022F04DC ; case 43
b _022F04DC ; case 44
b _022F04DC ; case 45
b _022F04DC ; case 46
b _022F04DC ; case 47
b _022F04DC ; case 48
b _022F04DC ; case 49
b _022F04C4 ; case 50
b _022F04C4 ; case 51
b _022F04C4 ; case 52
b _022F04DC ; case 53
b _022F04DC ; case 54
b _022F04DC ; case 55
b _022F04DC ; case 56
b _022F04CC ; case 57
b _022F04CC ; case 58
b _022F04DC ; case 59
b _022F04DC ; case 60
b _022F04DC ; case 61
b _022F04DC ; case 62
b _022F04DC ; case 63
b _022F04DC ; case 64
b _022F04DC ; case 65
b _022F04DC ; case 66
b _022F04DC ; case 67
b _022F04C4 ; case 68
b _022F04C4 ; case 69
b _022F04DC ; case 70
b _022F04DC ; case 71
b _022F04DC ; case 72
b _022F04DC ; case 73
b _022F04DC ; case 74
b _022F04C4 ; case 75
b _022F04C4 ; case 76
b _022F04C4 ; case 77
b _022F04C4 ; case 78
b _022F04DC ; case 79
b _022F04DC ; case 80
b _022F04DC ; case 81
b _022F04DC ; case 82
b _022F04DC ; case 83
b _022F04DC ; case 84
b _022F04DC ; case 85
b _022F04DC ; case 86
b _022F04DC ; case 87
b _022F04C4 ; case 88
b _022F04C4 ; case 89
b _022F04DC ; case 90
b _022F04CC ; case 91
b _022F04C4 ; case 92
b _022F04CC ; case 93
b _022F04CC ; case 94
b _022F04DC ; case 95
b _022F04C4 ; case 96
b _022F04DC ; case 97
b _022F04DC ; case 98
b _022F04DC ; case 99
b _022F04DC ; case 100
b _022F04C4 ; case 101
b _022F04DC ; case 102
b _022F04C4 ; case 103
b _022F04C4 ; case 104
b _022F04C4 ; case 105
b _022F04DC ; case 106
b _022F04DC ; case 107
b _022F04DC ; case 108
b _022F04C4 ; case 109
b _022F04C4 ; case 110
b _022F04DC ; case 111
b _022F04DC ; case 112
b _022F04DC ; case 113
b _022F04DC ; case 114
b _022F04DC ; case 115
b _022F04DC ; case 116
b _022F04DC ; case 117
b _022F04DC ; case 118
b _022F04DC ; case 119
b _022F04CC ; case 120
b _022F04CC ; case 121
b _022F04CC ; case 122
b _022F04CC ; case 123
b _022F04C4 ; case 124
b _022F04C4 ; case 125
b _022F04DC ; case 126
b _022F04DC ; case 127
b _022F04C4 ; case 128
b _022F04C4 ; case 129
b _022F04C4 ; case 130
b _022F04DC ; case 131
b _022F04DC ; case 132
b _022F04DC ; case 133
b _022F04DC ; case 134
b _022F04DC ; case 135
b _022F04DC ; case 136
b _022F04DC ; case 137
b _022F04DC ; case 138
b _022F04DC ; case 139
b _022F04DC ; case 140
b _022F04DC ; case 141
b _022F04DC ; case 142
b _022F04DC ; case 143
b _022F04DC ; case 144
b _022F04DC ; case 145
b _022F04C4 ; case 146
b _022F04C4 ; case 147
b _022F04C4 ; case 148
b _022F04C4 ; case 149
b _022F04C4 ; case 150
b _022F04DC ; case 151
b _022F04C4 ; case 152
b _022F04DC ; case 153
b _022F04DC ; case 154
b _022F04DC ; case 155
b _022F04DC ; case 156
b _022F04CC ; case 157
b _022F04DC ; case 158
b _022F04C4 ; case 159
b _022F04C4 ; case 160
b _022F04C4 ; case 161
b _022F04C4 ; case 162
b _022F04C4 ; case 163
b _022F04C4 ; case 164
b _022F04C4 ; case 165
b _022F04C4 ; case 166
b _022F04C4 ; case 167
b _022F04C4 ; case 168
b _022F04C4 ; case 169
b _022F04C4 ; case 170
b _022F04C4 ; case 171
b _022F04C4 ; case 172
b _022F04C4 ; case 173
b _022F04C4 ; case 174
b _022F04C4 ; case 175
b _022F04C4 ; case 176
b _022F04C4 ; case 177
b _022F04C4 ; case 178
b _022F04C4 ; case 179
b _022F04C4 ; case 180
b _022F04C4 ; case 181
b _022F04C4 ; case 182
b _022F04C4 ; case 183
b _022F04C4 ; case 184
b _022F04C4 ; case 185
b _022F04C4 ; case 186
b _022F04C4 ; case 187
b _022F04DC ; case 188
b _022F04DC ; case 189
b _022F04DC ; case 190
b _022F04C4 ; case 191
b _022F04DC ; case 192
b _022F04C4 ; case 193
b _022F04DC ; case 194
b _022F04DC ; case 195
b _022F04DC ; case 196
b _022F04C4 ; case 197
_022F016C:
cmp r0, #0xf
bgt _022F0188
cmp r0, #0xc
blt _022F04DC
cmpne r0, #0xf
beq _022F04C4
b _022F04DC
_022F0188:
cmp r0, #0x16
beq _022F04C4
b _022F04DC
_022F0194:
cmp r0, #0x104
bgt _022F01D4
subs r1, r0, #0xfa
addpl pc, pc, r1, lsl #2
b _022F04DC
_022F01A8: ; jump table
b _022F04C4 ; case 0
b _022F04DC ; case 1
b _022F04DC ; case 2
b _022F04C4 ; case 3
b _022F04CC ; case 4
b _022F04DC ; case 5
b _022F04DC ; case 6
b _022F04C4 ; case 7
b _022F04DC ; case 8
b _022F04DC ; case 9
b _022F04C4 ; case 10
_022F01D4:
ldr r1, _022F04E8 ; =0x00000112
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F01E4:
sub r2, r1, #0x37
cmp r0, r2
bgt _022F0220
bge _022F04C4
sub r2, r1, #0x39
cmp r0, r2
bgt _022F0210
sub r1, r1, #0x39
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0210:
sub r1, r1, #0x38
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0220:
sub r2, r1, #0x2c
cmp r0, r2
bgt _022F023C
sub r1, r1, #0x2c
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F023C:
sub r1, r1, #0x2b
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F024C:
sub r2, r1, #0x14
cmp r0, r2
bgt _022F02BC
bge _022F04CC
sub r2, r1, #0x20
cmp r0, r2
bgt _022F0294
bge _022F04C4
sub r2, r1, #0x27
cmp r0, r2
bgt _022F0288
sub r1, r1, #0x27
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0288:
cmp r0, #0x1d8
beq _022F04CC
b _022F04DC
_022F0294:
sub r2, r1, #0x1f
cmp r0, r2
bgt _022F02B0
sub r1, r1, #0x1f
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F02B0:
cmp r0, #0x1e4
beq _022F04C4
b _022F04DC
_022F02BC:
sub r2, r1, #0xb
cmp r0, r2
bgt _022F02F8
bge _022F04C4
sub r2, r1, #0xd
cmp r0, r2
bgt _022F02E8
sub r1, r1, #0xd
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F02E8:
sub r1, r1, #0xc
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F02F8:
cmp r0, #0x1f4
bgt _022F0308
beq _022F04C4
b _022F04DC
_022F0308:
cmp r0, #0x1f8
beq _022F04C4
b _022F04DC
_022F0314:
add r2, r1, #0x9b
cmp r0, r2
bgt _022F03FC
bge _022F04D4
add r2, r1, #0x10
cmp r0, r2
bgt _022F0398
bge _022F04CC
cmp r0, #0x204
bgt _022F036C
bge _022F04C4
add r2, r1, #1
cmp r0, r2
bgt _022F035C
add r1, r1, #1
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F035C:
add r1, r1, #4
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F036C:
add r2, r1, #0xb
cmp r0, r2
bgt _022F0388
add r1, r1, #0xb
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0388:
add r1, r1, #0xf
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F0398:
add r2, r1, #0x17
cmp r0, r2
bgt _022F03D0
bge _022F04C4
add r2, r1, #0x15
cmp r0, r2
bgt _022F03C4
add r1, r1, #0x15
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F03C4:
cmp r0, #0x214
beq _022F04C4
b _022F04DC
_022F03D0:
add r2, r1, #0x37
cmp r0, r2
bgt _022F03EC
add r1, r1, #0x37
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F03EC:
add r1, r1, #0x38
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F03FC:
ldr r2, _022F04EC ; =0x0000037F
cmp r0, r2
bgt _022F0464
bge _022F04C4
sub r1, r2, #0x82
cmp r0, r1
bgt _022F0440
bge _022F04C4
sub r1, r2, #0xa6
cmp r0, r1
bgt _022F0430
beq _022F04C4
b _022F04DC
_022F0430:
sub r1, r2, #0xa5
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0440:
sub r1, r2, #0x81
cmp r0, r1
bgt _022F0454
beq _022F04C4
b _022F04DC
_022F0454:
sub r1, r2, #0x61
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F0464:
add r1, r2, #0x9f
cmp r0, r1
bgt _022F0498
bge _022F04C4
add r1, r2, #0x5a
cmp r0, r1
bgt _022F0488
beq _022F04C4
b _022F04DC
_022F0488:
add r1, r2, #0x6a
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0498:
add r1, r2, #0xcb
cmp r0, r1
bgt _022F04B8
bge _022F04C4
add r1, r2, #0xab
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F04B8:
add r1, r2, #0xcc
cmp r0, r1
bne _022F04DC
_022F04C4:
mov r0, #0
bx lr
_022F04CC:
mov r0, #1
bx lr
_022F04D4:
mov r0, #0
bx lr
_022F04DC:
mov r0, #1
bx lr
.align 2, 0
_022F04E4: .word 0x000001FE
_022F04E8: .word 0x00000112
_022F04EC: .word 0x0000037F
arm_func_end ov29_022EFBAC
arm_func_start ov29_022F04F0
ov29_022F04F0: ; 0x022F04F0
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldr r4, [r5, #0xb4]
ldrsh r0, [r4, #4]
bl ov29_022EFBAC
cmp r0, #0
movne r0, #1
strneb r0, [r5, #0xb3]
#ifdef JAPAN
strneb r0, [r4, #0x16d]
#else
strneb r0, [r4, #0x171]
#endif
ldmia sp!, {r3, r4, r5, pc}
arm_func_end ov29_022F04F0
arm_func_start ov29_022F0518
ov29_022F0518: ; 0x022F0518
ldr r2, [r0, #0xb4]
mov r1, #0
ldr ip, _022F0530 ; =sub_0201D198
add r0, r0, #0x2c
#ifdef JAPAN
strb r1, [r2, #0x16d]
#else
strb r1, [r2, #0x171]
#endif
bx ip
.align 2, 0
_022F0530: .word sub_0201D198
arm_func_end ov29_022F0518
arm_func_start ov29_022F0534
ov29_022F0534: ; 0x022F0534
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r4, _022F058C ; =DUNGEON_PTR
mov r7, r0
mov r5, #0
_022F0544:
ldr r0, [r4]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r6, [r0, #0xad4]
#else
ldr r6, [r0, #0xb78]
#endif
mov r0, r6
bl EntityIsValid__022F0590
cmp r0, #0
beq _022F057C
cmp r7, #0
mov r0, r6
bne _022F0578
bl ov29_022F0518
b _022F057C
_022F0578:
bl ov29_022F04F0
_022F057C:
add r5, r5, #1
cmp r5, #0x14
blt _022F0544
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_022F058C: .word DUNGEON_PTR
arm_func_end ov29_022F0534

767
asm/overlay_29_022EFB04.s Normal file
View File

@ -0,0 +1,767 @@
.include "asm/macros.inc"
.include "overlay_29_022EFB04.inc"
.text
arm_func_start IsSecretBazaarNpcBehavior
IsSecretBazaarNpcBehavior: ; 0x022EFB04
add r0, r0, #0xf0
and r0, r0, #0xff
cmp r0, #4
movls r0, #1
movhi r0, #0
and r0, r0, #0xff
bx lr
arm_func_end IsSecretBazaarNpcBehavior
arm_func_start ov29_022EFB20
ov29_022EFB20: ; 0x022EFB20
stmdb sp!, {r3, lr}
cmp r0, #0
beq _022EFB48
mov r0, #0xa
bl ov29_0234BA54
mov r0, #0
bl ov29_0234B1A4
mov r0, #0xa
mov r1, #0x62
bl ov29_022EA370
_022EFB48:
bl ov29_0234D630
ldr r1, _022EFB7C ; =ov29_023535A4
mvn r2, #1
mov r0, #1
strb r2, [r1]
bl ov29_022DE5F0
ldr r1, _022EFB80 ; =ov29_0237C9A0
strh r0, [r1, #2]
mov r0, #0
bl ov29_022DE5F0
ldr r1, _022EFB80 ; =ov29_0237C9A0
strh r0, [r1]
ldmia sp!, {r3, pc}
.align 2, 0
_022EFB7C: .word ov29_023535A4
_022EFB80: .word ov29_0237C9A0
arm_func_end ov29_022EFB20
arm_func_start ov29_022EFB84
ov29_022EFB84: ; 0x022EFB84
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, #0
bl ov29_0234D8A0
cmp r4, #0
ldmeqia sp!, {r4, pc}
mov r0, #0xa
mov r1, #0x62
bl ov29_022EA370
ldmia sp!, {r4, pc}
arm_func_end ov29_022EFB84
arm_func_start ov29_022EFBAC
ov29_022EFBAC: ; 0x022EFBAC
ldr r1, _022F04E4 ; =0x000001FE
cmp r0, r1
bgt _022F0314
bge _022F04C4
cmp r0, #0x1d4
bgt _022F024C
bge _022F04C4
sub r2, r1, #0x53
cmp r0, r2
bgt _022F01E4
sub r1, r1, #0xe9
subs r1, r0, r1
addpl pc, pc, r1, lsl #2
b _022EFE40
_022EFBE4: ; jump table
b _022F04C4 ; case 0
b _022F04C4 ; case 1
b _022F04C4 ; case 2
b _022F04CC ; case 3
b _022F04DC ; case 4
b _022F04DC ; case 5
b _022F04DC ; case 6
b _022F04DC ; case 7
b _022F04DC ; case 8
b _022F04DC ; case 9
b _022F04DC ; case 10
b _022F04DC ; case 11
b _022F04CC ; case 12
b _022F04CC ; case 13
b _022F04DC ; case 14
b _022F04DC ; case 15
b _022F04DC ; case 16
b _022F04DC ; case 17
b _022F04C4 ; case 18
b _022F04DC ; case 19
b _022F04C4 ; case 20
b _022F04DC ; case 21
b _022F04DC ; case 22
b _022F04DC ; case 23
b _022F04DC ; case 24
b _022F04DC ; case 25
b _022F04DC ; case 26
b _022F04DC ; case 27
b _022F04DC ; case 28
b _022F04C4 ; case 29
b _022F04C4 ; case 30
b _022F04DC ; case 31
b _022F04DC ; case 32
b _022F04DC ; case 33
b _022F04DC ; case 34
b _022F04C4 ; case 35
b _022F04DC ; case 36
b _022F04DC ; case 37
b _022F04DC ; case 38
b _022F04DC ; case 39
b _022F04DC ; case 40
b _022F04DC ; case 41
b _022F04C4 ; case 42
b _022F04C4 ; case 43
b _022F04DC ; case 44
b _022F04DC ; case 45
b _022F04DC ; case 46
b _022F04DC ; case 47
b _022F04DC ; case 48
b _022F04DC ; case 49
b _022F04DC ; case 50
b _022F04DC ; case 51
b _022F04CC ; case 52
b _022F04DC ; case 53
b _022F04DC ; case 54
b _022F04DC ; case 55
b _022F04DC ; case 56
b _022F04DC ; case 57
b _022F04C4 ; case 58
b _022F04DC ; case 59
b _022F04DC ; case 60
b _022F04DC ; case 61
b _022F04DC ; case 62
b _022F04DC ; case 63
b _022F04CC ; case 64
b _022F04CC ; case 65
b _022F04DC ; case 66
b _022F04DC ; case 67
b _022F04DC ; case 68
b _022F04C4 ; case 69
b _022F04C4 ; case 70
b _022F04C4 ; case 71
b _022F04C4 ; case 72
b _022F04DC ; case 73
b _022F04DC ; case 74
b _022F04DC ; case 75
b _022F04C4 ; case 76
b _022F04DC ; case 77
b _022F04DC ; case 78
b _022F04DC ; case 79
b _022F04CC ; case 80
b _022F04C4 ; case 81
b _022F04DC ; case 82
b _022F04DC ; case 83
b _022F04C4 ; case 84
b _022F04CC ; case 85
b _022F04CC ; case 86
b _022F04DC ; case 87
b _022F04C4 ; case 88
b _022F04C4 ; case 89
b _022F04C4 ; case 90
b _022F04C4 ; case 91
b _022F04DC ; case 92
b _022F04DC ; case 93
b _022F04C4 ; case 94
b _022F04C4 ; case 95
b _022F04DC ; case 96
b _022F04DC ; case 97
b _022F04DC ; case 98
b _022F04DC ; case 99
b _022F04C4 ; case 100
b _022F04DC ; case 101
b _022F04C4 ; case 102
b _022F04C4 ; case 103
b _022F04C4 ; case 104
b _022F04C4 ; case 105
b _022F04DC ; case 106
b _022F04DC ; case 107
b _022F04C4 ; case 108
b _022F04DC ; case 109
b _022F04C4 ; case 110
b _022F04DC ; case 111
b _022F04DC ; case 112
b _022F04DC ; case 113
b _022F04DC ; case 114
b _022F04DC ; case 115
b _022F04DC ; case 116
b _022F04C4 ; case 117
b _022F04CC ; case 118
b _022F04DC ; case 119
b _022F04DC ; case 120
b _022F04CC ; case 121
b _022F04C4 ; case 122
b _022F04C4 ; case 123
b _022F04C4 ; case 124
b _022F04C4 ; case 125
b _022F04DC ; case 126
b _022F04DC ; case 127
b _022F04CC ; case 128
b _022F04C4 ; case 129
b _022F04C4 ; case 130
b _022F04DC ; case 131
b _022F04DC ; case 132
b _022F04C4 ; case 133
b _022F04DC ; case 134
b _022F04C4 ; case 135
b _022F04C4 ; case 136
b _022F04C4 ; case 137
b _022F04DC ; case 138
b _022F04C4 ; case 139
b _022F04C4 ; case 140
b _022F04C4 ; case 141
b _022F04C4 ; case 142
b _022F04C4 ; case 143
b _022F04C4 ; case 144
b _022F04DC ; case 145
b _022F04DC ; case 146
b _022F04DC ; case 147
b _022F04CC ; case 148
b _022F04CC ; case 149
b _022F04CC ; case 150
_022EFE40:
cmp r0, #0xee
bgt _022F0194
subs r1, r0, #0x29
addpl pc, pc, r1, lsl #2
b _022F016C
_022EFE54: ; jump table
b _022F04C4 ; case 0
b _022F04C4 ; case 1
b _022F04DC ; case 2
b _022F04DC ; case 3
b _022F04DC ; case 4
b _022F04DC ; case 5
b _022F04DC ; case 6
b _022F04DC ; case 7
b _022F04C4 ; case 8
b _022F04CC ; case 9
b _022F04CC ; case 10
b _022F04DC ; case 11
b _022F04CC ; case 12
b _022F04DC ; case 13
b _022F04DC ; case 14
b _022F04DC ; case 15
b _022F04DC ; case 16
b _022F04CC ; case 17
b _022F04CC ; case 18
b _022F04DC ; case 19
b _022F04DC ; case 20
b _022F04DC ; case 21
b _022F04DC ; case 22
b _022F04DC ; case 23
b _022F04D4 ; case 24
b _022F04DC ; case 25
b _022F04DC ; case 26
b _022F04DC ; case 27
b _022F04DC ; case 28
b _022F04DC ; case 29
b _022F04DC ; case 30
b _022F04C4 ; case 31
b _022F04C4 ; case 32
b _022F04C4 ; case 33
b _022F04DC ; case 34
b _022F04DC ; case 35
b _022F04DC ; case 36
b _022F04DC ; case 37
b _022F04DC ; case 38
b _022F04DC ; case 39
b _022F04C4 ; case 40
b _022F04C4 ; case 41
b _022F04DC ; case 42
b _022F04DC ; case 43
b _022F04DC ; case 44
b _022F04DC ; case 45
b _022F04DC ; case 46
b _022F04DC ; case 47
b _022F04DC ; case 48
b _022F04DC ; case 49
b _022F04C4 ; case 50
b _022F04C4 ; case 51
b _022F04C4 ; case 52
b _022F04DC ; case 53
b _022F04DC ; case 54
b _022F04DC ; case 55
b _022F04DC ; case 56
b _022F04CC ; case 57
b _022F04CC ; case 58
b _022F04DC ; case 59
b _022F04DC ; case 60
b _022F04DC ; case 61
b _022F04DC ; case 62
b _022F04DC ; case 63
b _022F04DC ; case 64
b _022F04DC ; case 65
b _022F04DC ; case 66
b _022F04DC ; case 67
b _022F04C4 ; case 68
b _022F04C4 ; case 69
b _022F04DC ; case 70
b _022F04DC ; case 71
b _022F04DC ; case 72
b _022F04DC ; case 73
b _022F04DC ; case 74
b _022F04C4 ; case 75
b _022F04C4 ; case 76
b _022F04C4 ; case 77
b _022F04C4 ; case 78
b _022F04DC ; case 79
b _022F04DC ; case 80
b _022F04DC ; case 81
b _022F04DC ; case 82
b _022F04DC ; case 83
b _022F04DC ; case 84
b _022F04DC ; case 85
b _022F04DC ; case 86
b _022F04DC ; case 87
b _022F04C4 ; case 88
b _022F04C4 ; case 89
b _022F04DC ; case 90
b _022F04CC ; case 91
b _022F04C4 ; case 92
b _022F04CC ; case 93
b _022F04CC ; case 94
b _022F04DC ; case 95
b _022F04C4 ; case 96
b _022F04DC ; case 97
b _022F04DC ; case 98
b _022F04DC ; case 99
b _022F04DC ; case 100
b _022F04C4 ; case 101
b _022F04DC ; case 102
b _022F04C4 ; case 103
b _022F04C4 ; case 104
b _022F04C4 ; case 105
b _022F04DC ; case 106
b _022F04DC ; case 107
b _022F04DC ; case 108
b _022F04C4 ; case 109
b _022F04C4 ; case 110
b _022F04DC ; case 111
b _022F04DC ; case 112
b _022F04DC ; case 113
b _022F04DC ; case 114
b _022F04DC ; case 115
b _022F04DC ; case 116
b _022F04DC ; case 117
b _022F04DC ; case 118
b _022F04DC ; case 119
b _022F04CC ; case 120
b _022F04CC ; case 121
b _022F04CC ; case 122
b _022F04CC ; case 123
b _022F04C4 ; case 124
b _022F04C4 ; case 125
b _022F04DC ; case 126
b _022F04DC ; case 127
b _022F04C4 ; case 128
b _022F04C4 ; case 129
b _022F04C4 ; case 130
b _022F04DC ; case 131
b _022F04DC ; case 132
b _022F04DC ; case 133
b _022F04DC ; case 134
b _022F04DC ; case 135
b _022F04DC ; case 136
b _022F04DC ; case 137
b _022F04DC ; case 138
b _022F04DC ; case 139
b _022F04DC ; case 140
b _022F04DC ; case 141
b _022F04DC ; case 142
b _022F04DC ; case 143
b _022F04DC ; case 144
b _022F04DC ; case 145
b _022F04C4 ; case 146
b _022F04C4 ; case 147
b _022F04C4 ; case 148
b _022F04C4 ; case 149
b _022F04C4 ; case 150
b _022F04DC ; case 151
b _022F04C4 ; case 152
b _022F04DC ; case 153
b _022F04DC ; case 154
b _022F04DC ; case 155
b _022F04DC ; case 156
b _022F04CC ; case 157
b _022F04DC ; case 158
b _022F04C4 ; case 159
b _022F04C4 ; case 160
b _022F04C4 ; case 161
b _022F04C4 ; case 162
b _022F04C4 ; case 163
b _022F04C4 ; case 164
b _022F04C4 ; case 165
b _022F04C4 ; case 166
b _022F04C4 ; case 167
b _022F04C4 ; case 168
b _022F04C4 ; case 169
b _022F04C4 ; case 170
b _022F04C4 ; case 171
b _022F04C4 ; case 172
b _022F04C4 ; case 173
b _022F04C4 ; case 174
b _022F04C4 ; case 175
b _022F04C4 ; case 176
b _022F04C4 ; case 177
b _022F04C4 ; case 178
b _022F04C4 ; case 179
b _022F04C4 ; case 180
b _022F04C4 ; case 181
b _022F04C4 ; case 182
b _022F04C4 ; case 183
b _022F04C4 ; case 184
b _022F04C4 ; case 185
b _022F04C4 ; case 186
b _022F04C4 ; case 187
b _022F04DC ; case 188
b _022F04DC ; case 189
b _022F04DC ; case 190
b _022F04C4 ; case 191
b _022F04DC ; case 192
b _022F04C4 ; case 193
b _022F04DC ; case 194
b _022F04DC ; case 195
b _022F04DC ; case 196
b _022F04C4 ; case 197
_022F016C:
cmp r0, #0xf
bgt _022F0188
cmp r0, #0xc
blt _022F04DC
cmpne r0, #0xf
beq _022F04C4
b _022F04DC
_022F0188:
cmp r0, #0x16
beq _022F04C4
b _022F04DC
_022F0194:
cmp r0, #0x104
bgt _022F01D4
subs r1, r0, #0xfa
addpl pc, pc, r1, lsl #2
b _022F04DC
_022F01A8: ; jump table
b _022F04C4 ; case 0
b _022F04DC ; case 1
b _022F04DC ; case 2
b _022F04C4 ; case 3
b _022F04CC ; case 4
b _022F04DC ; case 5
b _022F04DC ; case 6
b _022F04C4 ; case 7
b _022F04DC ; case 8
b _022F04DC ; case 9
b _022F04C4 ; case 10
_022F01D4:
ldr r1, _022F04E8 ; =0x00000112
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F01E4:
sub r2, r1, #0x37
cmp r0, r2
bgt _022F0220
bge _022F04C4
sub r2, r1, #0x39
cmp r0, r2
bgt _022F0210
sub r1, r1, #0x39
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0210:
sub r1, r1, #0x38
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0220:
sub r2, r1, #0x2c
cmp r0, r2
bgt _022F023C
sub r1, r1, #0x2c
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F023C:
sub r1, r1, #0x2b
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F024C:
sub r2, r1, #0x14
cmp r0, r2
bgt _022F02BC
bge _022F04CC
sub r2, r1, #0x20
cmp r0, r2
bgt _022F0294
bge _022F04C4
sub r2, r1, #0x27
cmp r0, r2
bgt _022F0288
sub r1, r1, #0x27
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0288:
cmp r0, #0x1d8
beq _022F04CC
b _022F04DC
_022F0294:
sub r2, r1, #0x1f
cmp r0, r2
bgt _022F02B0
sub r1, r1, #0x1f
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F02B0:
cmp r0, #0x1e4
beq _022F04C4
b _022F04DC
_022F02BC:
sub r2, r1, #0xb
cmp r0, r2
bgt _022F02F8
bge _022F04C4
sub r2, r1, #0xd
cmp r0, r2
bgt _022F02E8
sub r1, r1, #0xd
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F02E8:
sub r1, r1, #0xc
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F02F8:
cmp r0, #0x1f4
bgt _022F0308
beq _022F04C4
b _022F04DC
_022F0308:
cmp r0, #0x1f8
beq _022F04C4
b _022F04DC
_022F0314:
add r2, r1, #0x9b
cmp r0, r2
bgt _022F03FC
bge _022F04D4
add r2, r1, #0x10
cmp r0, r2
bgt _022F0398
bge _022F04CC
cmp r0, #0x204
bgt _022F036C
bge _022F04C4
add r2, r1, #1
cmp r0, r2
bgt _022F035C
add r1, r1, #1
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F035C:
add r1, r1, #4
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F036C:
add r2, r1, #0xb
cmp r0, r2
bgt _022F0388
add r1, r1, #0xb
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0388:
add r1, r1, #0xf
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F0398:
add r2, r1, #0x17
cmp r0, r2
bgt _022F03D0
bge _022F04C4
add r2, r1, #0x15
cmp r0, r2
bgt _022F03C4
add r1, r1, #0x15
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F03C4:
cmp r0, #0x214
beq _022F04C4
b _022F04DC
_022F03D0:
add r2, r1, #0x37
cmp r0, r2
bgt _022F03EC
add r1, r1, #0x37
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F03EC:
add r1, r1, #0x38
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F03FC:
ldr r2, _022F04EC ; =0x0000037F
cmp r0, r2
bgt _022F0464
bge _022F04C4
sub r1, r2, #0x82
cmp r0, r1
bgt _022F0440
bge _022F04C4
sub r1, r2, #0xa6
cmp r0, r1
bgt _022F0430
beq _022F04C4
b _022F04DC
_022F0430:
sub r1, r2, #0xa5
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0440:
sub r1, r2, #0x81
cmp r0, r1
bgt _022F0454
beq _022F04C4
b _022F04DC
_022F0454:
sub r1, r2, #0x61
cmp r0, r1
beq _022F04CC
b _022F04DC
_022F0464:
add r1, r2, #0x9f
cmp r0, r1
bgt _022F0498
bge _022F04C4
add r1, r2, #0x5a
cmp r0, r1
bgt _022F0488
beq _022F04C4
b _022F04DC
_022F0488:
add r1, r2, #0x6a
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F0498:
add r1, r2, #0xcb
cmp r0, r1
bgt _022F04B8
bge _022F04C4
add r1, r2, #0xab
cmp r0, r1
beq _022F04C4
b _022F04DC
_022F04B8:
add r1, r2, #0xcc
cmp r0, r1
bne _022F04DC
_022F04C4:
mov r0, #0
bx lr
_022F04CC:
mov r0, #1
bx lr
_022F04D4:
mov r0, #0
bx lr
_022F04DC:
mov r0, #1
bx lr
.align 2, 0
_022F04E4: .word 0x000001FE
_022F04E8: .word 0x00000112
_022F04EC: .word 0x0000037F
arm_func_end ov29_022EFBAC
arm_func_start ov29_022F04F0
ov29_022F04F0: ; 0x022F04F0
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldr r4, [r5, #0xb4]
ldrsh r0, [r4, #4]
bl ov29_022EFBAC
cmp r0, #0
movne r0, #1
strneb r0, [r5, #0xb3]
#ifdef JAPAN
strneb r0, [r4, #0x16d]
#else
strneb r0, [r4, #0x171]
#endif
ldmia sp!, {r3, r4, r5, pc}
arm_func_end ov29_022F04F0
arm_func_start ov29_022F0518
ov29_022F0518: ; 0x022F0518
ldr r2, [r0, #0xb4]
mov r1, #0
ldr ip, _022F0530 ; =sub_0201D198
add r0, r0, #0x2c
#ifdef JAPAN
strb r1, [r2, #0x16d]
#else
strb r1, [r2, #0x171]
#endif
bx ip
.align 2, 0
_022F0530: .word sub_0201D198
arm_func_end ov29_022F0518
arm_func_start ov29_022F0534
ov29_022F0534: ; 0x022F0534
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r4, _022F058C ; =DUNGEON_PTR
mov r7, r0
mov r5, #0
_022F0544:
ldr r0, [r4]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r6, [r0, #0xad4]
#else
ldr r6, [r0, #0xb78]
#endif
mov r0, r6
bl EntityIsValid__022F0590
cmp r0, #0
beq _022F057C
cmp r7, #0
mov r0, r6
bne _022F0578
bl ov29_022F0518
b _022F057C
_022F0578:
bl ov29_022F04F0
_022F057C:
add r5, r5, #1
cmp r5, #0x14
blt _022F0544
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_022F058C: .word DUNGEON_PTR
arm_func_end ov29_022F0534

View File

@ -1115,7 +1115,7 @@ _022F83B4:
cmpne sb, r0
beq _022F83F4
ldrb r0, [r7, #0xbc]
bl ov29_022EFAE8
bl IsLoneOutlaw
cmp r0, #0
beq _022F83F4
mov r0, #1

View File

@ -264,926 +264,3 @@ _022FBDD4:
_022FBDDC: .word DUNGEON_PTR
arm_func_end ov29_022FBD80
#endif
arm_func_start ov29_022FBDE0
ov29_022FBDE0: ; 0x022FBDE0
ldr ip, _022FBDEC ; =ov29_022EFAE8
ldrb r0, [r0, #0xbc]
bx ip
.align 2, 0
_022FBDEC: .word ov29_022EFAE8
arm_func_end ov29_022FBDE0
arm_func_start ov29_022FBDF0
ov29_022FBDF0: ; 0x022FBDF0
ldr r0, [r0, #0xb4]
ldr ip, _022FBE00 ; =IsSecretBazaarNpcBehavior
ldrb r0, [r0, #0xbc]
bx ip
.align 2, 0
_022FBE00: .word IsSecretBazaarNpcBehavior
arm_func_end ov29_022FBDF0
arm_func_start ov29_022FBE04
ov29_022FBE04: ; 0x022FBE04
stmdb sp!, {r3, lr}
ldrb r0, [r0, #6]
cmp r0, #0
bne _022FBE4C
ldr r0, _022FBE54 ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x748]
bl GetTurnLimit
ldr r1, _022FBE54 ; =DUNGEON_PTR
ldr r1, [r1]
add r1, r1, #0x700
ldrsh r1, [r1, #0x84]
cmp r1, r0
bne _022FBE4C
bl IsFullFloorFixedRoom
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, pc}
_022FBE4C:
mov r0, #0
ldmia sp!, {r3, pc}
.align 2, 0
_022FBE54: .word DUNGEON_PTR
arm_func_end ov29_022FBE04
arm_func_start InitOtherMonsterData
InitOtherMonsterData: ; 0x022FBE58
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r4, r0
ldr ip, [r4, #0xb4]
mov r6, #1
strb r6, [ip, #0x100]
ldrsh r5, [ip, #0x12]
ldrsh r3, [ip, #0x16]
ldr r7, _022FBF04 ; =FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
mov r0, #0xc
add r5, r5, r3
smlabb r3, r1, r0, r7
rsb lr, r6, #0x3e8
cmp r5, lr
movgt r5, lr
strh r5, [ip, #0x14]
mov r0, #0
strh r0, [ip, #0x16]
strh r0, [ip, #0x18]
ldrsh r5, [r3, #2]
add lr, ip, #0x100
add r0, ip, #0x90
strh r5, [ip, #0x12]
ldrsh r5, [r3, #2]
strh r5, [ip, #0x10]
ldrb r5, [r3, #6]
strb r5, [ip, #0x1a]
ldrb r5, [r3, #7]
strb r5, [ip, #0x1b]
ldrb r5, [r3, #8]
strb r5, [ip, #0x1c]
ldrb r3, [r3, #9]
strb r3, [ip, #0x1d]
#ifdef JAPAN
strh r1, [lr, #0x64]
strb r2, [ip, #0x166]
#else
strh r1, [lr, #0x68]
strb r2, [ip, #0x16a]
#endif
ldrsh r1, [ip, #2]
ldrsh r2, [ip, #0xe]
bl EnableAllLearnableIqSkills
mov r0, r4
bl ov29_023021F0
mov r0, r4
mov r1, #1
bl ov29_022FB83C
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_022FBF04: .word FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
arm_func_end InitOtherMonsterData
arm_func_start ov29_022FBF08
ov29_022FBF08: ; 0x022FBF08
stmdb sp!, {r3, lr}
ldr r0, _022FBF2C ; =DUNGEON_PTR
ldr r0, [r0]
ldr r0, [r0, #0x7cc]
sub r0, r0, #1
cmp r0, #1
ldmhiia sp!, {r3, pc}
bl LoadWazaP2
ldmia sp!, {r3, pc}
.align 2, 0
_022FBF2C: .word DUNGEON_PTR
arm_func_end ov29_022FBF08
arm_func_start ov29_022FBF30
ov29_022FBF30: ; 0x022FBF30
stmdb sp!, {r3, lr}
ldr r0, _022FBF54 ; =DUNGEON_PTR
ldr r0, [r0]
ldr r0, [r0, #0x7cc]
sub r0, r0, #1
cmp r0, #1
ldmhiia sp!, {r3, pc}
bl UnloadCurrentWazaP
ldmia sp!, {r3, pc}
.align 2, 0
_022FBF54: .word DUNGEON_PTR
arm_func_end ov29_022FBF30
arm_func_start InitEnemySpawnStats
InitEnemySpawnStats: ; 0x022FBF58
#ifdef JAPAN
#define INIT_ENEMY_SPAWN_STATS_OFFSET -0x50
#else
#define INIT_ENEMY_SPAWN_STATS_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x218
ldr r1, _022FC230 ; =DUNGEON_PTR
mov r0, #0
ldr r1, [r1]
add r1, r1, #0xf4 + INIT_ENEMY_SPAWN_STATS_OFFSET
add r5, r1, #0x3400
bl DungeonRngSetSecondary
bl ov29_022FBF08
add r0, sp, #0x16
mov r1, #0
bl CopySpawnEntriesMaster
mov r4, r0
mov r6, #0
b _022FC028
_022FBF94:
add r0, sp, #0x16
add r7, r0, r6, lsl #3
mov r0, r7
bl GetMonsterIdFromSpawnEntry
strh r0, [r5]
mov r0, r7
bl GetMonsterLevelFromSpawnEntry
strh r0, [r5, #2]
ldrsh r1, [r5]
ldrsh r2, [r5, #2]
add r0, r5, #4
bl GetMonsterMoves
ldrh r0, [r5, #4]
cmp r0, #0
moveq r0, #0x170
streqh r0, [r5, #4]
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
bl GetMaxHpAtLevel
strh r0, [r5, #0xc]
mov r7, #0
_022FBFE8:
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
mov r2, r7
add r8, r5, r7
bl GetOffensiveStatAtLevel
strb r0, [r8, #0xe]
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
mov r2, r7
bl GetDefensiveStatAtLevel
add r7, r7, #1
strb r0, [r8, #0x10]
cmp r7, #2
blt _022FBFE8
add r5, r5, #0x12
add r6, r6, #1
_022FC028:
cmp r6, r4
blt _022FBF94
mov r0, #0
b _022FC040
_022FC038:
strh r0, [r5], #0x12
add r6, r6, #1
_022FC040:
cmp r6, #0x40
blt _022FC038
cmp r4, #0x40
bge _022FC0A8
bl IsDestinationFloorWithFixedRoom
cmp r0, #0
bne _022FC0A8
bl IsDestinationFloorWithMonster
cmp r0, #0
beq _022FC0A8
mov r0, #0xa
bl IsCurrentMissionType
cmp r0, #0
bne _022FC088
mov r0, #9
bl IsCurrentMissionType
cmp r0, #0
beq _022FC0A8
_022FC088:
add r0, sp, #8
bl GetOutlawSpawnData
add r0, sp, #0x16
ldrsh r1, [sp, #0xc]
ldrsh r2, [sp, #8]
add r0, r0, r4, lsl #3
bl SetMonsterLevelAndId
add r4, r4, #1
_022FC0A8:
cmp r4, #0x40
bge _022FC0E0
ldr r0, _022FC230 ; =DUNGEON_PTR
ldr r2, [r0]
add r0, r2, #0x700
ldrsh r1, [r0, #0xa8]
cmp r1, #0
beq _022FC0E0
ldrb r1, [r2, #0x7aa]
ldrsh r2, [r0, #0xa8]
add r3, sp, #0x16
add r0, r3, r4, lsl #3
bl SetMonsterLevelAndId
add r4, r4, #1
_022FC0E0:
mov r2, #0
ldr r1, _022FC230 ; =DUNGEON_PTR
mov sl, r2
_022FC0EC:
ldr r0, [r1]
add r0, r0, r2
add r0, r0, #0x3000
add r2, r2, #1
strb sl, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
cmp r2, #0x258
blt _022FC0EC
mvn r0, #0
mov r5, #1
str r0, [sp]
b _022FC1E8
_022FC118:
ldr r6, [sp]
mov r8, #0
mov r7, r6
b _022FC194
_022FC128:
add r0, sp, #0x16
add sb, r0, r8, lsl #3
mov r0, sb
bl GetMonsterIdFromSpawnEntry
mov fp, r0
mov r0, sb
bl GetMonsterLevelFromSpawnEntry
str r0, [sp, #4]
mov r0, fp
mov r1, #0x258
bl _s32_div_f
ldr r0, _022FC230 ; =DUNGEON_PTR
mov r1, r1, lsl #0x10
ldr r0, [r0]
mov sb, r1, asr #0x10
add r0, r0, r1, asr #16
add r0, r0, #0x3000
ldrb r0, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
cmp r0, #0
bne _022FC190
ldr r1, [sp, #4]
mov r0, sb
bl GetExp
cmp r7, r0
movlt r7, r0
movlt r6, sb
_022FC190:
add r8, r8, #1
_022FC194:
cmp r8, r4
blt _022FC128
cmp r6, #0
blt _022FC1F0
cmp r5, #0x100
ble _022FC1C8
ldr r0, _022FC230 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, r6
add r1, r0, #0x3000
mov r0, #1
strb r0, [r1, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
b _022FC1E4
_022FC1C8:
ldr r0, _022FC230 ; =DUNGEON_PTR
rsb r1, r5, #0x100
ldr r0, [r0]
add r5, r5, #2
add r0, r0, r6
add r0, r0, #0x3000
strb r1, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
_022FC1E4:
add sl, sl, #1
_022FC1E8:
cmp sl, r4
blt _022FC118
_022FC1F0:
ldr r1, _022FC230 ; =DUNGEON_PTR
mov r4, #0
mov r2, #1
_022FC1FC:
ldr r0, [r1]
add r0, r0, r4
add r0, r0, #0x3000
ldrb r3, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
add r4, r4, #1
cmp r3, #0
streqb r2, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
cmp r4, #0x258
blt _022FC1FC
bl ov29_022FBF30
bl DungeonRngSetPrimary
add sp, sp, #0x218
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FC230: .word DUNGEON_PTR
arm_func_end InitEnemySpawnStats
arm_func_start InitEnemyStatsAndMoves
InitEnemyStatsAndMoves: ; 0x022FC234
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #8
mov sl, r0
ldrsh r0, [sp, #0x30]
mov sb, r1
mov r1, #0x258
mov r8, r2
mov r7, r3
ldr r6, [sp, #0x34]
bl _s32_div_f
mov r0, r1, lsl #0x10
ldr r2, _022FC464 ; =DUNGEON_PTR
mov r4, r0, asr #0x10
ldr r1, [r2]
mov fp, #0
#ifdef JAPAN
add r0, r1, #0xa4
#else
add r0, r1, #0xf4
#endif
add r5, r0, #0x3400
mov r3, r5
mov r0, #0x12
b _022FC314
_022FC284:
mul r2, fp, r0
ldrsh r1, [r3, r2]
add r5, r3, r2
cmp r1, #0
beq _022FC31C
cmp r1, r4
ldreqsh r1, [r5, #2]
cmpeq r1, r6
bne _022FC310
mov r1, r4
mov r2, r6
add r0, r5, #4
bl GetMonsterMoves
mov r4, #0
_022FC2BC:
add r0, r5, r4, lsl #1
ldrh r1, [r0, #4]
add r0, sl, r4, lsl #3
bl InitMoveCheckId
add r4, r4, #1
cmp r4, #4
blt _022FC2BC
ldrsh r0, [r5, #0xc]
mov r2, #0
strh r0, [sb]
_022FC2E4:
add r1, r5, r2
ldrb r0, [r1, #0xe]
strb r0, [r8, r2]
ldrb r0, [r1, #0x10]
strb r0, [r7, r2]
add r2, r2, #1
cmp r2, #2
blt _022FC2E4
mov r0, #0
strb r0, [sl, #0x20]
b _022FC45C
_022FC310:
add fp, fp, #1
_022FC314:
cmp fp, #0x40
blt _022FC284
_022FC31C:
cmp fp, #0x40
bne _022FC3A4
add r0, sp, #0
mov r1, r4
mov r2, r6
bl GetMonsterMoves
mov r5, #0
add fp, sp, #0
_022FC33C:
mov r0, r5, lsl #1
ldrh r1, [fp, r0]
add r0, sl, r5, lsl #3
bl InitMoveCheckId
add r5, r5, #1
cmp r5, #4
blt _022FC33C
mov r0, r4
mov r1, r6
bl GetMaxHpAtLevel
strh r0, [sb]
mov r5, #0
_022FC36C:
mov r0, r4
mov r1, r6
mov r2, r5
bl GetOffensiveStatAtLevel
strb r0, [r8, r5]
mov r0, r4
mov r1, r6
mov r2, r5
bl GetDefensiveStatAtLevel
strb r0, [r7, r5]
add r5, r5, #1
cmp r5, #2
blt _022FC36C
b _022FC454
_022FC3A4:
strh r4, [r5]
mov r1, r4
mov r2, r6
strh r6, [r5, #2]
add r0, r5, #4
bl GetMonsterMoves
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
bl GetMaxHpAtLevel
strh r0, [r5, #0xc]
mov r6, #0
_022FC3D0:
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
mov r2, r6
add r4, r5, r6
bl GetOffensiveStatAtLevel
strb r0, [r4, #0xe]
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
mov r2, r6
bl GetDefensiveStatAtLevel
add r6, r6, #1
strb r0, [r4, #0x10]
cmp r6, #2
blt _022FC3D0
mov r4, #0
_022FC40C:
add r0, r5, r4, lsl #1
ldrh r1, [r0, #4]
add r0, sl, r4, lsl #3
bl InitMoveCheckId
add r4, r4, #1
cmp r4, #4
blt _022FC40C
ldrsh r0, [r5, #0xc]
mov r2, #0
strh r0, [sb]
_022FC434:
add r1, r5, r2
ldrb r0, [r1, #0xe]
strb r0, [r8, r2]
ldrb r0, [r1, #0x10]
strb r0, [r7, r2]
add r2, r2, #1
cmp r2, #2
blt _022FC434
_022FC454:
mov r0, #0
strb r0, [sl, #0x20]
_022FC45C:
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FC464: .word DUNGEON_PTR
arm_func_end InitEnemyStatsAndMoves
arm_func_start ov29_022FC468
ov29_022FC468: ; 0x022FC468
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r4, [sp, #0x24]
mov sb, r0
cmp r4, #0xb
mov r0, #0
cmp r4, #0xc
moveq r0, #1
cmp r4, #0xd
moveq r0, #2
cmp r4, #0xe
moveq r0, #3
mov r8, r1
mov r7, r2
mov r6, r3
ldr r5, [sp, #0x20]
bl GetExplorerMazeMonster
mov r4, r0
mov r0, sb
add r1, r4, #0x22
bl GroundToDungeonMoveset
ldrsh r0, [r4, #0xa]
mov r2, #0
strh r0, [r8]
_022FC4C4:
add r1, r4, r2
ldrb r0, [r1, #0xc]
strb r0, [r7, r2]
ldrb r0, [r1, #0xe]
strb r0, [r6, r2]
add r2, r2, #1
cmp r2, #2
blt _022FC4C4
ldrsh r1, [r4, #8]
ldr r0, _022FC508 ; =IQ_SKILLS
ldr r0, [r0, #0x20]
strh r1, [r5]
cmp r1, r0
strlth r0, [r5]
mov r0, #0
strb r0, [sb, #0x20]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_022FC508: .word IQ_SKILLS
arm_func_end ov29_022FC468
arm_func_start SpawnTeam
SpawnTeam: ; 0x022FC50C
#ifdef JAPAN
#define SPAWN_TEAM_OFFSET -0xA4
#else
#define SPAWN_TEAM_OFFSET 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x44
mov sl, r0
mov r0, #0
bl DungeonRngSetSecondary
ldr r0, _022FC98C ; =DUNGEON_PTR
ldr r0, [r0]
add r1, r0, #0xcc00
ldrsh r0, [r1, #0xe0 + SPAWN_TEAM_OFFSET]
ldrsh r1, [r1, #0xe2 + SPAWN_TEAM_OFFSET]
bl GetTile
ldrb fp, [r0, #7]
mov r4, #0
_022FC540:
mov r0, r4
bl GetActiveTeamMember
add r1, r4, #1
mov r1, r1, lsl #0x10
strh r4, [r0, #0xa]
mov r4, r1, asr #0x10
cmp r4, #4
blt _022FC540
mov r7, #0
mov r6, #1
mov r8, r7
mov r5, r7
mov sb, r6
add r4, sp, #0x34
_022FC578:
mov r0, r8
bl GetActiveTeamMember
ldrb r1, [r0]
tst r1, #1
movne r2, r6
moveq r2, r5
tst r2, #0xff
beq _022FC5B0
tst r1, #2
movne r1, sb
moveq r1, #0
tst r1, #0xff
strne r0, [r4, r7, lsl #2]
addne r7, r7, #1
_022FC5B0:
add r0, r8, #1
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
cmp r8, #4
blt _022FC578
mov r1, #0
add r0, sp, #0x34
b _022FC5D8
_022FC5D0:
str r1, [r0, r7, lsl #2]
add r7, r7, #1
_022FC5D8:
cmp r7, #4
blt _022FC5D0
mov r8, #0
mov r7, r8
mov r3, r8
mov r4, #1
mov r2, r8
add r5, sp, #0x34
add r1, sp, #0x24
_022FC5FC:
ldr r6, [r5, r7, lsl #2]
cmp r6, #0
beq _022FC628
ldrb r0, [r6, #1]
cmp r0, #0
movne r0, r4
moveq r0, r3
tst r0, #0xff
strne r6, [r1, r8, lsl #2]
strne r2, [r5, r7, lsl #2]
addne r8, r8, #1
_022FC628:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
cmp r7, #4
blt _022FC5FC
ldr r0, _022FC98C ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x75c]
cmp r0, #0
bne _022FC698
mov r7, #0
mov r4, r7
add r5, sp, #0x34
add sb, sp, #0x24
_022FC660:
ldr r6, [r5, r7, lsl #2]
cmp r6, #0
beq _022FC684
ldrb r0, [r6, #3]
bl JoinedAtRangeCheck2Veneer
cmp r0, #0
strne r6, [sb, r8, lsl #2]
strne r4, [r5, r7, lsl #2]
addne r8, r8, #1
_022FC684:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
cmp r7, #4
blt _022FC660
_022FC698:
mov r4, #0
mov r2, r4
add r1, sp, #0x24
add r3, sp, #0x34
_022FC6A8:
ldr r0, [r3, r4, lsl #2]
cmp r0, #0
strne r0, [r1, r8, lsl #2]
add r0, r4, #1
mov r0, r0, lsl #0x10
strne r2, [r3, r4, lsl #2]
mov r4, r0, asr #0x10
addne r8, r8, #1
cmp r4, #4
blt _022FC6A8
mov r1, #0
add r0, sp, #0x24
b _022FC6E4
_022FC6DC:
str r1, [r0, r8, lsl #2]
add r8, r8, #1
_022FC6E4:
cmp r8, #4
blt _022FC6DC
mov sb, #0
_022FC6F0:
add r0, sp, #0x24
ldr r5, [r0, sb, lsl #2]
mov r6, #0
cmp r5, #0
beq _022FC8BC
ldrsh r1, [r5, #0xc]
sub r0, r1, #0x17c
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, #2
ldrls r0, _022FC990 ; =0x0000017B
strlsh r0, [r5, #0xc]
bls _022FC74C
sub r0, r1, #0x3d4
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, #2
ldrls r0, _022FC994 ; =0x000003D3
strlsh r0, [r5, #0xc]
_022FC74C:
mov r4, #0
_022FC750:
ldr r0, _022FC998 ; =ov29_02351E28
mov r1, r4, lsl #2
ldrh r1, [r0, r1]
add r0, r0, r4, lsl #2
ldrh r0, [r0, #2]
strh r1, [sp, #0x1e]
ldrsh r8, [sp, #0x1e]
strh r0, [sp, #0x20]
cmp r8, #0x63
beq _022FC808
ldr r0, _022FC98C ; =DUNGEON_PTR
ldrsh r7, [sp, #0x20]
ldr r0, [r0]
add r0, r0, #0xcc00
ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
add r1, r7, r1
add r0, r8, r2
bl GetTile
mov r1, r0
ldrb r0, [r1, #7]
cmp r0, fp
bne _022FC800
ldrsh r0, [r5, #0xc]
bl IsInvalidSpawnTile
cmp r0, #0
bne _022FC800
ldr r0, _022FC98C ; =DUNGEON_PTR
mov r1, #0
ldr r2, [r0]
mov r0, #1
str r1, [sp]
stmib sp, {r0, r1, sl}
str r1, [sp, #0x10]
add r0, r2, #0xcc00
ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
ldrsh r0, [r5, #0xc]
mov r3, r5
add r1, r8, r1
add r2, r7, r2
bl InitTeamMember
mov r6, #1
b _022FC808
_022FC800:
add r4, r4, #1
b _022FC750
_022FC808:
cmp r6, #0
bne _022FC8BC
ldr r8, _022FC998 ; =ov29_02351E28
mov r7, #0
_022FC818:
mov r0, r7, lsl #2
ldrh r1, [r8, r0]
add r0, r8, r7, lsl #2
ldrh r0, [r0, #2]
strh r1, [sp, #0x14]
ldrsh r6, [sp, #0x14]
strh r0, [sp, #0x16]
cmp r6, #0x63
beq _022FC8BC
ldr r0, _022FC98C ; =DUNGEON_PTR
ldrsh r4, [sp, #0x16]
ldr r0, [r0]
add r0, r0, #0xcc00
ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
add r1, r4, r1
add r0, r6, r2
bl GetTile
mov r1, r0
ldrsh r0, [r5, #0xc]
bl IsInvalidSpawnTile
cmp r0, #0
bne _022FC8B4
ldr r0, _022FC98C ; =DUNGEON_PTR
mov r1, #0
ldr r2, [r0]
mov r0, #1
str r1, [sp]
stmib sp, {r0, r1, sl}
str r1, [sp, #0x10]
add r0, r2, #0xcc00
ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
ldrsh r0, [r5, #0xc]
mov r3, r5
add r1, r6, r1
add r2, r4, r2
bl InitTeamMember
b _022FC8BC
_022FC8B4:
add r7, r7, #1
b _022FC818
_022FC8BC:
add r0, sb, #1
mov r0, r0, lsl #0x10
mov sb, r0, asr #0x10
cmp sb, #4
blt _022FC6F0
bl ov29_022FCD04
mov r2, #0
#ifdef JAPAN
mov sb, r2
#else
mov r8, r2
#endif
add r1, sp, #0x18
_022FC8E0:
add r0, r2, #1
mov r0, r0, lsl #0x10
#ifdef JAPAN
strb sb, [r1, r2]
#else
strb r8, [r1, r2]
#endif
mov r2, r0, asr #0x10
cmp r2, #5
blt _022FC8E0
#ifdef JAPAN
ldr r5, _022FC98C ; =DUNGEON_PTR
mov r7, #0
mov r8, #1
add r6, sp, #0x18
mov r4, #0x23c
_022FC908:
ldr r0, [r5]
add r0, r0, sb, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xa84]
#else
ldr r4, _022FC98C ; =DUNGEON_PTR
mov r6, #0
mov r7, #1
add r5, sp, #0x18
_022FC908:
ldr r0, [r4]
add r0, r0, r8, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xb28]
#endif
bl EntityIsValid__022FC99C
cmp r0, #0
beq _022FC964
#ifdef JAPAN
mul r1, sb, r4
ldr r0, [r5]
add r0, r0, #0x56
add r2, r0, #0x800
ldrb r0, [r2, r1]
add r2, r2, r1
tst r0, #1
movne r0, r8
moveq r0, r7
#else
ldr r0, [r4]
add r1, r8, r8, lsl #3
add r0, r0, #0x56
add r2, r0, #0x800
ldrb r0, [r2, r1, lsl #6]
add r2, r2, r1, lsl #6
tst r0, #1
movne r0, r7
moveq r0, r6
#endif
tst r0, #0xff
ldrneb r1, [r2, #1]
cmpne r1, #0
#ifdef JAPAN
addne r0, sb, #1
andne r0, r0, #0xff
strneb r0, [r6, r1]
strneb r0, [r2, #1]
_022FC964:
add r0, sb, #1
mov r0, r0, lsl #0x10
mov sb, r0, asr #0x10
cmp sb, #4
#else
addne r0, r8, #1
andne r0, r0, #0xff
strneb r0, [r5, r1]
strneb r0, [r2, #1]
_022FC964:
add r0, r8, #1
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
cmp r8, #4
#endif
blt _022FC908
add r0, sp, #0x18
bl sub_0200F9B4
bl DungeonRngSetPrimary
add sp, sp, #0x44
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FC98C: .word DUNGEON_PTR
_022FC990: .word 0x0000017B
_022FC994: .word 0x000003D3
_022FC998: .word ov29_02351E28
arm_func_end SpawnTeam

918
asm/overlay_29_022FBDF0.s Normal file
View File

@ -0,0 +1,918 @@
.include "asm/macros.inc"
.include "overlay_29_022FBDF0.inc"
.text
arm_func_start ov29_022FBDF0
ov29_022FBDF0: ; 0x022FBDF0
ldr r0, [r0, #0xb4]
ldr ip, _022FBE00 ; =IsSecretBazaarNpcBehavior
ldrb r0, [r0, #0xbc]
bx ip
.align 2, 0
_022FBE00: .word IsSecretBazaarNpcBehavior
arm_func_end ov29_022FBDF0
arm_func_start ov29_022FBE04
ov29_022FBE04: ; 0x022FBE04
stmdb sp!, {r3, lr}
ldrb r0, [r0, #6]
cmp r0, #0
bne _022FBE4C
ldr r0, _022FBE54 ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x748]
bl GetTurnLimit
ldr r1, _022FBE54 ; =DUNGEON_PTR
ldr r1, [r1]
add r1, r1, #0x700
ldrsh r1, [r1, #0x84]
cmp r1, r0
bne _022FBE4C
bl IsFullFloorFixedRoom
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, pc}
_022FBE4C:
mov r0, #0
ldmia sp!, {r3, pc}
.align 2, 0
_022FBE54: .word DUNGEON_PTR
arm_func_end ov29_022FBE04
arm_func_start InitOtherMonsterData
InitOtherMonsterData: ; 0x022FBE58
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r4, r0
ldr ip, [r4, #0xb4]
mov r6, #1
strb r6, [ip, #0x100]
ldrsh r5, [ip, #0x12]
ldrsh r3, [ip, #0x16]
ldr r7, _022FBF04 ; =FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
mov r0, #0xc
add r5, r5, r3
smlabb r3, r1, r0, r7
rsb lr, r6, #0x3e8
cmp r5, lr
movgt r5, lr
strh r5, [ip, #0x14]
mov r0, #0
strh r0, [ip, #0x16]
strh r0, [ip, #0x18]
ldrsh r5, [r3, #2]
add lr, ip, #0x100
add r0, ip, #0x90
strh r5, [ip, #0x12]
ldrsh r5, [r3, #2]
strh r5, [ip, #0x10]
ldrb r5, [r3, #6]
strb r5, [ip, #0x1a]
ldrb r5, [r3, #7]
strb r5, [ip, #0x1b]
ldrb r5, [r3, #8]
strb r5, [ip, #0x1c]
ldrb r3, [r3, #9]
strb r3, [ip, #0x1d]
#ifdef JAPAN
strh r1, [lr, #0x64]
strb r2, [ip, #0x166]
#else
strh r1, [lr, #0x68]
strb r2, [ip, #0x16a]
#endif
ldrsh r1, [ip, #2]
ldrsh r2, [ip, #0xe]
bl EnableAllLearnableIqSkills
mov r0, r4
bl ov29_023021F0
mov r0, r4
mov r1, #1
bl ov29_022FB83C
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_022FBF04: .word FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
arm_func_end InitOtherMonsterData
arm_func_start ov29_022FBF08
ov29_022FBF08: ; 0x022FBF08
stmdb sp!, {r3, lr}
ldr r0, _022FBF2C ; =DUNGEON_PTR
ldr r0, [r0]
ldr r0, [r0, #0x7cc]
sub r0, r0, #1
cmp r0, #1
ldmhiia sp!, {r3, pc}
bl LoadWazaP2
ldmia sp!, {r3, pc}
.align 2, 0
_022FBF2C: .word DUNGEON_PTR
arm_func_end ov29_022FBF08
arm_func_start ov29_022FBF30
ov29_022FBF30: ; 0x022FBF30
stmdb sp!, {r3, lr}
ldr r0, _022FBF54 ; =DUNGEON_PTR
ldr r0, [r0]
ldr r0, [r0, #0x7cc]
sub r0, r0, #1
cmp r0, #1
ldmhiia sp!, {r3, pc}
bl UnloadCurrentWazaP
ldmia sp!, {r3, pc}
.align 2, 0
_022FBF54: .word DUNGEON_PTR
arm_func_end ov29_022FBF30
arm_func_start InitEnemySpawnStats
InitEnemySpawnStats: ; 0x022FBF58
#ifdef JAPAN
#define INIT_ENEMY_SPAWN_STATS_OFFSET -0x50
#else
#define INIT_ENEMY_SPAWN_STATS_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x218
ldr r1, _022FC230 ; =DUNGEON_PTR
mov r0, #0
ldr r1, [r1]
add r1, r1, #0xf4 + INIT_ENEMY_SPAWN_STATS_OFFSET
add r5, r1, #0x3400
bl DungeonRngSetSecondary
bl ov29_022FBF08
add r0, sp, #0x16
mov r1, #0
bl CopySpawnEntriesMaster
mov r4, r0
mov r6, #0
b _022FC028
_022FBF94:
add r0, sp, #0x16
add r7, r0, r6, lsl #3
mov r0, r7
bl GetMonsterIdFromSpawnEntry
strh r0, [r5]
mov r0, r7
bl GetMonsterLevelFromSpawnEntry
strh r0, [r5, #2]
ldrsh r1, [r5]
ldrsh r2, [r5, #2]
add r0, r5, #4
bl GetMonsterMoves
ldrh r0, [r5, #4]
cmp r0, #0
moveq r0, #0x170
streqh r0, [r5, #4]
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
bl GetMaxHpAtLevel
strh r0, [r5, #0xc]
mov r7, #0
_022FBFE8:
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
mov r2, r7
add r8, r5, r7
bl GetOffensiveStatAtLevel
strb r0, [r8, #0xe]
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
mov r2, r7
bl GetDefensiveStatAtLevel
add r7, r7, #1
strb r0, [r8, #0x10]
cmp r7, #2
blt _022FBFE8
add r5, r5, #0x12
add r6, r6, #1
_022FC028:
cmp r6, r4
blt _022FBF94
mov r0, #0
b _022FC040
_022FC038:
strh r0, [r5], #0x12
add r6, r6, #1
_022FC040:
cmp r6, #0x40
blt _022FC038
cmp r4, #0x40
bge _022FC0A8
bl IsDestinationFloorWithFixedRoom
cmp r0, #0
bne _022FC0A8
bl IsDestinationFloorWithMonster
cmp r0, #0
beq _022FC0A8
mov r0, #0xa
bl IsCurrentMissionType
cmp r0, #0
bne _022FC088
mov r0, #9
bl IsCurrentMissionType
cmp r0, #0
beq _022FC0A8
_022FC088:
add r0, sp, #8
bl GetOutlawSpawnData
add r0, sp, #0x16
ldrsh r1, [sp, #0xc]
ldrsh r2, [sp, #8]
add r0, r0, r4, lsl #3
bl SetMonsterLevelAndId
add r4, r4, #1
_022FC0A8:
cmp r4, #0x40
bge _022FC0E0
ldr r0, _022FC230 ; =DUNGEON_PTR
ldr r2, [r0]
add r0, r2, #0x700
ldrsh r1, [r0, #0xa8]
cmp r1, #0
beq _022FC0E0
ldrb r1, [r2, #0x7aa]
ldrsh r2, [r0, #0xa8]
add r3, sp, #0x16
add r0, r3, r4, lsl #3
bl SetMonsterLevelAndId
add r4, r4, #1
_022FC0E0:
mov r2, #0
ldr r1, _022FC230 ; =DUNGEON_PTR
mov sl, r2
_022FC0EC:
ldr r0, [r1]
add r0, r0, r2
add r0, r0, #0x3000
add r2, r2, #1
strb sl, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
cmp r2, #0x258
blt _022FC0EC
mvn r0, #0
mov r5, #1
str r0, [sp]
b _022FC1E8
_022FC118:
ldr r6, [sp]
mov r8, #0
mov r7, r6
b _022FC194
_022FC128:
add r0, sp, #0x16
add sb, r0, r8, lsl #3
mov r0, sb
bl GetMonsterIdFromSpawnEntry
mov fp, r0
mov r0, sb
bl GetMonsterLevelFromSpawnEntry
str r0, [sp, #4]
mov r0, fp
mov r1, #0x258
bl _s32_div_f
ldr r0, _022FC230 ; =DUNGEON_PTR
mov r1, r1, lsl #0x10
ldr r0, [r0]
mov sb, r1, asr #0x10
add r0, r0, r1, asr #16
add r0, r0, #0x3000
ldrb r0, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
cmp r0, #0
bne _022FC190
ldr r1, [sp, #4]
mov r0, sb
bl GetExp
cmp r7, r0
movlt r7, r0
movlt r6, sb
_022FC190:
add r8, r8, #1
_022FC194:
cmp r8, r4
blt _022FC128
cmp r6, #0
blt _022FC1F0
cmp r5, #0x100
ble _022FC1C8
ldr r0, _022FC230 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, r6
add r1, r0, #0x3000
mov r0, #1
strb r0, [r1, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
b _022FC1E4
_022FC1C8:
ldr r0, _022FC230 ; =DUNGEON_PTR
rsb r1, r5, #0x100
ldr r0, [r0]
add r5, r5, #2
add r0, r0, r6
add r0, r0, #0x3000
strb r1, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
_022FC1E4:
add sl, sl, #1
_022FC1E8:
cmp sl, r4
blt _022FC118
_022FC1F0:
ldr r1, _022FC230 ; =DUNGEON_PTR
mov r4, #0
mov r2, #1
_022FC1FC:
ldr r0, [r1]
add r0, r0, r4
add r0, r0, #0x3000
ldrb r3, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
add r4, r4, #1
cmp r3, #0
streqb r2, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
cmp r4, #0x258
blt _022FC1FC
bl ov29_022FBF30
bl DungeonRngSetPrimary
add sp, sp, #0x218
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FC230: .word DUNGEON_PTR
arm_func_end InitEnemySpawnStats
arm_func_start InitEnemyStatsAndMoves
InitEnemyStatsAndMoves: ; 0x022FC234
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #8
mov sl, r0
ldrsh r0, [sp, #0x30]
mov sb, r1
mov r1, #0x258
mov r8, r2
mov r7, r3
ldr r6, [sp, #0x34]
bl _s32_div_f
mov r0, r1, lsl #0x10
ldr r2, _022FC464 ; =DUNGEON_PTR
mov r4, r0, asr #0x10
ldr r1, [r2]
mov fp, #0
#ifdef JAPAN
add r0, r1, #0xa4
#else
add r0, r1, #0xf4
#endif
add r5, r0, #0x3400
mov r3, r5
mov r0, #0x12
b _022FC314
_022FC284:
mul r2, fp, r0
ldrsh r1, [r3, r2]
add r5, r3, r2
cmp r1, #0
beq _022FC31C
cmp r1, r4
ldreqsh r1, [r5, #2]
cmpeq r1, r6
bne _022FC310
mov r1, r4
mov r2, r6
add r0, r5, #4
bl GetMonsterMoves
mov r4, #0
_022FC2BC:
add r0, r5, r4, lsl #1
ldrh r1, [r0, #4]
add r0, sl, r4, lsl #3
bl InitMoveCheckId
add r4, r4, #1
cmp r4, #4
blt _022FC2BC
ldrsh r0, [r5, #0xc]
mov r2, #0
strh r0, [sb]
_022FC2E4:
add r1, r5, r2
ldrb r0, [r1, #0xe]
strb r0, [r8, r2]
ldrb r0, [r1, #0x10]
strb r0, [r7, r2]
add r2, r2, #1
cmp r2, #2
blt _022FC2E4
mov r0, #0
strb r0, [sl, #0x20]
b _022FC45C
_022FC310:
add fp, fp, #1
_022FC314:
cmp fp, #0x40
blt _022FC284
_022FC31C:
cmp fp, #0x40
bne _022FC3A4
add r0, sp, #0
mov r1, r4
mov r2, r6
bl GetMonsterMoves
mov r5, #0
add fp, sp, #0
_022FC33C:
mov r0, r5, lsl #1
ldrh r1, [fp, r0]
add r0, sl, r5, lsl #3
bl InitMoveCheckId
add r5, r5, #1
cmp r5, #4
blt _022FC33C
mov r0, r4
mov r1, r6
bl GetMaxHpAtLevel
strh r0, [sb]
mov r5, #0
_022FC36C:
mov r0, r4
mov r1, r6
mov r2, r5
bl GetOffensiveStatAtLevel
strb r0, [r8, r5]
mov r0, r4
mov r1, r6
mov r2, r5
bl GetDefensiveStatAtLevel
strb r0, [r7, r5]
add r5, r5, #1
cmp r5, #2
blt _022FC36C
b _022FC454
_022FC3A4:
strh r4, [r5]
mov r1, r4
mov r2, r6
strh r6, [r5, #2]
add r0, r5, #4
bl GetMonsterMoves
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
bl GetMaxHpAtLevel
strh r0, [r5, #0xc]
mov r6, #0
_022FC3D0:
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
mov r2, r6
add r4, r5, r6
bl GetOffensiveStatAtLevel
strb r0, [r4, #0xe]
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
mov r2, r6
bl GetDefensiveStatAtLevel
add r6, r6, #1
strb r0, [r4, #0x10]
cmp r6, #2
blt _022FC3D0
mov r4, #0
_022FC40C:
add r0, r5, r4, lsl #1
ldrh r1, [r0, #4]
add r0, sl, r4, lsl #3
bl InitMoveCheckId
add r4, r4, #1
cmp r4, #4
blt _022FC40C
ldrsh r0, [r5, #0xc]
mov r2, #0
strh r0, [sb]
_022FC434:
add r1, r5, r2
ldrb r0, [r1, #0xe]
strb r0, [r8, r2]
ldrb r0, [r1, #0x10]
strb r0, [r7, r2]
add r2, r2, #1
cmp r2, #2
blt _022FC434
_022FC454:
mov r0, #0
strb r0, [sl, #0x20]
_022FC45C:
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FC464: .word DUNGEON_PTR
arm_func_end InitEnemyStatsAndMoves
arm_func_start ov29_022FC468
ov29_022FC468: ; 0x022FC468
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r4, [sp, #0x24]
mov sb, r0
cmp r4, #0xb
mov r0, #0
cmp r4, #0xc
moveq r0, #1
cmp r4, #0xd
moveq r0, #2
cmp r4, #0xe
moveq r0, #3
mov r8, r1
mov r7, r2
mov r6, r3
ldr r5, [sp, #0x20]
bl GetExplorerMazeMonster
mov r4, r0
mov r0, sb
add r1, r4, #0x22
bl GroundToDungeonMoveset
ldrsh r0, [r4, #0xa]
mov r2, #0
strh r0, [r8]
_022FC4C4:
add r1, r4, r2
ldrb r0, [r1, #0xc]
strb r0, [r7, r2]
ldrb r0, [r1, #0xe]
strb r0, [r6, r2]
add r2, r2, #1
cmp r2, #2
blt _022FC4C4
ldrsh r1, [r4, #8]
ldr r0, _022FC508 ; =IQ_SKILLS
ldr r0, [r0, #0x20]
strh r1, [r5]
cmp r1, r0
strlth r0, [r5]
mov r0, #0
strb r0, [sb, #0x20]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_022FC508: .word IQ_SKILLS
arm_func_end ov29_022FC468
arm_func_start SpawnTeam
SpawnTeam: ; 0x022FC50C
#ifdef JAPAN
#define SPAWN_TEAM_OFFSET -0xA4
#else
#define SPAWN_TEAM_OFFSET 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x44
mov sl, r0
mov r0, #0
bl DungeonRngSetSecondary
ldr r0, _022FC98C ; =DUNGEON_PTR
ldr r0, [r0]
add r1, r0, #0xcc00
ldrsh r0, [r1, #0xe0 + SPAWN_TEAM_OFFSET]
ldrsh r1, [r1, #0xe2 + SPAWN_TEAM_OFFSET]
bl GetTile
ldrb fp, [r0, #7]
mov r4, #0
_022FC540:
mov r0, r4
bl GetActiveTeamMember
add r1, r4, #1
mov r1, r1, lsl #0x10
strh r4, [r0, #0xa]
mov r4, r1, asr #0x10
cmp r4, #4
blt _022FC540
mov r7, #0
mov r6, #1
mov r8, r7
mov r5, r7
mov sb, r6
add r4, sp, #0x34
_022FC578:
mov r0, r8
bl GetActiveTeamMember
ldrb r1, [r0]
tst r1, #1
movne r2, r6
moveq r2, r5
tst r2, #0xff
beq _022FC5B0
tst r1, #2
movne r1, sb
moveq r1, #0
tst r1, #0xff
strne r0, [r4, r7, lsl #2]
addne r7, r7, #1
_022FC5B0:
add r0, r8, #1
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
cmp r8, #4
blt _022FC578
mov r1, #0
add r0, sp, #0x34
b _022FC5D8
_022FC5D0:
str r1, [r0, r7, lsl #2]
add r7, r7, #1
_022FC5D8:
cmp r7, #4
blt _022FC5D0
mov r8, #0
mov r7, r8
mov r3, r8
mov r4, #1
mov r2, r8
add r5, sp, #0x34
add r1, sp, #0x24
_022FC5FC:
ldr r6, [r5, r7, lsl #2]
cmp r6, #0
beq _022FC628
ldrb r0, [r6, #1]
cmp r0, #0
movne r0, r4
moveq r0, r3
tst r0, #0xff
strne r6, [r1, r8, lsl #2]
strne r2, [r5, r7, lsl #2]
addne r8, r8, #1
_022FC628:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
cmp r7, #4
blt _022FC5FC
ldr r0, _022FC98C ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x75c]
cmp r0, #0
bne _022FC698
mov r7, #0
mov r4, r7
add r5, sp, #0x34
add sb, sp, #0x24
_022FC660:
ldr r6, [r5, r7, lsl #2]
cmp r6, #0
beq _022FC684
ldrb r0, [r6, #3]
bl JoinedAtRangeCheck2Veneer
cmp r0, #0
strne r6, [sb, r8, lsl #2]
strne r4, [r5, r7, lsl #2]
addne r8, r8, #1
_022FC684:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
cmp r7, #4
blt _022FC660
_022FC698:
mov r4, #0
mov r2, r4
add r1, sp, #0x24
add r3, sp, #0x34
_022FC6A8:
ldr r0, [r3, r4, lsl #2]
cmp r0, #0
strne r0, [r1, r8, lsl #2]
add r0, r4, #1
mov r0, r0, lsl #0x10
strne r2, [r3, r4, lsl #2]
mov r4, r0, asr #0x10
addne r8, r8, #1
cmp r4, #4
blt _022FC6A8
mov r1, #0
add r0, sp, #0x24
b _022FC6E4
_022FC6DC:
str r1, [r0, r8, lsl #2]
add r8, r8, #1
_022FC6E4:
cmp r8, #4
blt _022FC6DC
mov sb, #0
_022FC6F0:
add r0, sp, #0x24
ldr r5, [r0, sb, lsl #2]
mov r6, #0
cmp r5, #0
beq _022FC8BC
ldrsh r1, [r5, #0xc]
sub r0, r1, #0x17c
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, #2
ldrls r0, _022FC990 ; =0x0000017B
strlsh r0, [r5, #0xc]
bls _022FC74C
sub r0, r1, #0x3d4
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, #2
ldrls r0, _022FC994 ; =0x000003D3
strlsh r0, [r5, #0xc]
_022FC74C:
mov r4, #0
_022FC750:
ldr r0, _022FC998 ; =ov29_02351E28
mov r1, r4, lsl #2
ldrh r1, [r0, r1]
add r0, r0, r4, lsl #2
ldrh r0, [r0, #2]
strh r1, [sp, #0x1e]
ldrsh r8, [sp, #0x1e]
strh r0, [sp, #0x20]
cmp r8, #0x63
beq _022FC808
ldr r0, _022FC98C ; =DUNGEON_PTR
ldrsh r7, [sp, #0x20]
ldr r0, [r0]
add r0, r0, #0xcc00
ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
add r1, r7, r1
add r0, r8, r2
bl GetTile
mov r1, r0
ldrb r0, [r1, #7]
cmp r0, fp
bne _022FC800
ldrsh r0, [r5, #0xc]
bl IsInvalidSpawnTile
cmp r0, #0
bne _022FC800
ldr r0, _022FC98C ; =DUNGEON_PTR
mov r1, #0
ldr r2, [r0]
mov r0, #1
str r1, [sp]
stmib sp, {r0, r1, sl}
str r1, [sp, #0x10]
add r0, r2, #0xcc00
ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
ldrsh r0, [r5, #0xc]
mov r3, r5
add r1, r8, r1
add r2, r7, r2
bl InitTeamMember
mov r6, #1
b _022FC808
_022FC800:
add r4, r4, #1
b _022FC750
_022FC808:
cmp r6, #0
bne _022FC8BC
ldr r8, _022FC998 ; =ov29_02351E28
mov r7, #0
_022FC818:
mov r0, r7, lsl #2
ldrh r1, [r8, r0]
add r0, r8, r7, lsl #2
ldrh r0, [r0, #2]
strh r1, [sp, #0x14]
ldrsh r6, [sp, #0x14]
strh r0, [sp, #0x16]
cmp r6, #0x63
beq _022FC8BC
ldr r0, _022FC98C ; =DUNGEON_PTR
ldrsh r4, [sp, #0x16]
ldr r0, [r0]
add r0, r0, #0xcc00
ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
add r1, r4, r1
add r0, r6, r2
bl GetTile
mov r1, r0
ldrsh r0, [r5, #0xc]
bl IsInvalidSpawnTile
cmp r0, #0
bne _022FC8B4
ldr r0, _022FC98C ; =DUNGEON_PTR
mov r1, #0
ldr r2, [r0]
mov r0, #1
str r1, [sp]
stmib sp, {r0, r1, sl}
str r1, [sp, #0x10]
add r0, r2, #0xcc00
ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
ldrsh r0, [r5, #0xc]
mov r3, r5
add r1, r6, r1
add r2, r4, r2
bl InitTeamMember
b _022FC8BC
_022FC8B4:
add r7, r7, #1
b _022FC818
_022FC8BC:
add r0, sb, #1
mov r0, r0, lsl #0x10
mov sb, r0, asr #0x10
cmp sb, #4
blt _022FC6F0
bl ov29_022FCD04
mov r2, #0
#ifdef JAPAN
mov sb, r2
#else
mov r8, r2
#endif
add r1, sp, #0x18
_022FC8E0:
add r0, r2, #1
mov r0, r0, lsl #0x10
#ifdef JAPAN
strb sb, [r1, r2]
#else
strb r8, [r1, r2]
#endif
mov r2, r0, asr #0x10
cmp r2, #5
blt _022FC8E0
#ifdef JAPAN
ldr r5, _022FC98C ; =DUNGEON_PTR
mov r7, #0
mov r8, #1
add r6, sp, #0x18
mov r4, #0x23c
_022FC908:
ldr r0, [r5]
add r0, r0, sb, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xa84]
#else
ldr r4, _022FC98C ; =DUNGEON_PTR
mov r6, #0
mov r7, #1
add r5, sp, #0x18
_022FC908:
ldr r0, [r4]
add r0, r0, r8, lsl #2
add r0, r0, #0x12000
ldr r0, [r0, #0xb28]
#endif
bl EntityIsValid__022FC99C
cmp r0, #0
beq _022FC964
#ifdef JAPAN
mul r1, sb, r4
ldr r0, [r5]
add r0, r0, #0x56
add r2, r0, #0x800
ldrb r0, [r2, r1]
add r2, r2, r1
tst r0, #1
movne r0, r8
moveq r0, r7
#else
ldr r0, [r4]
add r1, r8, r8, lsl #3
add r0, r0, #0x56
add r2, r0, #0x800
ldrb r0, [r2, r1, lsl #6]
add r2, r2, r1, lsl #6
tst r0, #1
movne r0, r7
moveq r0, r6
#endif
tst r0, #0xff
ldrneb r1, [r2, #1]
cmpne r1, #0
#ifdef JAPAN
addne r0, sb, #1
andne r0, r0, #0xff
strneb r0, [r6, r1]
strneb r0, [r2, #1]
_022FC964:
add r0, sb, #1
mov r0, r0, lsl #0x10
mov sb, r0, asr #0x10
cmp sb, #4
#else
addne r0, r8, #1
andne r0, r0, #0xff
strneb r0, [r5, r1]
strneb r0, [r2, #1]
_022FC964:
add r0, r8, #1
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
cmp r8, #4
#endif
blt _022FC908
add r0, sp, #0x18
bl sub_0200F9B4
bl DungeonRngSetPrimary
add sp, sp, #0x44
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FC98C: .word DUNGEON_PTR
_022FC990: .word 0x0000017B
_022FC994: .word 0x000003D3
_022FC998: .word ov29_02351E28
arm_func_end SpawnTeam

View File

@ -553,7 +553,7 @@ SpawnMonster: ; 0x022FD084
strh r1, [r5, #0xe]
bl ov29_023021F0
ldrb r0, [r7, #2]
bl ov29_022EFAE8
bl IsLoneOutlaw
cmp r0, #0
beq _022FD154
mov r0, #9
@ -616,7 +616,7 @@ _022FD1E8:
strb r0, [r5, #8]
_022FD1F0:
ldrb r0, [r7, #2]
bl ov29_022EFAE8
bl IsLoneOutlaw
cmp r0, #0
beq _022FD224
ldr r0, _022FD30C ; =ov10_022C45A4

View File

@ -54,7 +54,7 @@ _02302034:
bl DisableIqSkill
_02302068:
mov r0, r4
bl ov29_022FBDE0
bl IsLoneOutlawVeneer
cmp r0, #0
bne _0230208C
ldr r0, _023021EC ; =MIN_IQ_ITEM_MASTER

View File

@ -2679,7 +2679,7 @@ _0230B04C:
cmp r0, #0
beq _0230B0B4
mov r0, r7
bl ov29_022FBDE0
bl IsLoneOutlawVeneer
cmp r0, #0
beq _0230B0B4
ldrb r0, [r7, #0x62]
@ -3283,7 +3283,7 @@ _0230A5E0:
cmp r0, #0
beq _0230A648
mov r0, r4
bl ov29_022FBDE0
bl IsLoneOutlawVeneer
cmp r0, #0
beq _0230A648
ldrb r0, [r4, #0x62]

View File

@ -326,7 +326,7 @@ _0232C8E4:
cmp r0, #0
beq _0232C96C
mov r0, r7
bl ov29_022FBDE0
bl IsLoneOutlawVeneer
cmp r0, #0
bne _0232C96C
ldrb r0, [r7, #6]

View File

@ -1185,7 +1185,7 @@ _023393DC:
cmp r0, #2
moveq r0, r5
beq _02339410
bl ov29_022EFAE8
bl IsLoneOutlaw
_02339410:
cmp r0, #0
movne r5, #0xc

View File

@ -0,0 +1,9 @@
#ifndef PMDSKY_DUNGEON_LOGIC_6_H
#define PMDSKY_DUNGEON_LOGIC_6_H
#include "dungeon_mode.h"
#include "util.h"
bool8 IsLoneOutlaw(enum monster_behavior behavior);
#endif //PMDSKY_DUNGEON_LOGIC_6_H

View File

@ -0,0 +1,9 @@
#ifndef PMDSKY_DUNGEON_LOGIC_7_H
#define PMDSKY_DUNGEON_LOGIC_7_H
#include "dungeon_mode.h"
#include "util.h"
bool8 IsLoneOutlawVeneer(struct monster* monster_info);
#endif //PMDSKY_DUNGEON_LOGIC_7_H

View File

@ -394,6 +394,8 @@ Overlay OVY_29
Object src/dungeon_util.o
Object asm/overlay_29_rodata_0235173C.o
Object asm/overlay_29_022EFA6C.o
Object src/dungeon_logic_6.o
Object asm/overlay_29_022EFB04.o
Object src/overlay_29_022F0590.o
Object asm/overlay_29_022F05B4.o
Object src/overlay_29_022F528C.o
@ -419,6 +421,8 @@ Overlay OVY_29
Object asm/overlay_29_022FB678.o
Object src/joined_at_checks.o
Object asm/overlay_29_022FBB1C.o
Object src/dungeon_logic_7.o
Object asm/overlay_29_022FBDF0.o
Object src/overlay_29_022FC99C.o
Object asm/overlay_29_022FC9C0.o
Object src/overlay_29_022FEEB8_eu.o

17
src/dungeon_logic_6.c Normal file
View File

@ -0,0 +1,17 @@
#include "dungeon_logic_6.h"
#include "dungeon_mode.h"
#include "util.h"
bool8 IsLoneOutlaw(enum monster_behavior behavior)
{
bool8 result;
// If behavior is 1, 2 or 3
if ((u32) (u8) (behavior + 0xFF) <= BEHAVIOR_FLEEING_OUTLAW) {
result = TRUE;
} else {
result = FALSE;
}
return result;
}

10
src/dungeon_logic_7.c Normal file
View File

@ -0,0 +1,10 @@
#include "dungeon_logic_7.h"
#include "dungeon_logic_6.h"
#include "dungeon_mode.h"
#include "util.h"
bool8 IsLoneOutlawVeneer(struct monster* monster_info)
{
return IsLoneOutlaw(monster_info->monster_behavior);
}

View File

@ -9,13 +9,13 @@
#include "dg_random.h"
#include "main_0205283C.h" // GetRecruitRate1 and GetRecruitRate2
#include "overlay_29_0230E578.h" // ItemIsActive__0230E578
#include "dungeon_logic_7.h"
extern bool8 IsRecruitingAllowed(u8 dungeon_id);
extern bool8 IsFullFloorFixedRoom(void);
extern bool8 IsLegendaryChallengeFloor(void);
extern bool8 IsCurrentMissionTypeExact(u32 mission_type, u32 mission_subtype);
extern bool8 IsMonsterOnTeam(s16 monsterId, s32 checkType);
extern bool8 ov29_022FBDE0(struct monster* stats);
extern void ov29_022E1B28(s32);
extern void ov29_022E81F8(void);
extern bool8 HasPlayedOldGame(void);
@ -122,7 +122,7 @@ bool8 RecruitCheck(struct entity* leader, struct entity* target)
return FALSE;
}
if (ov29_022FBDE0(target_monster_info))
if (IsLoneOutlawVeneer(target_monster_info))
return FALSE;
if (!SpecificRecruitCheck(target_monster_info->id))