pmd-sky/asm/overlay_29_02302A5C.s
AnonymousRandomPerson 279364f654 Decomped SetPokemonJoined
Decomped by @Chesyon and @taxicat1
2026-03-19 23:37:46 -04:00

2209 lines
40 KiB
ArmAsm

.include "asm/macros.inc"
.include "overlay_29_02302A5C.inc"
.text
arm_func_start LevelUpItemEffect
LevelUpItemEffect: ; 0x02302A5C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x74
mov sb, r1
mov sl, r0
mov r0, sb
str r2, [sp]
mov r8, r3
bl EntityIsValid__02302A38
cmp r0, #0
beq _02302BF4
ldr r5, [sb, #0xb4]
mov r4, #0
ldrb r0, [r5, #7]
cmp r0, #0
beq _02302AA4
ldrb r1, [r5, #0xa]
add r0, sp, #0xc
bl GetUnlockedTacticFlags
_02302AA4:
ldrsh r2, [r5, #0x12]
ldrsh r1, [r5, #0x16]
ldr r0, _02302BFC ; =0x000003E7
ldrb fp, [r5, #0x1c]
add r7, r2, r1
ldrb r1, [r5, #0x1a]
cmp r7, r0
movgt r7, r0
str r1, [sp, #8]
ldrb r1, [r5, #0x1b]
mov r0, r5
ldrb r6, [r5, #0x1d]
str r1, [sp, #4]
bl IsExperienceLocked
cmp r0, #0
bne _02302BA8
ldrb r1, [r5, #0xa]
ldr r0, [sp]
add r2, r1, r0
cmp r2, #0x64
movge r2, #0x64
cmp r2, r1
beq _02302BA8
ldrsh r1, [r5, #2]
add r0, sp, #0x18
bl GetLvlUpEntry
ldr r1, [sp, #0x18]
ldrb r3, [sp, #0x98]
str r1, [r5, #0x20]
mov r0, sl
mov r1, sb
mov r2, r8
bl LevelUp
orrs r4, r4, r0
beq _02302BA8
ldrb r0, [r5, #6]
cmp r0, #0
bne _02302BA8
ldrsh r2, [r5, #0x12]
ldrsh r1, [r5, #0x16]
ldr r0, _02302BFC ; =0x000003E7
add r1, r2, r1
cmp r1, r0
movgt r1, r0
sub r0, r1, r7
str r0, [sp, #0x48]
ldrb r1, [r5, #0x1a]
ldr r0, [sp, #8]
cmp r8, #0
sub r0, r1, r0
str r0, [sp, #0x4c]
ldrb r0, [r5, #0x1c]
sub r0, r0, fp
str r0, [sp, #0x50]
ldrb r1, [r5, #0x1b]
ldr r0, [sp, #4]
sub r0, r1, r0
str r0, [sp, #0x54]
ldrb r0, [r5, #0x1d]
sub r0, r0, r6
str r0, [sp, #0x58]
beq _02302BA8
add r1, sp, #0x24
mov r0, sb
bl ov29_02302CC8
_02302BA8:
add r2, sp, #0xc
mov r0, sl
mov r1, sb
mov r3, r8
bl ov29_02302C04
mov r0, #0
#ifdef JAPAN
str r0, [r5, #0x210]
strb r0, [r5, #0x14f]
#else
str r0, [r5, #0x214]
strb r0, [r5, #0x153]
#endif
cmp r4, #0
bne _02302BF4
cmp r8, #0
beq _02302BF4
mov r1, sb
mov r2, r0
bl SubstitutePlaceholderStringTags
ldr r2, _02302C00 ; =0x00000F1D
mov r0, sl
mov r1, sb
bl LogMessageByIdWithPopupCheckUserTarget
_02302BF4:
add sp, sp, #0x74
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02302BFC: .word 0x000003E7
#ifdef JAPAN
_02302C00: .word 0x00002484
#else
_02302C00: .word 0x00000F1D
#endif
arm_func_end LevelUpItemEffect
arm_func_start ov29_02302C04
ov29_02302C04: ; 0x02302C04
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
mov sb, r1
ldr r1, [sb, #0xb4]
mov sl, r0
ldrb r0, [r1, #7]
mov r8, r2
mov r4, r3
cmp r0, #0
beq _02302CB8
ldrb r1, [r1, #0xa]
add r0, sp, #0
bl GetUnlockedTacticFlags
ldr r0, _02302CC0 ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x748]
bl sub_0204F610
cmp r0, #0
bne _02302CB8
cmp r4, #0
beq _02302CB8
mov r7, #0
ldr r4, _02302CC4 ; =0x00000F2A
mov fp, r7
mov r5, #1
add r6, sp, #0
_02302C6C:
ldrb r0, [r8, r7]
cmp r0, #0
ldreqb r0, [r6, r7]
cmpeq r0, #1
bne _02302CAC
mov r0, fp
mov r1, sb
mov r2, fp
bl SubstitutePlaceholderStringTags
mov r0, r5
and r1, r7, #0xff
bl SetPreprocessorArgsIdVal
mov r0, sl
mov r1, sb
mov r2, r4
bl LogMessageByIdWithPopupCheckUserTarget
_02302CAC:
add r7, r7, #1
cmp r7, #0xc
blt _02302C6C
_02302CB8:
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02302CC0: .word DUNGEON_PTR
#ifdef JAPAN
_02302CC4: .word 0x00002491
#else
_02302CC4: .word 0x00000F2A
#endif
arm_func_end ov29_02302C04
arm_func_start ov29_02302CC8
ov29_02302CC8: ; 0x02302CC8
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #0x58
mov sb, r0
mov r8, r1
mov r4, #0
bl AllocateTemp1024ByteBufferFromPool
mov r5, r0
ldr r7, [sb, #0xb4]
mov r0, sb
mov r1, r4
mov r2, #1
bl TryPointCameraToMonster
add r0, sp, #0x18
mov r1, r7
bl GetMonsterName
add r1, sp, #0x18
mov r0, sb
str r1, [r8, #0x38]
bl ov29_023009CC
cmp r0, #0
beq _02302DBC
mov r0, sb
mov r6, r4
bl IsHero
cmp r0, #0
bne _02302D40
ldrb r0, [r7, #7]
cmp r0, #0
moveq r6, #1
b _02302D58
_02302D40:
ldr r0, _02302F64 ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x748]
bl IsSpecialEpisodeDungeon
cmp r0, #0
movne r6, #1
_02302D58:
cmp r6, #0
beq _02302DEC
mov r0, r7
bl GetPersonalityIndex
mov r6, r0
ldrb r0, [r7, #0x48]
bl ov29_0234CFA0
mov r2, r0
mov r0, r6
mov r1, #3
bl GetTalkLine
mov r6, r0
ldrsh r1, [r7, #4]
add r0, sp, #8
mov r2, #0
bl InitPortraitDungeon
mov r1, r6
mov r0, r5
bl GetStringFromFileVeneer
mov r0, sb
add r1, sp, #8
mov r2, r5
mov r3, #1
bl ov29_0234D304
b _02302DEC
_02302DBC:
ldr r0, _02302F68 ; =0x00000F27
bl StringFromId
mov r1, r0
mov r0, r5
bl strcpy
mov r2, r4
mov r0, r5
mov r3, r2
str r8, [sp]
mov r1, #1
str r1, [sp, #4]
bl ov29_0234D234
_02302DEC:
mov r0, #0
strb r0, [r5]
ldr r0, [r8, #0x24]
cmp r0, #0
ble _02302E18
ldr r0, _02302F6C ; =0x00000F18
bl StringFromId
mov r1, r0
mov r0, r5
bl strcat
add r4, r4, #1
_02302E18:
ldr r0, [r8, #0x28]
cmp r0, #0
ble _02302E5C
ldr r0, _02302F70 ; =ov29_023527F0
ldrb r2, [r0, r4]
cmp r2, #0
beq _02302E44
ldr r1, _02302F74 ; =ov29_023535C8
mov r0, r5
ldr r1, [r1, r2, lsl #2]
bl strcat
_02302E44:
#ifdef JAPAN
mov r0, #0x2480
#else
ldr r0, _02302F78 ; =0x00000F19
#endif
bl StringFromId
mov r1, r0
mov r0, r5
bl strcat
add r4, r4, #1
_02302E5C:
ldr r0, [r8, #0x2c]
cmp r0, #0
ble _02302EA0
ldr r0, _02302F70 ; =ov29_023527F0
ldrb r2, [r0, r4]
cmp r2, #0
beq _02302E88
ldr r1, _02302F74 ; =ov29_023535C8
mov r0, r5
ldr r1, [r1, r2, lsl #2]
bl strcat
_02302E88:
ldr r0, _02302F7C ; =0x00000F1A
bl StringFromId
mov r1, r0
mov r0, r5
bl strcat
add r4, r4, #1
_02302EA0:
ldr r0, [r8, #0x30]
cmp r0, #0
ble _02302EE4
ldr r0, _02302F70 ; =ov29_023527F0
ldrb r2, [r0, r4]
cmp r2, #0
beq _02302ECC
ldr r1, _02302F74 ; =ov29_023535C8
mov r0, r5
ldr r1, [r1, r2, lsl #2]
bl strcat
_02302ECC:
ldr r0, _02302F80 ; =0x00000F1B
bl StringFromId
mov r1, r0
mov r0, r5
bl strcat
add r4, r4, #1
_02302EE4:
ldr r0, [r8, #0x34]
cmp r0, #0
ble _02302F24
ldr r0, _02302F70 ; =ov29_023527F0
ldrb r2, [r0, r4]
cmp r2, #0
beq _02302F10
ldr r1, _02302F74 ; =ov29_023535C8
mov r0, r5
ldr r1, [r1, r2, lsl #2]
bl strcat
_02302F10:
ldr r0, _02302F84 ; =0x00000F1C
bl StringFromId
mov r1, r0
mov r0, r5
bl strcat
_02302F24:
ldrb r0, [r5]
cmp r0, #0
beq _02302F4C
mov r2, #0
mov r0, r5
mov r3, r2
str r8, [sp]
mov r1, #1
str r1, [sp, #4]
bl ov29_0234D234
_02302F4C:
bl GetLeader
mov r1, #0
mov r2, #1
bl TryPointCameraToMonster
add sp, sp, #0x58
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
#ifdef JAPAN
#define OV29_02302CC8_OFFSET 0x1567
#else
#define OV29_02302CC8_OFFSET 0
#endif
_02302F64: .word DUNGEON_PTR
_02302F68: .word 0x00000F27 + OV29_02302CC8_OFFSET
_02302F6C: .word 0x00000F18 + OV29_02302CC8_OFFSET
_02302F70: .word ov29_023527F0
_02302F74: .word ov29_023535C8
#ifndef JAPAN
_02302F78: .word 0x00000F19
#endif
_02302F7C: .word 0x00000F1A + OV29_02302CC8_OFFSET
_02302F80: .word 0x00000F1B + OV29_02302CC8_OFFSET
_02302F84: .word 0x00000F1C + OV29_02302CC8_OFFSET
arm_func_end ov29_02302CC8
arm_func_start TryDecreaseLevel
TryDecreaseLevel: ; 0x02302F88
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
sub sp, sp, #0xc
mov r7, r1
mov r8, r0
mov r0, r7
mov r6, r2
bl EntityIsValid__02302A38
cmp r0, #0
beq _02303030
ldr r5, [r7, #0xb4]
mov r4, #0
mov r0, r5
bl IsExperienceLocked
cmp r0, #0
bne _02303000
ldrb r0, [r5, #0xa]
sub r2, r0, r6
cmp r2, #1
movlt r2, #1
cmp r2, r0
beq _02303000
ldrsh r1, [r5, #2]
add r0, sp, #0
bl GetLvlUpEntry
ldr r2, [sp]
mov r0, r8
mov r1, r7
str r2, [r5, #0x20]
bl ov29_02303284
orr r4, r4, r0
_02303000:
mov r0, #0
#ifdef JAPAN
str r0, [r5, #0x210]
strb r0, [r5, #0x14f]
#else
str r0, [r5, #0x214]
strb r0, [r5, #0x153]
#endif
cmp r4, #0
bne _02303030
mov r1, r7
mov r2, r0
bl SubstitutePlaceholderStringTags
ldr r2, _02303038 ; =0x00000F1E
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
_02303030:
add sp, sp, #0xc
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
.align 2, 0
#ifdef JAPAN
_02303038: .word 0x00002485
#else
_02303038: .word 0x00000F1E
#endif
arm_func_end TryDecreaseLevel
arm_func_start LevelUp
LevelUp: ; 0x0230303C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x18
mov sl, r1
str r0, [sp, #4]
mov r0, sl
mov r6, #0
mov sb, r2
str r3, [sp, #8]
bl EntityIsValid__02302A38
cmp r0, #0
moveq r0, r6
beq _02303268
ldr r7, [sl, #0xb4]
mov r0, r7
ldrsh fp, [r7, #2]
ldr r8, [r7, #0x20]
bl IsExperienceLocked
cmp r0, #0
movne r0, r6
bne _02303268
ldrb r0, [r7, #0xa]
ldr r4, _02303270 ; =ov29_0237C9C4
add r5, r0, #1
b _0230325C
_0230309C:
add r0, sp, #0xc
mov r1, fp
mov r2, r5
bl GetLvlUpEntry
ldr r0, [sp, #0xc]
cmp r0, r8
bgt _02303264
strb r5, [r7, #0xa]
str r8, [r7, #0x20]
cmp sb, #0
beq _02303160
ldrb r0, [r7, #6]
cmp r0, #0
bne _02303124
mov r0, sl
mov r1, #0
mov r2, #1
bl TryPointCameraToMonster
cmp r6, #0
bne _023030F0
bl ov29_022EAC7C
_023030F0:
mov r0, #0
mov r1, r5
bl SetMessageLogPreprocessorArgsNumberVal
bl GetMessageLogPreprocessorArgs
mov r1, #0
mov r2, r7
mov r3, r1
str r1, [sp]
bl SetPreprocessorArgsStringToName
#ifdef JAPAN
ldr r1, _023047C0 ; =0x00002487
mov r0, sl
#else
mov r0, sl
mov r1, #0xf20
#endif
bl ov29_0234D484
b _02303160
_02303124:
cmp r6, #0
bne _02303130
bl ov29_022EAC7C
_02303130:
mov r0, #0
mov r1, r5
bl SetMessageLogPreprocessorArgsNumberVal
bl GetMessageLogPreprocessorArgs
mov r1, #0
mov r2, r7
mov r3, r1
str r1, [sp]
bl SetPreprocessorArgsStringToName
#ifdef JAPAN
ldr r1, _023047C0 ; =0x00002487
mov r0, sl
#else
mov r0, sl
mov r1, #0xf20
#endif
bl LogMessageByIdWithPopup
_02303160:
ldrh r1, [sp, #0x10]
add r0, r7, #0x12
mov r6, #1
bl sub_02054FB8
ldrsh r1, [r7, #0x10]
ldrh r0, [sp, #0x10]
add r0, r1, r0
strh r0, [r7, #0x10]
ldrsh r1, [r7, #0x12]
ldrsh r0, [r7, #0x16]
add r2, r1, r0
ldr r0, _02303274 ; =0x000003E7
cmp r2, r0
movgt r1, r0
ldrsh r0, [r7, #0x10]
movle r1, r2
cmp r0, r1
blt _023031B8
ldr r0, _02303274 ; =0x000003E7
cmp r2, r0
movgt r2, r0
strh r2, [r7, #0x10]
_023031B8:
ldr r0, _02303278 ; =ov29_0237C9C8
ldrb r2, [r7, #0x1a]
mov r1, r0
strb r2, [r1]
ldrb r2, [r7, #0x1b]
strb r2, [r1, #1]
ldrb r1, [r7, #0x1c]
strb r1, [r4]
ldrb r1, [r7, #0x1d]
strb r1, [r4, #1]
ldrb r1, [sp, #0x12]
bl sub_02054FEC
ldrb r1, [sp, #0x13]
ldr r0, _0230327C ; =ov29_0237C9C9
bl sub_02054FEC
ldrb r1, [sp, #0x14]
mov r0, r4
bl sub_02055020
ldrb r1, [sp, #0x15]
ldr r0, _02303280 ; =ov29_0237C9C5
bl sub_02055020
mov r0, sl
bl ov29_023021F0
mov r0, sl
bl ov29_02318D58
ldr r0, _02303278 ; =ov29_0237C9C8
mov r1, sl
ldrb r2, [r0]
ldr r0, [sp, #4]
strb r2, [r7, #0x1a]
ldr r2, _02303278 ; =ov29_0237C9C8
ldr r3, [sp, #8]
ldrb ip, [r2, #1]
mov r2, sb
strb ip, [r7, #0x1b]
ldrb ip, [r4]
strb ip, [r7, #0x1c]
ldrb ip, [r4, #1]
strb ip, [r7, #0x1d]
bl ov29_023034E0
add r5, r5, #1
_0230325C:
cmp r5, #0x64
ble _0230309C
_02303264:
mov r0, r6
_02303268:
add sp, sp, #0x18
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02303270: .word ov29_0237C9C4
#ifdef JAPAN
_023047C0: .word 0x00002487
#endif
_02303274: .word 0x000003E7
_02303278: .word ov29_0237C9C8
_0230327C: .word ov29_0237C9C9
_02303280: .word ov29_0237C9C5
arm_func_end LevelUp
arm_func_start ov29_02303284
ov29_02303284: ; 0x02303284
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x14
mov sl, r1
str r0, [sp, #4]
mov r0, sl
bl EntityIsValid__02302A38
cmp r0, #0
moveq r0, #0
beq _023034BC
ldr r7, [sl, #0xb4]
mov r0, r7
ldrsh r5, [r7, #2]
ldr r8, [r7, #0x20]
ldrb r6, [r7, #0xa]
bl IsExperienceLocked
cmp r0, #0
movne r0, #0
bne _023034BC
mov sb, #1
add r4, sp, #8
b _023032F8
_023032D8:
mov r0, r4
mov r1, r5
mov r2, sb
bl GetLvlUpEntry
ldr r0, [sp, #8]
cmp r0, r8
bge _02303304
add sb, sb, #1
_023032F8:
ldrb r0, [r7, #0xa]
cmp sb, r0
blt _023032D8
_02303304:
sub r4, sb, #1
ldrb sb, [r7, #0xa]
ldr fp, _023034C4 ; =ov29_0237C9C4
b _02303450
_02303314:
cmp sb, #0x64
strge r8, [r7, #0x20]
bge _0230333C
add r0, sp, #8
mov r1, r5
add r2, sb, #1
bl GetLvlUpEntry
ldr r0, [sp, #8]
sub r0, r0, #1
str r0, [r7, #0x20]
_0230333C:
cmp r6, sb
ble _0230344C
add r0, sp, #8
mov r1, r5
add r2, sb, #1
bl GetLvlUpEntry
strb sb, [r7, #0xa]
ldrh r1, [sp, #0xc]
add r0, r7, #0x10
rsb r1, r1, #0
bl sub_02054FB8
ldrh r1, [sp, #0xc]
add r0, r7, #0x12
rsb r1, r1, #0
bl sub_02054FB8
ldrsh r1, [r7, #0x12]
ldrsh r0, [r7, #0x16]
add r2, r1, r0
ldr r0, _023034C8 ; =0x000003E7
cmp r2, r0
movgt r1, r0
ldrsh r0, [r7, #0x10]
movle r1, r2
cmp r0, r1
blt _023033B0
ldr r0, _023034C8 ; =0x000003E7
cmp r2, r0
movgt r2, r0
strh r2, [r7, #0x10]
_023033B0:
ldr r0, _023034CC ; =ov29_0237C9C8
ldrb r2, [r7, #0x1a]
mov r1, r0
strb r2, [r1]
ldrb r2, [r7, #0x1b]
strb r2, [r1, #1]
ldrb r1, [r7, #0x1c]
strb r1, [fp]
ldrb r1, [r7, #0x1d]
strb r1, [fp, #1]
ldrb r1, [sp, #0xe]
rsb r1, r1, #0
bl sub_02054FEC
ldrb r1, [sp, #0xf]
ldr r0, _023034D0 ; =ov29_0237C9C9
rsb r1, r1, #0
bl sub_02054FEC
ldrb r1, [sp, #0x10]
mov r0, fp
rsb r1, r1, #0
bl sub_02055020
ldrb r1, [sp, #0x11]
ldr r0, _023034D4 ; =ov29_0237C9C5
rsb r1, r1, #0
bl sub_02055020
mov r0, sl
bl ov29_023021F0
mov r0, sl
bl ov29_02318D58
ldr r0, _023034CC ; =ov29_0237C9C8
ldrb r0, [r0]
strb r0, [r7, #0x1a]
ldr r0, _023034CC ; =ov29_0237C9C8
ldrb r0, [r0, #1]
strb r0, [r7, #0x1b]
ldrb r0, [fp]
strb r0, [r7, #0x1c]
ldrb r0, [fp, #1]
strb r0, [r7, #0x1d]
_0230344C:
sub sb, sb, #1
_02303450:
cmp sb, r4
bgt _02303314
bl GetMessageLogPreprocessorArgs
mov r1, #0
mov r2, r7
mov r3, r1
str r1, [sp]
bl SetPreprocessorArgsStringToName
ldrb r1, [r7, #0xa]
cmp r1, r6
bne _02303494
ldr r2, _023034D8 ; =0x00000F22
ldr r0, [sp, #4]
mov r1, sl
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, #0
b _023034BC
_02303494:
mov r0, #0
bl SetMessageLogPreprocessorArgsNumberVal
mov r0, sl
mov r1, #0x204
bl PlaySeByIdIfShouldDisplayEntity
ldr r2, _023034DC ; =0x00000F21
ldr r0, [sp, #4]
mov r1, sl
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, #1
_023034BC:
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_023034C4: .word ov29_0237C9C4
_023034C8: .word 0x000003E7
_023034CC: .word ov29_0237C9C8
_023034D0: .word ov29_0237C9C9
_023034D4: .word ov29_0237C9C5
#ifdef JAPAN
_023034D8: .word 0x00002489
_023034DC: .word 0x00002488
#else
_023034D8: .word 0x00000F22
_023034DC: .word 0x00000F21
#endif
arm_func_end ov29_02303284
arm_func_start ov29_023034E0
ov29_023034E0: ; 0x023034E0
#ifdef JAPAN
#define OV29_023034E0_OFFSET -4
#else
#define OV29_023034E0_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x78
mov sb, r1
ldr r5, [sb, #0xb4]
mov r4, #0
ldrb r0, [r5, #6]
mov r8, r2
mov fp, r4
str r3, [sp, #8]
cmp r0, #0
str r4, [sp, #0xc]
add r0, r5, #0x4a
strne r4, [sp, #8]
movne r8, r4
bl ov29_022EBCE8
mov sl, #0
mov r6, r0
mvn r0, #0
cmp r6, r0
addne r0, r5, r6, lsl #3
addne r0, r0, #0x100
ldrneh r7, [r0, #0x28 + OV29_023034E0_OFFSET]
mov ip, sl
mov lr, sl
moveq r7, #0
mov r3, #1
add r0, sp, #0x10
_0230354C:
add r1, r5, ip, lsl #3
ldrb r1, [r1, #0x124 + OV29_023034E0_OFFSET]
tst r1, #1
movne r1, r3
moveq r1, lr
tst r1, #0xff
beq _02303588
add r1, r5, ip, lsl #3
add r1, r1, #0x100
ldrh r2, [r1, #0x28 + OV29_023034E0_OFFSET]
mov r1, sl, lsl #1
add sl, sl, #1
strh r2, [r0, r1]
mov r1, sl, lsl #0x10
mov sl, r1, asr #0x10
_02303588:
add r1, ip, #1
mov r1, r1, lsl #0x10
mov ip, r1, asr #0x10
cmp ip, #4
blt _0230354C
mov r2, sl
mov r3, #0
add r1, sp, #0x10
b _023035C0
_023035AC:
add r0, r2, #1
mov r0, r0, lsl #0x10
mov r2, r2, lsl #1
strh r3, [r1, r2]
mov r2, r0, asr #0x10
_023035C0:
cmp r2, #4
blt _023035AC
add r1, sp, #0x10
stmia sp, {r1, sl}
ldrsh r1, [r5, #2]
ldrb r2, [r5, #0xa]
ldrsh r3, [r5, #0xe]
add r0, sp, #0x58
bl sub_02053904
mov sl, r0
add r0, sp, #0x18
add r1, r5, #0x124 + OV29_023034E0_OFFSET
bl sub_020149C0
cmp sl, #0
beq _02303670
mov r0, sl
bl DungeonRandInt
mov sl, #0
add ip, sp, #0x18
mov r1, sl
mov r2, #1
b _02303668
_02303618:
ldrb r3, [ip, sl, lsl #3]
tst r3, #1
movne r3, r2
moveq r3, r1
tst r3, #0xff
bne _02303664
add r1, sp, #0x58
mov r0, r0, lsl #1
ldrh r2, [r1, r0]
add r3, sp, #0x18
mov r0, sb
add r1, r3, sl, lsl #3
bl InitMoveWrapper
add r2, sp, #0x1a
mov r1, sl, lsl #3
ldrh r0, [r2, r1]
orr r0, r0, #4
strh r0, [r2, r1]
b _02303670
_02303664:
add sl, sl, #1
_02303668:
cmp sl, #8
blt _02303618
_02303670:
add sl, sp, #0x18
_02303674:
mov lr, #0
mov r1, lr
_0230367C:
ldrb r0, [sl, r1, lsl #3]
add r1, r1, #1
tst r0, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
addne lr, lr, #1
cmp r1, #8
blt _0230367C
cmp lr, #4
bgt _02303770
mov sl, #0
mov ip, sl
b _023036FC
_023036B4:
add r1, r5, ip, lsl #3
add r0, sp, #0x18
add r2, r1, #0x124 + OV29_023034E0_OFFSET
add r3, r0, ip, lsl #3
mov r1, #4
_023036C8:
ldrh r0, [r3], #2
subs r1, r1, #1
strh r0, [r2], #2
bne _023036C8
add r0, r5, ip, lsl #3
add r0, r0, #0x100
ldrh r1, [r0, #0x26 + OV29_023034E0_OFFSET]
add ip, ip, #1
tst r1, #4
bicne r1, r1, #4
strneh r1, [r0, #0x26 + OV29_023034E0_OFFSET]
ldrneh r4, [r0, #0x28 + OV29_023034E0_OFFSET]
movne sl, #1
_023036FC:
cmp ip, lr
blt _023036B4
mov r1, #0
b _02303718
_0230370C:
add r0, r5, ip, lsl #3
strb r1, [r0, #0x124 + OV29_023034E0_OFFSET]
add ip, ip, #1
_02303718:
cmp ip, #4
blt _0230370C
cmp sl, #0
cmpne r8, #0
beq _02303818
bl GetMessageLogPreprocessorArgs
mov r1, #0
mov r2, r5
mov r3, r1
str r1, [sp]
bl SetPreprocessorArgsStringToName
mov r1, r4
mov r0, #0
bl SetPreprocessorArgsIdVal
ldr r1, _023038C4 ; =0x0000131B
mov r0, sb
bl PlaySeByIdIfShouldDisplayEntity
ldr r1, _023038C8 ; =0x00000F23
mov r0, sb
bl ov29_0234D484
mov fp, #1
b _02303818
_02303770:
ldrb r0, [r5, #6]
cmp r0, #0
bne _02303808
ldr r0, [sp, #8]
cmp r0, #0
beq _02303808
ldr r0, [sp, #0xc]
cmp r0, #0
bne _023037E8
cmp r8, #0
beq _023037E8
mov r0, #0xa
mov r1, #6
bl ov29_022EA370
ldrsh r1, [r5, #2]
ldr r0, _023038CC ; =0xFFFFFE5E
mov r2, #1
add r0, r1, r0
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, #3
mov r0, #0
ldr r1, _023038D0 ; =0x00000F25
bhi _023037E4
add r1, r1, #1
bl DisplayMessage2
b _023037E8
_023037E4:
bl DisplayMessage2
_023037E8:
mov r0, #1
str r0, [sp, #0xc]
mov r0, sb
mov r1, sl
mov r2, #1
mov r3, #0
bl ov29_0234FAEC
b _02303674
_02303808:
mov r0, sb
mov r1, sl
bl ov29_02303BEC
b _02303674
_02303818:
cmp fp, #0
cmpne r7, #0
mvnne r0, #0
cmpne r6, r0
beq _023038BC
mov r2, #0
mov r4, r6
mov r0, r2
mov r1, #1
b _0230389C
_02303840:
add r3, r5, r4, lsl #3
ldrb r3, [r3, #0x124 + OV29_023034E0_OFFSET]
tst r3, #1
movne r3, r1
moveq r3, r0
tst r3, #0xff
beq _02303870
add r3, r5, r4, lsl #3
add r3, r3, #0x100
ldrh r3, [r3, #0x28 + OV29_023034E0_OFFSET]
cmp r7, r3
beq _023038A4
_02303870:
add r3, r4, #1
mov r3, r3, lsl #0x10
mov r3, r3, asr #0x10
mov r4, r3, lsr #0x1f
rsb r3, r4, r3, lsl #30
add r4, r4, r3, ror #30
add r3, r2, #1
mov r2, r4, lsl #0x10
mov r3, r3, lsl #0x10
mov r4, r2, asr #0x10
mov r2, r3, asr #0x10
_0230389C:
cmp r2, #4
blt _02303840
_023038A4:
cmp r2, #4
beq _023038B4
cmp r4, r6
beq _023038BC
_023038B4:
mov r0, #1
strb r0, [r5, #0x23e + OV29_023034E0_OFFSET]
_023038BC:
add sp, sp, #0x78
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_023038C4: .word 0x0000131B
#ifdef JAPAN
_023038C8: .word 0x0000248A
_023038CC: .word 0xFFFFFE5E
_023038D0: .word 0x0000248C
#else
_023038C8: .word 0x00000F23
_023038CC: .word 0xFFFFFE5E
_023038D0: .word 0x00000F25
#endif
arm_func_end ov29_023034E0
; https://decomp.me/scratch/wws4M
arm_func_start DungeonTmLearnMove
DungeonTmLearnMove: ; 0x023038D4
#ifdef JAPAN
#define OV29_023038D4_OFFSET -4
#else
#define OV29_023038D4_OFFSET 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xa4
mov sl, r0
ldr r8, [sl, #0xb4]
mov r6, r1
mov r5, #0
add r0, sp, #0
add r1, r8, #0x124 + OV29_023038D4_OFFSET
mov r7, r5
bl sub_020149C0
mov r4, r5
add r3, sp, #0
mov r0, r5
mov r1, #1
b _02303958
_02303910:
ldrb r2, [r3, r4, lsl #3]
tst r2, #1
movne r2, r1
moveq r2, r0
tst r2, #0xff
bne _02303954
add r1, sp, #0
mov r0, sl
mov r2, r6
add r1, r1, r4, lsl #3
bl InitMoveWrapper
add r2, sp, #2
mov r1, r4, lsl #3
ldrh r0, [r2, r1]
orr r0, r0, #4
strh r0, [r2, r1]
b _02303960
_02303954:
add r4, r4, #1
_02303958:
cmp r4, #8
blt _02303910
_02303960:
mov sb, #0
mov fp, #1
add r4, sp, #0
b _02303AC8
_02303970:
mov r6, #0
mov r1, r6
_02303978:
ldrb r0, [r4, r1, lsl #3]
add r1, r1, #1
tst r0, #1
movne r0, fp
moveq r0, #0
tst r0, #0xff
addne r6, r6, #1
cmp r1, #8
blt _02303978
cmp r6, #4
bgt _02303A84
mov sb, #0
add r4, r8, #0x124 + OV29_023038D4_OFFSET
add fp, sp, #0
b _02303A14
_023039B4:
add r0, r8, sb, lsl #3
add r3, fp, sb, lsl #3
add r2, r0, #0x124 + OV29_023038D4_OFFSET
mov r1, #4
_023039C4:
ldrh r0, [r3], #2
subs r1, r1, #1
strh r0, [r2], #2
bne _023039C4
add r0, r8, sb, lsl #3
add r3, r0, #0x100
ldrh r0, [r3, #0x26 + OV29_023038D4_OFFSET]
tst r0, #4
beq _02303A10
bic r5, r0, #4
add r0, sp, #0x40
mov r2, #0
add r1, r4, sb, lsl #3
strh r5, [r3, #0x26 + OV29_023038D4_OFFSET]
bl FormatMoveString
add r0, r8, sb, lsl #3
add r0, r0, #0x100
ldrh r5, [r0, #0x28 + OV29_023038D4_OFFSET]
mov r7, #1
_02303A10:
add sb, sb, #1
_02303A14:
cmp sb, r6
blt _023039B4
mov r1, #0
b _02303A30
_02303A24:
add r0, r8, sb, lsl #3
strb r1, [r0, #0x124 + OV29_023038D4_OFFSET]
add sb, sb, #1
_02303A30:
cmp sb, #4
blt _02303A24
cmp r7, #0
beq _02303AD0
ldrb r0, [r8, #6]
cmp r0, #0
bne _02303AD0
mov r0, #0
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r1, r5
mov r0, #0
bl SetPreprocessorArgsIdVal
ldr r1, _02303B08 ; =0x0000131B
mov r0, sl
bl PlaySeByIdIfShouldDisplayEntity
ldr r1, _02303B0C ; =0x00000F23
mov r0, sl
bl ov29_0234D484
b _02303AD0
_02303A84:
ldrb r0, [r8, #6]
mov r7, #0
cmp r0, #0
bne _02303AC4
ldr r1, _02303B10 ; =0x00000F28
mov r0, r7
mov r2, #1
bl DisplayMessage
mov r2, #1
mov r0, sl
mov r1, r4
mov r3, r2
bl ov29_0234FAEC
cmp r0, #0
moveq r0, r7
beq _02303B00
_02303AC4:
add sb, sb, #1
_02303AC8:
cmp sb, #0x1e
blt _02303970
_02303AD0:
cmp r7, #0
ldreqb r0, [r8, #6]
cmpeq r0, #0
bne _02303AFC
mov r0, #0
mov r1, sl
mov r2, r0
bl SubstitutePlaceholderStringTags
ldr r1, _02303B14 ; =0x00000F24
mov r0, sl
bl ov29_0234D484
_02303AFC:
mov r0, #1
_02303B00:
add sp, sp, #0xa4
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02303B08: .word 0x0000131B
#ifdef JAPAN
_02303B0C: .word 0x0000248A
_02303B10: .word 0x0000248F
_02303B14: .word 0x0000248B
#else
_02303B0C: .word 0x00000F23
_02303B10: .word 0x00000F28
_02303B14: .word 0x00000F24
#endif
arm_func_end DungeonTmLearnMove
arm_func_start GetMonsterMoves
GetMonsterMoves: ; 0x02303B18
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #4
mov sb, r2
mov r2, #0
mov sl, r0
mov r8, r2
_02303B30:
mov r0, r2, lsl #1
add r2, r2, #1
strh r8, [sl, r0]
cmp r2, #4
blt _02303B30
mov r0, r1
bl GetMovesetLevelUpPtr
mov r7, r0
add r6, sp, #0
mov r5, #0
mov r4, #4
b _02303BD8
_02303B60:
mov r0, r7
mov r1, r6
bl GetEncodedHalfword
ldrb r1, [r0]
add r7, r0, #1
cmp r1, sb
bgt _02303BE4
mov r1, r5
ldrh r2, [sp]
b _02303BA4
_02303B88:
mov r0, r1, lsl #1
ldrh r0, [sl, r0]
cmp r2, r0
beq _02303BAC
add r0, r1, #1
mov r0, r0, lsl #0x10
mov r1, r0, asr #0x10
_02303BA4:
cmp r1, #4
blt _02303B88
_02303BAC:
cmp r1, #4
bne _02303BD8
cmp r8, #4
movne r0, r8
addne r8, r8, #1
bne _02303BCC
mov r0, r4
bl DungeonRandInt
_02303BCC:
ldrh r1, [sp]
mov r0, r0, lsl #1
strh r1, [sl, r0]
_02303BD8:
ldrb r0, [r7]
cmp r0, #0
bne _02303B60
_02303BE4:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
arm_func_end GetMonsterMoves
arm_func_start ov29_02303BEC
ov29_02303BEC: ; 0x02303BEC
stmdb sp!, {r4, lr}
mov r0, #0
mov r4, r1
mov ip, r0
mov r2, r0
mov r3, #1
_02303C04:
ldrb r1, [r4, ip, lsl #3]
tst r1, #1
movne r1, r3
moveq r1, r2
tst r1, #0xff
ldrneb r1, [r4, ip, lsl #3]
addne r0, r0, #1
bicne r1, r1, #2
strneb r1, [r4, ip, lsl #3]
add ip, ip, #1
cmp ip, #8
blt _02303C04
bl DungeonRandInt
add r1, r4, r0, lsl #3
ldrh lr, [r1, #4]
b _02303C64
_02303C44:
add ip, r4, r0, lsl #3
add r3, ip, #8
mov r2, #4
_02303C50:
ldrh r1, [r3], #2
subs r2, r2, #1
strh r1, [ip], #2
bne _02303C50
add r0, r0, #1
_02303C64:
cmp r0, #7
blt _02303C44
mov r1, #0
mov r0, lr
strb r1, [r4, #0x38]
ldmia sp!, {r4, pc}
arm_func_end ov29_02303BEC
arm_func_start EvolveMonster
EvolveMonster: ; 0x02303C7C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #0x20
mov r7, r1
ldr r6, [r7, #0xb4]
mov r8, r0
mov r5, r2
bl GetMessageLogPreprocessorArgs
mov r1, #0
mov r2, r6
mov r3, r1
str r1, [sp]
bl SetPreprocessorArgsStringToName
mov r1, r5
mov r0, #1
bl SetMessageLogPreprocessorArgsFlagVal
mov r0, r5
bl DungeonGetSpriteIndex
strh r5, [r6, #4]
strh r5, [r6, #2]
mov r4, r0
ldrb r2, [r6, #0xa]
add r0, sp, #0x14
mov r1, r5
bl GetLvlUpEntry
ldr r1, [sp, #0x14]
mov r0, r6
str r1, [r6, #0x20]
mov r1, #0
strh r4, [r7, #0xa8]
bl SubInitMonster
mov r0, r7
bl SetMonsterTypeAndAbility
mov r0, r7
mov r1, #7
bl ov29_02304830
ldr r2, _02303DFC ; =0x00000F29
mov r0, r8
mov r1, r7
bl LogMessageByIdWithPopupCheckUserTarget
mov r0, r7
bl ov29_022E6724
bl ov29_022EAC9C
ldr r0, _02303E00 ; =0x0000013F
cmp r5, r0
addne r0, r0, #0x258
cmpne r5, r0
bne _02303DF4
mov r5, #0
ldr r4, _02303E04 ; =DIRECTIONS_XY
mov r8, #0x140
b _02303D84
_02303D48:
mov r1, r5, lsl #2
add r0, r4, r5, lsl #2
ldrsh ip, [r7, #4]
ldrsh r3, [r4, r1]
ldrsh r2, [r7, #6]
ldrsh r1, [r0, #2]
add r0, ip, r3
add r1, r2, r1
bl GetTile
mov r1, r0
mov r0, r8
bl IsInvalidSpawnTile
cmp r0, #0
beq _02303D8C
add r5, r5, #1
_02303D84:
cmp r5, #8
blt _02303D48
_02303D8C:
mov r0, #0x140
bl IsOnMonsterSpawnList
cmp r0, #0
beq _02303DF4
mov r0, #0x140
strh r0, [sp, #4]
ldrb r1, [r6, #0xa]
mov r2, #0
ldr r0, _02303E04 ; =DIRECTIONS_XY
mov r5, r5, lsl #2
strh r1, [sp, #0xc]
strb r2, [sp, #6]
ldrsh r3, [r0, r5]
ldrsh r4, [r7, #4]
ldr r1, _02303E08 ; =DIRECTIONS_XY + 2
add r0, sp, #4
add r3, r4, r3
strh r3, [sp, #0xe]
ldrsh r4, [r7, #6]
ldrsh r3, [r1, r5]
mov r1, #1
str r2, [sp, #8]
add r3, r4, r3
strh r3, [sp, #0x10]
strb r2, [sp, #0x12]
bl SpawnMonster
_02303DF4:
add sp, sp, #0x20
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
#ifdef JAPAN
_02303DFC: .word 0x00002490
#else
_02303DFC: .word 0x00000F29
#endif
_02303E00: .word 0x0000013F
_02303E04: .word DIRECTIONS_XY
_02303E08: .word DIRECTIONS_XY + 2
arm_func_end EvolveMonster
arm_func_start ov29_02303E0C
ov29_02303E0C: ; 0x02303E0C
stmdb sp!, {r3, lr}
ldrb r1, [r0, #0xbc]
cmp r1, #1
cmpne r1, #2
cmpne r1, #3
cmpne r1, #0xb
cmpne r1, #0xc
cmpne r1, #0xd
cmpne r1, #0xe
beq _02303E4C
cmp r1, #4
bne _02303E54
ldrsh r0, [r0, #2]
bl NeedsItemToSpawn
cmp r0, #0
beq _02303E54
_02303E4C:
mov r0, #1
ldmia sp!, {r3, pc}
_02303E54:
mov r0, #0
ldmia sp!, {r3, pc}
arm_func_end ov29_02303E0C
arm_func_start ov29_02303E5C
ov29_02303E5C: ; 0x02303E5C
stmdb sp!, {r3, r4, r5, lr}
mvn r4, #0x1f
cmp r3, r4
ldrgtsh ip, [sp, #0x10]
cmpgt ip, r4
ldmleia sp!, {r3, r4, r5, pc}
rsb lr, r4, #0xff
cmp r3, lr
cmplt ip, #0xe0
ldmgeia sp!, {r3, r4, r5, pc}
cmp r1, #6
ldmeqia sp!, {r3, r4, r5, pc}
ldr r5, _02303F0C ; =ov29_0237C888
mov lr, #0x48
smlabb r5, r2, lr, r5
mov r2, #0xc
mla r1, r2, r1, r5
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldrh lr, [r1, #2]
ldrsh r5, [r1, #8]
sub r0, r2, #0x20c
and r0, lr, r0
strh r0, [r1, #2]
ldrh r2, [r1, #2]
add r0, r3, r5
and r0, r0, r4, lsr #23
orr r0, r2, r0
strh r0, [r1, #2]
ldrh r3, [r1, #6]
ldrsh r4, [r1, #0xa]
ldr r0, _02303F10 ; =0xFFFF000F
ldr r2, _02303F14 ; =_020AFC4C
and r0, r3, r0
strh r0, [r1, #6]
add r0, ip, r4
ldrh r4, [r1, #6]
mov r3, r0, lsl #0x14
ldr r0, [r2]
orr r3, r4, r3, lsr #16
mov r2, #0
strh r3, [r1, #6]
bl sub_0201B9F8
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02303F0C: .word ov29_0237C888
_02303F10: .word 0xFFFF000F
_02303F14: .word _020AFC4C
arm_func_end ov29_02303E5C
arm_func_start ov29_02303F18
ov29_02303F18: ; 0x02303F18
#ifdef JAPAN
#define OV29_02303F18_OFFSET -4
#define OV29_02303F18_OFFSET_2 -0xA4
#else
#define OV29_02303F18_OFFSET 0
#define OV29_02303F18_OFFSET_2 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #0x38
ldr r1, _023046C8 ; =DUNGEON_PTR
mov r7, r0
ldr r0, [r1]
ldr r5, [r7, #0xb4]
add r0, r0, #0x1a000
ldr r1, [r0, #0x22c + OV29_02303F18_OFFSET_2]
cmp r1, r7
moveq r4, #0
ldrneb r4, [r0, #0x245 + OV29_02303F18_OFFSET_2]
ldrb r0, [r5, #0xd8]
ldrb r1, [r7, #0xaf]
cmp r0, #2
ldrb r0, [r7, #0xae]
moveq r4, #1
cmp r1, r0
ldreqb r1, [r7, #0xb1]
ldreqb r0, [r7, #0xb0]
cmpeq r1, r0
ldreqb r0, [r7, #0xb3]
cmpeq r0, #0
bne _02304044
add r0, r7, #0x2c
mov r6, #0
bl sub_0201D1B0
cmp r0, #0
moveq r6, #1
cmp r6, #0
beq _02304044
mov r0, r7
bl GetIdleAnimationId
mov r3, #1
strb r3, [r7, #0x21]
#ifdef JAPAN
ldrb r1, [r5, #0x109]
#else
ldrb r1, [r5, #0x10a]
#endif
cmp r1, #0x63
bne _02303FF4
ldrb r6, [r7, #0xaf]
cmp r6, #0xd
bhs _02303FF0
ldrb r1, [r5, #0xd2]
cmp r1, #1
moveq r3, #2
beq _02303FD4
ldrb r1, [r7, #0x23]
cmp r1, #3
movlo r3, #0
_02303FD4:
ldr r2, _023046CC ; =ov29_02352810
mov r1, #0xd
mla r1, r3, r1, r2
ldrb r1, [r6, r1]
cmp r1, #7
moveq r1, r0
b _02303FF4
_02303FF0:
mov r1, #0x63
_02303FF4:
cmp r1, #0x63
beq _02304044
strb r1, [r7, #0xae]
mov r1, #0
strb r1, [r7, #0x28]
ldrb r2, [r7, #0xb1]
mov r1, #1
and r2, r2, #7
strb r2, [r7, #0xb0]
strb r1, [r7, #0xb3]
ldrb r1, [r5, #0x23d + OV29_02303F18_OFFSET]
cmp r1, #0
ldreqb r1, [r7, #0xae]
cmpeq r1, #6
ldreqb r1, [r7, #0xb2]
addeq r2, r1, #1
andeq r1, r2, #0xff
streqb r2, [r7, #0xb2]
cmpeq r1, #0x10
streqb r0, [r7, #0xae]
_02304044:
ldrh r0, [r7, #0x2e]
orr r0, r0, #0x10
strh r0, [r7, #0x2e]
ldrb r2, [r7, #0xae]
ldrb r0, [r7, #0xaf]
cmp r0, r2
ldreqb r1, [r7, #0xb1]
ldreqb r0, [r7, #0xb0]
cmpeq r1, r0
ldreqb r0, [r7, #0xb3]
cmpeq r0, #0
beq _023041F4
strb r2, [r7, #0xaf]
ldrb r1, [r7, #0xb0]
mov r0, #0
strb r1, [r7, #0xb1]
strb r0, [r7, #0xb3]
ldrb r0, [r7, #0x28]
cmp r0, #0
movne r6, #2
ldreqsh r6, [r7, #0xac]
cmp r4, #0
bne _0230414C
cmp r0, #0
beq _023040EC
bl GetLoadedAttackSpriteId
mov r1, r0
add r0, r7, #0x2c
bl SetSpriteIdForAnimationControl
bl Rand16Bit
mov r1, r6, lsl #0x10
mov r3, r1, asr #0x10
mov r1, #0
str r1, [sp]
and r0, r0, #3
stmib sp, {r0, r1}
str r1, [sp, #0xc]
ldrb r1, [r7, #0xae]
ldrb r2, [r7, #0xb0]
add r0, r7, #0x2c
bl SetAndPlayAnimationForAnimationControl
b _023041E4
_023040EC:
ldrsh r1, [r7, #0xa8]
add r0, r7, #0x2c
bl SetSpriteIdForAnimationControl
bl Rand16Bit
ldrb r1, [r7, #0xaa]
and r0, r0, #3
mov r3, r6, lsl #0x10
str r1, [sp]
str r0, [sp, #4]
mov r0, #0
str r0, [sp, #8]
str r0, [sp, #0xc]
ldrb r1, [r7, #0xae]
ldrb r2, [r7, #0xb0]
add r0, r7, #0x2c
mov r3, r3, asr #0x10
bl SetAndPlayAnimationForAnimationControl
ldrb r0, [r5, #0x171 + OV29_02303F18_OFFSET]
cmp r0, #0
beq _023041E4
add r0, r7, #0x2c
mov r1, #1
bl sub_0201D198
b _023041E4
_0230414C:
cmp r0, #0
beq _02304198
bl GetLoadedAttackSpriteId
mov r1, r0
add r0, r7, #0x2c
bl SetSpriteIdForAnimationControl
bl Rand16Bit
mov r1, r6, lsl #0x10
mov r3, r1, asr #0x10
mov r1, #0
str r1, [sp]
and r0, r0, #3
stmib sp, {r0, r1}
str r1, [sp, #0xc]
ldrb r1, [r7, #0xae]
ldrb r2, [r7, #0xb0]
add r0, r7, #0x2c
bl SetAndPlayAnimationForAnimationControl
b _023041E4
_02304198:
ldr r0, _023046D0 ; =0x00000229
bl DungeonGetSpriteIndex
mov r1, r0
add r0, r7, #0x2c
bl SetSpriteIdForAnimationControl
bl Rand16Bit
mov r1, r6, lsl #0x10
mov r3, r1, asr #0x10
ldrb r2, [r7, #0xaa]
and r1, r0, #3
mov r0, #0
str r2, [sp]
str r1, [sp, #4]
str r0, [sp, #8]
str r0, [sp, #0xc]
add r0, r7, #0x2c
ldrb r1, [r7, #0xae]
ldrb r2, [r7, #0xb0]
bl SetAndPlayAnimationForAnimationControl
_023041E4:
ldrb r0, [r7, #0xae]
cmp r0, #6
movne r0, #0
strneb r0, [r7, #0xb2]
_023041F4:
ldr r1, [r7, #0xc]
ldr r0, [r7, #0x14]
cmp r1, r0
ldreq r1, [r7, #0x10]
ldreq r0, [r7, #0x18]
cmpeq r1, r0
bne _02304224
ldrb r0, [r7, #0x23]
cmp r0, #0xa
addlo r0, r0, #1
strlob r0, [r7, #0x23]
b _0230422C
_02304224:
mov r0, #0
strb r0, [r7, #0x23]
_0230422C:
ldr r1, [r7, #0xc]
ldr r0, _023046D4 ; =0x0001A224
str r1, [r7, #0x14]
ldr r2, [r7, #0x10]
ldr r1, _023046C8 ; =DUNGEON_PTR
str r2, [r7, #0x18]
ldr r8, [r1]
add r1, r0, #2
ldrsh r4, [r8, r1]
ldr r6, [r7, #0x10]
ldr r3, [r7, #0x1c]
ldrb r2, [r5, #0x160 + OV29_02303F18_OFFSET]
rsb r1, r4, r6, asr #8
ldrsh r8, [r8, r0]
add r1, r1, r1, lsr #31
ldr sb, [r7, #0xc]
ldr r0, [r5, #0x188 + OV29_02303F18_OFFSET]
sub r3, r6, r3
sub r0, r3, r0
rsb r8, r8, sb, asr #8
mov sl, r1, asr #1
cmp r2, #0
rsb sb, r4, r0, asr #8
subeq sl, sl, #1
bl ov29_022ECB38
cmp r0, #0
beq _023042B0
ldr r0, _023046D8 ; =ov29_0237C850
ldr r0, [r0]
tst r0, #1
mvnne r0, #1
moveq r0, #2
add r8, r8, r0
_023042B0:
ldrb r0, [r5, #0x172 + OV29_02303F18_OFFSET]
cmp r0, #0
bne _023042D8
mov r0, r7
bl ov29_022E273C
ldrb r1, [r5, #0x170 + OV29_02303F18_OFFSET]
mov r4, r0
cmp r1, #0
movne r4, #0
b _02304310
_023042D8:
ldrb r0, [r5, #0x173 + OV29_02303F18_OFFSET]
cmp r0, #0
beq _023042FC
ldr r0, _023046D8 ; =ov29_0237C850
ldr r0, [r0]
tst r0, #4
movne r0, #1
mvneq r0, #0
add r8, r8, r0
_023042FC:
ldrb r0, [r5, #0x174 + OV29_02303F18_OFFSET]
cmp r0, #0
moveq r0, #1
movne r0, #0
and r4, r0, #0xff
_02304310:
ldr r3, _023046DC ; =ov29_0235280C
add r0, sp, #0x28
ldrh r6, [r3]
add r2, r7, #0x2c
mov r1, #4
strh r6, [sp, #0x18]
ldrh r3, [r3, #2]
strh r3, [sp, #0x1a]
ldr r3, [r7, #0xc]
mov r3, r3, asr #8
strh r3, [sp, #0x18]
ldr ip, [r7, #0x10]
ldr r6, [r7, #0x1c]
ldr r3, [r5, #0x188 + OV29_02303F18_OFFSET]
sub r6, ip, r6
sub r3, r6, r3
mov r3, r3, asr #8
strh r3, [sp, #0x1a]
bl sub_0201D034
ldr r1, _023046C8 ; =DUNGEON_PTR
ldr r0, [r5, #0xb0]
ldr r2, [r1]
add r1, sp, #0x18
add r2, r2, #0x1a000
ldrb r3, [r2, #0x23c + OV29_02303F18_OFFSET_2]
add r2, sp, #0x28
bl ov29_022DDB98
add r0, sp, #0x10
mov r1, r7
bl ov29_022E3A40
cmp r4, #0
ldrneb r0, [r5, #0x156 + OV29_02303F18_OFFSET]
cmpne r0, #0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
str r0, [sp]
ldrsh r1, [r5, #4]
ldr r0, [r5, #0xb0]
ldr r2, [sp, #0x10]
ldr r3, [sp, #0x14]
bl ov29_022DD7D8
mov r0, r7
mov r1, sl
bl ov29_022E6E80
mov r0, r7
bl ov29_023046E8
cmp r4, #0
beq _0230464C
ldr r0, [r7, #0xb4]
ldr r1, _023046C8 ; =DUNGEON_PTR
ldr r3, _023046E0 ; =0x0000F3FF
ldrb r6, [r0, #0x220 + OV29_02303F18_OFFSET]
mov r0, #0
ldr r1, [r1]
add r2, r3, #0xc00
strh r3, [sp, #0x1c]
strh r2, [sp, #0x1e]
strh r3, [sp, #0x20]
strh r0, [sp, #0x22]
strh r0, [sp, #0x24]
add r2, r1, #0x1a000
ldrb r2, [r2, #0x23c + OV29_02303F18_OFFSET_2]
mov r2, r2, lsl #0xa
strh r2, [sp, #0x26]
ldrb r2, [r5, #6]
cmp r2, #0
beq _02304458
ldrb r2, [r5, #0xbc]
cmp r2, #0xb
blo _02304434
cmp r2, #0xe
bls _02304458
_02304434:
ldrsh r3, [r5, #4]
ldr r2, _023046E4 ; =0xFFFFFE5D
add r2, r3, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
movls r0, #1
_02304458:
ldrb r2, [r5, #0xef]
cmp r2, #1
addeq r1, r1, #0x1a000
ldreqb r1, [r1, #0x244 + OV29_02303F18_OFFSET_2]
cmpeq r1, #0
moveq r0, #1
cmp r0, #0
beq _023044B8
bl ov29_02338988
cmp r0, #0
beq _02304498
ldr r0, _023046D8 ; =ov29_0237C850
ldr r0, [r0]
tst r0, #1
beq _023044B8
b _023046C0
_02304498:
bl ov29_022E3580
cmp r0, #0
bne _023044B8
bl ov29_022E3570
cmp r0, #0
ldreqh r0, [sp, #0x22]
orreq r0, r0, #0x400
streqh r0, [sp, #0x22]
_023044B8:
ldrh r2, [r7, #0x2e]
add r1, sp, #0x1c
add r0, r7, #0x2c
orr r2, r2, #0x20
strh r2, [r7, #0x2e]
bl sub_0201D110
ldrb r0, [r5, #6]
cmp r0, #0
ldrneb r0, [r5, #0xd8]
cmpne r0, #2
moveq r0, #1
movne r0, #0
mov r1, r0, lsl #0x10
mov r0, r5
mov r4, r1, asr #0x10
bl IsExperienceLocked
cmp r0, #0
bne _0230450C
ldrb r0, [r5, #0xbc]
cmp r0, #7
bne _02304510
_0230450C:
mov r4, #1
_02304510:
strh sl, [r7, #0x64]
strh r8, [r7, #0x48]
strh sb, [r7, #0x4a]
#ifdef JAPAN
ldrb r0, [r5, #0x10a]
#else
ldrb r0, [r5, #0x10b]
#endif
cmp r0, #2
beq _02304590
ldrb r1, [r5, #0xc4]
cmp r1, #6
ldrneb r0, [r5, #0xbf]
cmpne r0, #4
cmpne r1, #2
bne _02304558
ldr r0, _023046D8 ; =ov29_0237C850
ldr r0, [r0]
and r0, r0, #2
add r0, r8, r0
strh r0, [r7, #0x48]
strh sb, [r7, #0x4a]
_02304558:
ldrb r0, [r7, #0x22]
cmp r0, #0
bne _02304570
add r0, r7, #0x2c
bl sub_0201CF5C
b _02304590
_02304570:
cmp r0, #1
bne _02304590
ldr r0, _023046D8 ; =ov29_0237C850
ldr r0, [r0]
tst r0, #1
beq _02304590
add r0, r7, #0x2c
bl sub_0201CF5C
_02304590:
ldrsh r2, [r7, #0x50]
add r1, r5, #0x100
ldr r0, _023046D4 ; =0x0001A224
strh r2, [r1, #0x82 + OV29_02303F18_OFFSET]
ldrsh r8, [r7, #0x52]
ldr r3, _023046C8 ; =DUNGEON_PTR
add r2, r0, #2
strh r8, [r1, #0x84 + OV29_02303F18_OFFSET]
ldrsh sb, [r1, #0x82 + OV29_02303F18_OFFSET]
ldr r8, [r7, #0xc]
add r8, sb, r8, asr #8
strh r8, [r1, #0x82 + OV29_02303F18_OFFSET]
ldrsh sb, [r1, #0x84 + OV29_02303F18_OFFSET]
ldr r8, [r7, #0x10]
add r8, sb, r8, asr #8
strh r8, [r1, #0x84 + OV29_02303F18_OFFSET]
ldr sb, [r3]
ldrsh r8, [r1, #0x82 + OV29_02303F18_OFFSET]
ldrsh r0, [sb, r0]
ldrsh r3, [r1, #0x84 + OV29_02303F18_OFFSET]
ldrsh r1, [sb, r2]
sub r0, r8, r0
mov r0, r0, lsl #0x10
sub r1, r3, r1
mov r1, r1, lsl #0x10
mov r8, r0, asr #0x10
mov sb, r1, asr #0x10
bl ov29_022ECB38
cmp r0, #0
beq _02304628
ldr r0, _023046D8 ; =ov29_0237C850
ldr r0, [r0]
tst r0, #1
mvnne r0, #1
moveq r0, #2
add r0, r8, r0
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
_02304628:
ldrb r0, [r7, #0x22]
cmp r0, #0
bne _0230464C
str sb, [sp]
ldrb r0, [r5, #0x160 + OV29_02303F18_OFFSET]
mov r1, r6
mov r2, r4
mov r3, r8
bl ov29_02303E5C
_0230464C:
ldrb r0, [r5, #0xc4]
cmp r0, #1
cmpne r0, #6
beq _023046C0
ldr r0, _023046C8 ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x78b]
cmp r0, #0
beq _02304690
bl ov29_0234B4E0
cmp r0, #0
bne _02304690
add r0, r7, #0x2c
bl SwitchAnimationControlToNextFrame
add r0, r7, #0x2c
bl SwitchAnimationControlToNextFrame
b _023046B8
_02304690:
ldrb r0, [r7, #0xaf]
cmp r0, #0
cmpne r0, #7
bne _023046B8
ldr r0, [r7, #0xb4]
ldr r0, [r0, #0x110 + OV29_02303F18_OFFSET]
cmp r0, #1
ble _023046B8
add r0, r7, #0x2c
bl SwitchAnimationControlToNextFrame
_023046B8:
add r0, r7, #0x2c
bl SwitchAnimationControlToNextFrame
_023046C0:
add sp, sp, #0x38
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_023046C8: .word DUNGEON_PTR
_023046CC: .word ov29_02352810
_023046D0: .word 0x00000229
_023046D4: .word 0x0001A224 + OV29_02303F18_OFFSET_2
_023046D8: .word ov29_0237C850
_023046DC: .word ov29_0235280C
_023046E0: .word 0x0000F3FF
_023046E4: .word 0xFFFFFE5D
arm_func_end ov29_02303F18
arm_func_start ov29_023046E8
ov29_023046E8: ; 0x023046E8
#ifdef JAPAN
#define OV29_023046E8_OFFSET -4
#else
#define OV29_023046E8_OFFSET 0
#endif
ldr r1, [r0, #0xb4]
ldrb r0, [r1, #0x172 + OV29_023046E8_OFFSET]
cmp r0, #0
bxne lr
#ifdef JAPAN
ldrb r0, [r1, #0x10a]
#else
ldrb r0, [r1, #0x10b]
#endif
cmp r0, #1
ldr r0, [r1, #0x188 + OV29_023046E8_OFFSET]
bne _02304728
cmp r0, #0xc800
bxge lr
add r0, r0, #0x800
str r0, [r1, #0x188 + OV29_023046E8_OFFSET]
cmp r0, #0xc800
movgt r0, #0xc800
strgt r0, [r1, #0x188 + OV29_023046E8_OFFSET]
bx lr
_02304728:
subs r0, r0, #0xc00
str r0, [r1, #0x188 + OV29_023046E8_OFFSET]
movmi r0, #0
strmi r0, [r1, #0x188 + OV29_023046E8_OFFSET]
bx lr
arm_func_end ov29_023046E8
arm_func_start ov29_0230473C
ov29_0230473C: ; 0x0230473C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r5, #0
ldr r6, _023047B4 ; =DUNGEON_PTR
mov r7, r5
_0230474C:
ldr r0, [r6]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r4, [r0, #0xad4]
#else
ldr r4, [r0, #0xb78]
#endif
mov r0, r4
bl EntityIsValid__023047B8
cmp r0, #0
ldrne r2, [r4, #0xb4]
#ifdef JAPAN
ldrneb r0, [r2, #0x175]
#else
ldrneb r0, [r2, #0x179]
#endif
cmpne r0, #0
beq _023047A4
sub r1, r0, #1
and r0, r1, #0xff
#ifdef JAPAN
strb r1, [r2, #0x175]
#else
strb r1, [r2, #0x179]
#endif
tst r0, #1
bne _023047A4
ldrb r2, [r2, #0x4c]
mov r0, r4
mov r1, r7
sub r2, r2, #1
and r2, r2, #7
bl ChangeMonsterAnimation
_023047A4:
add r5, r5, #1
cmp r5, #0x14
blt _0230474C
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_023047B4: .word DUNGEON_PTR
arm_func_end ov29_0230473C