mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
2209 lines
40 KiB
ArmAsm
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
|