mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-23 01:04:58 -05:00
sub_807EFFC
This commit is contained in:
@@ -6,693 +6,6 @@
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start sub_807EC28
|
||||
sub_807EC28:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x1C
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r8, r0
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0807EC46
|
||||
b _0807EF32
|
||||
_0807EC46:
|
||||
bl GetLeader
|
||||
adds r7, r0, 0
|
||||
ldr r0, [r7, 0x70]
|
||||
mov r9, r0
|
||||
ldr r4, _0807ECB4
|
||||
ldr r0, [r4]
|
||||
movs r5, 0xD3
|
||||
lsls r5, 3
|
||||
adds r0, r5
|
||||
ldrb r0, [r0]
|
||||
str r0, [sp, 0x8]
|
||||
adds r0, r7, 0
|
||||
bl GetTileAtEntitySafe
|
||||
ldrh r0, [r0]
|
||||
lsrs r0, 5
|
||||
mov r10, r0
|
||||
movs r0, 0x1
|
||||
mov r1, r10
|
||||
ands r1, r0
|
||||
mov r10, r1
|
||||
ldr r0, [r4]
|
||||
adds r0, r5
|
||||
strb r1, [r0]
|
||||
ldr r0, [r4]
|
||||
ldr r3, _0807ECB8
|
||||
adds r0, r3
|
||||
mov r2, r10
|
||||
strb r2, [r0]
|
||||
ldr r2, [r4]
|
||||
ldr r6, _0807ECBC
|
||||
adds r0, r2, r6
|
||||
ldrb r1, [r0]
|
||||
cmp r1, 0
|
||||
beq _0807EC90
|
||||
b _0807EF32
|
||||
_0807EC90:
|
||||
adds r6, 0x26
|
||||
adds r0, r2, r6
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _0807EC9C
|
||||
b _0807EF32
|
||||
_0807EC9C:
|
||||
mov r0, r9
|
||||
adds r0, 0xE4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
bne _0807ECC0
|
||||
adds r0, r2, r5
|
||||
strb r1, [r0]
|
||||
ldr r0, [r4]
|
||||
adds r0, r3
|
||||
strb r1, [r0]
|
||||
b _0807EF32
|
||||
.align 2, 0
|
||||
_0807ECB4: .4byte gDungeon
|
||||
_0807ECB8: .4byte 0x00000699
|
||||
_0807ECBC: .4byte 0x0000066e
|
||||
_0807ECC0:
|
||||
movs r0, 0
|
||||
str r0, [sp, 0xC]
|
||||
movs r6, 0
|
||||
_0807ECC6:
|
||||
ldr r0, _0807ED48
|
||||
ldr r0, [r0]
|
||||
lsls r1, r6, 2
|
||||
ldr r2, _0807ED4C
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r5, [r0]
|
||||
adds r0, r5, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0807ED0E
|
||||
ldr r0, [r5, 0x70]
|
||||
ldrb r0, [r0, 0x8]
|
||||
cmp r0, 0x1
|
||||
bne _0807ED0E
|
||||
adds r0, r5, 0
|
||||
bl sub_8070BC0
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0807ED0E
|
||||
adds r0, r7, 0
|
||||
bl GetEntityRoom
|
||||
adds r4, r0, 0
|
||||
adds r0, r5, 0
|
||||
bl GetEntityRoom
|
||||
lsls r4, 24
|
||||
lsls r0, 24
|
||||
cmp r4, r0
|
||||
bne _0807ED0E
|
||||
movs r0, 0x1
|
||||
str r0, [sp, 0xC]
|
||||
_0807ED0E:
|
||||
adds r6, 0x1
|
||||
cmp r6, 0xF
|
||||
ble _0807ECC6
|
||||
ldr r1, _0807ED50
|
||||
ldr r0, [sp]
|
||||
ands r0, r1
|
||||
movs r1, 0xBE
|
||||
lsls r1, 1
|
||||
orrs r0, r1
|
||||
ldr r1, _0807ED54
|
||||
ands r0, r1
|
||||
str r0, [sp]
|
||||
ldr r1, [sp, 0x8]
|
||||
cmp r1, 0
|
||||
bne _0807ED5C
|
||||
mov r2, r10
|
||||
cmp r2, 0x1
|
||||
bne _0807ED64
|
||||
ldr r6, [sp, 0xC]
|
||||
cmp r6, 0
|
||||
bne _0807ED3A
|
||||
b _0807EF32
|
||||
_0807ED3A:
|
||||
ldr r0, _0807ED58
|
||||
ldr r1, [r0]
|
||||
mov r0, sp
|
||||
movs r2, 0x1
|
||||
bl DisplayDungeonMessage
|
||||
b _0807EF32
|
||||
.align 2, 0
|
||||
_0807ED48: .4byte gDungeon
|
||||
_0807ED4C: .4byte 0x0001358c
|
||||
_0807ED50: .4byte 0xffff0000
|
||||
_0807ED54: .4byte 0xff00ffff
|
||||
_0807ED58: .4byte gUnknown_80FE674
|
||||
_0807ED5C:
|
||||
mov r0, r10
|
||||
cmp r0, 0x1
|
||||
bne _0807ED64
|
||||
b _0807EF32
|
||||
_0807ED64:
|
||||
ldr r1, [sp, 0x8]
|
||||
cmp r1, 0x1
|
||||
bne _0807ED70
|
||||
mov r2, r10
|
||||
cmp r2, 0
|
||||
beq _0807ED78
|
||||
_0807ED70:
|
||||
mov r6, r8
|
||||
cmp r6, 0
|
||||
bne _0807ED78
|
||||
b _0807EF32
|
||||
_0807ED78:
|
||||
movs r0, 0
|
||||
str r0, [sp, 0x10]
|
||||
movs r1, 0
|
||||
str r1, [sp, 0x14]
|
||||
bl sub_807EF48
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0807ED8C
|
||||
b _0807EECC
|
||||
_0807ED8C:
|
||||
movs r2, 0x1
|
||||
str r2, [sp, 0x14]
|
||||
movs r6, 0
|
||||
_0807ED92:
|
||||
ldr r0, _0807EE90
|
||||
ldr r0, [r0]
|
||||
lsls r1, r6, 2
|
||||
ldr r2, _0807EE94
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r5, [r0]
|
||||
adds r0, r5, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0807EDAE
|
||||
b _0807EEC4
|
||||
_0807EDAE:
|
||||
ldr r0, [r5, 0x70]
|
||||
ldrb r0, [r0, 0x8]
|
||||
cmp r0, 0x1
|
||||
beq _0807EDB8
|
||||
b _0807EEC4
|
||||
_0807EDB8:
|
||||
adds r0, r5, 0
|
||||
bl sub_8070BC0
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0807EDC6
|
||||
b _0807EEC4
|
||||
_0807EDC6:
|
||||
adds r0, r7, 0
|
||||
bl GetEntityRoom
|
||||
adds r4, r0, 0
|
||||
adds r0, r5, 0
|
||||
bl GetEntityRoom
|
||||
lsls r4, 24
|
||||
lsls r0, 24
|
||||
cmp r4, r0
|
||||
bne _0807EEC4
|
||||
movs r6, 0x1
|
||||
str r6, [sp, 0x10]
|
||||
movs r0, 0x4
|
||||
ldrsh r1, [r7, r0]
|
||||
movs r2, 0x4
|
||||
ldrsh r0, [r5, r2]
|
||||
subs r1, r0
|
||||
cmp r1, 0
|
||||
bge _0807EDF0
|
||||
negs r1, r1
|
||||
_0807EDF0:
|
||||
cmp r1, 0x1
|
||||
bgt _0807EE10
|
||||
movs r6, 0x6
|
||||
ldrsh r1, [r7, r6]
|
||||
movs r2, 0x6
|
||||
ldrsh r0, [r5, r2]
|
||||
subs r1, r0
|
||||
cmp r1, 0
|
||||
bge _0807EE04
|
||||
negs r1, r1
|
||||
_0807EE04:
|
||||
adds r6, r7, 0x4
|
||||
mov r9, r6
|
||||
adds r0, r5, 0x4
|
||||
mov r8, r0
|
||||
cmp r1, 0x1
|
||||
ble _0807EE72
|
||||
_0807EE10:
|
||||
movs r3, 0x1
|
||||
negs r3, r3
|
||||
add r6, sp, 0x4
|
||||
adds r1, r7, 0x4
|
||||
mov r9, r1
|
||||
adds r2, r5, 0x4
|
||||
mov r8, r2
|
||||
_0807EE1E:
|
||||
movs r4, 0x1
|
||||
negs r4, r4
|
||||
_0807EE22:
|
||||
ldrh r0, [r7, 0x4]
|
||||
adds r0, r3
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
ldr r1, _0807EE98
|
||||
ldr r2, [sp, 0x4]
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
ldrh r0, [r7, 0x6]
|
||||
adds r0, r4
|
||||
lsls r0, 16
|
||||
ldr r1, _0807EE9C
|
||||
ands r1, r2
|
||||
orrs r1, r0
|
||||
str r1, [sp, 0x4]
|
||||
movs r2, 0
|
||||
ldrsh r0, [r6, r2]
|
||||
asrs r1, 16
|
||||
str r3, [sp, 0x18]
|
||||
bl GetTile
|
||||
ldrb r0, [r0, 0x9]
|
||||
ldr r3, [sp, 0x18]
|
||||
cmp r0, 0xFF
|
||||
beq _0807EE66
|
||||
adds r0, r5, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_80703A0
|
||||
lsls r0, 24
|
||||
ldr r3, [sp, 0x18]
|
||||
cmp r0, 0
|
||||
beq _0807EEA0
|
||||
_0807EE66:
|
||||
adds r4, 0x1
|
||||
cmp r4, 0x1
|
||||
ble _0807EE22
|
||||
adds r3, 0x1
|
||||
cmp r3, 0x1
|
||||
ble _0807EE1E
|
||||
_0807EE72:
|
||||
adds r0, r7, 0
|
||||
bl sub_8070BC0
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0807EEAE
|
||||
mov r0, r9
|
||||
mov r1, r8
|
||||
bl GetDirectionTowardsPosition
|
||||
adds r1, r0, 0
|
||||
adds r0, r7, 0
|
||||
bl sub_806CE34
|
||||
b _0807EEB2
|
||||
.align 2, 0
|
||||
_0807EE90: .4byte gDungeon
|
||||
_0807EE94: .4byte 0x0001358c
|
||||
_0807EE98: .4byte 0xffff0000
|
||||
_0807EE9C: .4byte 0x0000ffff
|
||||
_0807EEA0:
|
||||
adds r0, r7, 0
|
||||
adds r1, r5, 0
|
||||
movs r2, 0x3
|
||||
adds r3, r6, 0
|
||||
bl WarpTarget
|
||||
b _0807EE72
|
||||
_0807EEAE:
|
||||
movs r6, 0
|
||||
str r6, [sp, 0x10]
|
||||
_0807EEB2:
|
||||
mov r0, r8
|
||||
mov r1, r9
|
||||
bl GetDirectionTowardsPosition
|
||||
adds r1, r0, 0
|
||||
adds r0, r5, 0
|
||||
bl sub_806CE68
|
||||
b _0807EECC
|
||||
_0807EEC4:
|
||||
adds r6, 0x1
|
||||
cmp r6, 0xF
|
||||
bgt _0807EECC
|
||||
b _0807ED92
|
||||
_0807EECC:
|
||||
ldr r0, [sp, 0x14]
|
||||
cmp r0, 0
|
||||
beq _0807EF04
|
||||
ldr r1, [sp, 0x10]
|
||||
cmp r1, 0
|
||||
beq _0807EEDE
|
||||
ldr r0, [sp, 0xC]
|
||||
cmp r0, 0
|
||||
bne _0807EF04
|
||||
_0807EEDE:
|
||||
ldr r0, _0807EEF8
|
||||
ldr r0, [r0]
|
||||
ldr r2, _0807EEFC
|
||||
adds r1, r0, r2
|
||||
ldr r6, _0807EF00
|
||||
adds r0, r6
|
||||
ldr r1, [r1]
|
||||
ldr r0, [r0]
|
||||
cmp r1, r0
|
||||
ble _0807EF32
|
||||
_0807EEF2:
|
||||
bl sub_807F33C
|
||||
b _0807EF32
|
||||
.align 2, 0
|
||||
_0807EEF8: .4byte gDungeon
|
||||
_0807EEFC: .4byte 0x00000694
|
||||
_0807EF00: .4byte 0x0000068c
|
||||
_0807EF04:
|
||||
ldr r0, [sp, 0x10]
|
||||
bl sub_807EFFC
|
||||
ldr r0, [sp, 0x10]
|
||||
bl sub_807F19C
|
||||
cmp r0, 0
|
||||
bne _0807EEF2
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, 0x1
|
||||
bne _0807EF32
|
||||
mov r1, r10
|
||||
cmp r1, 0
|
||||
bne _0807EF32
|
||||
ldr r2, [sp, 0xC]
|
||||
cmp r2, 0
|
||||
beq _0807EF32
|
||||
ldr r0, _0807EF44
|
||||
ldr r1, [r0]
|
||||
mov r0, sp
|
||||
movs r2, 0x1
|
||||
bl DisplayDungeonMessage
|
||||
_0807EF32:
|
||||
add sp, 0x1C
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0807EF44: .4byte gUnknown_80FE65C
|
||||
thumb_func_end sub_807EC28
|
||||
|
||||
thumb_func_start sub_807EF48
|
||||
sub_807EF48:
|
||||
push {lr}
|
||||
ldr r0, _0807EF70
|
||||
ldr r2, [r0]
|
||||
ldr r1, _0807EF74
|
||||
adds r0, r2, r1
|
||||
ldr r3, _0807EF78
|
||||
adds r1, r2, r3
|
||||
ldr r0, [r0]
|
||||
ldr r1, [r1]
|
||||
subs r0, r1
|
||||
cmp r0, 0
|
||||
bgt _0807EF7C
|
||||
movs r1, 0xD2
|
||||
lsls r1, 3
|
||||
adds r0, r2, r1
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _0807EF7C
|
||||
movs r0, 0
|
||||
b _0807EF7E
|
||||
.align 2, 0
|
||||
_0807EF70: .4byte gDungeon
|
||||
_0807EF74: .4byte 0x00000694
|
||||
_0807EF78: .4byte 0x0000068c
|
||||
_0807EF7C:
|
||||
movs r0, 0x1
|
||||
_0807EF7E:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_807EF48
|
||||
|
||||
thumb_func_start sub_807EF84
|
||||
sub_807EF84:
|
||||
push {r4,lr}
|
||||
sub sp, 0x4
|
||||
ldr r1, _0807EFD0
|
||||
ldr r0, [sp]
|
||||
ands r0, r1
|
||||
movs r1, 0xBE
|
||||
lsls r1, 1
|
||||
orrs r0, r1
|
||||
ldr r1, _0807EFD4
|
||||
ands r0, r1
|
||||
str r0, [sp]
|
||||
movs r0, 0x1
|
||||
bl sub_807EFFC
|
||||
movs r0, 0x1
|
||||
bl sub_807F19C
|
||||
adds r4, r0, 0
|
||||
cmp r4, 0
|
||||
beq _0807EFE2
|
||||
bl GetLeader
|
||||
bl GetTileAtEntitySafe
|
||||
ldrh r1, [r0]
|
||||
movs r0, 0x20
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0807EFDC
|
||||
cmp r4, 0x2
|
||||
beq _0807EFEE
|
||||
ldr r0, _0807EFD8
|
||||
ldr r1, [r0]
|
||||
mov r0, sp
|
||||
movs r2, 0x1
|
||||
bl DisplayDungeonMessage
|
||||
b _0807EFEE
|
||||
.align 2, 0
|
||||
_0807EFD0: .4byte 0xffff0000
|
||||
_0807EFD4: .4byte 0xff00ffff
|
||||
_0807EFD8: .4byte gUnknown_80FE63C
|
||||
_0807EFDC:
|
||||
bl sub_807F33C
|
||||
b _0807EFEE
|
||||
_0807EFE2:
|
||||
ldr r0, _0807EFF8
|
||||
ldr r1, [r0]
|
||||
mov r0, sp
|
||||
movs r2, 0x1
|
||||
bl DisplayDungeonMessage
|
||||
_0807EFEE:
|
||||
add sp, 0x4
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0807EFF8: .4byte gUnknown_80FE5F0
|
||||
thumb_func_end sub_807EF84
|
||||
|
||||
thumb_func_start sub_807EFFC
|
||||
sub_807EFFC:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x10
|
||||
lsls r0, 24
|
||||
lsrs r3, r0, 24
|
||||
ldr r4, _0807F168
|
||||
ldr r0, [r4]
|
||||
movs r5, 0xD2
|
||||
lsls r5, 3
|
||||
adds r2, r0, r5
|
||||
ldr r0, [r2]
|
||||
cmp r0, 0
|
||||
bne _0807F01E
|
||||
b _0807F158
|
||||
_0807F01E:
|
||||
ldr r1, _0807F16C
|
||||
ldr r0, [sp]
|
||||
ands r0, r1
|
||||
movs r1, 0xBE
|
||||
lsls r1, 1
|
||||
orrs r0, r1
|
||||
ldr r1, _0807F170
|
||||
ands r0, r1
|
||||
str r0, [sp]
|
||||
cmp r3, 0
|
||||
bne _0807F036
|
||||
b _0807F158
|
||||
_0807F036:
|
||||
ldr r1, _0807F174
|
||||
ldr r0, [r2]
|
||||
str r0, [r1]
|
||||
ldr r0, _0807F178
|
||||
ldr r1, [r0]
|
||||
mov r0, sp
|
||||
movs r2, 0x1
|
||||
bl DisplayDungeonYesNoMessage
|
||||
cmp r0, 0x1
|
||||
beq _0807F04E
|
||||
b _0807F158
|
||||
_0807F04E:
|
||||
movs r0, 0xA6
|
||||
lsls r0, 1
|
||||
bl PlaySoundEffect
|
||||
ldr r0, [r4]
|
||||
adds r0, r5
|
||||
ldr r0, [r0]
|
||||
bl AddToTeamMoney
|
||||
ldr r0, [r4]
|
||||
ldr r2, _0807F17C
|
||||
adds r1, r0, r2
|
||||
ldr r1, [r1]
|
||||
str r1, [sp, 0xC]
|
||||
ldr r2, _0807F180
|
||||
adds r1, r0, r2
|
||||
ldr r6, [r1]
|
||||
ldr r1, _0807F184
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
cmp r6, r0
|
||||
bgt _0807F134
|
||||
mov r8, r4
|
||||
_0807F07C:
|
||||
mov r2, r8
|
||||
ldr r0, [r2]
|
||||
ldr r2, _0807F188
|
||||
adds r1, r0, r2
|
||||
ldr r5, [r1]
|
||||
ldr r1, _0807F18C
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
adds r2, r6, 0x1
|
||||
mov r10, r2
|
||||
cmp r5, r0
|
||||
bgt _0807F124
|
||||
lsls r0, r6, 16
|
||||
lsrs r0, 16
|
||||
mov r9, r0
|
||||
_0807F09A:
|
||||
lsls r0, r5, 16
|
||||
mov r1, r9
|
||||
orrs r0, r1
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r6, 0
|
||||
adds r1, r5, 0
|
||||
bl GetTile
|
||||
adds r4, r0, 0
|
||||
ldrh r1, [r4]
|
||||
movs r0, 0x20
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0807F114
|
||||
ldr r0, [r4, 0x14]
|
||||
cmp r0, 0
|
||||
beq _0807F114
|
||||
bl GetEntityType
|
||||
cmp r0, 0x3
|
||||
bne _0807F114
|
||||
ldr r0, [r4, 0x14]
|
||||
bl GetItemData
|
||||
adds r2, r0, 0
|
||||
ldrb r1, [r2]
|
||||
movs r7, 0x2
|
||||
movs r0, 0x2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0807F114
|
||||
ldr r0, [r2]
|
||||
str r0, [sp, 0x8]
|
||||
add r4, sp, 0x4
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
bl sub_80461C8
|
||||
ldr r0, [sp, 0x8]
|
||||
lsrs r0, 16
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
bl CanSellItem
|
||||
lsls r0, 24
|
||||
add r3, sp, 0x8
|
||||
cmp r0, 0
|
||||
beq _0807F10A
|
||||
ldrb r0, [r3]
|
||||
adds r2, r7, 0
|
||||
orrs r2, r0
|
||||
ldr r1, _0807F190
|
||||
ldr r0, [sp, 0x8]
|
||||
ands r0, r1
|
||||
orrs r0, r2
|
||||
str r0, [sp, 0x8]
|
||||
_0807F10A:
|
||||
adds r0, r4, 0
|
||||
adds r1, r3, 0
|
||||
movs r2, 0x1
|
||||
bl sub_80460F8
|
||||
_0807F114:
|
||||
adds r5, 0x1
|
||||
mov r2, r8
|
||||
ldr r0, [r2]
|
||||
ldr r1, _0807F18C
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
cmp r5, r0
|
||||
ble _0807F09A
|
||||
_0807F124:
|
||||
mov r6, r10
|
||||
mov r2, r8
|
||||
ldr r0, [r2]
|
||||
ldr r1, _0807F184
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
cmp r6, r0
|
||||
ble _0807F07C
|
||||
_0807F134:
|
||||
ldr r0, _0807F168
|
||||
ldr r0, [r0]
|
||||
ldr r1, _0807F194
|
||||
adds r2, r0, r1
|
||||
subs r1, 0x8
|
||||
adds r0, r1
|
||||
ldr r1, [r0]
|
||||
ldr r0, [sp, 0xC]
|
||||
subs r1, r0
|
||||
ldr r0, [r2]
|
||||
adds r0, r1
|
||||
str r0, [r2]
|
||||
ldr r0, _0807F198
|
||||
ldr r1, [r0]
|
||||
mov r0, sp
|
||||
movs r2, 0x1
|
||||
bl DisplayDungeonMessage
|
||||
_0807F158:
|
||||
add sp, 0x10
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0807F168: .4byte gDungeon
|
||||
_0807F16C: .4byte 0xffff0000
|
||||
_0807F170: .4byte 0xff00ffff
|
||||
_0807F174: .4byte gFormatArgs
|
||||
_0807F178: .4byte gUnknown_80FE5C0
|
||||
_0807F17C: .4byte 0x0000068c
|
||||
_0807F180: .4byte 0x0000e240
|
||||
_0807F184: .4byte 0x0000e248
|
||||
_0807F188: .4byte 0x0000e244
|
||||
_0807F18C: .4byte 0x0000e24c
|
||||
_0807F190: .4byte 0xffffff00
|
||||
_0807F194: .4byte 0x00000694
|
||||
_0807F198: .4byte gUnknown_80FE4F4
|
||||
thumb_func_end sub_807EFFC
|
||||
|
||||
thumb_func_start sub_807F19C
|
||||
sub_807F19C:
|
||||
|
||||
@@ -5,13 +5,19 @@
|
||||
#include "dungeon.h"
|
||||
#include "dungeon_config.h"
|
||||
#include "dungeon_leader.h"
|
||||
#include "dungeon_music.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "pokemon.h"
|
||||
#include "structs/map.h"
|
||||
#include "dungeon_message.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "string_format.h"
|
||||
#include "dungeon_movement.h"
|
||||
#include "dungeon_capabilities.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "position_util.h"
|
||||
#include "code_806CD90.h"
|
||||
#include "code_807CD9C.h"
|
||||
#include "code_805D8C8.h"
|
||||
#include "constants/ability.h"
|
||||
#include "constants/monster.h"
|
||||
@@ -19,21 +25,39 @@
|
||||
|
||||
extern u8 gUnknown_203B40D;
|
||||
extern OpenedFile *gUnknown_202ECA0;
|
||||
extern void sub_804178C(u32);
|
||||
|
||||
extern void sub_804178C(u32);
|
||||
extern bool8 sub_80461C8(DungeonPos *, u32);
|
||||
extern void sub_80429D8(Entity *r0);
|
||||
extern s32 GetMonsterApparentID(Entity *pokemon, s32 id);
|
||||
void sub_803E874(bool8 r10, s32 r9);
|
||||
void GetWeatherName(u8 *dst, u8 weatherId);
|
||||
extern void sub_803E874(bool8 r10, s32 r9);
|
||||
extern void GetWeatherName(u8 *dst, u8 weatherId);
|
||||
extern s32 CalculateStatusTurns(Entity *target, const s16 *turnRange, bool8 factorCurerSkills);
|
||||
extern void sub_80838EC(u8 *a);
|
||||
extern bool8 sub_8044B28(void);
|
||||
extern void sub_80460F8(DungeonPos *, Item *, u32);
|
||||
|
||||
void sub_807E7FC(bool8 arg0);
|
||||
void sub_807EFFC(bool8 arg0);
|
||||
s32 sub_807F19C(bool8 arg0);
|
||||
void sub_807E8F0(Entity *pokemon);
|
||||
bool8 sub_807EF48(void);
|
||||
void sub_807F33C(void);
|
||||
|
||||
extern const u8 *gWeatherNames[];
|
||||
|
||||
extern const u8 *const gUnknown_80FC5E0;
|
||||
extern const u8 *const gUnknown_80FA778;
|
||||
extern const u8 *const gUnknown_80FA758;
|
||||
extern const u8 *const gUnknown_80FE674;
|
||||
extern const u8 *const gUnknown_80FE65C;
|
||||
extern const u8 *const gUnknown_80FE63C;
|
||||
extern const u8 *const gUnknown_80FE5F0;
|
||||
extern const u8 *const gUnknown_80FAD8C;
|
||||
extern const u8 *const gUnknown_80FADB0;
|
||||
extern const u8 *const gUnknown_80FE5C0;
|
||||
extern const u8 *const gUnknown_80FE4F4;
|
||||
|
||||
|
||||
// Note: gUnknown_202ECA0 file's 2d array is read as 1d array in functions below, be careful!
|
||||
void sub_807E698(bool8 arg0)
|
||||
@@ -185,10 +209,6 @@ void sub_807E8F0(Entity *pokemon)
|
||||
}
|
||||
}
|
||||
|
||||
extern const u8 *gWeatherNames[];
|
||||
extern const u8 *const gUnknown_80FAD8C;
|
||||
extern const u8 *const gUnknown_80FADB0;
|
||||
|
||||
void GetWeatherName(u8 *buffer, u8 weather)
|
||||
{
|
||||
strcpy(buffer, gWeatherNames[weather]);
|
||||
@@ -266,3 +286,217 @@ bool8 sub_807EAA0(bool8 arg0, bool8 arg1)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sub_807EC28(bool8 arg0)
|
||||
{
|
||||
Entity *leader;
|
||||
EntityInfo *leaderInfo;
|
||||
u32 var_34;
|
||||
bool32 isShopTile;
|
||||
|
||||
if (sub_8044B28())
|
||||
return;
|
||||
|
||||
leader = GetLeader();
|
||||
leaderInfo = GetEntInfo(leader);
|
||||
var_34 = gDungeon->unk644.unk54;
|
||||
isShopTile = (GetTileAtEntitySafe(leader)->terrainType & TERRAIN_TYPE_SHOP) != 0;
|
||||
gDungeon->unk644.unk54 = isShopTile;
|
||||
gDungeon->unk644.unk55 = isShopTile;
|
||||
if (gDungeon->unk644.unk2A || gDungeon->unk644.unk50 == 0)
|
||||
return;
|
||||
|
||||
if (leaderInfo->invisibleClassStatus.status == STATUS_INVISIBLE) {
|
||||
gDungeon->unk644.unk54 = 0;
|
||||
gDungeon->unk644.unk55 = 0;
|
||||
}
|
||||
else {
|
||||
s32 i;
|
||||
struct MonDialogueSpriteInfo dialogueInfo;
|
||||
bool8 var_30 = FALSE;
|
||||
bool8 var_2C;
|
||||
bool8 var_28;
|
||||
|
||||
for (i = 0; i < DUNGEON_MAX_WILD_POKEMON; i++) {
|
||||
Entity *wildMon = gDungeon->wildPokemon[i];
|
||||
if (EntityExists(wildMon)) {
|
||||
EntityInfo *wildMonInfo = GetEntInfo(wildMon);
|
||||
if (wildMonInfo->shopkeeper == SHOPKEEPER_MODE_SHOPKEEPER && sub_8070BC0(wildMon) && GetEntityRoom(leader) == GetEntityRoom(wildMon)) {
|
||||
var_30 = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dialogueInfo.species = MONSTER_KECLEON;
|
||||
dialogueInfo.spriteId = 0;
|
||||
if (var_34 == 0) {
|
||||
if (isShopTile == TRUE) {
|
||||
if (var_30) {
|
||||
DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE674, TRUE); // Ah welcome!
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (isShopTile == TRUE) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((var_34 != 1 || isShopTile) && !arg0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var_2C = FALSE;
|
||||
var_28 = FALSE;
|
||||
if (sub_807EF48()) {
|
||||
var_28 = TRUE;
|
||||
for (i = 0; i < DUNGEON_MAX_WILD_POKEMON; i++) {
|
||||
Entity *wildMon = gDungeon->wildPokemon[i];
|
||||
if (EntityExists(wildMon)
|
||||
&& GetEntInfo(wildMon)->shopkeeper == SHOPKEEPER_MODE_SHOPKEEPER
|
||||
&& sub_8070BC0(wildMon)
|
||||
&& GetEntityRoom(leader) == GetEntityRoom(wildMon))
|
||||
{
|
||||
var_2C = TRUE;
|
||||
if (abs(leader->pos.x - wildMon->pos.x) >= 2 || abs(leader->pos.y - wildMon->pos.y) >= 2) {
|
||||
s32 x, y;
|
||||
DungeonPos pos;
|
||||
|
||||
for (x = -1; x < 2; x++) {
|
||||
for (y = -1; y < 2; y++) {
|
||||
pos.x = leader->pos.x + x;
|
||||
pos.y = leader->pos.y + y;
|
||||
if (GetTile(pos.x, pos.y)->room != CORRIDOR_ROOM) {
|
||||
if (!sub_80703A0(wildMon, &pos)) {
|
||||
WarpTarget(leader, wildMon, 3, &pos);
|
||||
goto LOOP_BREAK; // Used to break out of the nested loops
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
LOOP_BREAK:
|
||||
}
|
||||
|
||||
if (sub_8070BC0(leader)) {
|
||||
sub_806CE34(leader, GetDirectionTowardsPosition(&leader->pos, &wildMon->pos));
|
||||
}
|
||||
else {
|
||||
var_2C = FALSE;
|
||||
}
|
||||
|
||||
sub_806CE68(wildMon, GetDirectionTowardsPosition(&wildMon->pos, &leader->pos));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (var_28 && !var_2C) {
|
||||
if (gDungeon->unk644.unk50 > gDungeon->unk644.unk48) {
|
||||
sub_807F33C();
|
||||
}
|
||||
}
|
||||
else if (var_28 && !var_30) {
|
||||
if (gDungeon->unk644.unk50 > gDungeon->unk644.unk48) {
|
||||
sub_807F33C();
|
||||
}
|
||||
}
|
||||
else {
|
||||
sub_807EFFC(var_2C);
|
||||
if (sub_807F19C(var_2C)) {
|
||||
sub_807F33C();
|
||||
}
|
||||
else if (var_34 == 1 && !isShopTile && var_30) {
|
||||
DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE65C, TRUE); // I await your next visit
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_807EF48(void)
|
||||
{
|
||||
if ((gDungeon->unk644.unk50 - gDungeon->unk644.unk48) > 0) {
|
||||
return TRUE;
|
||||
}
|
||||
if (gDungeon->unk644.unk4C != 0) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void sub_807EF84(void)
|
||||
{
|
||||
s32 val;
|
||||
struct MonDialogueSpriteInfo dialogueInfo;
|
||||
|
||||
dialogueInfo.species = MONSTER_KECLEON;
|
||||
dialogueInfo.spriteId = 0;
|
||||
|
||||
sub_807EFFC(1);
|
||||
val = sub_807F19C(1);
|
||||
if (val != 0) {
|
||||
Tile *tile = GetTileAtEntitySafe(GetLeader());
|
||||
if (tile->terrainType & TERRAIN_TYPE_SHOP) {
|
||||
if (val != 2) {
|
||||
DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE63C, 1); // This is very disappointing, please return any items before you leave.
|
||||
}
|
||||
}
|
||||
else {
|
||||
sub_807F33C();
|
||||
}
|
||||
}
|
||||
else {
|
||||
DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE5F0, 1); // Looking forward to seeing you again!
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807EFFC(bool8 arg0)
|
||||
{
|
||||
struct MonDialogueSpriteInfo dialogueInfo;
|
||||
|
||||
if (gDungeon->unk644.unk4C == 0)
|
||||
return;
|
||||
|
||||
dialogueInfo.species = MONSTER_KECLEON;
|
||||
dialogueInfo.spriteId = 0;
|
||||
if (!arg0)
|
||||
return;
|
||||
|
||||
gFormatArgs[0] = gDungeon->unk644.unk4C;
|
||||
if (DisplayDungeonYesNoMessage(&dialogueInfo, gUnknown_80FE5C0, TRUE) == 1) { // For the merch you have left, I shall pay X. Is that acceptable?
|
||||
s32 x, y;
|
||||
DungeonPos pos;
|
||||
s32 local_24;
|
||||
|
||||
PlaySoundEffect(0x14c);
|
||||
AddToTeamMoney(gDungeon->unk644.unk4C);
|
||||
local_24 = gDungeon->unk644.unk48;
|
||||
for (x = gDungeon->kecleonShopPos.minX; x <= gDungeon->kecleonShopPos.maxX; x++) {
|
||||
for (y = gDungeon->kecleonShopPos.minY; y <= gDungeon->kecleonShopPos.maxY; y++) {
|
||||
const Tile *tile;
|
||||
|
||||
pos.y = y;
|
||||
pos.x = x;
|
||||
tile = GetTile(x,y);
|
||||
if (tile->terrainType & TERRAIN_TYPE_SHOP && tile->object != NULL && GetEntityType(tile->object) == ENTITY_ITEM) {
|
||||
Item *itemPtr = GetItemData(tile->object);
|
||||
if (!ItemInShop(itemPtr)) {
|
||||
Item item = *itemPtr;
|
||||
sub_80461C8(&pos, 1);
|
||||
if (CanSellItem(item.id)) {
|
||||
item.flags |= ITEM_FLAG_IN_SHOP;
|
||||
}
|
||||
sub_80460F8(&pos, &item, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gDungeon->unk644.unk50 += (gDungeon->unk644.unk48 - local_24);
|
||||
DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE4F4, 1); // Your patronage is valued
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user