Merge pull request #169 from SethBarberee/nov_2023

Nov 2023
This commit is contained in:
Seth Barberee
2023-12-10 13:46:58 -08:00
committed by GitHub
53 changed files with 8659 additions and 10268 deletions

File diff suppressed because it is too large Load Diff

3777
asm/code_80140DC.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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}

View File

@@ -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]

View File

@@ -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

View File

@@ -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

File diff suppressed because it is too large Load Diff

3146
asm/code_8066D04.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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}

View File

@@ -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

View File

@@ -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]

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -5,5 +5,6 @@
bool8 TargetLeader(Entity *pokemon);
Entity* GetLeaderIfVisible(Entity *pokemon);
bool8 sub_8072CF4(Entity *entity);
#endif

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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);
// }

View File

@@ -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);
}
}

View File

@@ -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
View 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 = &param_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;
}
}

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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
View 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(&param_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
View 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
View 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);
}
}
}

View File

@@ -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)
{}

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);
}
}
}

View File

@@ -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())

View File

@@ -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;
}
}
}

View File

@@ -387,7 +387,7 @@ void sub_802EDBC(void)
default:
AcceptJob(mail);
sub_8096C80();
sub_8096D24();
SortJobSlots();
if(HasNoPelipperBoardJobs())
{
sub_802C2D4();

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;
}
}