mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-30 12:58:10 -05:00
3931
asm/code_80130A8.s
3931
asm/code_80130A8.s
File diff suppressed because it is too large
Load Diff
3777
asm/code_80140DC.s
Normal file
3777
asm/code_80140DC.s
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2771,106 +2771,4 @@ _08041692:
|
||||
bx r1
|
||||
thumb_func_end sub_8041550
|
||||
|
||||
thumb_func_start sub_80416A4
|
||||
sub_80416A4:
|
||||
push {r4,lr}
|
||||
sub sp, 0x8
|
||||
lsls r2, 24
|
||||
lsrs r2, 24
|
||||
movs r3, 0
|
||||
ldrsh r4, [r0, r3]
|
||||
lsls r3, r4, 1
|
||||
adds r3, r4
|
||||
lsls r3, 11
|
||||
movs r4, 0xC0
|
||||
lsls r4, 4
|
||||
adds r3, r4
|
||||
str r3, [sp]
|
||||
movs r4, 0x2
|
||||
ldrsh r3, [r0, r4]
|
||||
lsls r0, r3, 1
|
||||
adds r0, r3
|
||||
lsls r0, 11
|
||||
movs r3, 0x80
|
||||
lsls r3, 5
|
||||
adds r0, r3
|
||||
str r0, [sp, 0x4]
|
||||
mov r0, sp
|
||||
bl sub_80416E0
|
||||
add sp, 0x8
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80416A4
|
||||
|
||||
thumb_func_start sub_80416E0
|
||||
sub_80416E0:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x28
|
||||
adds r3, r0, 0
|
||||
lsls r2, 24
|
||||
lsrs r5, r2, 24
|
||||
str r1, [sp]
|
||||
movs r2, 0
|
||||
str r2, [sp, 0x4]
|
||||
movs r4, 0x1
|
||||
negs r4, r4
|
||||
str r4, [sp, 0x8]
|
||||
mov r1, sp
|
||||
ldr r0, [r3]
|
||||
cmp r0, 0
|
||||
bge _08041700
|
||||
adds r0, 0xFF
|
||||
_08041700:
|
||||
asrs r0, 8
|
||||
strh r0, [r1, 0xC]
|
||||
mov r1, sp
|
||||
ldr r0, [r3, 0x4]
|
||||
cmp r0, 0
|
||||
bge _0804170E
|
||||
adds r0, 0xFF
|
||||
_0804170E:
|
||||
asrs r0, 8
|
||||
strh r0, [r1, 0xE]
|
||||
str r4, [sp, 0x14]
|
||||
mov r0, sp
|
||||
strh r2, [r0, 0x10]
|
||||
strh r2, [r0, 0x12]
|
||||
ldr r0, _08041738
|
||||
str r0, [sp, 0x18]
|
||||
add r0, sp, 0x1C
|
||||
bl sub_8004E8C
|
||||
mov r0, sp
|
||||
movs r1, 0
|
||||
bl sub_8041764
|
||||
adds r4, r0, 0
|
||||
cmp r5, 0
|
||||
beq _08041758
|
||||
movs r5, 0
|
||||
b _08041744
|
||||
.align 2, 0
|
||||
_08041738: .4byte 0x0000ffff
|
||||
_0804173C:
|
||||
movs r0, 0x42
|
||||
bl sub_803E46C
|
||||
adds r5, 0x1
|
||||
_08041744:
|
||||
cmp r5, 0x63
|
||||
bgt _08041754
|
||||
adds r0, r4, 0
|
||||
bl sub_800E9A8
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0804173C
|
||||
_08041754:
|
||||
movs r4, 0x1
|
||||
negs r4, r4
|
||||
_08041758:
|
||||
adds r0, r4, 0
|
||||
add sp, 0x28
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80416E0
|
||||
|
||||
.align 2,0
|
||||
|
||||
@@ -5,516 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8044CC8
|
||||
sub_8044CC8:
|
||||
push {lr}
|
||||
adds r3, r0, 0
|
||||
adds r2, r1, 0
|
||||
ldrb r1, [r2]
|
||||
subs r0, r1, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x13
|
||||
bhi _08044CEC
|
||||
ldr r0, _08044CE8
|
||||
ldrb r1, [r2]
|
||||
lsls r1, 2
|
||||
subs r1, 0x4
|
||||
ldr r0, [r0]
|
||||
adds r0, r1
|
||||
b _08044D34
|
||||
.align 2, 0
|
||||
_08044CE8: .4byte gTeamInventoryRef
|
||||
_08044CEC:
|
||||
adds r0, r1, 0
|
||||
cmp r0, 0x80
|
||||
bne _08044D06
|
||||
movs r1, 0x4
|
||||
ldrsh r0, [r2, r1]
|
||||
movs r3, 0x6
|
||||
ldrsh r1, [r2, r3]
|
||||
bl GetTile
|
||||
ldr r0, [r0, 0x14]
|
||||
bl GetItemData
|
||||
b _08044D34
|
||||
_08044D06:
|
||||
cmp r0, 0x81
|
||||
bne _08044D0E
|
||||
ldr r0, [r3, 0x70]
|
||||
b _08044D32
|
||||
_08044D0E:
|
||||
adds r0, r1, 0
|
||||
adds r0, 0x70
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x3
|
||||
bls _08044D1E
|
||||
movs r0, 0
|
||||
b _08044D34
|
||||
_08044D1E:
|
||||
ldr r0, _08044D38
|
||||
ldr r1, [r0]
|
||||
ldrb r0, [r2]
|
||||
subs r0, 0x90
|
||||
lsls r0, 2
|
||||
ldr r2, _08044D3C
|
||||
adds r1, r2
|
||||
adds r1, r0
|
||||
ldr r0, [r1]
|
||||
ldr r0, [r0, 0x70]
|
||||
_08044D32:
|
||||
adds r0, 0x60
|
||||
_08044D34:
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_08044D38: .4byte gDungeon
|
||||
_08044D3C: .4byte 0x0001357c
|
||||
thumb_func_end sub_8044CC8
|
||||
|
||||
thumb_func_start sub_8044D40
|
||||
sub_8044D40:
|
||||
push {lr}
|
||||
lsls r1, 3
|
||||
adds r1, 0x4
|
||||
adds r2, r0, r1
|
||||
ldrb r1, [r2]
|
||||
subs r0, r1, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x13
|
||||
bhi _08044D74
|
||||
ldr r1, _08044D70
|
||||
ldrb r0, [r2]
|
||||
lsls r0, 2
|
||||
subs r0, 0x4
|
||||
ldr r1, [r1]
|
||||
adds r1, r0
|
||||
movs r0, 0
|
||||
strb r0, [r1, 0x2]
|
||||
strb r0, [r1, 0x1]
|
||||
strb r0, [r1]
|
||||
bl FillInventoryGaps
|
||||
b _08044D88
|
||||
.align 2, 0
|
||||
_08044D70: .4byte gTeamInventoryRef
|
||||
_08044D74:
|
||||
lsls r0, r1, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x80
|
||||
beq _08044D80
|
||||
movs r0, 0
|
||||
b _08044D8A
|
||||
_08044D80:
|
||||
adds r0, r2, 0x4
|
||||
movs r1, 0x1
|
||||
bl sub_80461C8
|
||||
_08044D88:
|
||||
movs r0, 0x1
|
||||
_08044D8A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8044D40
|
||||
|
||||
thumb_func_start sub_8044D90
|
||||
sub_8044D90:
|
||||
push {lr}
|
||||
ldr r3, [r0, 0x70]
|
||||
lsls r1, 3
|
||||
adds r1, 0x48
|
||||
adds r3, r1
|
||||
adds r1, r3, 0
|
||||
bl sub_8044CC8
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8044D90
|
||||
|
||||
thumb_func_start sub_8044DA4
|
||||
sub_8044DA4:
|
||||
ldr r0, [r0, 0x70]
|
||||
ldr r2, _08044DC0
|
||||
ldr r2, [r2]
|
||||
lsls r1, 3
|
||||
adds r0, r1
|
||||
adds r0, 0x48
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 2
|
||||
ldr r1, _08044DC4
|
||||
adds r2, r1
|
||||
adds r2, r0
|
||||
ldr r0, [r2]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08044DC0: .4byte gDungeon
|
||||
_08044DC4: .4byte 0x0001357c
|
||||
thumb_func_end sub_8044DA4
|
||||
|
||||
thumb_func_start sub_8044DC8
|
||||
sub_8044DC8:
|
||||
push {r4,lr}
|
||||
adds r1, r0, 0
|
||||
ldrb r0, [r1, 0x2]
|
||||
cmp r0, 0xE9
|
||||
beq _08044DE8
|
||||
ldr r4, _08044DE4
|
||||
bl GetItemCategory
|
||||
lsls r0, 24
|
||||
lsrs r0, 23
|
||||
adds r0, r4
|
||||
ldrh r0, [r0]
|
||||
b _08044DEA
|
||||
.align 2, 0
|
||||
_08044DE4: .4byte gUnknown_80F6964
|
||||
_08044DE8:
|
||||
movs r0, 0x35
|
||||
_08044DEA:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8044DC8
|
||||
|
||||
thumb_func_start sub_8044DF0
|
||||
sub_8044DF0:
|
||||
push {r4,lr}
|
||||
ldr r4, [r0, 0x70]
|
||||
bl sub_8044D90
|
||||
adds r1, r0, 0
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x48
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x80
|
||||
bne _08044E10
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x4C
|
||||
movs r1, 0x1
|
||||
bl sub_80461C8
|
||||
b _08044E1C
|
||||
_08044E10:
|
||||
movs r0, 0
|
||||
strb r0, [r1, 0x2]
|
||||
strb r0, [r1, 0x1]
|
||||
strb r0, [r1]
|
||||
bl FillInventoryGaps
|
||||
_08044E1C:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8044DF0
|
||||
|
||||
thumb_func_start sub_8044E24
|
||||
sub_8044E24:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x4
|
||||
adds r4, r0, 0
|
||||
adds r6, r1, 0
|
||||
adds r7, r2, 0
|
||||
bl sub_8044D90
|
||||
adds r5, r0, 0
|
||||
ldr r0, [r4, 0x70]
|
||||
mov r8, r0
|
||||
ldrb r0, [r5, 0x2]
|
||||
bl IsHMItem
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08044EBA
|
||||
ldrb r0, [r5, 0x2]
|
||||
bl GetItemCategory
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x5
|
||||
bne _08044EB0
|
||||
lsls r1, r6, 3
|
||||
mov r2, r8
|
||||
adds r0, r2, r1
|
||||
adds r0, 0x48
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x80
|
||||
bne _08044EA4
|
||||
ldr r0, [r5]
|
||||
str r0, [sp]
|
||||
adds r4, r1, r2
|
||||
adds r4, 0x4C
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
bl sub_80461C8
|
||||
ldrb r1, [r5, 0x2]
|
||||
subs r1, 0x7D
|
||||
lsls r1, 24
|
||||
lsrs r1, 16
|
||||
ldr r2, _08044E9C
|
||||
ldr r0, [sp]
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
ldr r1, _08044EA0
|
||||
ands r0, r1
|
||||
movs r1, 0xF8
|
||||
lsls r1, 15
|
||||
orrs r0, r1
|
||||
str r0, [sp]
|
||||
adds r0, r4, 0
|
||||
mov r1, sp
|
||||
movs r2, 0x1
|
||||
bl sub_80460F8
|
||||
b _08044EBA
|
||||
.align 2, 0
|
||||
_08044E9C: .4byte 0xffff00ff
|
||||
_08044EA0: .4byte 0xff00ffff
|
||||
_08044EA4:
|
||||
ldrb r0, [r5, 0x2]
|
||||
subs r0, 0x7D
|
||||
strb r0, [r5, 0x1]
|
||||
movs r0, 0x7C
|
||||
strb r0, [r5, 0x2]
|
||||
b _08044EBA
|
||||
_08044EB0:
|
||||
adds r0, r4, 0
|
||||
adds r1, r6, 0
|
||||
adds r2, r7, 0
|
||||
bl sub_8044DF0
|
||||
_08044EBA:
|
||||
add sp, 0x4
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8044E24
|
||||
|
||||
thumb_func_start sub_8044EC8
|
||||
sub_8044EC8:
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
ldr r1, _08044EE8
|
||||
lsls r0, r5, 2
|
||||
adds r0, r1
|
||||
ldrh r4, [r0]
|
||||
cmp r4, 0x26
|
||||
bne _08044EF0
|
||||
bl sub_8043D10
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x2
|
||||
bne _08044EF0
|
||||
ldr r0, _08044EEC
|
||||
b _08044F2C
|
||||
.align 2, 0
|
||||
_08044EE8: .4byte gUnknown_202EE44
|
||||
_08044EEC: .4byte gUnknown_80F91EC
|
||||
_08044EF0:
|
||||
ldr r1, _08044F10
|
||||
lsls r0, r4, 3
|
||||
adds r4, r0, r1
|
||||
ldr r0, [r4]
|
||||
ldr r1, _08044F14
|
||||
bl strcmp
|
||||
cmp r0, 0
|
||||
beq _08044F04
|
||||
movs r0, 0x1
|
||||
_08044F04:
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08044F18
|
||||
ldr r0, [r4]
|
||||
b _08044F2E
|
||||
.align 2, 0
|
||||
_08044F10: .4byte gUnknown_80F7C50
|
||||
_08044F14: .4byte gUnknown_80F697C
|
||||
_08044F18:
|
||||
ldr r4, _08044F34
|
||||
ldr r1, _08044F38
|
||||
lsls r0, r5, 2
|
||||
adds r0, r1
|
||||
ldrb r0, [r0, 0x2]
|
||||
bl GetItemActionType
|
||||
lsls r0, 3
|
||||
adds r4, 0x4
|
||||
adds r0, r4
|
||||
_08044F2C:
|
||||
ldr r0, [r0]
|
||||
_08044F2E:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_08044F34: .4byte gActions
|
||||
_08044F38: .4byte gUnknown_202EE44
|
||||
thumb_func_end sub_8044EC8
|
||||
|
||||
thumb_func_start sub_8044F3C
|
||||
sub_8044F3C:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
cmp r1, 0
|
||||
blt _08044F54
|
||||
ldr r0, _08044F50
|
||||
lsls r1, 2
|
||||
adds r1, r0
|
||||
ldrb r0, [r1, 0x3]
|
||||
b _08044F56
|
||||
.align 2, 0
|
||||
_08044F50: .4byte gUnknown_202EE44
|
||||
_08044F54:
|
||||
movs r0, 0
|
||||
_08044F56:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8044F3C
|
||||
|
||||
thumb_func_start sub_8044F5C
|
||||
sub_8044F5C:
|
||||
push {r4-r7,lr}
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
lsls r1, 24
|
||||
lsrs r7, r1, 24
|
||||
ldr r0, _08044FAC
|
||||
ldr r2, [r0]
|
||||
adds r6, r0, 0
|
||||
cmp r2, 0x9
|
||||
bgt _08044FA4
|
||||
movs r3, 0
|
||||
ldr r5, _08044FB0
|
||||
cmp r3, r2
|
||||
bge _08044F8A
|
||||
adds r1, r2, 0
|
||||
adds r2, r5, 0
|
||||
_08044F7C:
|
||||
ldrh r0, [r2]
|
||||
cmp r0, r4
|
||||
beq _08044FA4
|
||||
adds r2, 0x4
|
||||
adds r3, 0x1
|
||||
cmp r3, r1
|
||||
blt _08044F7C
|
||||
_08044F8A:
|
||||
ldr r0, [r6]
|
||||
lsls r0, 2
|
||||
adds r0, r5
|
||||
strh r4, [r0]
|
||||
strb r7, [r0, 0x2]
|
||||
ldr r0, [r6]
|
||||
lsls r0, 2
|
||||
adds r0, r5
|
||||
movs r1, 0x1
|
||||
strb r1, [r0, 0x3]
|
||||
ldr r0, [r6]
|
||||
adds r0, 0x1
|
||||
str r0, [r6]
|
||||
_08044FA4:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08044FAC: .4byte gUnknown_202EE6C
|
||||
_08044FB0: .4byte gUnknown_202EE44
|
||||
thumb_func_end sub_8044F5C
|
||||
|
||||
thumb_func_start sub_8044FB4
|
||||
sub_8044FB4:
|
||||
push {r4,lr}
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
movs r1, 0
|
||||
ldr r0, _08044FD4
|
||||
ldr r0, [r0]
|
||||
cmp r1, r0
|
||||
bge _08044FE4
|
||||
adds r3, r0, 0
|
||||
ldr r2, _08044FD8
|
||||
_08044FC8:
|
||||
ldrh r0, [r2]
|
||||
cmp r0, r4
|
||||
bne _08044FDC
|
||||
adds r0, r1, 0
|
||||
b _08044FE8
|
||||
.align 2, 0
|
||||
_08044FD4: .4byte gUnknown_202EE6C
|
||||
_08044FD8: .4byte gUnknown_202EE44
|
||||
_08044FDC:
|
||||
adds r2, 0x4
|
||||
adds r1, 0x1
|
||||
cmp r1, r3
|
||||
blt _08044FC8
|
||||
_08044FE4:
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
_08044FE8:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8044FB4
|
||||
|
||||
thumb_func_start sub_8044FF0
|
||||
sub_8044FF0:
|
||||
push {r4,r5,lr}
|
||||
lsls r0, 16
|
||||
lsrs r3, r0, 16
|
||||
movs r2, 0
|
||||
ldr r1, _08045010
|
||||
ldr r0, [r1]
|
||||
cmp r2, r0
|
||||
bge _08045022
|
||||
movs r5, 0
|
||||
adds r4, r1, 0
|
||||
ldr r1, _08045014
|
||||
_08045006:
|
||||
ldrh r0, [r1]
|
||||
cmp r0, r3
|
||||
bne _08045018
|
||||
strb r5, [r1, 0x3]
|
||||
b _08045022
|
||||
.align 2, 0
|
||||
_08045010: .4byte gUnknown_202EE6C
|
||||
_08045014: .4byte gUnknown_202EE44
|
||||
_08045018:
|
||||
adds r1, 0x4
|
||||
adds r2, 0x1
|
||||
ldr r0, [r4]
|
||||
cmp r2, r0
|
||||
blt _08045006
|
||||
_08045022:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8044FF0
|
||||
|
||||
thumb_func_start IsNotAttacking
|
||||
IsNotAttacking:
|
||||
push {r4,lr}
|
||||
adds r2, r0, 0
|
||||
lsls r1, 24
|
||||
ldr r0, [r2, 0x70]
|
||||
adds r4, r0, 0
|
||||
adds r4, 0x44
|
||||
cmp r1, 0
|
||||
beq _08045044
|
||||
adds r0, r2, 0
|
||||
bl sub_8045888
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0804505A
|
||||
_08045044:
|
||||
ldrh r0, [r4]
|
||||
cmp r0, 0
|
||||
beq _0804505A
|
||||
cmp r0, 0x2
|
||||
beq _0804505A
|
||||
cmp r0, 0x1
|
||||
beq _0804505A
|
||||
cmp r0, 0x5
|
||||
beq _0804505A
|
||||
movs r0, 0
|
||||
b _0804505C
|
||||
_0804505A:
|
||||
movs r0, 0x1
|
||||
_0804505C:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end IsNotAttacking
|
||||
|
||||
thumb_func_start sub_8045064
|
||||
sub_8045064:
|
||||
push {r4-r7,lr}
|
||||
|
||||
@@ -511,7 +511,7 @@ _08045750:
|
||||
adds r2, 0x4
|
||||
lsls r2, 8
|
||||
adds r0, r4, 0
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
movs r0, 0
|
||||
strh r7, [r4, 0x26]
|
||||
adds r1, r4, 0
|
||||
@@ -570,7 +570,7 @@ sub_80457DC:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
strh r5, [r4, 0x26]
|
||||
adds r4, 0x22
|
||||
strb r6, [r4]
|
||||
|
||||
@@ -944,7 +944,7 @@ sub_80464C8:
|
||||
adds r2, 0x4
|
||||
lsls r2, 8
|
||||
add r0, sp, 0x4
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
add r0, sp, 0x4
|
||||
strh r4, [r0, 0x26]
|
||||
str r4, [sp]
|
||||
@@ -1340,7 +1340,7 @@ _08046822:
|
||||
mov r0, r8
|
||||
adds r1, r4, 0
|
||||
adds r2, r5, 0
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
movs r0, 0
|
||||
mov r1, r8
|
||||
str r0, [r1, 0x1C]
|
||||
@@ -1646,7 +1646,7 @@ _08046A20:
|
||||
lsls r5, 3
|
||||
add r5, sp
|
||||
str r3, [r5]
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
mov r0, r8
|
||||
strh r0, [r4, 0x26]
|
||||
ldr r4, _08046B30
|
||||
|
||||
@@ -88,7 +88,7 @@ sub_8047190:
|
||||
adds r2, r0
|
||||
lsls r2, 11
|
||||
adds r0, r7, 0
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
strh r4, [r7, 0x26]
|
||||
str r4, [sp, 0x224]
|
||||
mov r0, r9
|
||||
@@ -625,7 +625,7 @@ sub_80475C4:
|
||||
adds r2, 0x4
|
||||
lsls r2, 8
|
||||
ldr r0, [sp, 0x1C]
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
ldr r3, [sp, 0x1C]
|
||||
strh r4, [r3, 0x26]
|
||||
movs r0, 0x1
|
||||
@@ -788,7 +788,7 @@ _08047762:
|
||||
str r1, [sp, 0x3C]
|
||||
ldr r0, [sp, 0x1C]
|
||||
adds r1, r3, 0
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
bl IsWaterTileset
|
||||
lsls r0, 24
|
||||
movs r2, 0
|
||||
|
||||
3951
asm/code_805D8C8.s
3951
asm/code_805D8C8.s
File diff suppressed because it is too large
Load Diff
3146
asm/code_8066D04.s
Normal file
3146
asm/code_8066D04.s
Normal file
File diff suppressed because it is too large
Load Diff
@@ -5,305 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8071B48
|
||||
sub_8071B48:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x14
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
ldr r0, _08071B94
|
||||
ldr r6, [r0]
|
||||
ldr r1, _08071B98
|
||||
adds r0, r6, r1
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r0, 0
|
||||
bne _08071B66
|
||||
b _08071D3E
|
||||
_08071B66:
|
||||
subs r1, 0x20
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x15
|
||||
bne _08071B7C
|
||||
ldr r2, _08071B9C
|
||||
adds r0, r6, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08071B7C
|
||||
b _08071D3E
|
||||
_08071B7C:
|
||||
ldr r0, _08071BA0
|
||||
adds r1, r6, r0
|
||||
ldrh r0, [r1]
|
||||
adds r2, r0, 0x1
|
||||
strh r2, [r1]
|
||||
ldr r1, _08071BA4
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08071BAC
|
||||
ldr r0, _08071BA8
|
||||
b _08071BAE
|
||||
.align 2, 0
|
||||
_08071B94: .4byte gDungeon
|
||||
_08071B98: .4byte 0x00000664
|
||||
_08071B9C: .4byte 0x000037fd
|
||||
_08071BA0: .4byte 0x00000662
|
||||
_08071BA4: .4byte 0x0000066e
|
||||
_08071BA8: .4byte gUnknown_80F4DAA
|
||||
_08071BAC:
|
||||
ldr r0, _08071C60
|
||||
_08071BAE:
|
||||
lsls r1, r2, 16
|
||||
asrs r1, 16
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r1, r0
|
||||
bge _08071BBC
|
||||
b _08071D3E
|
||||
_08071BBC:
|
||||
ldr r1, _08071C64
|
||||
adds r0, r6, r1
|
||||
movs r2, 0
|
||||
ldrsh r1, [r0, r2]
|
||||
movs r0, 0xE1
|
||||
lsls r0, 2
|
||||
cmp r1, r0
|
||||
ble _08071BF6
|
||||
ldr r1, _08071C68
|
||||
adds r0, r6, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08071BF6
|
||||
ldrh r0, [r4, 0x26]
|
||||
ldr r2, _08071C6C
|
||||
adds r1, r6, r2
|
||||
ldr r1, [r1]
|
||||
cmp r0, r1
|
||||
bne _08071BF6
|
||||
ldr r0, _08071C70
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
mov r8, r4
|
||||
_08071BF6:
|
||||
ldr r1, _08071C64
|
||||
adds r0, r6, r1
|
||||
movs r1, 0
|
||||
strh r1, [r0]
|
||||
ldr r2, _08071C68
|
||||
adds r0, r6, r2
|
||||
str r1, [r0]
|
||||
movs r7, 0
|
||||
movs r5, 0
|
||||
_08071C08:
|
||||
lsls r0, r5, 2
|
||||
ldr r2, _08071C74
|
||||
adds r1, r6, r2
|
||||
adds r1, r0
|
||||
ldr r4, [r1]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08071C3A
|
||||
movs r1, 0x4
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r2, 0x6
|
||||
ldrsh r1, [r4, r2]
|
||||
bl GetTile
|
||||
ldrh r0, [r0]
|
||||
movs r2, 0x80
|
||||
lsls r2, 1
|
||||
adds r1, r2, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _08071C3A
|
||||
adds r7, 0x1
|
||||
_08071C3A:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0xF
|
||||
ble _08071C08
|
||||
ldr r1, _08071C78
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08071C92
|
||||
ldr r0, _08071C7C
|
||||
ldr r0, [r0]
|
||||
ldr r2, _08071C80
|
||||
adds r0, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0xFF
|
||||
bne _08071C88
|
||||
ldr r0, _08071C84
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
b _08071C8E
|
||||
.align 2, 0
|
||||
_08071C60: .4byte gUnknown_80F4DAC
|
||||
_08071C64: .4byte 0x00000662
|
||||
_08071C68: .4byte 0x00017b34
|
||||
_08071C6C: .4byte 0x00017b40
|
||||
_08071C70: .4byte gAvailablePokemonNames
|
||||
_08071C74: .4byte 0x0001358c
|
||||
_08071C78: .4byte 0x0000066e
|
||||
_08071C7C: .4byte gDungeon
|
||||
_08071C80: .4byte 0x00003a0c
|
||||
_08071C84: .4byte gUnknown_80F4DA6
|
||||
_08071C88:
|
||||
ldr r0, _08071CB8
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
_08071C8E:
|
||||
cmp r7, r0
|
||||
bge _08071D3E
|
||||
_08071C92:
|
||||
mov r0, r8
|
||||
cmp r0, 0
|
||||
beq _08071CA8
|
||||
ldr r0, _08071CBC
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
bl sub_805239C
|
||||
mov r0, r8
|
||||
bl sub_8042920
|
||||
_08071CA8:
|
||||
ldr r1, _08071CC0
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08071CC4
|
||||
movs r5, 0xBE
|
||||
lsls r5, 1
|
||||
b _08071CCE
|
||||
.align 2, 0
|
||||
_08071CB8: .4byte gUnknown_80F4DA8
|
||||
_08071CBC: .4byte gUnknown_80FED68
|
||||
_08071CC0: .4byte 0x0000066e
|
||||
_08071CC4:
|
||||
movs r0, 0
|
||||
bl sub_803D970
|
||||
lsls r0, 16
|
||||
asrs r5, r0, 16
|
||||
_08071CCE:
|
||||
adds r0, r5, 0
|
||||
bl sub_803DA20
|
||||
adds r4, r0, 0
|
||||
cmp r4, 0
|
||||
bne _08071CDC
|
||||
movs r4, 0x1
|
||||
_08071CDC:
|
||||
adds r0, r5, 0
|
||||
movs r1, 0
|
||||
bl sub_806AA0C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08071D3E
|
||||
add r0, sp, 0xC
|
||||
bl sub_8083660
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08071D3E
|
||||
mov r0, sp
|
||||
movs r1, 0
|
||||
strh r5, [r0]
|
||||
strh r4, [r0, 0x8]
|
||||
strb r1, [r0, 0x2]
|
||||
movs r0, 0x64
|
||||
bl DungeonRandInt
|
||||
adds r4, r0, 0
|
||||
ldr r0, _08071D24
|
||||
ldr r0, [r0]
|
||||
ldr r2, _08071D28
|
||||
adds r0, r2
|
||||
ldrb r0, [r0]
|
||||
bl GetRandomMovementChance
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r4, r0
|
||||
bge _08071D2C
|
||||
movs r0, 0x1
|
||||
b _08071D2E
|
||||
.align 2, 0
|
||||
_08071D24: .4byte gDungeon
|
||||
_08071D28: .4byte 0x00000644
|
||||
_08071D2C:
|
||||
movs r0, 0
|
||||
_08071D2E:
|
||||
str r0, [sp, 0x4]
|
||||
mov r1, sp
|
||||
movs r0, 0
|
||||
strb r0, [r1, 0x10]
|
||||
mov r0, sp
|
||||
movs r1, 0
|
||||
bl sub_806B7F8
|
||||
_08071D3E:
|
||||
add sp, 0x14
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8071B48
|
||||
|
||||
thumb_func_start sub_8071D4C
|
||||
sub_8071D4C:
|
||||
push {lr}
|
||||
ldr r3, [r1, 0x70]
|
||||
ldrb r0, [r3, 0x9]
|
||||
cmp r0, 0x64
|
||||
beq _08071D94
|
||||
adds r0, r3, 0
|
||||
adds r0, 0x40
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x4A
|
||||
beq _08071D64
|
||||
cmp r0, 0x47
|
||||
bne _08071D68
|
||||
_08071D64:
|
||||
movs r0, 0x1
|
||||
b _08071D6A
|
||||
_08071D68:
|
||||
movs r0, 0
|
||||
_08071D6A:
|
||||
cmp r0, 0
|
||||
bne _08071D94
|
||||
ldr r1, [r3, 0x18]
|
||||
adds r2, r1, r2
|
||||
ldr r0, _08071D98
|
||||
cmp r2, r0
|
||||
ble _08071D7A
|
||||
ldr r2, _08071D9C
|
||||
_08071D7A:
|
||||
subs r2, r1
|
||||
cmp r2, 0
|
||||
beq _08071D94
|
||||
movs r0, 0xFE
|
||||
lsls r0, 1
|
||||
adds r1, r3, r0
|
||||
ldr r0, [r1]
|
||||
adds r0, r2
|
||||
str r0, [r1]
|
||||
ldr r0, _08071DA0
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x1
|
||||
strb r0, [r1, 0xD]
|
||||
_08071D94:
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08071D98: .4byte 0x0098967e
|
||||
_08071D9C: .4byte 0x0098967f
|
||||
_08071DA0: .4byte gDungeon
|
||||
thumb_func_end sub_8071D4C
|
||||
|
||||
thumb_func_start sub_8071DA4
|
||||
sub_8071DA4:
|
||||
push {r4-r7,lr}
|
||||
@@ -1997,231 +1698,4 @@ _08072AC0: .4byte gAvailablePokemonNames
|
||||
_08072AC4: .4byte gUnknown_80F9F2C
|
||||
thumb_func_end sub_8072938
|
||||
|
||||
thumb_func_start sub_8072AC8
|
||||
sub_8072AC8:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x4
|
||||
adds r6, r0, 0
|
||||
adds r7, r2, 0
|
||||
lsls r1, 16
|
||||
asrs r0, r1, 16
|
||||
movs r3, 0
|
||||
adds r2, r6, 0x6
|
||||
_08072AD8:
|
||||
strh r3, [r2]
|
||||
subs r2, 0x2
|
||||
cmp r2, r6
|
||||
bge _08072AD8
|
||||
movs r5, 0
|
||||
bl GetLevelUpMoves
|
||||
adds r4, r0, 0
|
||||
b _08072B04
|
||||
_08072AEA:
|
||||
cmp r5, 0x4
|
||||
bne _08072AF6
|
||||
movs r0, 0x4
|
||||
bl DungeonRandInt
|
||||
b _08072AFA
|
||||
_08072AF6:
|
||||
adds r0, r5, 0
|
||||
adds r5, 0x1
|
||||
_08072AFA:
|
||||
lsls r0, 1
|
||||
adds r0, r6
|
||||
mov r1, sp
|
||||
ldrh r1, [r1]
|
||||
strh r1, [r0]
|
||||
_08072B04:
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
beq _08072B1C
|
||||
adds r0, r4, 0
|
||||
mov r1, sp
|
||||
bl DecompressMoveID
|
||||
adds r4, r0, 0
|
||||
ldrb r0, [r4]
|
||||
adds r4, 0x1
|
||||
cmp r0, r7
|
||||
ble _08072AEA
|
||||
_08072B1C:
|
||||
add sp, 0x4
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8072AC8
|
||||
|
||||
thumb_func_start sub_8072B24
|
||||
sub_8072B24:
|
||||
push {r4-r7,lr}
|
||||
adds r5, r1, 0
|
||||
movs r4, 0
|
||||
movs r7, 0x1
|
||||
movs r6, 0xFD
|
||||
adds r2, r5, 0
|
||||
movs r3, 0x7
|
||||
_08072B32:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r7, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08072B44
|
||||
adds r0, r6, 0
|
||||
ands r0, r1
|
||||
strb r0, [r2]
|
||||
adds r4, 0x1
|
||||
_08072B44:
|
||||
adds r2, 0x8
|
||||
subs r3, 0x1
|
||||
cmp r3, 0
|
||||
bge _08072B32
|
||||
adds r0, r4, 0
|
||||
bl DungeonRandInt
|
||||
adds r3, r0, 0
|
||||
adds r4, r5, 0
|
||||
adds r4, 0x38
|
||||
cmp r3, 0x6
|
||||
bgt _08072B6C
|
||||
lsls r0, r3, 3
|
||||
adds r2, r0, r5
|
||||
_08072B60:
|
||||
ldr r0, [r2, 0x8]
|
||||
ldr r1, [r2, 0xC]
|
||||
stm r2!, {r0,r1}
|
||||
adds r3, 0x1
|
||||
cmp r3, 0x6
|
||||
ble _08072B60
|
||||
_08072B6C:
|
||||
movs r0, 0
|
||||
strb r0, [r4]
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8072B24
|
||||
|
||||
thumb_func_start sub_8072B78
|
||||
sub_8072B78:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x20
|
||||
mov r8, r0
|
||||
adds r7, r1, 0
|
||||
lsls r5, r2, 16
|
||||
asrs r5, 16
|
||||
ldr r6, [r7, 0x70]
|
||||
ldr r4, _08072BFC
|
||||
adds r0, r4, 0
|
||||
adds r1, r6, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument_2
|
||||
adds r4, 0x50
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl CopyCyanMonsterNametoBuffer
|
||||
adds r0, r5, 0
|
||||
bl sub_80687D0
|
||||
adds r4, r0, 0
|
||||
lsls r0, r5, 16
|
||||
lsrs r0, 16
|
||||
strh r0, [r6, 0x4]
|
||||
strh r0, [r6, 0x2]
|
||||
ldrb r2, [r6, 0x9]
|
||||
mov r0, sp
|
||||
adds r1, r5, 0
|
||||
bl GetPokemonLevelData
|
||||
ldr r0, [sp]
|
||||
str r0, [r6, 0x18]
|
||||
str r4, [r7, 0x64]
|
||||
adds r0, r6, 0
|
||||
movs r1, 0
|
||||
bl sub_806BFC0
|
||||
adds r0, r7, 0
|
||||
bl sub_8069E0C
|
||||
adds r0, r7, 0
|
||||
movs r1, 0x7
|
||||
bl sub_806CCB4
|
||||
ldr r0, _08072C00
|
||||
ldr r2, [r0]
|
||||
mov r0, r8
|
||||
adds r1, r7, 0
|
||||
bl sub_80522F4
|
||||
adds r0, r7, 0
|
||||
bl sub_8042A44
|
||||
bl sub_8083D78
|
||||
movs r0, 0x9E
|
||||
lsls r0, 1
|
||||
cmp r5, r0
|
||||
bne _08072C74
|
||||
movs r5, 0
|
||||
ldr r4, _08072C04
|
||||
b _08072C0C
|
||||
.align 2, 0
|
||||
_08072BFC: .4byte gAvailablePokemonNames
|
||||
_08072C00: .4byte gUnknown_80FE2EC
|
||||
_08072C04: .4byte gAdjacentTileOffsets
|
||||
_08072C08:
|
||||
adds r4, 0x4
|
||||
adds r5, 0x1
|
||||
_08072C0C:
|
||||
cmp r5, 0x7
|
||||
bgt _08072C36
|
||||
movs r1, 0
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r2, 0x4
|
||||
ldrsh r1, [r7, r2]
|
||||
adds r0, r1
|
||||
movs r3, 0x2
|
||||
ldrsh r1, [r4, r3]
|
||||
movs r3, 0x6
|
||||
ldrsh r2, [r7, r3]
|
||||
adds r1, r2
|
||||
bl GetTile
|
||||
adds r1, r0, 0
|
||||
ldr r0, _08072C80
|
||||
bl sub_807034C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08072C08
|
||||
_08072C36:
|
||||
ldr r0, _08072C80
|
||||
mov r8, r0
|
||||
bl sub_803D930
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08072C74
|
||||
add r0, sp, 0xC
|
||||
movs r3, 0
|
||||
movs r4, 0
|
||||
mov r1, r8
|
||||
strh r1, [r0]
|
||||
ldrb r1, [r6, 0x9]
|
||||
strh r1, [r0, 0x8]
|
||||
strb r3, [r0, 0x2]
|
||||
ldr r1, _08072C84
|
||||
lsls r2, r5, 2
|
||||
adds r2, r1
|
||||
ldrh r1, [r7, 0x4]
|
||||
ldrh r5, [r2]
|
||||
adds r1, r5
|
||||
strh r1, [r0, 0xC]
|
||||
ldrh r1, [r7, 0x6]
|
||||
ldrh r2, [r2, 0x2]
|
||||
adds r1, r2
|
||||
strh r1, [r0, 0xE]
|
||||
str r4, [r0, 0x4]
|
||||
strb r3, [r0, 0x10]
|
||||
movs r1, 0x1
|
||||
bl sub_806B7F8
|
||||
_08072C74:
|
||||
add sp, 0x20
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08072C80: .4byte 0x0000013d
|
||||
_08072C84: .4byte gAdjacentTileOffsets
|
||||
thumb_func_end sub_8072B78
|
||||
|
||||
.align 2, 0
|
||||
@@ -5,691 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8072CF4
|
||||
sub_8072CF4:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x4
|
||||
adds r4, r0, 0
|
||||
movs r0, 0x1
|
||||
bl sub_804178C
|
||||
ldr r1, _08072D4C
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r6, [r4, 0x70]
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xFC
|
||||
movs r1, 0
|
||||
strb r1, [r0]
|
||||
subs r0, 0x9
|
||||
strb r1, [r0]
|
||||
ldr r0, _08072D50
|
||||
ldr r0, [r0]
|
||||
adds r0, 0xB8
|
||||
str r4, [r0]
|
||||
ldr r2, _08072D54
|
||||
adds r0, r6, 0
|
||||
adds r0, 0x44
|
||||
ldrh r0, [r0]
|
||||
lsls r1, r0, 1
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08072D64
|
||||
ldrb r0, [r6, 0x7]
|
||||
cmp r0, 0
|
||||
beq _08072D58
|
||||
adds r0, r2, 0x1
|
||||
adds r0, r1, r0
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, 0
|
||||
bl sub_805EFB4
|
||||
b _08072D64
|
||||
.align 2, 0
|
||||
_08072D4C: .4byte gUnknown_203B434
|
||||
_08072D50: .4byte gDungeon
|
||||
_08072D54: .4byte gUnknown_80F58F4
|
||||
_08072D58:
|
||||
adds r0, r2, 0x1
|
||||
adds r0, r1, r0
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, 0
|
||||
bl sub_8075BA4
|
||||
_08072D64:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl CannotAttack
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08072D86
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
bl IsCharging
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08072D86
|
||||
adds r0, r4, 0
|
||||
bl sub_8079764
|
||||
_08072D86:
|
||||
movs r7, 0x1
|
||||
movs r5, 0xFB
|
||||
movs r0, 0x8C
|
||||
lsls r0, 1
|
||||
adds r2, r6, r0
|
||||
movs r3, 0x3
|
||||
_08072D92:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r7, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08072DA4
|
||||
ldrb r1, [r2, 0x1]
|
||||
adds r0, r5, 0
|
||||
ands r0, r1
|
||||
strb r0, [r2, 0x1]
|
||||
_08072DA4:
|
||||
adds r2, 0x8
|
||||
subs r3, 0x1
|
||||
cmp r3, 0
|
||||
bge _08072D92
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl IsNotAttacking
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08072E08
|
||||
adds r0, r4, 0
|
||||
bl UseAttack
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08072DF0
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08072DD2
|
||||
b _080732D4
|
||||
_08072DD2:
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08072DE0
|
||||
b _080732D4
|
||||
_08072DE0:
|
||||
ldr r0, _08072DEC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08072DF0
|
||||
movs r0, 0x1
|
||||
b _080732D6
|
||||
.align 2, 0
|
||||
_08072DEC: .4byte gUnknown_202F32D
|
||||
_08072DF0:
|
||||
ldrb r0, [r6, 0x7]
|
||||
cmp r0, 0
|
||||
bne _08072DFC
|
||||
movs r0, 0xA
|
||||
bl sub_8052740
|
||||
_08072DFC:
|
||||
adds r0, r4, 0
|
||||
bl sub_806A1E8
|
||||
movs r0, 0xA
|
||||
bl sub_803E46C
|
||||
_08072E08:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0x44
|
||||
ldrh r1, [r0]
|
||||
adds r5, r0, 0
|
||||
cmp r1, 0x1
|
||||
bls _08072E26
|
||||
cmp r1, 0x4
|
||||
beq _08072E26
|
||||
cmp r1, 0x2
|
||||
beq _08072E26
|
||||
movs r2, 0xA4
|
||||
lsls r2, 1
|
||||
adds r1, r6, r2
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
_08072E26:
|
||||
movs r3, 0
|
||||
mov r10, r3
|
||||
movs r7, 0xA5
|
||||
lsls r7, 1
|
||||
adds r0, r6, r7
|
||||
mov r1, r10
|
||||
strb r1, [r0]
|
||||
ldr r0, _08072E50
|
||||
strb r1, [r0]
|
||||
ldr r0, _08072E54
|
||||
strb r1, [r0]
|
||||
ldrh r0, [r5]
|
||||
subs r0, 0x2
|
||||
cmp r0, 0x3F
|
||||
bls _08072E46
|
||||
b _080731B4
|
||||
_08072E46:
|
||||
lsls r0, 2
|
||||
ldr r1, _08072E58
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08072E50: .4byte gUnknown_202F221
|
||||
_08072E54: .4byte gUnknown_202F222
|
||||
_08072E58: .4byte _08072E5C
|
||||
.align 2, 0
|
||||
_08072E5C:
|
||||
.4byte _08072F5C
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _08073104
|
||||
.4byte _080730A4
|
||||
.4byte _0807310C
|
||||
.4byte _0807311C
|
||||
.4byte _080731B4
|
||||
.4byte _08073094
|
||||
.4byte _08073094
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _08073094
|
||||
.4byte _0807314C
|
||||
.4byte _08073154
|
||||
.4byte _0807303E
|
||||
.4byte _080731B4
|
||||
.4byte _0807315C
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _08073186
|
||||
.4byte _0807318E
|
||||
.4byte _08073170
|
||||
.4byte _08073046
|
||||
.4byte _0807311C
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _0807309C
|
||||
.4byte _08073162
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080731B4
|
||||
.4byte _080730AC
|
||||
.4byte _080730B4
|
||||
.4byte _080730C4
|
||||
.4byte _08073196
|
||||
.4byte _08073114
|
||||
.4byte _080730E0
|
||||
.4byte _080730CC
|
||||
.4byte _080730D6
|
||||
.4byte _080730BC
|
||||
.4byte _0807317E
|
||||
.4byte _080731B4
|
||||
.4byte _0807311C
|
||||
_08072F5C:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xB0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x2
|
||||
beq _08072F76
|
||||
cmp r0, 0x7
|
||||
beq _08072F76
|
||||
cmp r0, 0x5
|
||||
beq _08072F76
|
||||
cmp r0, 0x3
|
||||
beq _08072F76
|
||||
cmp r0, 0x4
|
||||
bne _08072F84
|
||||
_08072F76:
|
||||
movs r0, 0
|
||||
strh r0, [r5]
|
||||
ldr r2, _08072F80
|
||||
adds r1, r6, r2
|
||||
b _08072FDA
|
||||
.align 2, 0
|
||||
_08072F80: .4byte 0x00000147
|
||||
_08072F84:
|
||||
movs r3, 0
|
||||
mov r9, r3
|
||||
ldr r1, _08072FE0
|
||||
adds r2, r6, 0
|
||||
adds r2, 0x46
|
||||
ldrb r3, [r2]
|
||||
lsls r0, r3, 2
|
||||
adds r0, r1
|
||||
ldrh r1, [r0]
|
||||
ldrh r7, [r4, 0x4]
|
||||
adds r1, r7
|
||||
lsls r1, 16
|
||||
ldrh r0, [r0, 0x2]
|
||||
ldrh r7, [r4, 0x6]
|
||||
adds r0, r7
|
||||
lsls r0, 16
|
||||
lsrs r1, 16
|
||||
mov r8, r1
|
||||
orrs r1, r0
|
||||
mov r8, r1
|
||||
ldrh r1, [r6]
|
||||
movs r0, 0x80
|
||||
lsls r0, 8
|
||||
ands r0, r1
|
||||
adds r7, r2, 0
|
||||
cmp r0, 0
|
||||
bne _08072FCC
|
||||
adds r0, r4, 0
|
||||
adds r1, r3, 0
|
||||
bl CanMoveInDirection
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08072FCC
|
||||
movs r2, 0x1
|
||||
mov r9, r2
|
||||
_08072FCC:
|
||||
mov r3, r9
|
||||
cmp r3, 0
|
||||
beq _08072FE8
|
||||
movs r0, 0
|
||||
strh r0, [r5]
|
||||
ldr r7, _08072FE4
|
||||
adds r1, r6, r7
|
||||
_08072FDA:
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
b _080731B8
|
||||
.align 2, 0
|
||||
_08072FE0: .4byte gAdjacentTileOffsets
|
||||
_08072FE4: .4byte 0x00000147
|
||||
_08072FE8:
|
||||
ldrh r1, [r4, 0x6]
|
||||
lsls r1, 16
|
||||
ldrh r0, [r4, 0x4]
|
||||
orrs r0, r1
|
||||
str r0, [sp]
|
||||
mov r0, r8
|
||||
lsls r1, r0, 16
|
||||
asrs r1, 16
|
||||
asrs r2, r0, 16
|
||||
adds r0, r4, 0
|
||||
movs r3, 0
|
||||
bl sub_80694C0
|
||||
ldrb r1, [r7]
|
||||
adds r0, r4, 0
|
||||
mov r2, sp
|
||||
bl sub_8074FB0
|
||||
adds r0, r4, 0
|
||||
movs r1, 0xD
|
||||
bl IQSkillIsEnabled
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08073038
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xE4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x3
|
||||
beq _08073038
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x9
|
||||
bl HasHeldItem
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08073038
|
||||
adds r0, r4, 0x4
|
||||
bl sub_804AE08
|
||||
_08073038:
|
||||
movs r1, 0x1
|
||||
mov r10, r1
|
||||
b _080731B8
|
||||
_0807303E:
|
||||
adds r0, r4, 0
|
||||
bl sub_807CABC
|
||||
b _080731B8
|
||||
_08073046:
|
||||
ldr r0, _08073064
|
||||
ldr r1, [r0]
|
||||
ldr r2, _08073068
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x15
|
||||
bne _08073074
|
||||
ldr r3, _0807306C
|
||||
adds r0, r1, r3
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08073074
|
||||
ldr r0, _08073070
|
||||
b _080731A2
|
||||
.align 2, 0
|
||||
_08073064: .4byte gDungeon
|
||||
_08073068: .4byte 0x00000644
|
||||
_0807306C: .4byte 0x000037fe
|
||||
_08073070: .4byte gUnknown_80FA5B4
|
||||
_08073074:
|
||||
bl sub_804267C
|
||||
ldr r0, _0807308C
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x1
|
||||
strb r0, [r1, 0x2]
|
||||
ldr r1, _08073090
|
||||
adds r0, r6, 0
|
||||
adds r0, 0x46
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r1]
|
||||
b _080731B8
|
||||
.align 2, 0
|
||||
_0807308C: .4byte gDungeon
|
||||
_08073090: .4byte gUnknown_202F32C
|
||||
_08073094:
|
||||
adds r0, r4, 0
|
||||
bl sub_8067110
|
||||
b _080731B8
|
||||
_0807309C:
|
||||
adds r0, r4, 0
|
||||
bl sub_807CB3C
|
||||
b _080731B8
|
||||
_080730A4:
|
||||
adds r0, r4, 0
|
||||
bl sub_8066744
|
||||
b _080731B8
|
||||
_080730AC:
|
||||
adds r0, r4, 0
|
||||
bl sub_80668D0
|
||||
b _080731B8
|
||||
_080730B4:
|
||||
adds r0, r4, 0
|
||||
bl sub_8066AC0
|
||||
b _080731B8
|
||||
_080730BC:
|
||||
adds r0, r4, 0
|
||||
bl sub_8066BD4
|
||||
b _080731B8
|
||||
_080730C4:
|
||||
adds r0, r4, 0
|
||||
bl sub_8066CF0
|
||||
b _080731B8
|
||||
_080730CC:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
bl sub_806675C
|
||||
b _080731B8
|
||||
_080730D6:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
bl sub_806684C
|
||||
b _080731B8
|
||||
_080730E0:
|
||||
ldr r0, _080730FC
|
||||
ldr r1, [r0]
|
||||
adds r2, r1, 0
|
||||
adds r2, 0xBC
|
||||
adds r0, r6, 0
|
||||
adds r0, 0x48
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 2
|
||||
ldr r7, _08073100
|
||||
adds r1, r7
|
||||
adds r1, r0
|
||||
ldr r0, [r1]
|
||||
str r0, [r2]
|
||||
b _080731B8
|
||||
.align 2, 0
|
||||
_080730FC: .4byte gDungeon
|
||||
_08073100: .4byte 0x0001357c
|
||||
_08073104:
|
||||
adds r0, r4, 0
|
||||
bl sub_8066D04
|
||||
b _080731B8
|
||||
_0807310C:
|
||||
adds r0, r4, 0
|
||||
bl sub_8066E14
|
||||
b _080731B8
|
||||
_08073114:
|
||||
adds r0, r4, 0
|
||||
bl sub_8066FA4
|
||||
b _080731B8
|
||||
_0807311C:
|
||||
adds r0, r6, 0
|
||||
bl ToolboxEnabled
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08073136
|
||||
adds r0, r4, 0
|
||||
bl nullsub_95
|
||||
adds r0, r4, 0
|
||||
bl sub_80671A0
|
||||
b _080731B8
|
||||
_08073136:
|
||||
ldr r0, _08073144
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
ldr r0, _08073148
|
||||
b _080731A2
|
||||
.align 2, 0
|
||||
_08073144: .4byte gAvailablePokemonNames
|
||||
_08073148: .4byte gUnknown_80FE6D4
|
||||
_0807314C:
|
||||
adds r0, r4, 0
|
||||
bl sub_8067510
|
||||
b _080731B8
|
||||
_08073154:
|
||||
adds r0, r4, 0
|
||||
bl sub_8067884
|
||||
b _080731B8
|
||||
_0807315C:
|
||||
movs r1, 0xB0
|
||||
lsls r1, 1
|
||||
b _08073164
|
||||
_08073162:
|
||||
ldr r1, _0807316C
|
||||
_08073164:
|
||||
adds r0, r4, 0
|
||||
bl sub_8067904
|
||||
b _080731B8
|
||||
.align 2, 0
|
||||
_0807316C: .4byte 0x00000163
|
||||
_08073170:
|
||||
adds r1, r4, 0x4
|
||||
adds r0, r4, 0
|
||||
movs r2, 0
|
||||
movs r3, 0
|
||||
bl sub_807FE9C
|
||||
b _080731B8
|
||||
_0807317E:
|
||||
adds r0, r4, 0
|
||||
bl sub_8073D08
|
||||
b _080731B8
|
||||
_08073186:
|
||||
adds r0, r4, 0
|
||||
bl sub_8073CF0
|
||||
b _080731B8
|
||||
_0807318E:
|
||||
adds r0, r4, 0
|
||||
bl sub_8073CFC
|
||||
b _080731B8
|
||||
_08073196:
|
||||
ldr r0, _080731AC
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
ldr r0, _080731B0
|
||||
_080731A2:
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, 0
|
||||
bl SendMessage
|
||||
b _080731B8
|
||||
.align 2, 0
|
||||
_080731AC: .4byte gAvailablePokemonNames
|
||||
_080731B0: .4byte gUnknown_80FE478
|
||||
_080731B4:
|
||||
movs r0, 0x1
|
||||
strh r0, [r5]
|
||||
_080731B8:
|
||||
adds r0, r4, 0
|
||||
bl sub_807FD84
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080731CC
|
||||
b _080732D4
|
||||
_080731CC:
|
||||
ldr r0, [r4, 0x70]
|
||||
movs r2, 0xA5
|
||||
lsls r2, 1
|
||||
adds r1, r0, r2
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0
|
||||
bne _080731E2
|
||||
strb r0, [r1]
|
||||
adds r0, r4, 0
|
||||
bl sub_8079764
|
||||
_080731E2:
|
||||
movs r0, 0
|
||||
bl sub_8041888
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080732D4
|
||||
bl sub_8085140
|
||||
ldr r3, _080732E8
|
||||
adds r1, r6, r3
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0
|
||||
beq _08073242
|
||||
movs r5, 0
|
||||
strb r5, [r1]
|
||||
movs r7, 0x8C
|
||||
lsls r7, 1
|
||||
adds r2, r6, r7
|
||||
movs r0, 0x1
|
||||
mov r12, r0
|
||||
movs r7, 0x10
|
||||
movs r3, 0x3
|
||||
_08073214:
|
||||
ldrb r1, [r2]
|
||||
mov r0, r12
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0807322C
|
||||
adds r0, r7, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0807322C
|
||||
movs r0, 0
|
||||
strb r0, [r2, 0x4]
|
||||
movs r5, 0x1
|
||||
_0807322C:
|
||||
adds r2, 0x8
|
||||
subs r3, 0x1
|
||||
cmp r3, 0
|
||||
bge _08073214
|
||||
cmp r5, 0
|
||||
beq _08073242
|
||||
ldr r0, _080732EC
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, 0
|
||||
bl SendMessage
|
||||
_08073242:
|
||||
bl sub_807360C
|
||||
bl sub_8044B84
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08073264
|
||||
bl sub_807348C
|
||||
bl sub_80732F0
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080732D4
|
||||
_08073264:
|
||||
mov r1, r10
|
||||
cmp r1, 0
|
||||
beq _08073270
|
||||
adds r0, r4, 0
|
||||
bl sub_8075818
|
||||
_08073270:
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080732D4
|
||||
bl sub_8044B84
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0807328A
|
||||
bl sub_8046D20
|
||||
_0807328A:
|
||||
movs r0, 0
|
||||
bl sub_8041888
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080732D4
|
||||
movs r2, 0xA2
|
||||
lsls r2, 1
|
||||
adds r0, r6, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _080732D4
|
||||
mov r3, r10
|
||||
cmp r3, 0
|
||||
bne _080732D4
|
||||
adds r1, r4, 0x4
|
||||
adds r0, r4, 0
|
||||
bl sub_80706A4
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080732C8
|
||||
adds r0, r4, 0
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
movs r3, 0
|
||||
bl sub_807D148
|
||||
_080732C8:
|
||||
adds r0, r4, 0
|
||||
bl sub_8074094
|
||||
adds r0, r4, 0
|
||||
bl sub_8071DA4
|
||||
_080732D4:
|
||||
movs r0, 0
|
||||
_080732D6:
|
||||
add sp, 0x4
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_080732E8: .4byte 0x0000014b
|
||||
_080732EC: .4byte gUnknown_80FD2CC
|
||||
thumb_func_end sub_8072CF4
|
||||
|
||||
thumb_func_start sub_80732F0
|
||||
sub_80732F0:
|
||||
push {r4-r7,lr}
|
||||
|
||||
@@ -3135,69 +3135,4 @@ _0807566C:
|
||||
_0807567C: .4byte gDungeon
|
||||
thumb_func_end UseAttack
|
||||
|
||||
thumb_func_start sub_8075680
|
||||
sub_8075680:
|
||||
push {r4-r7,lr}
|
||||
movs r7, 0
|
||||
_08075684:
|
||||
ldr r0, _080756FC
|
||||
ldr r0, [r0]
|
||||
lsls r1, r7, 2
|
||||
ldr r2, _08075700
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r5, [r0]
|
||||
adds r0, r5, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080756EE
|
||||
ldr r6, [r5, 0x70]
|
||||
ldrb r0, [r6, 0x7]
|
||||
cmp r0, 0
|
||||
bne _080756EE
|
||||
movs r0, 0xB6
|
||||
lsls r0, 1
|
||||
adds r4, r6, r0
|
||||
ldr r1, [r4]
|
||||
cmp r1, 0
|
||||
beq _080756EE
|
||||
ldr r0, [r5, 0x4]
|
||||
cmp r1, r0
|
||||
beq _080756EE
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x1
|
||||
bl CannotMove
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080756EE
|
||||
adds r0, r5, 0x4
|
||||
adds r1, r4, 0
|
||||
bl GetDirectionTowardsPosition
|
||||
adds r4, r0, 0
|
||||
movs r1, 0x7
|
||||
ands r0, r1
|
||||
adds r1, r6, 0
|
||||
adds r1, 0x46
|
||||
strb r0, [r1]
|
||||
adds r0, r5, 0
|
||||
bl sub_806CEBC
|
||||
adds r1, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
adds r0, r5, 0
|
||||
adds r2, r4, 0
|
||||
bl sub_806CDD4
|
||||
_080756EE:
|
||||
adds r7, 0x1
|
||||
cmp r7, 0x13
|
||||
ble _08075684
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080756FC: .4byte gDungeon
|
||||
_08075700: .4byte 0x000135cc
|
||||
thumb_func_end sub_8075680
|
||||
|
||||
.align 2,0
|
||||
|
||||
@@ -1024,7 +1024,7 @@ _0807D580:
|
||||
adds r2, 0x4
|
||||
lsls r2, 8
|
||||
mov r0, r8
|
||||
bl sub_8045394
|
||||
bl SetEntityPixelPos
|
||||
movs r2, 0
|
||||
movs r1, 0
|
||||
strh r1, [r7, 0x22]
|
||||
|
||||
@@ -98,328 +98,4 @@ _08096D14:
|
||||
_08096D20: .4byte gUnknown_203B490
|
||||
thumb_func_end sub_8096C80
|
||||
|
||||
thumb_func_start sub_8096D24
|
||||
sub_8096D24:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x18
|
||||
movs r1, 0
|
||||
_08096D32:
|
||||
adds r6, r1, 0x1
|
||||
mov r10, r6
|
||||
cmp r6, 0x7
|
||||
bgt _08096DBC
|
||||
ldr r0, _08096DD4
|
||||
mov r8, r0
|
||||
lsls r0, r1, 2
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
mov r9, r0
|
||||
lsls r0, r6, 2
|
||||
adds r0, r6
|
||||
lsls r4, r0, 2
|
||||
_08096D4C:
|
||||
mov r1, r8
|
||||
ldr r2, [r1]
|
||||
adds r3, r2, r4
|
||||
adds r5, r3, 0
|
||||
adds r5, 0xF0
|
||||
str r5, [sp, 0x14]
|
||||
ldrb r0, [r5]
|
||||
cmp r0, 0
|
||||
beq _08096DB0
|
||||
add r2, r9
|
||||
mov r12, r2
|
||||
mov r0, r12
|
||||
adds r0, 0xF4
|
||||
adds r1, r3, 0
|
||||
adds r1, 0xF4
|
||||
ldrb r2, [r0]
|
||||
ldrb r0, [r1]
|
||||
cmp r2, r0
|
||||
bhi _08096D84
|
||||
cmp r2, r0
|
||||
bne _08096DB0
|
||||
mov r0, r12
|
||||
adds r0, 0xF5
|
||||
adds r1, 0x1
|
||||
ldrb r0, [r0]
|
||||
ldrb r1, [r1]
|
||||
cmp r0, r1
|
||||
bls _08096DB0
|
||||
_08096D84:
|
||||
mov r2, r12
|
||||
adds r2, 0xF0
|
||||
mov r1, sp
|
||||
adds r0, r2, 0
|
||||
ldm r0!, {r3,r5,r7}
|
||||
stm r1!, {r3,r5,r7}
|
||||
ldm r0!, {r3,r7}
|
||||
stm r1!, {r3,r7}
|
||||
ldr r0, [sp, 0x14]
|
||||
ldm r0!, {r1,r5,r7}
|
||||
stm r2!, {r1,r5,r7}
|
||||
ldm r0!, {r3,r5}
|
||||
stm r2!, {r3,r5}
|
||||
mov r7, r8
|
||||
ldr r1, [r7]
|
||||
adds r1, r4
|
||||
adds r1, 0xF0
|
||||
mov r0, sp
|
||||
ldm r0!, {r2,r3,r5}
|
||||
stm r1!, {r2,r3,r5}
|
||||
ldm r0!, {r2,r7}
|
||||
stm r1!, {r2,r7}
|
||||
_08096DB0:
|
||||
adds r4, 0x14
|
||||
movs r3, 0x1
|
||||
add r10, r3
|
||||
mov r5, r10
|
||||
cmp r5, 0x7
|
||||
ble _08096D4C
|
||||
_08096DBC:
|
||||
adds r1, r6, 0
|
||||
cmp r1, 0x6
|
||||
ble _08096D32
|
||||
add sp, 0x18
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08096DD4: .4byte gUnknown_203B490
|
||||
thumb_func_end sub_8096D24
|
||||
|
||||
thumb_func_start sub_8096DD8
|
||||
sub_8096DD8:
|
||||
ldr r0, _08096DE4
|
||||
ldr r0, [r0]
|
||||
movs r1, 0xC8
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08096DE4: .4byte gUnknown_203B490
|
||||
thumb_func_end sub_8096DD8
|
||||
|
||||
thumb_func_start sub_8096DE8
|
||||
sub_8096DE8:
|
||||
ldr r0, _08096DF4
|
||||
ldr r0, [r0]
|
||||
movs r1, 0xDC
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08096DF4: .4byte gUnknown_203B490
|
||||
thumb_func_end sub_8096DE8
|
||||
|
||||
thumb_func_start ReceivePKMNNews
|
||||
ReceivePKMNNews:
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r1, _08096E10
|
||||
ldr r1, [r1]
|
||||
movs r2, 0xBC
|
||||
lsls r2, 2
|
||||
adds r1, r2
|
||||
adds r1, r0
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08096E10: .4byte gUnknown_203B490
|
||||
thumb_func_end ReceivePKMNNews
|
||||
|
||||
thumb_func_start CheckPKMNNewsSlot
|
||||
CheckPKMNNewsSlot:
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r1, _08096E28
|
||||
ldr r1, [r1]
|
||||
movs r2, 0xBC
|
||||
lsls r2, 2
|
||||
adds r1, r2
|
||||
adds r1, r0
|
||||
ldrb r0, [r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08096E28: .4byte gUnknown_203B490
|
||||
thumb_func_end CheckPKMNNewsSlot
|
||||
|
||||
thumb_func_start sub_8096E2C
|
||||
sub_8096E2C:
|
||||
push {lr}
|
||||
movs r3, 0
|
||||
ldr r0, _08096E70
|
||||
ldr r1, [r0]
|
||||
movs r2, 0x3
|
||||
_08096E36:
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0x1
|
||||
bne _08096E48
|
||||
ldrb r0, [r1, 0x5]
|
||||
cmp r3, r0
|
||||
bgt _08096E48
|
||||
cmp r0, 0x31
|
||||
bhi _08096E48
|
||||
adds r3, r0, 0x1
|
||||
_08096E48:
|
||||
adds r1, 0x14
|
||||
subs r2, 0x1
|
||||
cmp r2, 0
|
||||
bge _08096E36
|
||||
adds r2, r3, 0
|
||||
cmp r2, 0x31
|
||||
bgt _08096E7A
|
||||
ldr r0, _08096E70
|
||||
ldr r0, [r0]
|
||||
movs r3, 0xBC
|
||||
lsls r3, 2
|
||||
adds r1, r0, r3
|
||||
_08096E60:
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08096E74
|
||||
lsls r0, r2, 24
|
||||
lsrs r0, 24
|
||||
b _08096E7C
|
||||
.align 2, 0
|
||||
_08096E70: .4byte gUnknown_203B490
|
||||
_08096E74:
|
||||
adds r2, 0x1
|
||||
cmp r2, 0x31
|
||||
ble _08096E60
|
||||
_08096E7A:
|
||||
movs r0, 0x38
|
||||
_08096E7C:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8096E2C
|
||||
|
||||
thumb_func_start sub_8096E80
|
||||
sub_8096E80:
|
||||
push {lr}
|
||||
lsls r0, 24
|
||||
lsrs r3, r0, 24
|
||||
movs r2, 0
|
||||
ldr r0, _08096E9C
|
||||
ldr r1, [r0]
|
||||
_08096E8C:
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0x1
|
||||
bne _08096EA0
|
||||
ldrb r0, [r1, 0x5]
|
||||
cmp r3, r0
|
||||
bne _08096EA0
|
||||
movs r0, 0x1
|
||||
b _08096EAA
|
||||
.align 2, 0
|
||||
_08096E9C: .4byte gUnknown_203B490
|
||||
_08096EA0:
|
||||
adds r1, 0x14
|
||||
adds r2, 0x1
|
||||
cmp r2, 0x3
|
||||
ble _08096E8C
|
||||
movs r0, 0
|
||||
_08096EAA:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8096E80
|
||||
|
||||
thumb_func_start sub_8096EB0
|
||||
sub_8096EB0:
|
||||
ldrb r1, [r0, 0x2]
|
||||
ldrb r2, [r0, 0x1]
|
||||
adds r1, r2
|
||||
ldrb r3, [r0, 0x4]
|
||||
adds r2, r1, r3
|
||||
ldrb r1, [r0, 0x5]
|
||||
adds r2, r1
|
||||
ldr r1, [r0, 0x8]
|
||||
lsls r1, 8
|
||||
adds r2, r1
|
||||
movs r3, 0xC
|
||||
ldrsh r1, [r0, r3]
|
||||
lsls r1, 12
|
||||
adds r2, r1
|
||||
movs r3, 0xE
|
||||
ldrsh r1, [r0, r3]
|
||||
lsls r1, 16
|
||||
adds r2, r1
|
||||
ldrb r1, [r0, 0x10]
|
||||
lsls r1, 24
|
||||
adds r1, r2, r1
|
||||
ldrb r3, [r0, 0x11]
|
||||
adds r2, r1, r3
|
||||
ldrb r1, [r0, 0x12]
|
||||
adds r1, r2, r1
|
||||
ldrb r0, [r0, 0x13]
|
||||
adds r2, r1, r0
|
||||
adds r0, r2, 0
|
||||
bx lr
|
||||
thumb_func_end sub_8096EB0
|
||||
|
||||
thumb_func_start sub_8096EEC
|
||||
sub_8096EEC:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
mov r12, r0
|
||||
movs r3, 0xF
|
||||
ldr r5, _08096F4C
|
||||
mov r8, r5
|
||||
movs r4, 0x8C
|
||||
lsls r4, 2
|
||||
_08096EFE:
|
||||
mov r0, r8
|
||||
ldr r2, [r0]
|
||||
lsls r1, r3, 1
|
||||
adds r1, r3
|
||||
lsls r1, 2
|
||||
adds r1, r2, r1
|
||||
subs r3, 0x1
|
||||
lsls r0, r3, 1
|
||||
adds r0, r3
|
||||
lsls r0, 2
|
||||
adds r2, r0
|
||||
adds r1, r4
|
||||
adds r2, r4
|
||||
ldm r2!, {r0,r6,r7}
|
||||
stm r1!, {r0,r6,r7}
|
||||
cmp r3, 0
|
||||
bgt _08096EFE
|
||||
ldr r2, [r5]
|
||||
movs r3, 0x8C
|
||||
lsls r3, 2
|
||||
adds r2, r3
|
||||
mov r6, r12
|
||||
ldr r0, [r6, 0x4]
|
||||
ldr r1, [r6, 0x8]
|
||||
str r0, [r2]
|
||||
str r1, [r2, 0x4]
|
||||
mov r0, r12
|
||||
bl sub_8096EB0
|
||||
ldr r1, [r5]
|
||||
movs r7, 0x8E
|
||||
lsls r7, 2
|
||||
adds r1, r7
|
||||
str r0, [r1]
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08096F4C: .4byte gUnknown_203B490
|
||||
thumb_func_end sub_8096EEC
|
||||
|
||||
|
||||
.align 2,0
|
||||
|
||||
@@ -11,7 +11,7 @@ extern void sub_8013F84(void);
|
||||
extern void sub_80140B4(UnkTextStruct2 *);
|
||||
extern void sub_80140DC(void);
|
||||
extern void sub_8014114(void);
|
||||
extern void sub_80141B4(const u8 *, u32, OpenedFile **, u32);
|
||||
extern void sub_80141B4(const u8 *, u32, OpenedFile **, u16);
|
||||
extern void sub_8014248(const u8 *, u32, u32, const MenuItem *, void *, u32, u32, OpenedFile **, u32);
|
||||
extern s32 sub_80144A4(s32 *);
|
||||
extern void sub_80151C0(u32, u8 *);
|
||||
@@ -21,4 +21,4 @@ extern void xxx_draw_string_80144C4(void);
|
||||
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
|
||||
extern void xxx_format_string(const u8 *, u8 *, u8 *, u32);
|
||||
|
||||
#endif // GUARD_CODE_80130A8_H
|
||||
#endif // GUARD_CODE_80130A8_H
|
||||
|
||||
@@ -7,9 +7,8 @@
|
||||
// size: 0xC
|
||||
typedef struct subStruct_203B490
|
||||
{
|
||||
/* 0x0 */ DungeonLocation dungeon;
|
||||
/* 0x4 */ u32 seed;
|
||||
u32 unk8;
|
||||
WonderMailSub sub;
|
||||
/* 0x8 */ s32 checksum; // really dumb checksum that just adds all the fields of WonderMail struct
|
||||
} subStruct_203B490;
|
||||
|
||||
// size: 0x32C?
|
||||
@@ -21,7 +20,7 @@ typedef struct unkStruct_203B490
|
||||
u8 unk190[40];
|
||||
u8 unk1B8[120];
|
||||
subStruct_203B490 unk230[16];
|
||||
/* 0x2F0 */ u8 PKMNNewsReceived[NUM_POKEMON_NEWS];
|
||||
/* 0x2F0 */ bool8 PKMNNewsReceived[NUM_POKEMON_NEWS];
|
||||
bool8 unk328;
|
||||
} unkStruct_203B490;
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
#ifndef GUARD_CODE_8096AF8_H
|
||||
#define GUARD_CODE_8096AF8_H
|
||||
|
||||
// code_8096AF8.s
|
||||
extern u8 CheckPKMNNewsSlot(u8);
|
||||
extern void sub_8096C80(void);
|
||||
extern void sub_8096D24(void);
|
||||
extern u8 *sub_8096DD8(void);
|
||||
extern u8 *sub_8096DE8(void);
|
||||
extern bool8 sub_8096E2C(void);
|
||||
extern void sub_8096EEC(void);
|
||||
#include "structs/str_wonder_mail.h"
|
||||
|
||||
#endif // GUARD_CODE_8096AF8_H
|
||||
extern void sub_8096C80(void);
|
||||
void ReceivePKMNNews(u8 index);
|
||||
bool8 CheckPKMNNewsSlot(u8 index);
|
||||
void SortJobSlots(void);
|
||||
u8 *sub_8096DD8(void);
|
||||
u8 *sub_8096DE8(void);
|
||||
u8 sub_8096E2C(void);
|
||||
void sub_8096EEC(WonderMail *mail);
|
||||
|
||||
#endif // GUARD_CODE_8096AF8_H
|
||||
|
||||
@@ -6,6 +6,7 @@ enum Action
|
||||
ACTION_NOTHING = 0x0,
|
||||
ACTION_PASS_TURN = 0x1,
|
||||
ACTION_WALK = 0x2,
|
||||
ACTION_UNK5 = 0x5,
|
||||
// Switching between Pokémon in the moves menu.
|
||||
ACTION_NEXT = 0x6,
|
||||
ACTION_PREVIOUS = 0x7,
|
||||
@@ -30,6 +31,7 @@ enum Action
|
||||
ACTION_UNK21 = 0x21,
|
||||
ACTION_EAT_AI = 0x23,
|
||||
ACTION_THROW_ITEM_AI = 0x24,
|
||||
ACTION_STAIRS = 0x26,
|
||||
ACTION_THROW_STRAIGHT_PLAYER = 0x27,
|
||||
ACTION_USE_LINK_BOX = 0x2C,
|
||||
ACTION_GIVE_UP = 0x2E,
|
||||
@@ -39,11 +41,13 @@ enum Action
|
||||
ACTION_UNSET_MOVE = 0x33,
|
||||
ACTION_GIVE_ITEM = 0x36,
|
||||
ACTION_TAKE_ITEM = 0x37,
|
||||
ACTION_USE_ITEM = 0x38,
|
||||
ACTION_SECOND_THOUGHTS = 0x39, // Happens with invalid actions, like attempting to eat a non-consumable item.
|
||||
ACTION_SET_ITEM = 0x3C,
|
||||
ACTION_UNSET_ITEM = 0x3D,
|
||||
ACTION_PICK_UP_AI = 0x3F,
|
||||
ACTION_THROW_ARC_PLAYER = 0x41, // Throwing Gravelerocks and Geo Pebbles.
|
||||
NUM_DUNGEON_ACTIONS
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#define CATEGORY_ORBS 9
|
||||
#define CATEGORY_LINK_BOX 10
|
||||
#define CATEGORY_USED_TM 11
|
||||
#define NUM_ITEM_CATEGORIES 12
|
||||
|
||||
#define ITEM_ACTION_TYPE_NOTHING 0
|
||||
#define ITEM_ACTION_TYPE_THROWABLE 1
|
||||
@@ -287,4 +288,4 @@
|
||||
#define MIN_SPAWN_AMOUNT 0
|
||||
#define MAX_SPAWN_AMOUNT 1
|
||||
|
||||
#endif // GUARD_CONSTANTS_ITEM_H
|
||||
#endif // GUARD_CONSTANTS_ITEM_H
|
||||
|
||||
@@ -41,6 +41,7 @@ const u8 *GetDungeonName1(u8 dungeon);
|
||||
u32 GetMaxItemsAllowed(u8 dungeon);
|
||||
s8 GetRescuesAllowed(u8 dungeon);
|
||||
bool8 HasCheckpoint(u8 dungeon);
|
||||
s16 GetRandomMovementChance(u8 dungeon);
|
||||
void PrintYellowDungeonNametoBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
|
||||
void PrintDungeonLocationtoBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
|
||||
|
||||
@@ -48,4 +49,4 @@ u32 sub_80908D8(DungeonLocation *dungeon);
|
||||
u8 sub_8090910(DungeonLocation *dungeon, u32 param_2);
|
||||
bool8 sub_809095C(u8 dungeon);
|
||||
|
||||
#endif // GUARD_DUNGEON_H
|
||||
#endif // GUARD_DUNGEON_H
|
||||
|
||||
@@ -5,5 +5,6 @@
|
||||
|
||||
bool8 TargetLeader(Entity *pokemon);
|
||||
Entity* GetLeaderIfVisible(Entity *pokemon);
|
||||
bool8 sub_8072CF4(Entity *entity);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
|
||||
bool8 ComparePokemonNames(s16, s16);
|
||||
void PrintPokeNameToBuffer(u8 *buffer, PokemonStruct1 *pokemon);
|
||||
void GetPokemonLevelData(LevelData* a1, s16 _id, s32 level);
|
||||
const u8* DecompressMoveID(const u8* a1, u16* moveID);
|
||||
|
||||
bool8 sub_808DA44(s32, u32);
|
||||
|
||||
#endif // GUARD_POKEMON_MID_H
|
||||
#endif // GUARD_POKEMON_MID_H
|
||||
|
||||
@@ -23,6 +23,12 @@
|
||||
#define STAT_STAGE_ACCURACY 0
|
||||
#define STAT_STAGE_EVASION 1
|
||||
|
||||
typedef struct unkStruct_8044CC8
|
||||
{
|
||||
u8 actionUseIndex;
|
||||
Position lastItemThrowPosition;
|
||||
} unkStruct_8044CC8;
|
||||
|
||||
// size: 0x18
|
||||
typedef struct ActionContainer
|
||||
{
|
||||
@@ -30,12 +36,7 @@ typedef struct ActionContainer
|
||||
/* 0x2 */ u8 direction;
|
||||
u8 fill3;
|
||||
// Additional parameter alongside actionIndex. Used for things like indicating which move a Pokémon should use from its moveset.
|
||||
/* 0x4 */ u8 actionUseIndex;
|
||||
// Position of the Pokémon the last time it threw an item.
|
||||
/* 0x8 */ Position lastItemThrowPosition;
|
||||
u8 unkC;
|
||||
u8 fillD[3];
|
||||
u8 fill10[4];
|
||||
/* 0x4 */ unkStruct_8044CC8 unk4[2];
|
||||
// Position of the target that the Pokémon wants throw an item at.
|
||||
/* 0x14 */ Position itemTargetPosition;
|
||||
} ActionContainer;
|
||||
@@ -246,7 +247,7 @@ typedef struct EntityInfo
|
||||
/* 0x1F6 */ bool8 notMoving;
|
||||
u8 fill1F7[0x1FA - 0x1F7];
|
||||
/* 0x1FA */ s16 mobileTurnTimer; // When a Pokémon can pass through walls in a hallway, this counts up to 200 before the Pokémon turns in a random direction.
|
||||
/* 0x1FC */ u16 expGainedInTurn; // Used to accumulate experience when multiple enemies are defeated in one turn.
|
||||
/* 0x1FC */ u32 expGainedInTurn; // Used to accumulate experience when multiple enemies are defeated in one turn.
|
||||
/* 0x200 */ u32 statusIcons;
|
||||
u8 unk204;
|
||||
} EntityInfo;
|
||||
@@ -338,4 +339,4 @@ enum VisualFlag
|
||||
VISUAL_FLAG_RUN_AWAY = 2
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -99,7 +99,8 @@ typedef struct Dungeon
|
||||
u8 unk65C;
|
||||
u8 fill65D[0x660 - 0x65D];
|
||||
/* 0x660 */ s16 fractionalTurn; // Handles turn order when Pokémon have different movement speeds.
|
||||
u8 fill662[0x666 - 0x662];
|
||||
s16 unk662;
|
||||
s16 unk664;
|
||||
/* 0x666 */ s16 windTurns; // Turns remaining before getting swept out of the dungeon.
|
||||
/* 0x668 */ u16 unk668;
|
||||
u16 bossSongIndex;
|
||||
@@ -133,13 +134,16 @@ typedef struct Dungeon
|
||||
/* 0x37F8 */ bool8 plusIsActive[2]; // Index 0: Enemy , Index 1: Team
|
||||
/* 0x37FA */ bool8 minusIsActive[2]; // Index 0: Enemy , Index 1: Team
|
||||
/* 0x37FC */ bool8 decoyActive;
|
||||
u8 fill37FD[0x3800 - 0x37FD];
|
||||
u8 fill37FD;
|
||||
/* 0x37FE */ bool8 deoxysDefeat; // Flag set for deoxys in Meteor Cave
|
||||
u8 fill37FF;
|
||||
s16 unk3800;
|
||||
u8 fill3802[0x3904 - 0x3802];
|
||||
/* 0x3904 */ s16 unk3904;
|
||||
u8 fill3906[0x3A08 - 0x3906];
|
||||
/* 0x3A08 */ u8 unk3A08;
|
||||
u8 fill3A09[0x3A0D - 0x3A09];
|
||||
u8 fill3A09[0x3A0C - 0x3A09];
|
||||
u8 unk3A0C;
|
||||
/* 0x3A0D */ u8 unk3A0D;
|
||||
/* 0x3A0E */ s16 tileset;
|
||||
/* 0x3A10 */ u16 unk3A10;
|
||||
@@ -198,10 +202,10 @@ typedef struct Dungeon
|
||||
/* 0x15E2C */ Entity unk15E2C[0x40];
|
||||
/* 0x17B2C */ Entity *lightningRodPokemon;
|
||||
/* 0x17B30 */ Entity *snatchPokemon;
|
||||
/* 0x17B34 */ u8 fillunk1734[0x17B38 - 0x17B34];
|
||||
/* 0x17B34 */ Entity *unk17B34;
|
||||
/* 0x17B38 */ u32 unk17B38;
|
||||
/* 0x17B3C */ u32 unk17B3C;
|
||||
u8 fill17B40[0x17B44 - 0x17B40];
|
||||
/* 0x17B3C */ u32 unk17B40;
|
||||
/* 0x17B44 */ OpenedFile *sprites[MONSTER_MAX];
|
||||
/* 0x181E4 */ OpenedFile *paletFile;
|
||||
/* 0x181E8 */ Position cameraPos;
|
||||
@@ -236,4 +240,4 @@ typedef struct Dungeon
|
||||
|
||||
extern Dungeon *gDungeon;
|
||||
|
||||
#endif // GUARD_STR_DUNGEON_H
|
||||
#endif // GUARD_STR_DUNGEON_H
|
||||
|
||||
@@ -95,6 +95,8 @@ SECTIONS {
|
||||
src/code_8012A18.o(.text);
|
||||
src/menu_input.o(.text);
|
||||
asm/code_80130A8.o(.text);
|
||||
src/code_80140DC.o(.text);
|
||||
asm/code_80140DC.o(.text);
|
||||
src/code_8012A18_1.o(.text);
|
||||
src/code_801602C.o(.text);
|
||||
src/felicity_bank.o(.text);
|
||||
@@ -199,6 +201,7 @@ SECTIONS {
|
||||
src/dungeon_engine.o(.text);
|
||||
asm/code_8044210.o(.text);
|
||||
src/dungeon_action.o(.text);
|
||||
src/code_8044CC8.o(.text);
|
||||
asm/code_8044CC8.o(.text);
|
||||
src/dungeon_util.o(.text);
|
||||
asm/code_80450F8.o(.text);
|
||||
@@ -224,6 +227,8 @@ SECTIONS {
|
||||
src/status_actions.o(.text);
|
||||
src/move_checks.o(.text);
|
||||
asm/code_805D8C8.o(.text);
|
||||
src/code_8066D04.o(.text);
|
||||
asm/code_8066D04.o(.text);
|
||||
src/code_805D8C8.o(.text);
|
||||
asm/code_805D8C8_1.o(.text);
|
||||
src/targeting.o(.text);
|
||||
@@ -240,7 +245,9 @@ SECTIONS {
|
||||
src/dungeon_capabilities.o(.text);
|
||||
src/dungeon_ai_targeting.o(.text);
|
||||
src/dungeon_pokemon_attributes.o(.text);
|
||||
src/code_80718D8.o(.text);
|
||||
asm/code_80718D8.o(.text);
|
||||
src/code_8072B78.o(.text);
|
||||
src/dungeon_ai_leader.o(.text);
|
||||
asm/code_8072CF4.o(.text);
|
||||
src/dungeon_ai_items.o(.text);
|
||||
|
||||
87
src/code_80140DC.c
Normal file
87
src/code_80140DC.c
Normal file
@@ -0,0 +1,87 @@
|
||||
#include "constants/input.h"
|
||||
#include "global.h"
|
||||
#include "menu_input.h"
|
||||
#include "sprite.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "code_80130A8.h"
|
||||
|
||||
extern s32 gUnknown_202E744;
|
||||
extern s32 gUnknown_202E738;
|
||||
extern s32 gUnknown_202E73C;
|
||||
extern s32 gUnknown_202E740;
|
||||
|
||||
extern MenuItem gUnknown_80D485C[];
|
||||
|
||||
void sub_80140DC(void)
|
||||
{
|
||||
Position pos;
|
||||
|
||||
pos.x = 200;
|
||||
pos.y = 128;
|
||||
SetSavingIconCoords(&pos);
|
||||
sub_8011830();
|
||||
}
|
||||
|
||||
void sub_80140F8(void)
|
||||
{
|
||||
Position pos;
|
||||
|
||||
pos.x = 188;
|
||||
pos.y = 64;
|
||||
SetSavingIconCoords(&pos);
|
||||
sub_8011830();
|
||||
}
|
||||
|
||||
void sub_8014114(void) {
|
||||
xxx_call_start_bg_music();
|
||||
SetSavingIconCoords(NULL);
|
||||
}
|
||||
|
||||
void nullsub_201(void) {}
|
||||
|
||||
u32 sub_8014128(void) {
|
||||
if(sub_8012AE8() == INPUT_B_BUTTON) return 0;
|
||||
else return 1;
|
||||
}
|
||||
|
||||
u32 sub_801413C(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_8014140(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_8014144(void)
|
||||
{
|
||||
gUnknown_202E744 = 0;
|
||||
gUnknown_202E738 = 60;
|
||||
gUnknown_202E73C = 60;
|
||||
gUnknown_202E740 = 0;
|
||||
}
|
||||
|
||||
void sub_801416C(s32 param_1,s32 param_2)
|
||||
{
|
||||
if (param_1 < -1) {
|
||||
gUnknown_202E738 = param_2;
|
||||
gUnknown_202E740 = -param_1;
|
||||
}
|
||||
else {
|
||||
gUnknown_202E738 = param_1;
|
||||
gUnknown_202E740 = 0;
|
||||
}
|
||||
gUnknown_202E73C = (param_2 < 0 ) ? 0 : param_2;
|
||||
}
|
||||
|
||||
void sub_80141B4(const u8 *text, u32 param_2, OpenedFile **file, u16 param_4)
|
||||
{
|
||||
sub_8014248(text, param_2, -1, NULL, NULL, 3, 0, file, param_4);
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/w4sX4
|
||||
// void sub_80141E0(const u8 *text, OpenedFile **file, u16 param_4)
|
||||
// {
|
||||
// sub_8014248(text, 0, -1, gUnknown_80D485C, NULL, 3, 0, file, param_4);
|
||||
// }
|
||||
@@ -43,7 +43,7 @@ bool8 sub_802DB28(u8 jobSlotIndex, u8 dungeon)
|
||||
sUnknown_203B2FC = MemoryAlloc(sizeof(struct unkStruct_203B2FC), 8);
|
||||
sUnknown_203B2FC->jobSlotIndex = jobSlotIndex;
|
||||
sUnknown_203B2FC->jobInfo = GetJobSlotInfo(jobSlotIndex);
|
||||
sub_8096EEC();
|
||||
sub_8096EEC(sUnknown_203B2FC->jobInfo);
|
||||
sub_803C21C(sUnknown_203B2FC->jobInfo, &sUnknown_203B2FC->unk8);
|
||||
|
||||
sUnknown_203B2FC->faceFile = GetDialogueSpriteDataPtr(sUnknown_203B2FC->jobInfo->clientSpecies);
|
||||
@@ -199,4 +199,4 @@ static void sub_802DE60(void)
|
||||
|
||||
if (sub_80144A4(&temp) == 0)
|
||||
sub_802DC28(sUnknown_203B2FC->fallbackState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,20 @@ struct unkStruct_80420E8
|
||||
u32 unk8;
|
||||
};
|
||||
|
||||
typedef struct unkStruct_80416E0
|
||||
{
|
||||
s32 unk0;
|
||||
s32 unk4;
|
||||
s32 unk8;
|
||||
u16 x;
|
||||
u16 y;
|
||||
u16 unk10;
|
||||
u16 unk12;
|
||||
s32 unk14;
|
||||
u32 unk18;
|
||||
} unkStruct_80416E0;
|
||||
|
||||
|
||||
extern u32 gStatusSpriteMasks_SleepStatus[];
|
||||
extern u32 gStatusSpriteMasks_NonVolatileStatus[];
|
||||
extern u32 gStatusSpriteMasks_ImmobilizeStatus[];
|
||||
@@ -33,18 +47,15 @@ extern u32 gStatusSpriteMasks_MuzzledStatus[];
|
||||
|
||||
extern void sub_803ED30(u8, Entity *pokemon, u8, u8);
|
||||
extern void sub_804151C(Entity *pokemon, u32 r1, u8 r2);
|
||||
extern void sub_80416E0(Entity *pokemon, u32, u32);
|
||||
extern u8 sub_8042768(Entity *pokemon);
|
||||
extern u32 sub_806F62C(u32);
|
||||
extern void PlaySoundEffect(u32);
|
||||
extern u8 sub_803F428(Position *pos);
|
||||
extern void sub_8041550(Entity *pokemon, u32, u32, u32, u32, u32);
|
||||
|
||||
|
||||
void sub_80421C0(Entity *pokemon, u16 r1);
|
||||
void EntityUpdateStatusSprites(Entity *entity);
|
||||
|
||||
|
||||
extern s32 gUnknown_202EDC8;
|
||||
extern u8 gUnknown_203B40D;
|
||||
extern s16 gUnknown_2026E4E;
|
||||
@@ -55,12 +66,56 @@ extern void sub_803EA10(void);
|
||||
extern void sub_8042E98(void);
|
||||
extern void sub_803E46C(u32);
|
||||
extern void sub_800EE5C(u32);
|
||||
extern u32 sub_800E890(u32 *);
|
||||
extern void sub_800EF64(void);
|
||||
extern u8 sub_800E9A8(u32);
|
||||
extern u32 sub_800E890(unkStruct_80416E0 *);
|
||||
|
||||
u32 sub_8041764(u32 *param_1, u8 param_2)
|
||||
u32 sub_8041764(unkStruct_80416E0 *param_1, u8 param_2);
|
||||
s32 sub_80416E0(Position32 *pos, u32 param_2, u8 param_3);
|
||||
|
||||
s32 sub_80416A4(Position *pos_1, u32 param_2, u8 param_3)
|
||||
{
|
||||
sub_800EE5C(*param_1);
|
||||
Position32 pos;
|
||||
|
||||
pos.x = pos_1->x * 0x1800 + 0xc00;
|
||||
pos.y = pos_1->y * 0x1800 + 0x1000;
|
||||
return sub_80416E0(&pos, param_2, param_3);
|
||||
}
|
||||
|
||||
s32 sub_80416E0(Position32 *pos, u32 param_2, u8 param_3)
|
||||
{
|
||||
int counter;
|
||||
s32 ret;
|
||||
unkStruct_80416E0 auStack_10;
|
||||
unkStruct_2039DB0 auStack_18; // Size: 0xC
|
||||
|
||||
auStack_10.unk0 = param_2;
|
||||
auStack_10.unk4 = 0;
|
||||
auStack_10.unk8 = -1;
|
||||
|
||||
auStack_10.x = pos->x / 256;
|
||||
auStack_10.y = pos->y / 256;
|
||||
|
||||
auStack_10.unk14 = -1;
|
||||
auStack_10.unk10 = 0;
|
||||
auStack_10.unk12 = 0;
|
||||
auStack_10.unk18 = 0xffff;
|
||||
sub_8004E8C(&auStack_18);
|
||||
ret = sub_8041764(&auStack_10,0);
|
||||
if (param_3 != 0) {
|
||||
counter = 0;
|
||||
while ((counter < 100 && (sub_800E9A8(ret) != 0))) {
|
||||
sub_803E46C(0x42);
|
||||
counter++;
|
||||
}
|
||||
ret = -1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
u32 sub_8041764(unkStruct_80416E0 *param_1, u8 param_2)
|
||||
{
|
||||
sub_800EE5C(param_1->unk0);
|
||||
sub_800EF64();
|
||||
if(param_2)
|
||||
sub_803E46C(0x42);
|
||||
@@ -817,9 +872,9 @@ void sub_804218C(Entity *pokemon, Entity *target)
|
||||
sub_804151C(target, 0x2A, 1);
|
||||
}
|
||||
|
||||
void sub_804219C(Entity *pokemon)
|
||||
void sub_804219C(Position32 *pos)
|
||||
{
|
||||
sub_80416E0(pokemon, 0x90, 1);
|
||||
sub_80416E0(pos, 0x90, 1);
|
||||
}
|
||||
|
||||
void sub_80421AC(Entity *pokemon, Entity * target)
|
||||
|
||||
258
src/code_8044CC8.c
Normal file
258
src/code_8044CC8.c
Normal file
@@ -0,0 +1,258 @@
|
||||
#include "global.h"
|
||||
#include "constants/dungeon_action.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "items.h"
|
||||
|
||||
typedef struct ItemText
|
||||
{
|
||||
u8 *desc;
|
||||
u8 *useText;
|
||||
} ItemText;
|
||||
extern const ItemText gActions[];
|
||||
|
||||
extern u16 gUnknown_80F6964[NUM_ITEM_CATEGORIES];
|
||||
extern u8 gUnknown_80F697C[];
|
||||
extern u8 *gUnknown_80F91EC[];
|
||||
extern u8 *gUnknown_80F7C50[10];
|
||||
|
||||
extern s32 gUnknown_202EE6C;
|
||||
|
||||
bool8 sub_80461C8(Position *, u32);
|
||||
void sub_80460F8(Position *, Item *, u32);
|
||||
extern u8 sub_8043D10(void);
|
||||
extern u8 sub_8045888(Entity *);
|
||||
|
||||
struct unkStruct_202EE44
|
||||
{
|
||||
u16 unk0;
|
||||
u8 unk2;
|
||||
bool8 unk3;
|
||||
};
|
||||
|
||||
struct unkStruct_202EE44 gUnknown_202EE44[10];
|
||||
|
||||
|
||||
Item * sub_8044CC8(Entity *param_1, unkStruct_8044CC8 *param_2)
|
||||
{
|
||||
Tile *tile;
|
||||
Item *item;
|
||||
EntityInfo *info;
|
||||
|
||||
if ((u8)(param_2->actionUseIndex - 1) < INVENTORY_SIZE) {
|
||||
item = &gTeamInventoryRef->teamItems[param_2->actionUseIndex - 1];
|
||||
}
|
||||
else if (param_2->actionUseIndex == 0x80) {
|
||||
tile = GetTile((param_2->lastItemThrowPosition).x,(param_2->lastItemThrowPosition).y);
|
||||
item = GetItemData(tile->object);
|
||||
}
|
||||
else {
|
||||
if (param_2->actionUseIndex == 0x81) {
|
||||
info = param_1->info;
|
||||
}
|
||||
else {
|
||||
if (3 < (u8)(param_2->actionUseIndex + 0x70)) {
|
||||
return NULL;
|
||||
}
|
||||
info = gDungeon->teamPokemon[param_2->actionUseIndex - 0x90]->info;
|
||||
}
|
||||
item = &info->heldItem;
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
bool8 sub_8044D40(ActionContainer *param_1,s32 index)
|
||||
{
|
||||
Item *item;
|
||||
unkStruct_8044CC8 *puVar1;
|
||||
|
||||
puVar1 = ¶m_1->unk4[index];
|
||||
if ((u8)(puVar1->actionUseIndex - 1) < INVENTORY_SIZE) {
|
||||
item = &gTeamInventoryRef->teamItems[puVar1->actionUseIndex - 1];
|
||||
item->id = ITEM_NOTHING;
|
||||
item->quantity = 0;
|
||||
item->flags = 0;
|
||||
FillInventoryGaps();
|
||||
}
|
||||
else {
|
||||
if (puVar1->actionUseIndex != 0x80) {
|
||||
return FALSE;
|
||||
}
|
||||
sub_80461C8(&puVar1->lastItemThrowPosition,1);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Item *sub_8044D90(Entity *entity, s32 index, s32 unused) {
|
||||
EntityInfo *info = entity->info;
|
||||
register unkStruct_8044CC8 *puVar1 asm("r3") = &info->action.unk4[index];
|
||||
return sub_8044CC8(entity, puVar1);
|
||||
}
|
||||
|
||||
Entity *sub_8044DA4(Entity *entity, s32 index)
|
||||
{
|
||||
EntityInfo *info = entity->info;
|
||||
return gDungeon->teamPokemon[info->action.unk4[index].actionUseIndex];
|
||||
}
|
||||
|
||||
u16 sub_8044DC8(u8 *param_1)
|
||||
{
|
||||
if (param_1[2] == ITEM_SWITCH_BOX) {
|
||||
return 0x35;
|
||||
}
|
||||
else {
|
||||
return gUnknown_80F6964[GetItemCategory(param_1[2])];
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8044DF0(Entity *entity, s32 index, u32 unused)
|
||||
{
|
||||
Item *item;
|
||||
EntityInfo *info;
|
||||
|
||||
info = entity->info;
|
||||
item = sub_8044D90(entity,index,unused);
|
||||
if ((info->action).unk4[0].actionUseIndex == 0x80) {
|
||||
sub_80461C8(&(info->action).unk4[0].lastItemThrowPosition,1);
|
||||
}
|
||||
else {
|
||||
item->id = ITEM_NOTHING;
|
||||
item->quantity = 0;
|
||||
item->flags = 0;
|
||||
FillInventoryGaps();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void sub_8044E24(Entity *entity,int index,u32 unused)
|
||||
{
|
||||
Item *itemPtr;
|
||||
EntityInfo *info;
|
||||
Position *pos;
|
||||
Item item;
|
||||
|
||||
itemPtr = sub_8044D90(entity,index,unused);
|
||||
info = entity->info;
|
||||
if (!IsHMItem(itemPtr->id)) {
|
||||
if (GetItemCategory(itemPtr->id) == CATEGORY_TMS_HMS) {
|
||||
if (info->action.unk4[index].actionUseIndex == 0x80) {
|
||||
item = *itemPtr;
|
||||
pos = &info->action.unk4[index].lastItemThrowPosition;
|
||||
sub_80461C8(pos,1);
|
||||
item.quantity = itemPtr->id - 125;
|
||||
item.id = ITEM_TM_USED_TM;
|
||||
sub_80460F8(pos,&item,1);
|
||||
}
|
||||
else {
|
||||
itemPtr->quantity = itemPtr->id - 125;
|
||||
itemPtr->id = ITEM_TM_USED_TM;
|
||||
}
|
||||
}
|
||||
else {
|
||||
sub_8044DF0(entity,index,unused);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Similar to sub_8044BA8
|
||||
u8 *sub_8044EC8(s32 param_1)
|
||||
{
|
||||
u16 uVar1;
|
||||
u32 uVar3;
|
||||
u32 uVar4;
|
||||
|
||||
uVar1 = gUnknown_202EE44[param_1].unk0;
|
||||
|
||||
if ((uVar1 == 0x26) && (sub_8043D10() == 2)) {
|
||||
return *gUnknown_80F91EC;
|
||||
}
|
||||
else {
|
||||
uVar3 = uVar4 = strcmp(gUnknown_80F7C50[uVar1 << 1], gUnknown_80F697C);
|
||||
if (uVar3 != 0) {
|
||||
uVar4 = 1;
|
||||
}
|
||||
if ((u8)(uVar4) == 0) {
|
||||
return gActions[GetItemActionType(gUnknown_202EE44[param_1].unk2)].useText;
|
||||
}
|
||||
else
|
||||
{
|
||||
return gUnknown_80F7C50[uVar1 << 1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_8044F3C(s32 param_1)
|
||||
{
|
||||
if(param_1 < 0)
|
||||
return FALSE;
|
||||
else
|
||||
return gUnknown_202EE44[param_1].unk3;
|
||||
}
|
||||
|
||||
void sub_8044F5C(u16 param_1, u8 param_2)
|
||||
{
|
||||
int index;
|
||||
|
||||
if (gUnknown_202EE6C < 10) {
|
||||
for(index = 0; index < gUnknown_202EE6C; index++)
|
||||
{
|
||||
if (gUnknown_202EE44[index].unk0 == param_1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
gUnknown_202EE44[gUnknown_202EE6C].unk0 = param_1;
|
||||
gUnknown_202EE44[gUnknown_202EE6C].unk2 = param_2;
|
||||
gUnknown_202EE44[gUnknown_202EE6C].unk3 = TRUE;
|
||||
gUnknown_202EE6C++;
|
||||
}
|
||||
}
|
||||
|
||||
s32 sub_8044FB4(u16 param_1)
|
||||
{
|
||||
int index;
|
||||
|
||||
for(index = 0; index < gUnknown_202EE6C; index++)
|
||||
{
|
||||
if (gUnknown_202EE44[index].unk0 == param_1) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void sub_8044FF0(u16 param_1)
|
||||
{
|
||||
int index;
|
||||
|
||||
for(index = 0; index < gUnknown_202EE6C; index++)
|
||||
{
|
||||
if (gUnknown_202EE44[index].unk0 == param_1) {
|
||||
gUnknown_202EE44[index].unk3 = FALSE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsNotAttacking(Entity *param_1, bool8 param_2)
|
||||
{
|
||||
EntityInfo *info;
|
||||
u16 *action;
|
||||
|
||||
info = param_1->info;
|
||||
action = &(info->action).action;
|
||||
if ((param_2 == 0) || (sub_8045888(param_1) != 0))
|
||||
{
|
||||
if(*action == ACTION_NOTHING)
|
||||
return TRUE;
|
||||
if (*action == ACTION_WALK)
|
||||
return TRUE;
|
||||
if (*action == ACTION_PASS_TURN)
|
||||
return TRUE;
|
||||
if (*action == ACTION_UNK5)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -1362,16 +1362,10 @@ bool8 sub_8058C00(Entity *pokemon, Entity *target, Move *move, u32 param_4)
|
||||
bool8 sub_8058C48(Entity *pokemon, Entity *target, Move *move, u32 param_4)
|
||||
{
|
||||
s32 rand;
|
||||
s32 iVar2;
|
||||
bool8 flag;
|
||||
|
||||
rand = DungeonRandRange(128, 384); // 0x80 - 0x180
|
||||
iVar2 = rand * pokemon->info->level;
|
||||
|
||||
if (iVar2 < 0) {
|
||||
iVar2 = iVar2 + 0xFF;
|
||||
}
|
||||
rand = iVar2 >> 8;
|
||||
rand = (rand * pokemon->info->level) / 256;
|
||||
if (rand < 0) {
|
||||
rand = 1;
|
||||
}
|
||||
|
||||
@@ -3818,17 +3818,11 @@ void sub_808BB3C(Position *param_1)
|
||||
Position local_8;
|
||||
|
||||
iVar1 = param_1->x * 0x1800 + 0xc00;
|
||||
if (iVar1 < 0) {
|
||||
iVar1 += 0xff;
|
||||
}
|
||||
local_8.x = iVar1 >> 8;
|
||||
local_8.x = iVar1 / 256;
|
||||
|
||||
iVar1 = param_1->y * 0x1800 + 0x1000;
|
||||
if (iVar1 < 0) {
|
||||
iVar1 += 0xff;
|
||||
}
|
||||
|
||||
local_8.y = iVar1 >> 8;
|
||||
local_8.y = iVar1 / 256;
|
||||
sub_8085EC8(100,0,0,&local_8,0);
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ extern void sub_806ABAC(Entity *, Entity *);
|
||||
extern u8 sub_807EAA0(u32, u32);
|
||||
extern void sub_8045C28(Item *, u8 , u8);
|
||||
extern void sub_805A7D4(Entity *, Entity *, Item *, Position *);
|
||||
extern void sub_8045394(Entity *, s32, s32);
|
||||
extern void SetEntityPixelPos(Entity *, s32, s32);
|
||||
extern void sub_804652C(Entity *, Entity *, Item *, u32, Position *);
|
||||
extern void sub_806EAF4(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32);
|
||||
extern u8 *gUnknown_80FEB60[];
|
||||
@@ -1107,7 +1107,7 @@ void sub_805A7D4(Entity * pokemon, Entity * target, Item *item, Position *pos)
|
||||
stackEntity.info = (EntityInfo*) item;
|
||||
stackEntity.pos.x = target->pos.x + pos->x;
|
||||
stackEntity.pos.y = target->pos.y + pos->y;
|
||||
sub_8045394(&stackEntity,(target->pos.x * 0x18 + 4) * 0x100,
|
||||
SetEntityPixelPos(&stackEntity,(target->pos.x * 0x18 + 4) * 0x100,
|
||||
(target->pos.y * 0x18 + 4) * 0x100);
|
||||
stackEntity.spawnGenID = 0;
|
||||
SetMessageArgument(gUnknown_202DE58,&stackEntity,0);
|
||||
|
||||
351
src/code_8066D04.c
Normal file
351
src/code_8066D04.c
Normal file
@@ -0,0 +1,351 @@
|
||||
#include "global.h"
|
||||
#include "code_80521D0.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_music.h"
|
||||
#include "dungeon_movement.h"
|
||||
#include "items.h"
|
||||
|
||||
extern u8 gUnknown_202DE58[];
|
||||
extern u8 gUnknown_202DEA8[];
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 gUnknown_202DFE8[];
|
||||
|
||||
extern u8 *gUnknown_80F8BE0[];
|
||||
extern u8 *gUnknown_80F8C40[];
|
||||
extern u8 *gUnknown_80F8C44[];
|
||||
extern u8 *gUnknown_80F8C7C[];
|
||||
extern u8 *gUnknown_80F8CA8[];
|
||||
extern u8 *gUnknown_80F8CE4[];
|
||||
extern u8 *gUnknown_80F8CE8[];
|
||||
extern u8 *gUnknown_80F8D04[];
|
||||
extern u8 *gUnknown_80F8D20[];
|
||||
extern u8 *gUnknown_80F8D44[];
|
||||
extern u8 *gUnknown_80F8D60[];
|
||||
extern u8 *gUnknown_80F8D7C[];
|
||||
extern u8 *gUnknown_80F8DB4[];
|
||||
extern u8 *gUnknown_80F8DE0[];
|
||||
extern u8 *gUnknown_80F8E04[];
|
||||
extern u8 *gUnknown_80F8E28[];
|
||||
|
||||
extern void SetMessageArgument(u8 *, Entity *, u32);
|
||||
extern Item *sub_8044D90(Entity *, s32, u32);
|
||||
void sub_8045BF8(u8 *, Item *);
|
||||
u8 sub_80460F8(Position *, Item *, u32);
|
||||
extern void sub_807AB38(Entity *, u32);
|
||||
extern Entity * sub_8044DA4(Entity *param_1,int param_2);
|
||||
extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3);
|
||||
extern void sub_806A6E8(Entity *);
|
||||
extern void sub_8044DF0(Entity *, u32, u32);
|
||||
extern void sub_8045DB4(Position *, u32);
|
||||
|
||||
void sub_8066744(Entity *entity)
|
||||
{
|
||||
entity->info->action.unk4[0].actionUseIndex = 1;
|
||||
sub_8045DB4(&entity->pos,0);
|
||||
}
|
||||
|
||||
void sub_806675C(Entity *param_1, bool8 param_2)
|
||||
{
|
||||
Item *item;
|
||||
Item *itemPtr;
|
||||
s32 index;
|
||||
|
||||
item = sub_8044D90(param_1,0,0xfe);
|
||||
for(index = 0; index < INVENTORY_SIZE; index++)
|
||||
{
|
||||
itemPtr = &gTeamInventoryRef->teamItems[index];
|
||||
if (((itemPtr->flags & ITEM_FLAG_EXISTS)) && ((itemPtr->flags & ITEM_FLAG_SET))) {
|
||||
if ((itemPtr->flags & ITEM_FLAG_STICKY)) {
|
||||
sub_8045BF8(gUnknown_202DE58,itemPtr);
|
||||
SendMessage(param_1,*gUnknown_80F8C7C);
|
||||
return;
|
||||
}
|
||||
itemPtr->flags &= ~(ITEM_FLAG_SET);
|
||||
}
|
||||
}
|
||||
sub_8045BF8(gUnknown_202DE58,item);
|
||||
PlaySoundEffect(0x133);
|
||||
if (param_2 != 0) {
|
||||
if ((item->flags & ITEM_FLAG_STICKY)) {
|
||||
SendMessage(param_1,*gUnknown_80F8D04);
|
||||
}
|
||||
else {
|
||||
if (GetItemCategory(item->id) == CATEGORY_THROWN_LINE) {
|
||||
SendMessage(param_1,*gUnknown_80F8CE4);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessage(param_1,*gUnknown_80F8CE8);
|
||||
}
|
||||
}
|
||||
}
|
||||
item->flags |= ITEM_FLAG_SET;
|
||||
if (((item->flags & ITEM_FLAG_STICKY)) && (param_2 != 0)) {
|
||||
sub_8045BF8(gUnknown_202DE58,item);
|
||||
SendMessage(param_1,*gUnknown_80F8BE0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void sub_806684C(Entity *entity,bool8 enableMessage)
|
||||
{
|
||||
Item *item;
|
||||
int index;
|
||||
|
||||
for(index = 0; index < INVENTORY_SIZE; index++)
|
||||
{
|
||||
item = &gTeamInventoryRef->teamItems[index];
|
||||
if (((item->flags & ITEM_FLAG_EXISTS)) && ((item->flags & ITEM_FLAG_SET))) {
|
||||
if ((item->flags & ITEM_FLAG_STICKY)) {
|
||||
sub_8045BF8(gUnknown_202DE58,item);
|
||||
SendMessage(entity,*gUnknown_80F8C7C);
|
||||
return;
|
||||
}
|
||||
item->flags &= ~(ITEM_FLAG_SET);
|
||||
sub_8045BF8(gUnknown_202DE58,item);
|
||||
PlaySoundEffect(0x133);
|
||||
if (enableMessage) {
|
||||
SendMessage(entity,*gUnknown_80F8D20);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void sub_80668D0(Entity *param_1)
|
||||
{
|
||||
Entity *entity;
|
||||
Item *item;
|
||||
EntityInfo *info1;
|
||||
EntityInfo *info2;
|
||||
bool8 bVar3;
|
||||
Item item1;
|
||||
Item item2;
|
||||
Item item3;
|
||||
|
||||
entity = sub_8044DA4(param_1,1);
|
||||
info1 = param_1->info;
|
||||
info2 = entity->info;
|
||||
item = sub_8044D90(param_1,0,2);
|
||||
|
||||
if((info1->action).unk4[0].actionUseIndex == 0x80)
|
||||
bVar3 = TRUE;
|
||||
else
|
||||
bVar3 = FALSE;
|
||||
|
||||
if ((!bVar3) && ((item->flags & (ITEM_FLAG_STICKY | ITEM_FLAG_SET)) == (ITEM_FLAG_STICKY | ITEM_FLAG_SET))) {
|
||||
sub_8045BF8(gUnknown_202DEA8,item);
|
||||
SendMessage(param_1,*gUnknown_80F8C44);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetMessageArgument(gUnknown_202DFE8,entity,0);
|
||||
if (((info2->heldItem).flags & ITEM_FLAG_EXISTS)) {
|
||||
if (((info2->heldItem).flags & ITEM_FLAG_STICKY)) {
|
||||
sub_8045BF8(gUnknown_202DEA8,&info2->heldItem);
|
||||
SendMessage(param_1,*gUnknown_80F8C40);
|
||||
return;
|
||||
}
|
||||
item1 = (info2->heldItem);
|
||||
item2 = *item;
|
||||
item1.flags &= ~(ITEM_FLAG_SET);
|
||||
item2.flags &= ~(ITEM_FLAG_SET);
|
||||
sub_8044DF0(param_1,0,100);
|
||||
if (bVar3) {
|
||||
sub_80460F8(¶m_1->pos,&item1,1);
|
||||
}
|
||||
else {
|
||||
AddItemToInventory(&item1);
|
||||
}
|
||||
info2->heldItem = item2;
|
||||
sub_8045BF8(gUnknown_202DE58,&item2);
|
||||
sub_8045BF8(gUnknown_202DE58 + 0x50,&item1);
|
||||
PlaySoundEffect(0x14d);
|
||||
SendMessage(param_1,*gUnknown_80F8CA8);
|
||||
if ((item2.flags & ITEM_FLAG_STICKY)) {
|
||||
SendMessage(param_1,*gUnknown_80F8BE0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
item3 = *item;
|
||||
item3.flags &= ~(ITEM_FLAG_SET);
|
||||
sub_8044DF0(param_1, 0, 101);
|
||||
info2->heldItem = item3;
|
||||
sub_8045BF8(gUnknown_202DE58,&item3);
|
||||
PlaySoundEffect(0x14d);
|
||||
SendMessage(param_1,*gUnknown_80F8D44);
|
||||
if ((item3.flags & ITEM_FLAG_STICKY)) {
|
||||
SendMessage(param_1,*gUnknown_80F8BE0);
|
||||
}
|
||||
}
|
||||
sub_806A6E8(entity);
|
||||
if (sub_80706A4(entity,&entity->pos) != 0) {
|
||||
sub_807D148(param_1,entity,0,0);
|
||||
}
|
||||
if (!info2->isTeamLeader) {
|
||||
info2->flags = info2->flags | MOVEMENT_FLAG_UNK_14;
|
||||
}
|
||||
sub_807AB38(param_1,gDungeon->unk3A08);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void sub_8066AC0(Entity *param_1)
|
||||
{
|
||||
Entity *entity;
|
||||
EntityInfo *info;
|
||||
EntityInfo *info2;
|
||||
Item *heldItem;
|
||||
Item item;
|
||||
|
||||
entity = sub_8044DA4(param_1,0);
|
||||
info = entity->info;
|
||||
info2 = entity->info;
|
||||
heldItem = &info->heldItem;
|
||||
if ((gTeamInventoryRef->teamItems[ITEM_POWER_BAND].flags & ITEM_FLAG_EXISTS)) {
|
||||
SendMessage(param_1,*gUnknown_80F8D60);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((heldItem->flags & ITEM_FLAG_STICKY)) {
|
||||
sub_8045BF8(gUnknown_202DE58,heldItem);
|
||||
SendMessage(param_1,*gUnknown_80F8BE0);
|
||||
}
|
||||
else
|
||||
{
|
||||
item = *heldItem;
|
||||
item.flags &= ~(ITEM_FLAG_SET);
|
||||
sub_8045BF8(gUnknown_202DE58,&item);
|
||||
SetMessageArgument(gAvailablePokemonNames,entity,0);
|
||||
heldItem->id = ITEM_NOTHING;
|
||||
heldItem->quantity = 0;
|
||||
heldItem->flags = 0;
|
||||
AddItemToInventory(&item);
|
||||
PlaySoundEffect(0x14d);
|
||||
SendMessage(param_1,*gUnknown_80F8D7C);
|
||||
sub_806A6E8(entity);
|
||||
if (sub_80706A4(entity,&entity->pos) != 0) {
|
||||
sub_807D148(param_1,entity,0,0);
|
||||
}
|
||||
if (!info2->isTeamLeader) {
|
||||
info2->flags = info2->flags | MOVEMENT_FLAG_UNK_14;
|
||||
}
|
||||
sub_807AB38(param_1,gDungeon->unk3A08);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8066BD4(Entity *param_1)
|
||||
{
|
||||
Entity *entity;
|
||||
EntityInfo *info;
|
||||
EntityInfo *info2; // NOTE: needed two of these to match
|
||||
Item *item;
|
||||
Item *heldItem;
|
||||
Item temp;
|
||||
|
||||
entity = sub_8044DA4(param_1,0);
|
||||
info = entity->info;
|
||||
info2 = entity->info;
|
||||
heldItem = &info->heldItem;
|
||||
item = sub_8044D90(param_1,1,0x1565);
|
||||
if (heldItem->flags & ITEM_FLAG_STICKY)
|
||||
{
|
||||
sub_8045BF8(gUnknown_202DE58,heldItem);
|
||||
SendMessage(param_1,*gUnknown_80F8BE0);
|
||||
}
|
||||
else if ((item->flags & (ITEM_FLAG_STICKY | ITEM_FLAG_SET)) == (ITEM_FLAG_STICKY | ITEM_FLAG_SET)) {
|
||||
sub_8045BF8(gUnknown_202DE58,item);
|
||||
SendMessage(param_1,*gUnknown_80F8BE0);
|
||||
}
|
||||
else
|
||||
{
|
||||
heldItem->flags &= ~(ITEM_FLAG_SET);
|
||||
item->flags &= ~(ITEM_FLAG_SET);
|
||||
sub_8045BF8(gUnknown_202DE58,heldItem);
|
||||
sub_8045BF8(gUnknown_202DE58 + 0x50,item);
|
||||
SetMessageArgument(gUnknown_202DFE8,entity,0);
|
||||
temp = info->heldItem;
|
||||
info->heldItem = *item;
|
||||
*item = temp;
|
||||
PlaySoundEffect(0x14d);
|
||||
SendMessage(param_1,*gUnknown_80F8DB4);
|
||||
if (sub_80706A4(entity,&entity->pos) != 0) {
|
||||
sub_807D148(param_1,entity,0,0);
|
||||
}
|
||||
if (!info2->isTeamLeader) {
|
||||
info2->flags = info2->flags | MOVEMENT_FLAG_UNK_14;
|
||||
}
|
||||
sub_807AB38(param_1,gDungeon->unk3A08);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8066CF0(Entity *param_1)
|
||||
{
|
||||
Entity *entity;
|
||||
|
||||
entity = sub_8044DA4(param_1,0);
|
||||
entity->info->useHeldItem = TRUE;
|
||||
}
|
||||
|
||||
void sub_8066D04(Entity *param_1)
|
||||
{
|
||||
Item *item;
|
||||
Tile *tile;
|
||||
EntityInfo *info;
|
||||
#ifndef NONMATCHING
|
||||
register Entity *entity asm("r4");
|
||||
#else
|
||||
Entity *entity;
|
||||
#endif
|
||||
|
||||
entity = param_1;
|
||||
|
||||
info = entity->info;
|
||||
item = sub_8044D90(entity,0,4);
|
||||
sub_8045BF8(gUnknown_202DE58,item);
|
||||
if (info->action.unk4[0].actionUseIndex == 0x80) {
|
||||
SendMessage(entity,*gUnknown_80F8DE0);
|
||||
}
|
||||
else if ((info->action.unk4[0].actionUseIndex < 0x15) && ((item->flags & (ITEM_FLAG_STICKY | ITEM_FLAG_SET)) == (ITEM_FLAG_STICKY | ITEM_FLAG_SET))) {
|
||||
SendMessage(entity,*gUnknown_80F8BE0);
|
||||
}
|
||||
else if ((info->action.unk4[0].actionUseIndex == 0x81) && ((item->flags & ITEM_FLAG_STICKY))) {
|
||||
SendMessage(entity,*gUnknown_80F8BE0);
|
||||
}
|
||||
else {
|
||||
tile = GetTile(entity->pos.x, entity->pos.y);
|
||||
if (!(tile->terrainType & TERRAIN_TYPE_STAIRS))
|
||||
{
|
||||
if(((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL) &&
|
||||
(tile->object == NULL)) {
|
||||
item->flags &= ~(ITEM_FLAG_SET);
|
||||
sub_8045BF8(gUnknown_202DE58,item);
|
||||
if (sub_80460F8(&entity->pos,item,1) == 0) {
|
||||
_message:
|
||||
SendMessage(entity,*gUnknown_80F8E04);
|
||||
}
|
||||
else
|
||||
{
|
||||
item->id = ITEM_NOTHING;
|
||||
item->quantity = 0;
|
||||
item->flags = 0;
|
||||
FillInventoryGaps();
|
||||
PlaySoundEffect(0x14d);
|
||||
SetMessageArgument(gAvailablePokemonNames,entity,0);
|
||||
SendMessage(entity,*gUnknown_80F8E28);
|
||||
sub_807AB38(entity,gDungeon->unk3A08);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
goto _message;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
goto _message;
|
||||
}
|
||||
}
|
||||
}
|
||||
168
src/code_80718D8.c
Normal file
168
src/code_80718D8.c
Normal file
@@ -0,0 +1,168 @@
|
||||
#include "global.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon.h"
|
||||
|
||||
struct unkStruct_806B7F8
|
||||
{
|
||||
s16 species;
|
||||
u8 unk2;
|
||||
u32 unk4;
|
||||
u16 level;
|
||||
u8 fillA[2];
|
||||
struct Position pos;
|
||||
u8 unk10;
|
||||
};
|
||||
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern s16 gUnknown_80F4DA6;
|
||||
extern s16 gUnknown_80F4DA8;
|
||||
extern s16 gUnknown_80F4DAA;
|
||||
extern s16 gUnknown_80F4DAC;
|
||||
extern u8 *gUnknown_80FED68[];
|
||||
|
||||
extern void SetMessageArgument(char[], struct Entity*, u32);
|
||||
extern void sub_806B7F8(struct unkStruct_806B7F8 *, u32);
|
||||
extern void sub_805239C(struct Entity *r0, const char r1[]);
|
||||
extern void sub_8042920(struct Entity *r0);
|
||||
extern s16 sub_803D970(u32);
|
||||
extern s32 sub_803DA20(s32 param_1);
|
||||
extern bool8 sub_806AA0C(s32, u32);
|
||||
extern bool8 sub_8083660(struct Position *param_1);
|
||||
|
||||
void sub_8071B48(void)
|
||||
{
|
||||
struct Tile *tile;
|
||||
struct Entity *entity2;
|
||||
struct Entity *entity;
|
||||
int index;
|
||||
int index1;
|
||||
int counter;
|
||||
struct Entity *entityPtr;
|
||||
s32 level;
|
||||
struct Dungeon *dungeon; // feels like a hack
|
||||
struct unkStruct_806B7F8 local_2c;
|
||||
|
||||
entityPtr = NULL;
|
||||
dungeon = gDungeon;
|
||||
if ((dungeon->unk664 != 0) &&
|
||||
((dungeon->dungeonLocation.id != DUNGEON_METEOR_CAVE || (dungeon->fill37FD == 0)))) {
|
||||
dungeon->unk662++;
|
||||
if (dungeon->unk66E == 0) {
|
||||
if ( dungeon->unk662 < gUnknown_80F4DAA) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( dungeon->unk662 < gUnknown_80F4DAC) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (dungeon->unk662 > 900) {
|
||||
entity2 = dungeon->unk17B34;
|
||||
if ((EntityExists(entity2)) && (entity2->spawnGenID == dungeon->unk17B40)) {
|
||||
SetMessageArgument(gAvailablePokemonNames,entity2,0);
|
||||
entityPtr = entity2;
|
||||
}
|
||||
}
|
||||
|
||||
dungeon->unk662 = 0;
|
||||
dungeon->unk17B34 = NULL;
|
||||
|
||||
counter = 0;
|
||||
for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++)
|
||||
{
|
||||
entity = dungeon->wildPokemon[index];
|
||||
if ((EntityExists(entity)) &&
|
||||
(tile = GetTile((entity->pos).x, (entity->pos).y),
|
||||
(tile->terrainType & 0x100) == 0)) {
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
if (dungeon->unk66E == 0) {
|
||||
if (gDungeon->unk3A0C == 0xff) {
|
||||
if (counter >= gUnknown_80F4DA6) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (counter >= gUnknown_80F4DA8) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if (entityPtr != NULL) {
|
||||
sub_805239C(0,*gUnknown_80FED68);
|
||||
sub_8042920(entityPtr);
|
||||
}
|
||||
if (dungeon->unk66E != 0) {
|
||||
index1 = 0x17c;
|
||||
}
|
||||
else {
|
||||
index1 = sub_803D970(0);
|
||||
}
|
||||
|
||||
level = sub_803DA20(index1);
|
||||
if (level == 0) {
|
||||
level = 1;
|
||||
}
|
||||
if ((sub_806AA0C(index1, 0)) && (sub_8083660(&local_2c.pos))) {
|
||||
local_2c.species = index1;
|
||||
local_2c.level = level;
|
||||
local_2c.unk2 = 0;
|
||||
if(DungeonRandInt(100) < GetRandomMovementChance(gDungeon->dungeonLocation.id))
|
||||
{
|
||||
local_2c.unk4 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
local_2c.unk4 = 0;
|
||||
}
|
||||
local_2c.unk10 = 0;
|
||||
sub_806B7F8(&local_2c, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool8 JoinLocationCannotUseItems(EntityInfo *pokemonInfo)
|
||||
{
|
||||
if (pokemonInfo->joinedAt == DUNGEON_JOIN_LOCATION_CLIENT_POKEMON)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
if (pokemonInfo->joinedAt == DUNGEON_RESCUE_TEAM_BASE)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void sub_8071D4C(Entity *pokemon, Entity *target, s32 exp)
|
||||
{
|
||||
s32 newExp;
|
||||
s32 expDiff;
|
||||
EntityInfo *info;
|
||||
|
||||
info = target->info;
|
||||
if (info->level != 100) {
|
||||
if (!JoinLocationCannotUseItems(info)) {
|
||||
newExp = info->exp + exp;
|
||||
if (9999998 < newExp) {
|
||||
newExp = 9999999;
|
||||
}
|
||||
expDiff = newExp - info->exp;
|
||||
if (expDiff != 0) {
|
||||
info->expGainedInTurn += expDiff;
|
||||
gDungeon->unkD = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
144
src/code_8072B78.c
Normal file
144
src/code_8072B78.c
Normal file
@@ -0,0 +1,144 @@
|
||||
#include "global.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/map.h"
|
||||
#include "structs/str_pokemon.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_movement.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "code_805D8C8.h"
|
||||
#include "code_806CD90.h"
|
||||
#include "moves.h"
|
||||
#include "pokemon_mid.h"
|
||||
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 gUnknown_202DFE8[];
|
||||
extern Position gAdjacentTileOffsets[];
|
||||
extern u8 *gUnknown_80FE2EC[];
|
||||
|
||||
struct unkStruct_806B7F8
|
||||
{
|
||||
u16 species;
|
||||
u8 unk2;
|
||||
u32 unk4;
|
||||
u16 level;
|
||||
u8 fillA[0xC - 0xA];
|
||||
struct Position pos;
|
||||
u8 unk10;
|
||||
};
|
||||
|
||||
extern void sub_806B7F8(struct unkStruct_806B7F8 *, u32);
|
||||
extern void sub_806BFC0(EntityInfo *, u32);
|
||||
void sub_8069E0C(Entity *pokemon);
|
||||
void sub_80522F4(Entity *r0, Entity *r1, const char r2[]);
|
||||
extern void SetMessageArgument_2(u8 *, EntityInfo *, u32);
|
||||
void sub_8042A44(Entity *r0);
|
||||
void sub_8083D78(void);
|
||||
extern bool8 sub_803D930(u32);
|
||||
|
||||
void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index);
|
||||
|
||||
void sub_8072AC8(s16 *param_1, s16 species, s32 param_3)
|
||||
{
|
||||
const u8 *levelUpMoves;
|
||||
s32 arrIndex;
|
||||
s32 counter;
|
||||
u16 moveIDs [2];
|
||||
s32 species_s32;
|
||||
s32 index;
|
||||
|
||||
species_s32 = species;
|
||||
|
||||
for(index = 0; index < MAX_MON_MOVES; index++) {
|
||||
param_1[index] = MOVE_NOTHING;
|
||||
}
|
||||
|
||||
counter = 0;
|
||||
levelUpMoves = GetLevelUpMoves(species_s32);
|
||||
|
||||
while( 1 ) {
|
||||
if (*levelUpMoves == 0) {
|
||||
return;
|
||||
}
|
||||
levelUpMoves = DecompressMoveID(levelUpMoves,moveIDs);
|
||||
if (*levelUpMoves++ > param_3) break;
|
||||
if (counter == MAX_MON_MOVES) {
|
||||
arrIndex = DungeonRandInt(MAX_MON_MOVES);
|
||||
counter = MAX_MON_MOVES;
|
||||
}
|
||||
else {
|
||||
arrIndex = counter;
|
||||
counter++;
|
||||
}
|
||||
param_1[arrIndex] = moveIDs[0];
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8072B24(Entity *entity, Move *moves)
|
||||
{
|
||||
int index;
|
||||
int count;
|
||||
|
||||
count = 0;
|
||||
for(index = 0; index < 8; index++)
|
||||
{
|
||||
if (moves[index].moveFlags & MOVE_FLAG_EXISTS) {
|
||||
moves[index].moveFlags &= 0xfd;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
index = DungeonRandInt(count);
|
||||
for (; index < 7; index++) {
|
||||
moves[index] = moves[index + 1];
|
||||
}
|
||||
moves[7].moveFlags = 0;
|
||||
}
|
||||
|
||||
static inline void fu(EntityInfo *entityInfo, s16 id)
|
||||
{
|
||||
++id; --id;
|
||||
entityInfo->apparentID = id;
|
||||
entityInfo->id = id;
|
||||
}
|
||||
|
||||
void sub_8072B78(Entity *pokemon, Entity *target, s16 id)
|
||||
{
|
||||
OpenedFile *file;
|
||||
Tile *tile;
|
||||
int index;
|
||||
s32 id_s32;
|
||||
EntityInfo *entityInfo;
|
||||
LevelData levelData;
|
||||
struct unkStruct_806B7F8 local_2c;
|
||||
|
||||
id_s32 = id;
|
||||
entityInfo = target->info;
|
||||
SetMessageArgument_2(gAvailablePokemonNames,entityInfo,0);
|
||||
CopyCyanMonsterNametoBuffer(gAvailablePokemonNames + 0x50,id_s32);
|
||||
file = sub_80687D0(id_s32);
|
||||
fu(entityInfo, id_s32);
|
||||
GetPokemonLevelData(&levelData,id_s32,entityInfo->level);
|
||||
entityInfo->exp = levelData.expRequired;
|
||||
target->sprite = file;
|
||||
sub_806BFC0(entityInfo,0);
|
||||
sub_8069E0C(target);
|
||||
sub_806CCB4(target,7);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FE2EC);
|
||||
sub_8042A44(target);
|
||||
sub_8083D78();
|
||||
if (id_s32 == MONSTER_NINJASK) {
|
||||
for (index = 0; index < 8; index++) {
|
||||
tile = GetTile(gAdjacentTileOffsets[index].x + target->pos.x,gAdjacentTileOffsets[index].y + target->pos.y);
|
||||
if (sub_807034C(MONSTER_SHEDINJA,tile) == 0) break;
|
||||
}
|
||||
if (sub_803D930(MONSTER_SHEDINJA)) {
|
||||
local_2c.species = MONSTER_SHEDINJA;
|
||||
local_2c.level = entityInfo->level;
|
||||
local_2c.unk2 = 0;
|
||||
local_2c.pos.x = gAdjacentTileOffsets[index].x + target->pos.x;
|
||||
local_2c.pos.y = gAdjacentTileOffsets[index].y + target->pos.y;
|
||||
local_2c.unk4 = 0;
|
||||
local_2c.unk10 = 0;
|
||||
sub_806B7F8(&local_2c,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,17 +5,51 @@
|
||||
#include "constants/item.h"
|
||||
#include "constants/status.h"
|
||||
#include "constants/type.h"
|
||||
#include "code_806CD90.h"
|
||||
#include "dungeon_capabilities.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_visibility.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "tile_types.h"
|
||||
#include "position_util.h"
|
||||
|
||||
extern void sub_8049ED4(void);
|
||||
extern void sub_8073D14(Entity *);
|
||||
extern void sub_807FE9C(Entity *, Position *, u32, u32);
|
||||
|
||||
void sub_8075680(void)
|
||||
{
|
||||
u32 direction;
|
||||
Position *targetPos;
|
||||
Entity *entity;
|
||||
EntityInfo *info;
|
||||
int index;
|
||||
|
||||
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
|
||||
{
|
||||
entity = gDungeon->allPokemon[index];
|
||||
if ((EntityExists(entity)) && (info = entity->info, !info->isTeamLeader)) {
|
||||
targetPos = &(info->targetPos);
|
||||
|
||||
if (targetPos->x == 0 && targetPos->y == 0)
|
||||
continue;
|
||||
|
||||
if (targetPos->x == entity->pos.x && targetPos->y == entity->pos.y)
|
||||
continue;
|
||||
|
||||
if (CannotMove(entity, TRUE))
|
||||
continue;
|
||||
|
||||
direction = GetDirectionTowardsPosition(&entity->pos, targetPos);
|
||||
info->action.direction = direction & DIRECTION_MASK;
|
||||
sub_806CDD4(entity, sub_806CEBC(entity), direction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_97(Entity *entity)
|
||||
{}
|
||||
|
||||
|
||||
@@ -242,7 +242,7 @@ void TransformStatusTarget(Entity * pokemon, Entity * target)
|
||||
s16 apparentID_s16;
|
||||
s32 index;
|
||||
EntityInfo *entityInfo;
|
||||
OpenedFile *iVar9;
|
||||
OpenedFile *sprite;
|
||||
PokemonStruct1 *auStack544[128];
|
||||
|
||||
if (!EntityExists(target))
|
||||
@@ -259,7 +259,7 @@ void TransformStatusTarget(Entity * pokemon, Entity * target)
|
||||
if (iVar5 == 0)
|
||||
sub_80522F4(pokemon, target, *gUnknown_80FBEE4);
|
||||
else {
|
||||
iVar9 = NULL;
|
||||
sprite = NULL;
|
||||
|
||||
for (index = 0; index < DUNGEON_MAX_POKEMON; index++) {
|
||||
species = ExtractSpeciesIndex(&auStack544[DungeonRandInt(iVar5) * 2]);
|
||||
@@ -267,17 +267,17 @@ void TransformStatusTarget(Entity * pokemon, Entity * target)
|
||||
apparentID = apparentID_s16;
|
||||
|
||||
if (apparentID != entityInfo->apparentID && sub_806AA0C(apparentID, 1)) {
|
||||
iVar9 = sub_80687D0(apparentID);
|
||||
if (iVar9 != NULL)
|
||||
sprite = sub_80687D0(apparentID);
|
||||
if (sprite != NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (index == DUNGEON_MAX_POKEMON || iVar9 == NULL)
|
||||
if (index == DUNGEON_MAX_POKEMON || sprite == NULL)
|
||||
sub_80522F4(pokemon, target, *gUnknown_80FBEE4);
|
||||
else {
|
||||
entityInfo->apparentID = apparentID;
|
||||
target->sprite = iVar9;
|
||||
target->sprite = sprite;
|
||||
entityInfo->transformStatus = STATUS_TRANSFORMED;
|
||||
entityInfo->transformStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EFC, TRUE) + 1;
|
||||
sub_806CF98(target);
|
||||
@@ -1570,27 +1570,26 @@ void SendMuzzledEndMessage(Entity * pokemon, Entity * target)
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
// TODO: this involves a union for sleep/sleepTurns that I don't want to deal with right now
|
||||
/*
|
||||
bool32 sub_807A96C(Entity * pokemon, Entity * target)
|
||||
* https://decomp.me/scratch/kEFOw (97.58 % matching, Seth)
|
||||
|
||||
bool8 sub_807A96C(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
EntityInfo *entityInfo_1;
|
||||
register bool32 bVar3 asm("r2");
|
||||
bool8 flag;
|
||||
|
||||
entityInfo = target->info;
|
||||
entityInfo_1 = entityInfo;
|
||||
bVar3 = FALSE;
|
||||
flag = FALSE;
|
||||
if (entityInfo->immobilizeStatus == 6) {
|
||||
SendImmobilizeEndMessage(pokemon, target);
|
||||
bVar3 = TRUE;
|
||||
flag = TRUE;
|
||||
}
|
||||
TODO: this is where the union is needed..
|
||||
if ((entityInfo_1 + 0xa8) == 0x7f01) {
|
||||
|
||||
if (entityInfo->sleep == 1 && entityInfo->sleepTurns == 0x7f) {
|
||||
SendSleepEndMessage(pokemon,target,0,1);
|
||||
bVar3 = TRUE;
|
||||
flag = TRUE;
|
||||
}
|
||||
return bVar3;
|
||||
return flag;
|
||||
}
|
||||
*/
|
||||
NAKED
|
||||
|
||||
@@ -55,10 +55,10 @@ void InitializeMailJobsNews(void)
|
||||
MemoryClear8(gUnknown_203B490->unk1B8, sizeof(gUnknown_203B490->unk1B8));
|
||||
for(index = 0; index < 16; index++)
|
||||
{
|
||||
gUnknown_203B490->unk230[index].dungeon.id = 99;
|
||||
gUnknown_203B490->unk230[index].dungeon.floor = 1;
|
||||
gUnknown_203B490->unk230[index].seed = 0;
|
||||
gUnknown_203B490->unk230[index].unk8 = 0;
|
||||
gUnknown_203B490->unk230[index].sub.dungeon.id = 99;
|
||||
gUnknown_203B490->unk230[index].sub.dungeon.floor = 1;
|
||||
gUnknown_203B490->unk230[index].sub.seed = 0;
|
||||
gUnknown_203B490->unk230[index].checksum = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ extern bool8 GenerateMailJobInfo(WonderMail *);
|
||||
bool8 sub_803C1D0(DungeonLocation *, u8);
|
||||
u8 sub_8095F28(u8);
|
||||
void sub_803C37C(DungeonLocation *, u8, u8 *);
|
||||
bool8 sub_8096E80(u32);
|
||||
bool8 sub_8096E80(u8);
|
||||
u8 sub_8095E78(void);
|
||||
|
||||
void sub_8096078(void);
|
||||
@@ -227,7 +227,7 @@ void sub_8096488(void)
|
||||
|
||||
bool8 sub_80964B4(void)
|
||||
{
|
||||
if ((gUnknown_203B490->PKMNNewsReceived[0x35] == 0) && (sub_8096E80(0x35) == 0)) {
|
||||
if ((!gUnknown_203B490->PKMNNewsReceived[0x35]) && (sub_8096E80(0x35) == 0)) {
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
@@ -237,7 +237,7 @@ bool8 sub_80964B4(void)
|
||||
|
||||
bool8 sub_80964E4(void)
|
||||
{
|
||||
if ((gUnknown_203B490->PKMNNewsReceived[0x36] == 0) && (sub_8096E80(0x36) == 0)) {
|
||||
if ((!gUnknown_203B490->PKMNNewsReceived[0x36]) && (sub_8096E80(0x36) == 0)) {
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
@@ -706,7 +706,7 @@ void sub_8096BD0(void)
|
||||
}
|
||||
}
|
||||
sub_8096C80();
|
||||
sub_8096D24();
|
||||
SortJobSlots();
|
||||
}
|
||||
|
||||
bool8 sub_8096C08(u8 *jobIndex)
|
||||
|
||||
@@ -16,30 +16,148 @@ extern const u8 gUnknown_8109CC0[];
|
||||
extern const u8 gDummyScenarioText[];
|
||||
|
||||
extern void sub_800199C(u8, u8, u16, s32);
|
||||
|
||||
void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b);
|
||||
void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b);
|
||||
extern s32 sub_8096EB0(WonderMail *);
|
||||
extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
|
||||
extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
|
||||
extern u32 sub_8001784(u32, u32, u16);
|
||||
extern void GeneratePelipperJobs(void);
|
||||
extern void sub_80018D8(u8, u8, u32);
|
||||
|
||||
void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b);
|
||||
void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b);
|
||||
s32 CalculateMailChecksum(WonderMail *mail);
|
||||
|
||||
void SortJobSlots(void)
|
||||
{
|
||||
s32 r1;
|
||||
s32 r6;
|
||||
WonderMail job;
|
||||
|
||||
for(r1 = 0; r1 < MAX_ACCEPTED_JOBS - 1; r1++)
|
||||
{
|
||||
for(r6 = r1 + 1; r6 < MAX_ACCEPTED_JOBS; r6++)
|
||||
{
|
||||
if(gUnknown_203B490->jobSlots[r6].mailType != 0)
|
||||
{
|
||||
if((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id > gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) ||
|
||||
((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id == gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) &&
|
||||
(gUnknown_203B490->jobSlots[r1].unk4.dungeon.floor > gUnknown_203B490->jobSlots[r6].unk4.dungeon.floor)))
|
||||
{
|
||||
job = gUnknown_203B490->jobSlots[r1];
|
||||
gUnknown_203B490->jobSlots[r1] = gUnknown_203B490->jobSlots[r6];
|
||||
gUnknown_203B490->jobSlots[r6] = job;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u8 *sub_8096DD8(void)
|
||||
{
|
||||
return gUnknown_203B490->unk190;
|
||||
}
|
||||
|
||||
u8 *sub_8096DE8(void)
|
||||
{
|
||||
return gUnknown_203B490->unk1B8;
|
||||
}
|
||||
|
||||
void ReceivePKMNNews(u8 index)
|
||||
{
|
||||
gUnknown_203B490->PKMNNewsReceived[index] = TRUE;
|
||||
}
|
||||
|
||||
bool8 CheckPKMNNewsSlot(u8 index)
|
||||
{
|
||||
return gUnknown_203B490->PKMNNewsReceived[index];
|
||||
}
|
||||
|
||||
u8 sub_8096E2C(void)
|
||||
{
|
||||
s32 index;
|
||||
s32 floor = 0;
|
||||
for(index = 0; index < NUM_MAILBOX_SLOTS; index++)
|
||||
{
|
||||
if(gUnknown_203B490->mailboxSlots[index].mailType == 1)
|
||||
{
|
||||
if(floor <= gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor)
|
||||
if( gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor < 0x32)
|
||||
floor = gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor + 1;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = floor; index < 0x32; index++)
|
||||
{
|
||||
if(!gUnknown_203B490->PKMNNewsReceived[index]) return index;
|
||||
}
|
||||
return 0x38;
|
||||
}
|
||||
|
||||
bool8 sub_8096E80(u8 floor)
|
||||
{
|
||||
s32 index;
|
||||
for(index = 0; index < NUM_MAILBOX_SLOTS; index++)
|
||||
{
|
||||
if(gUnknown_203B490->mailboxSlots[index].mailType == 1)
|
||||
{
|
||||
if(floor == gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s32 CalculateMailChecksum(WonderMail *mail)
|
||||
{
|
||||
s32 sum;
|
||||
|
||||
sum = (mail->unk2 + mail->missionType);
|
||||
|
||||
sum += mail->unk4.dungeon.id;
|
||||
sum += mail->unk4.dungeon.floor;
|
||||
|
||||
sum += mail->unk4.seed << 0x8;
|
||||
|
||||
sum += mail->clientSpecies << 0xC;
|
||||
|
||||
sum += mail->targetSpecies << 0x10;
|
||||
|
||||
sum += mail->targetItem << 0x18;
|
||||
|
||||
sum += mail->rewardType;
|
||||
|
||||
sum += mail->itemReward;
|
||||
|
||||
sum += mail->friendAreaReward;
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
void sub_8096EEC(WonderMail *mail)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
for(index = 15; index > 0; index--)
|
||||
{
|
||||
gUnknown_203B490->unk230[index] = gUnknown_203B490->unk230[index - 1];
|
||||
}
|
||||
gUnknown_203B490->unk230[0].sub = mail->unk4;
|
||||
gUnknown_203B490->unk230[0].checksum = CalculateMailChecksum(mail);
|
||||
}
|
||||
|
||||
bool8 sub_8096F50(WonderMail *mail)
|
||||
{
|
||||
s32 index;
|
||||
s32 temp2;
|
||||
s32 checksum;
|
||||
subStruct_203B490 *temp;
|
||||
|
||||
temp2 = sub_8096EB0(mail);
|
||||
checksum = CalculateMailChecksum(mail);
|
||||
|
||||
for (index = 0; index < 0x10; index++) {
|
||||
temp = &gUnknown_203B490->unk230[index];
|
||||
if (temp->dungeon.id == mail->unk4.dungeon.id)
|
||||
if (temp->dungeon.floor == mail->unk4.dungeon.floor)
|
||||
if (temp->seed == mail->unk4.seed)
|
||||
if (temp->unk8 == temp2)
|
||||
if (temp->sub.dungeon.id == mail->unk4.dungeon.id)
|
||||
if (temp->sub.dungeon.floor == mail->unk4.dungeon.floor)
|
||||
if (temp->sub.seed == mail->unk4.seed)
|
||||
if (temp->checksum == checksum)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -83,9 +201,9 @@ u32 RestoreMailInfo(u8 *r0, u32 size)
|
||||
RestoreIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0);
|
||||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].seed, 0x18);
|
||||
RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon);
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20);
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18);
|
||||
RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].sub.dungeon);
|
||||
}
|
||||
nullsub_102(&backup);
|
||||
return backup.unk8;
|
||||
@@ -112,7 +230,7 @@ u32 SaveMailInfo(u8 *r0, u32 size)
|
||||
}
|
||||
for(index = 0; index < 0x38; index++)
|
||||
{
|
||||
if(gUnknown_203B490->PKMNNewsReceived[index] != 0)
|
||||
if(gUnknown_203B490->PKMNNewsReceived[index])
|
||||
temp = -1;
|
||||
else
|
||||
temp = 0;
|
||||
@@ -127,9 +245,9 @@ u32 SaveMailInfo(u8 *r0, u32 size)
|
||||
SaveIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0);
|
||||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].seed, 0x18);
|
||||
SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon);
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20);
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18);
|
||||
SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].sub.dungeon);
|
||||
}
|
||||
nullsub_102(&backup);
|
||||
return backup.unk8;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "constants/ability.h"
|
||||
#include "constants/dungeon_action.h"
|
||||
#include "dungeon_ai.h"
|
||||
#include "dungeon_ai_leader.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_leader.h"
|
||||
@@ -37,7 +38,6 @@ extern void sub_8071B48(void);
|
||||
extern void TriggerWeatherAbilities(void);
|
||||
extern void sub_8074094(Entity *);
|
||||
extern void sub_8071DA4(Entity *);
|
||||
extern u8 sub_8072CF4(Entity *);
|
||||
extern void TickStatusHeal(Entity *);
|
||||
|
||||
void sub_8044820(void)
|
||||
@@ -227,8 +227,8 @@ void sub_8044C10(u8 param_1)
|
||||
|
||||
if(param_1)
|
||||
{
|
||||
entityInfo->action.actionUseIndex = 0;
|
||||
entityInfo->action.unkC = 0;
|
||||
entityInfo->action.unk4[0].actionUseIndex = 0;
|
||||
entityInfo->action.unk4[1].actionUseIndex = 0;
|
||||
entityInfo->action.itemTargetPosition.x = -1;
|
||||
entityInfo->action.itemTargetPosition.y = -1;
|
||||
}
|
||||
@@ -239,8 +239,9 @@ void sub_8044C50(u16 action)
|
||||
EntityInfo * entityInfo = GetLeaderInfo();
|
||||
|
||||
entityInfo->action.action = action;
|
||||
entityInfo->action.actionUseIndex = 0;
|
||||
entityInfo->action.unkC = 0;
|
||||
entityInfo->action.unk4[0].actionUseIndex = 0;
|
||||
entityInfo->action.unk4[1].actionUseIndex = 0;
|
||||
|
||||
entityInfo->action.itemTargetPosition.x = -1;
|
||||
entityInfo->action.itemTargetPosition.y = -1;
|
||||
}
|
||||
@@ -248,15 +249,15 @@ void sub_8044C50(u16 action)
|
||||
void ClearMonsterActionFields(ActionContainer *actionPointer)
|
||||
{
|
||||
actionPointer->action = ACTION_NOTHING;
|
||||
actionPointer->actionUseIndex = 0;
|
||||
actionPointer->unkC = 0;
|
||||
actionPointer->unk4[0].actionUseIndex = 0;
|
||||
actionPointer->unk4[1].actionUseIndex = 0;
|
||||
}
|
||||
|
||||
void SetMonsterActionFields(ActionContainer *actionPointer, u16 action)
|
||||
{
|
||||
actionPointer->action = action;
|
||||
actionPointer->actionUseIndex = 0;
|
||||
actionPointer->unkC = 0;
|
||||
actionPointer->unk4[0].actionUseIndex = 0;
|
||||
actionPointer->unk4[1].actionUseIndex = 0;
|
||||
}
|
||||
|
||||
void SetActionPassTurnOrWalk(ActionContainer *actionPointer, s16 species)
|
||||
@@ -269,6 +270,6 @@ void SetActionPassTurnOrWalk(ActionContainer *actionPointer, s16 species)
|
||||
{
|
||||
actionPointer->action = ACTION_PASS_TURN;
|
||||
}
|
||||
actionPointer->actionUseIndex = 0;
|
||||
actionPointer->unkC = 0;
|
||||
actionPointer->unk4[0].actionUseIndex = 0;
|
||||
actionPointer->unk4[1].actionUseIndex = 0;
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ void DecideAttack(Entity *pokemon)
|
||||
}
|
||||
}
|
||||
}
|
||||
pokemonInfo->action.actionUseIndex = chosenMoveIndex;
|
||||
pokemonInfo->action.unk4[0].actionUseIndex = chosenMoveIndex;
|
||||
TargetTileInFront(pokemon);
|
||||
return;
|
||||
}
|
||||
@@ -316,7 +316,7 @@ void DecideAttack(Entity *pokemon)
|
||||
}
|
||||
}
|
||||
pokemonInfo->action.direction = aiPossibleMove[i].direction & DIRECTION_MASK;
|
||||
pokemonInfo->action.actionUseIndex = chosenMoveIndex;
|
||||
pokemonInfo->action.unk4[0].actionUseIndex = chosenMoveIndex;
|
||||
TargetTileInFront(pokemon);
|
||||
}
|
||||
else
|
||||
@@ -941,7 +941,7 @@ void sub_807CABC(Entity *target)
|
||||
if (counter >= sub_8070828(target, TRUE))
|
||||
break;
|
||||
entityInfo = target->info;
|
||||
sub_8055A00(target, entityInfo->action.actionUseIndex, 1, 0, 0);
|
||||
sub_8055A00(target, entityInfo->action.unk4[0].actionUseIndex, 1, 0, 0);
|
||||
if (!EntityExists(target))
|
||||
break;
|
||||
if (sub_8044B28())
|
||||
@@ -953,7 +953,7 @@ void sub_807CABC(Entity *target)
|
||||
|
||||
sub_8057588(target, 1);
|
||||
if (EntityExists(target))
|
||||
sub_806A9B4(target, target->info->action.actionUseIndex);
|
||||
sub_806A9B4(target, target->info->action.unk4[0].actionUseIndex);
|
||||
|
||||
sub_806A1B0(target);
|
||||
}
|
||||
@@ -1316,4 +1316,4 @@ void sub_807CB3C(Entity *pokemon)
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
#endif // NONMATCHING
|
||||
|
||||
@@ -40,7 +40,7 @@ extern u32 gPotentialItemTargetDirections[NUM_DIRECTIONS];
|
||||
extern bool8 gTargetAhead[NUM_DIRECTIONS];
|
||||
extern TeamInventory *gTeamInventoryRef;
|
||||
|
||||
void sub_807360C(Entity *pokemon)
|
||||
void sub_807360C(void)
|
||||
{
|
||||
s32 index;
|
||||
Entity *entity;
|
||||
@@ -94,9 +94,9 @@ void DecideUseItem(Entity *pokemon)
|
||||
if (DungeonRandOutcome(gPotentialItemTargetWeights[targetIndex]))
|
||||
{
|
||||
SetMonsterActionFields(&pokemonInfo->action, ACTION_THROW_ITEM_AI);
|
||||
pokemonInfo->action.actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.unk4[0].actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.direction = gPotentialItemTargetDirections[targetIndex] & DIRECTION_MASK;
|
||||
break;
|
||||
}
|
||||
@@ -118,9 +118,9 @@ void DecideUseItem(Entity *pokemon)
|
||||
{
|
||||
u32 chosenTargetIndex = DungeonRandInt(gNumPotentialTargets);
|
||||
SetMonsterActionFields(&pokemonInfo->action, ACTION_THROW_ITEM_AI);
|
||||
pokemonInfo->action.actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.unk4[0].actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.direction = GetDirectionTowardsPosition(&pokemon->pos, &potentialTargetPositions[chosenTargetIndex]) & DIRECTION_MASK;
|
||||
pokemonInfo->action.itemTargetPosition = potentialTargetPositions[chosenTargetIndex];
|
||||
}
|
||||
@@ -131,9 +131,9 @@ void DecideUseItem(Entity *pokemon)
|
||||
if (itemTypeCompare < CATEGORY_HELD_ITEMS - 2)
|
||||
{
|
||||
SetMonsterActionFields(&pokemonInfo->action, ACTION_EAT_AI);
|
||||
pokemonInfo->action.actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.unk4[0].actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.y = pokemon->pos.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -203,9 +203,9 @@ void DecideUseItem(Entity *pokemon)
|
||||
{
|
||||
SetMonsterActionFields(&pokemonInfo->action, ACTION_EAT_AI);
|
||||
}
|
||||
pokemonInfo->action.actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.unk4[0].actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.y = pokemon->pos.y;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -237,9 +237,9 @@ void DecideUseItem(Entity *pokemon)
|
||||
{
|
||||
u32 chosenTargetIndex = DungeonRandInt(gNumPotentialTargets);
|
||||
SetMonsterActionFields(&pokemonInfo->action, ACTION_THROW_ITEM_AI);
|
||||
pokemonInfo->action.actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.unk4[0].actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.direction = GetDirectionTowardsPosition(&pokemon->pos, &potentialTargetPositions[chosenTargetIndex]) & DIRECTION_MASK;
|
||||
pokemonInfo->action.itemTargetPosition = potentialTargetPositions[chosenTargetIndex];
|
||||
return;
|
||||
@@ -254,9 +254,9 @@ void DecideUseItem(Entity *pokemon)
|
||||
if (DungeonRandOutcome(potentialTargetWeights[targetIndex]))
|
||||
{
|
||||
SetMonsterActionFields(&pokemonInfo->action, ACTION_THROW_ITEM_AI);
|
||||
pokemonInfo->action.actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.unk4[0].actionUseIndex = selectedToolboxIndex;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.x = pokemon->pos.x;
|
||||
pokemonInfo->action.unk4[0].lastItemThrowPosition.y = pokemon->pos.y;
|
||||
pokemonInfo->action.direction = gPotentialItemTargetDirections[targetIndex] & DIRECTION_MASK;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,89 @@
|
||||
#include "global.h"
|
||||
#include "dungeon_ai_leader.h"
|
||||
|
||||
#include "constants/dungeon.h"
|
||||
#include "constants/item.h"
|
||||
#include "constants/iq_skill.h"
|
||||
#include "constants/move_id.h"
|
||||
#include "constants/status.h"
|
||||
#include "constants/targeting.h"
|
||||
#include "constants/dungeon_action.h"
|
||||
#include "code_80521D0.h"
|
||||
#include "dungeon_ai_targeting.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_leader.h"
|
||||
#include "dungeon_visibility.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_capabilities.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "dungeon_movement.h"
|
||||
#include "charge_move.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "code_8077274_1.h"
|
||||
|
||||
extern u8 gUnknown_202F221;
|
||||
extern u8 gUnknown_202F222;
|
||||
extern u8 gUnknown_202F32C;
|
||||
extern u8 gUnknown_202F32D;
|
||||
extern u8 gUnknown_203B434;
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
|
||||
extern u8 *gUnknown_80FA5B4[];
|
||||
extern u8 *gUnknown_80FE478[];
|
||||
extern u8 *gUnknown_80FD2CC[];
|
||||
extern u8 gUnknown_80F58F4[NUM_DUNGEON_ACTIONS][2];
|
||||
extern u8 *gUnknown_80FE6D4[];
|
||||
|
||||
void sub_8075BA4(Entity *param_1, u8 param_2);
|
||||
void sub_804178C(u8 param_1);
|
||||
void nullsub_95(Entity *);
|
||||
bool8 IsNotAttacking(Entity *, bool8);
|
||||
extern void sub_80671A0(Entity *);
|
||||
extern void sub_8067110(Entity *);
|
||||
void sub_807CABC(Entity *target);
|
||||
void sub_8041888(u8 param_1);
|
||||
void sub_8085140(void);
|
||||
void sub_807360C(void);
|
||||
void sub_805EFB4(Entity *, u8);
|
||||
void sub_8074FB0(Entity *, u8, Position *);
|
||||
extern void SetMessageArgument(u8 *buffer, Entity *r1, u32);
|
||||
|
||||
void sub_8066D04(Entity *);
|
||||
void sub_8066744(Entity *);
|
||||
void sub_8066E14(Entity * );
|
||||
void sub_807348C(void);
|
||||
void sub_80732F0(void);
|
||||
void sub_807FD84(Entity *);
|
||||
void sub_8066BD4(Entity*);
|
||||
void sub_8067510(Entity *);
|
||||
void sub_8067884(Entity *);
|
||||
void sub_804267C(void);
|
||||
void sub_807CB3C(Entity *);
|
||||
void sub_8067904(Entity *, u32);
|
||||
void sub_80668D0(Entity *);
|
||||
void sub_8066AC0(Entity *);
|
||||
void sub_8066CF0(Entity *);
|
||||
void sub_8066FA4(Entity *);
|
||||
void sub_806675C(Entity *,bool8);
|
||||
void sub_806684C(Entity *,bool8);
|
||||
void sub_807FE9C(Entity *,Position *,u32,u32);
|
||||
extern u8 sub_8044B28(void);
|
||||
extern u8 UseAttack(Entity *);
|
||||
void sub_8052740(u32);
|
||||
void sub_806A1E8(Entity *pokemon);
|
||||
extern void sub_803E46C(u32);
|
||||
extern void sub_80694C0(Entity *, s32, s32, u32);
|
||||
bool8 sub_804AE08(Position *pos);
|
||||
void sub_8073D08(Entity *pokemon);
|
||||
void sub_8073CFC(Entity *pokemon);
|
||||
void sub_8073CF0(Entity *pokemon);
|
||||
bool8 sub_8044B84(void);
|
||||
void sub_8046D20(void);
|
||||
extern void sub_8074094(Entity *);
|
||||
extern void sub_8071DA4(Entity *);
|
||||
extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3);
|
||||
u32 sub_8075818(Entity *entity);
|
||||
|
||||
bool8 TargetLeader(Entity *pokemon)
|
||||
{
|
||||
@@ -33,3 +109,268 @@ Entity* GetLeaderIfVisible(Entity *pokemon)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool8 sub_8072CF4(Entity *entity)
|
||||
{
|
||||
bool8 bVar4;
|
||||
bool8 bVar5;
|
||||
Move *move;
|
||||
s32 index;
|
||||
EntityInfo *info;
|
||||
bool8 bVar14;
|
||||
Position PStack_24;
|
||||
Position pos1;
|
||||
|
||||
sub_804178C(1);
|
||||
gUnknown_203B434 = 1;
|
||||
info = entity->info;
|
||||
info->useHeldItem = FALSE;
|
||||
info->fillF3 = 0;
|
||||
gDungeon->unkB8 = entity;
|
||||
if (gUnknown_80F58F4[(info->action).action][0] != 0) {
|
||||
if (info->isTeamLeader) {
|
||||
sub_805EFB4(entity,gUnknown_80F58F4[(info->action).action][1]);
|
||||
}
|
||||
else {
|
||||
sub_8075BA4(entity,gUnknown_80F58F4[(info->action).action][1]);
|
||||
}
|
||||
}
|
||||
if ((CannotAttack(entity, FALSE)) && (IsCharging(entity, TRUE))) {
|
||||
sub_8079764(entity);
|
||||
}
|
||||
|
||||
for(index = 0; index < MAX_MON_MOVES; index++)
|
||||
{
|
||||
move = &info->moves[index];
|
||||
if ((move->moveFlags & MOVE_FLAG_EXISTS)) {
|
||||
move->moveFlags2 &= ~(MOVE_FLAG2_UNK4);
|
||||
}
|
||||
}
|
||||
if (!IsNotAttacking(entity, FALSE)) {
|
||||
if (UseAttack(entity)) {
|
||||
if (sub_8044B28()) {
|
||||
return FALSE;
|
||||
}
|
||||
if (!EntityExists(entity)) {
|
||||
return FALSE;
|
||||
}
|
||||
if (gUnknown_202F32D != 0) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
if (!info->isTeamLeader) {
|
||||
sub_8052740(10);
|
||||
}
|
||||
sub_806A1E8(entity);
|
||||
sub_803E46C(10);
|
||||
}
|
||||
if (((ACTION_PASS_TURN < info->action.action) && (info->action.action != 4)) && (info->action.action != ACTION_WALK)) {
|
||||
info->attacking = TRUE;
|
||||
}
|
||||
bVar14 = FALSE;
|
||||
info->unk14A = 0;
|
||||
gUnknown_202F221 = 0;
|
||||
gUnknown_202F222 = 0;
|
||||
switch(info->action.action) {
|
||||
case ACTION_WALK:
|
||||
if(info->immobilizeStatus == STATUS_SHADOW_HOLD)
|
||||
{
|
||||
goto _282;
|
||||
}
|
||||
else if(info->immobilizeStatus == STATUS_CONSTRICTION)
|
||||
{
|
||||
goto _282;
|
||||
}
|
||||
else if(info->immobilizeStatus == STATUS_INGRAIN)
|
||||
{
|
||||
goto _282;
|
||||
}
|
||||
else if(info->immobilizeStatus == STATUS_WRAP)
|
||||
{
|
||||
goto _282;
|
||||
}
|
||||
else if(info->immobilizeStatus == STATUS_WRAPPED)
|
||||
{
|
||||
_282:
|
||||
info->action.action = ACTION_NOTHING;
|
||||
info->waiting = TRUE;
|
||||
}
|
||||
else {
|
||||
bVar5 = FALSE;
|
||||
pos1.x = (entity->pos).x + gAdjacentTileOffsets[(info->action).direction].x;
|
||||
pos1.y = (entity->pos).y + gAdjacentTileOffsets[(info->action).direction].y;
|
||||
if ((!(info->flags & MOVEMENT_FLAG_SWAPPING_PLACES_PETRIFIED_ALLY)) &&
|
||||
(!CanMoveInDirection(entity,(info->action).direction))) {
|
||||
bVar5 = TRUE;
|
||||
}
|
||||
if (bVar5) {
|
||||
info->action.action = ACTION_NOTHING;
|
||||
info->waiting = TRUE;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
PStack_24.x = entity->pos.x;
|
||||
PStack_24.y = entity->pos.y;
|
||||
sub_80694C0(entity,pos1.x,pos1.y,0);
|
||||
sub_8074FB0(entity,(info->action).direction,&PStack_24);
|
||||
if (((IQSkillIsEnabled(entity, IQ_SUPER_MOBILE)) && (info->transformStatus != STATUS_MOBILE)) &&
|
||||
(!HasHeldItem(entity,ITEM_MOBILE_SCARF))) {
|
||||
sub_804AE08(&entity->pos);
|
||||
}
|
||||
bVar14 = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ACTION_USE_MOVE_AI:
|
||||
sub_807CABC(entity);
|
||||
break;
|
||||
case ACTION_STAIRS:
|
||||
if ((gDungeon->dungeonLocation.id == DUNGEON_METEOR_CAVE) && (!gDungeon->deoxysDefeat)) {
|
||||
SendMessage(entity,*gUnknown_80FA5B4); // It's impossible to go down the stairs now!
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_804267C();
|
||||
gDungeon->unk2 = 1;
|
||||
gUnknown_202F32C = (info->action).direction;
|
||||
}
|
||||
break;
|
||||
case ACTION_EAT_BERRY_SEED_DRINK:
|
||||
case 0xe:
|
||||
case ACTION_USE_TM:
|
||||
sub_8067110(entity);
|
||||
break;
|
||||
case ACTION_USE_ORB:
|
||||
sub_807CB3C(entity);
|
||||
break;
|
||||
case ACTION_PICK_UP_PLAYER:
|
||||
sub_8066744(entity);
|
||||
break;
|
||||
case ACTION_GIVE_ITEM:
|
||||
sub_80668D0(entity);
|
||||
break;
|
||||
case ACTION_TAKE_ITEM:
|
||||
sub_8066AC0(entity);
|
||||
break;
|
||||
case 0x3e:
|
||||
sub_8066BD4(entity); // ITEM_SWITCH_TOOLBOX (When you switch item in Toolbox)
|
||||
break;
|
||||
case ACTION_USE_ITEM:
|
||||
sub_8066CF0(entity);
|
||||
break;
|
||||
case ACTION_SET_ITEM:
|
||||
sub_806675C(entity, TRUE);
|
||||
break;
|
||||
case ACTION_UNSET_ITEM:
|
||||
sub_806684C(entity, TRUE);
|
||||
break;
|
||||
case 0x3b:
|
||||
gDungeon->unkBC = gDungeon->teamPokemon[(info->action).unk4[0].actionUseIndex];
|
||||
break;
|
||||
case ACTION_PLACE_ITEM:
|
||||
sub_8066D04(entity);
|
||||
break;
|
||||
case 10: // Switch with Item on Ground
|
||||
sub_8066E14(entity);
|
||||
break;
|
||||
case 0x3a: // Switch with Item on Ground (also??)
|
||||
sub_8066FA4(entity);
|
||||
break;
|
||||
case ACTION_THROW_ITEM_PLAYER:
|
||||
case ACTION_THROW_STRAIGHT_PLAYER:
|
||||
case ACTION_THROW_ARC_PLAYER:
|
||||
if (ToolboxEnabled(info)) {
|
||||
nullsub_95(entity);
|
||||
sub_80671A0(entity);
|
||||
break;
|
||||
}
|
||||
SetMessageArgument(gAvailablePokemonNames,entity,0);
|
||||
SendMessage(entity,*gUnknown_80FE6D4);
|
||||
break;
|
||||
case ACTION_TALK_FIELD:
|
||||
sub_8067510(entity);
|
||||
break;
|
||||
case ACTION_USE_MOVE_PLAYER:
|
||||
sub_8067884(entity);
|
||||
break;
|
||||
case ACTION_STRUGGLE:
|
||||
sub_8067904(entity, MOVE_STRUGGLE);
|
||||
break;
|
||||
case ACTION_REGULAR_ATTACK:
|
||||
sub_8067904(entity, MOVE_REGULAR_ATTACK);
|
||||
break;
|
||||
case 0x25:
|
||||
sub_807FE9C(entity,&entity->pos,0,0);
|
||||
break;
|
||||
case ACTION_PICK_UP_AI:
|
||||
sub_8073D08(entity);
|
||||
break;
|
||||
case ACTION_EAT_AI:
|
||||
sub_8073CF0(entity);
|
||||
break;
|
||||
case ACTION_THROW_ITEM_AI:
|
||||
sub_8073CFC(entity);
|
||||
break;
|
||||
case ACTION_SECOND_THOUGHTS:
|
||||
SetMessageArgument(gAvailablePokemonNames,entity,0);
|
||||
SendMessage(entity,*gUnknown_80FE478);
|
||||
break;
|
||||
default:
|
||||
info->action.action = ACTION_PASS_TURN;
|
||||
break;
|
||||
}
|
||||
sub_807FD84(entity);
|
||||
if (EntityExists(entity)) {
|
||||
if (entity->info->unk14A == 0) {
|
||||
entity->info->unk14A = 0;
|
||||
sub_8079764(entity);
|
||||
}
|
||||
sub_8041888(0);
|
||||
if (EntityExists(entity)) {
|
||||
sub_8085140();
|
||||
if (info->unk14B != 0) {
|
||||
bVar4 = FALSE;
|
||||
info->unk14B = 0;
|
||||
|
||||
for(index = 0; index < MAX_MON_MOVES; index++)
|
||||
{
|
||||
move = &info->moves[index];
|
||||
if ((info->moves[index].moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags & MOVE_FLAG_LAST_USED)) {
|
||||
move->PP = 0;
|
||||
bVar4 = TRUE;
|
||||
}
|
||||
}
|
||||
if (bVar4) {
|
||||
SendMessage(entity,*gUnknown_80FD2CC);
|
||||
}
|
||||
}
|
||||
sub_807360C();
|
||||
if (!sub_8044B84()) {
|
||||
sub_807348C();
|
||||
sub_80732F0();
|
||||
if (!EntityExists(entity)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
if (bVar14) {
|
||||
sub_8075818(entity);
|
||||
}
|
||||
if (EntityExists(entity)) {
|
||||
if (!sub_8044B84()) {
|
||||
sub_8046D20();
|
||||
}
|
||||
sub_8041888(0);
|
||||
if (((EntityExists(entity)) && (!info->aiNextToTarget)) && (!bVar14)) {
|
||||
if (sub_80706A4(entity,&entity->pos) != '\0') {
|
||||
sub_807D148(entity,entity,0,0);
|
||||
}
|
||||
sub_8074094(entity);
|
||||
sub_8071DA4(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "constants/dungeon.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_ai.h"
|
||||
#include "dungeon_ai_leader.h"
|
||||
#include "dungeon_leader.h"
|
||||
#include "dungeon_movement.h"
|
||||
#include "dungeon_util.h"
|
||||
@@ -17,7 +18,6 @@ extern void sub_8044574(void);
|
||||
extern void sub_8044820(void);
|
||||
extern void sub_8044AB4(void);
|
||||
extern u8 UseAttack(u32);
|
||||
extern u8 sub_8072CF4(Entity *);
|
||||
extern void TickStatusHeal(Entity *);
|
||||
extern void sub_8086AC0(void);
|
||||
extern void sub_8043ED0(u32);
|
||||
|
||||
@@ -188,7 +188,7 @@ void sub_804535C(Entity *entity, Position32 *pos)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8045394(Entity *entity, s32 x, s32 y)
|
||||
void SetEntityPixelPos(Entity *entity, s32 x, s32 y)
|
||||
{
|
||||
entity->pixelPos.x = x;
|
||||
entity->pixelPos.y = y;
|
||||
|
||||
@@ -19,8 +19,8 @@ extern void sub_803F878(s32, s32);
|
||||
extern void sub_803E46C(u32);
|
||||
extern void sub_803E708(u32, u32);
|
||||
|
||||
extern void sub_8068FE0(Entity *, u32, u8 *);
|
||||
extern void sub_80457DC(u8 *);
|
||||
extern void sub_8068FE0(Entity *, u32, Entity*);
|
||||
extern void sub_80457DC(Entity *);
|
||||
extern void sub_80861D4(Entity *, u32, s32 direction);
|
||||
extern void sub_80694C0(Entity *, s32, s32, u32);
|
||||
|
||||
@@ -199,14 +199,14 @@ void sub_8085764(void)
|
||||
{
|
||||
Entity *entity;
|
||||
s32 index;
|
||||
u8 auStack128 [116];
|
||||
Entity stackEntity;
|
||||
|
||||
sub_80457DC(auStack128);
|
||||
sub_80457DC(&stackEntity);
|
||||
for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++)
|
||||
{
|
||||
entity = gDungeon->wildPokemon[index];
|
||||
if ((EntityExists(entity)) && (entity->info->clientType == CLIENT_TYPE_PARTNER)) {
|
||||
sub_8068FE0(entity,0x207,auStack128);
|
||||
sub_8068FE0(entity,0x207,&stackEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +84,6 @@ extern void sub_802E088(u32);
|
||||
extern void CreateMailboxMenu(void);
|
||||
extern void CreateMailActionMenu(void);
|
||||
extern void CreateMailAcceptedStatusBox(u32);
|
||||
extern void ReceivePKMNNews(u8);
|
||||
extern void sub_8096078(void);
|
||||
|
||||
u32 sub_802DFB0(void)
|
||||
@@ -420,7 +419,7 @@ void HandleMailActionMenu(void)
|
||||
PlaySound(0x133);
|
||||
AcceptJob(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex));
|
||||
sub_8096C80();
|
||||
sub_8096D24();
|
||||
SortJobSlots();
|
||||
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
|
||||
sub_8096078();
|
||||
if(HasNoMailinMailbox())
|
||||
|
||||
@@ -1009,10 +1009,8 @@ s32 sub_8013800(MenuInputStruct *param_1, s32 param_2)
|
||||
|
||||
iVar2 = param_1->unk6;
|
||||
iVar1 = param_2 * param_1->unk10;
|
||||
if (iVar1 < 0)
|
||||
iVar1 = iVar1 + 0xff;
|
||||
|
||||
return iVar2 + (iVar1 >> 8);
|
||||
return iVar2 + (iVar1 / 256);
|
||||
}
|
||||
|
||||
void sub_8013818(MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4)
|
||||
@@ -1279,10 +1277,10 @@ u32 sub_8013BBC(unkStructFor8013AA0 *a0)
|
||||
return 1;
|
||||
|
||||
switch (sub_8012AE8()) {
|
||||
case 2:
|
||||
case INPUT_B_BUTTON:
|
||||
PlayMenuSoundEffect(1);
|
||||
return 2;
|
||||
case 1:
|
||||
case INPUT_A_BUTTON:
|
||||
PlayMenuSoundEffect(0);
|
||||
return 3;
|
||||
}
|
||||
@@ -1322,10 +1320,10 @@ void sub_8013D10(unkStructFor8013AA0 *a0)
|
||||
uVar4 = a0->unk24;
|
||||
|
||||
switch (sub_8012AE8()) {
|
||||
case 9:
|
||||
case INPUT_DPAD_LEFT:
|
||||
uVar4 = a0->unk24 < a0->unk25 - 1 ? a0->unk24 + 1 : 0;
|
||||
break;
|
||||
case 10:
|
||||
case INPUT_DPAD_RIGHT:
|
||||
uVar4 = a0->unk24 == 0 ? a0->unk25 - 1 : a0->unk24 - 1;
|
||||
break;
|
||||
}
|
||||
@@ -1358,7 +1356,7 @@ static bool8 sub_8013DD0(unkStructFor8013AA0 *a0)
|
||||
s32 iVar2;
|
||||
|
||||
switch (sub_8012AE8()) {
|
||||
case 7:
|
||||
case INPUT_DPAD_UP:
|
||||
if (a0->unk0 == a0->unkC) {
|
||||
PlayMenuSoundEffect(2);
|
||||
return FALSE;
|
||||
@@ -1372,7 +1370,7 @@ static bool8 sub_8013DD0(unkStructFor8013AA0 *a0)
|
||||
else
|
||||
a0->unk0 = iVar2;
|
||||
return TRUE;
|
||||
case 8:
|
||||
case INPUT_DPAD_DOWN:
|
||||
if (a0->unk0 == a0->unk8) {
|
||||
PlayMenuSoundEffect(2);
|
||||
return FALSE;
|
||||
@@ -1389,4 +1387,4 @@ static bool8 sub_8013DD0(unkStructFor8013AA0 *a0)
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,7 +387,7 @@ void sub_802EDBC(void)
|
||||
default:
|
||||
AcceptJob(mail);
|
||||
sub_8096C80();
|
||||
sub_8096D24();
|
||||
SortJobSlots();
|
||||
if(HasNoPelipperBoardJobs())
|
||||
{
|
||||
sub_802C2D4();
|
||||
|
||||
@@ -36,7 +36,6 @@ extern int sprintf(char *, const char *, ...);
|
||||
extern u32 ReturnIntFromChar(u8 r0);
|
||||
extern void sub_80943A0(void*, s32);
|
||||
extern void xxx_pokemon2_to_pokemonstruct_808DF44(PokemonStruct1*, PokemonStruct2*);
|
||||
extern const u8 *DecompressMoveID(const u8 *a1, u16 *a2);
|
||||
|
||||
extern u8 GetBodySize(s16 index);
|
||||
|
||||
@@ -966,13 +965,13 @@ s32 GetEvolutionSequence(PokemonStruct1* pokemon, struct EvolveStage* a2)
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 sub_808E400(s32 _species, s16* _a2, s32 _a3, s32 _a4)
|
||||
s32 sub_808E400(s32 _species, s16* _a2, bool32 bodySizeCheck, bool32 shedinjaCheck)
|
||||
{
|
||||
// this is horrible
|
||||
s32 i;
|
||||
register s32 species asm("r9") = (s16)_species;
|
||||
s32 a3 = (u8)_a3;
|
||||
s32 a4 = (u8)_a4;
|
||||
bool32 bodySizeCheck_bool32 = (bool8)bodySizeCheck;
|
||||
bool32 shedinjaCheck_bool32 = (bool8)shedinjaCheck;
|
||||
s32 count = 0;
|
||||
register s16* a2 asm("r6");
|
||||
i = 1;
|
||||
@@ -982,10 +981,10 @@ s32 sub_808E400(s32 _species, s16* _a2, s32 _a3, s32 _a4)
|
||||
if (species != GetPokemonEvolveFrom(i)) {
|
||||
continue;
|
||||
}
|
||||
if (!a3 && (GetBodySize(species) != GetBodySize(i))) {
|
||||
if (!bodySizeCheck_bool32 && (GetBodySize(species) != GetBodySize(i))) {
|
||||
continue;
|
||||
}
|
||||
if (!a4 && ((s16)i == MONSTER_SHEDINJA)) {
|
||||
if (!shedinjaCheck_bool32 && ((s16)i == MONSTER_SHEDINJA)) {
|
||||
continue;
|
||||
}
|
||||
*a2++ = current;
|
||||
|
||||
@@ -175,7 +175,7 @@ bool8 sub_80701A4(Entity *pokemon)
|
||||
(pokemonInfo->chargingStatusMoveIndex == index)) {
|
||||
SetMonsterActionFields(&pokemonInfo->action, ACTION_USE_MOVE_PLAYER);
|
||||
index_1 = index;
|
||||
r7 = &pokemonInfo->action.unkC;
|
||||
r7 = &pokemonInfo->action.unk4[1].actionUseIndex;
|
||||
if((index > 0) && (move->moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
|
||||
{
|
||||
do {
|
||||
|
||||
@@ -209,7 +209,7 @@ static void sub_802D2A8(void)
|
||||
sUnknown_203B2F8->wonderMailAccepted = TRUE;
|
||||
AcceptJob(&sUnknown_203B2F8->mail->wonderMail);
|
||||
sub_8096C80();
|
||||
sub_8096D24();
|
||||
SortJobSlots();
|
||||
|
||||
if (sUnknown_203B2F8->mail->wonderMail.unk2 == 4) {
|
||||
MemoryCopy8(sub_8096DD8(), sUnknown_203B2F8->mail->unk14, 40);
|
||||
@@ -577,4 +577,4 @@ static bool8 sub_802DADC(void)
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user