mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-20 22:17:18 -05:00
sub_8044124
This commit is contained in:
parent
854680fe7f
commit
8b7e2e324e
|
|
@ -6,654 +6,4 @@
|
|||
.text
|
||||
|
||||
|
||||
thumb_func_start sub_8043CD8
|
||||
sub_8043CD8:
|
||||
push {lr}
|
||||
bl vram_related_8009804
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8043CD8
|
||||
|
||||
thumb_func_start sub_8043CE4
|
||||
sub_8043CE4:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldr r0, _08043CF4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08043CF8
|
||||
movs r0, 0x1
|
||||
b _08043D08
|
||||
.align 2, 0
|
||||
_08043CF4: .4byte gUnknown_202F1A8
|
||||
_08043CF8:
|
||||
movs r2, 0
|
||||
ldr r0, _08043D0C
|
||||
adds r0, r1, r0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x2
|
||||
bne _08043D06
|
||||
movs r2, 0x1
|
||||
_08043D06:
|
||||
adds r0, r2, 0
|
||||
_08043D08:
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_08043D0C: .4byte gDungeonWaterType
|
||||
thumb_func_end sub_8043CE4
|
||||
|
||||
thumb_func_start sub_8043D10
|
||||
sub_8043D10:
|
||||
push {lr}
|
||||
ldr r0, _08043D38
|
||||
ldr r1, [r0]
|
||||
movs r2, 0xCF
|
||||
lsls r2, 3
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
bne _08043D3C
|
||||
subs r2, 0x2B
|
||||
adds r0, r1, r2
|
||||
subs r2, 0x8
|
||||
adds r1, r2
|
||||
ldrb r0, [r0]
|
||||
ldrb r1, [r1]
|
||||
cmp r0, r1
|
||||
bne _08043D3C
|
||||
movs r0, 0x2
|
||||
b _08043D4C
|
||||
.align 2, 0
|
||||
_08043D38: .4byte gDungeon
|
||||
_08043D3C:
|
||||
bl IsBossFight
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08043D4A
|
||||
movs r0, 0
|
||||
b _08043D4C
|
||||
_08043D4A:
|
||||
movs r0, 0x1
|
||||
_08043D4C:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8043D10
|
||||
|
||||
thumb_func_start sub_8043D50
|
||||
sub_8043D50:
|
||||
ldr r2, _08043D5C
|
||||
str r2, [r1]
|
||||
movs r1, 0x90
|
||||
lsls r1, 7
|
||||
str r1, [r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08043D5C: .4byte 0x0001cedc
|
||||
thumb_func_end sub_8043D50
|
||||
|
||||
thumb_func_start sub_8043D60
|
||||
sub_8043D60:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r9
|
||||
mov r6, r8
|
||||
push {r6,r7}
|
||||
movs r5, 0
|
||||
_08043D6A:
|
||||
ldr r0, _08043DA4
|
||||
ldr r0, [r0]
|
||||
lsls r1, r5, 2
|
||||
ldr r2, _08043DA8
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08043DCE
|
||||
ldr r2, [r4, 0x70]
|
||||
movs r1, 0x1
|
||||
ldrb r0, [r2, 0x8]
|
||||
eors r0, r1
|
||||
negs r1, r0
|
||||
orrs r1, r0
|
||||
lsrs r1, 31
|
||||
adds r0, r2, 0
|
||||
adds r0, 0x40
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x4A
|
||||
beq _08043DA0
|
||||
cmp r0, 0x47
|
||||
bne _08043DAC
|
||||
_08043DA0:
|
||||
movs r0, 0x1
|
||||
b _08043DAE
|
||||
.align 2, 0
|
||||
_08043DA4: .4byte gDungeon
|
||||
_08043DA8: .4byte 0x0001358c
|
||||
_08043DAC:
|
||||
movs r0, 0
|
||||
_08043DAE:
|
||||
cmp r0, 0
|
||||
beq _08043DB4
|
||||
movs r1, 0
|
||||
_08043DB4:
|
||||
adds r0, r2, 0
|
||||
adds r0, 0xA4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
bne _08043DC0
|
||||
movs r1, 0
|
||||
_08043DC0:
|
||||
cmp r1, 0
|
||||
beq _08043DCE
|
||||
adds r0, r4, 0
|
||||
ldr r1, _08043EC0
|
||||
adds r2, r4, 0
|
||||
bl sub_8068FE0
|
||||
_08043DCE:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0xF
|
||||
ble _08043D6A
|
||||
movs r5, 0
|
||||
ldr r0, _08043EC4
|
||||
mov r9, r0
|
||||
mov r8, r5
|
||||
_08043DDC:
|
||||
mov r1, r9
|
||||
ldr r0, [r1]
|
||||
lsls r1, r5, 2
|
||||
ldr r2, _08043EC8
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
adds r7, r5, 0x1
|
||||
cmp r0, 0
|
||||
beq _08043E62
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x22
|
||||
mov r1, r8
|
||||
strb r1, [r0]
|
||||
adds r1, r4, 0
|
||||
adds r1, 0x20
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r4, [r4, 0x70]
|
||||
ldrh r0, [r4, 0x10]
|
||||
strh r0, [r4, 0xE]
|
||||
movs r2, 0x9E
|
||||
lsls r2, 1
|
||||
adds r1, r4, r2
|
||||
adds r2, 0x4
|
||||
adds r0, r4, r2
|
||||
ldr r0, [r0]
|
||||
str r0, [r1]
|
||||
mov r1, r9
|
||||
ldr r0, [r1]
|
||||
ldr r2, _08043ECC
|
||||
adds r0, r2
|
||||
mov r1, r8
|
||||
strb r1, [r0]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_806BFC0
|
||||
ldrh r0, [r4, 0x2]
|
||||
strh r0, [r4, 0x4]
|
||||
adds r0, r4, 0
|
||||
adds r0, 0xFD
|
||||
mov r2, r8
|
||||
strb r2, [r0]
|
||||
movs r0, 0x8C
|
||||
lsls r0, 1
|
||||
adds r5, r4, r0
|
||||
adds r4, r5, 0
|
||||
movs r6, 0x3
|
||||
_08043E46:
|
||||
ldrb r1, [r4]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08043E58
|
||||
adds r0, r5, 0
|
||||
bl GetMoveBasePP
|
||||
strb r0, [r4, 0x4]
|
||||
_08043E58:
|
||||
adds r4, 0x8
|
||||
adds r5, 0x8
|
||||
subs r6, 0x1
|
||||
cmp r6, 0
|
||||
bge _08043E46
|
||||
_08043E62:
|
||||
adds r5, r7, 0
|
||||
cmp r5, 0x3
|
||||
ble _08043DDC
|
||||
movs r6, 0
|
||||
_08043E6A:
|
||||
movs r5, 0
|
||||
adds r7, r6, 0x1
|
||||
_08043E6E:
|
||||
adds r0, r5, 0
|
||||
adds r1, r6, 0
|
||||
bl GetTileSafe
|
||||
ldr r4, [r0, 0x14]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08043EA0
|
||||
adds r0, r4, 0
|
||||
bl GetEntityType
|
||||
cmp r0, 0x2
|
||||
bne _08043EA0
|
||||
adds r0, r4, 0
|
||||
bl GetTrapData
|
||||
adds r1, r0, 0
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0x1B
|
||||
bne _08043EA0
|
||||
movs r0, 0x5
|
||||
strb r0, [r1]
|
||||
_08043EA0:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x37
|
||||
ble _08043E6E
|
||||
adds r6, r7, 0
|
||||
cmp r6, 0x1F
|
||||
ble _08043E6A
|
||||
movs r0, 0x2
|
||||
bl sub_8046F84
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08043EC0: .4byte 0x00000207
|
||||
_08043EC4: .4byte gDungeon
|
||||
_08043EC8: .4byte 0x0001357c
|
||||
_08043ECC: .4byte 0x00000676
|
||||
thumb_func_end sub_8043D60
|
||||
|
||||
thumb_func_start sub_8043ED0
|
||||
sub_8043ED0:
|
||||
push {r4-r7,lr}
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
movs r7, 0
|
||||
cmp r5, 0
|
||||
bne _08043EEA
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08043EEA
|
||||
movs r0, 0
|
||||
b _08043FB8
|
||||
_08043EEA:
|
||||
ldr r6, _08043F2C
|
||||
ldr r0, [r6]
|
||||
ldrb r0, [r0, 0x10]
|
||||
cmp r0, 0x1
|
||||
bne _08043F40
|
||||
bl GetLeader
|
||||
adds r4, r0, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08043FB6
|
||||
cmp r5, 0
|
||||
bne _08043F20
|
||||
ldr r0, _08043F30
|
||||
ldr r1, [r6]
|
||||
ldr r2, _08043F34
|
||||
adds r1, r2
|
||||
bl strcpy
|
||||
ldr r0, _08043F38
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl PrintFieldMessage
|
||||
_08043F20:
|
||||
adds r0, r4, 0
|
||||
bl sub_8042B0C
|
||||
ldr r1, _08043F3C
|
||||
b _08043FAC
|
||||
.align 2, 0
|
||||
_08043F2C: .4byte gDungeon
|
||||
_08043F30: .4byte gAvailablePokemonNames
|
||||
_08043F34: .4byte 0x000005f4
|
||||
_08043F38: .4byte gUnknown_80F89B4
|
||||
_08043F3C: .4byte 0x0000021f
|
||||
_08043F40:
|
||||
cmp r0, 0x2
|
||||
bne _08043F74
|
||||
bl GetLeader
|
||||
adds r4, r0, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08043FB6
|
||||
cmp r5, 0
|
||||
bne _08043FA4
|
||||
ldr r0, _08043F68
|
||||
ldr r1, [r6]
|
||||
ldr r2, _08043F6C
|
||||
adds r1, r2
|
||||
bl strcpy
|
||||
ldr r0, _08043F70
|
||||
b _08043F9A
|
||||
.align 2, 0
|
||||
_08043F68: .4byte gAvailablePokemonNames
|
||||
_08043F6C: .4byte 0x000005f4
|
||||
_08043F70: .4byte gUnknown_80F89D4
|
||||
_08043F74:
|
||||
cmp r0, 0x3
|
||||
bne _08043FB6
|
||||
bl GetLeader
|
||||
adds r4, r0, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08043FB6
|
||||
cmp r5, 0
|
||||
bne _08043FA4
|
||||
ldr r0, _08043FC0
|
||||
ldr r1, [r6]
|
||||
ldr r2, _08043FC4
|
||||
adds r1, r2
|
||||
bl strcpy
|
||||
ldr r0, _08043FC8
|
||||
_08043F9A:
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl PrintFieldMessage
|
||||
_08043FA4:
|
||||
adds r0, r4, 0
|
||||
bl sub_8042B0C
|
||||
ldr r1, _08043FCC
|
||||
_08043FAC:
|
||||
adds r0, r4, 0
|
||||
adds r2, r4, 0
|
||||
bl sub_8068FE0
|
||||
movs r7, 0x1
|
||||
_08043FB6:
|
||||
adds r0, r7, 0
|
||||
_08043FB8:
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_08043FC0: .4byte gAvailablePokemonNames
|
||||
_08043FC4: .4byte 0x000005f4
|
||||
_08043FC8: .4byte gUnknown_80F89D8
|
||||
_08043FCC: .4byte 0x00000222
|
||||
thumb_func_end sub_8043ED0
|
||||
|
||||
thumb_func_start sub_8043FD0
|
||||
sub_8043FD0:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x44
|
||||
movs r0, 0x2
|
||||
mov r9, r0
|
||||
movs r1, 0x1
|
||||
mov r10, r1
|
||||
movs r0, 0xFF
|
||||
mov r8, r0
|
||||
_08043FE8:
|
||||
movs r3, 0
|
||||
mov r1, r9
|
||||
adds r1, 0x1
|
||||
str r1, [sp, 0x3C]
|
||||
_08043FF0:
|
||||
ldr r2, _080440E4
|
||||
movs r0, 0x58
|
||||
adds r1, r3, 0
|
||||
muls r1, r0
|
||||
ldr r0, [r2]
|
||||
adds r4, r0, r1
|
||||
ldrh r1, [r4]
|
||||
mov r0, r10
|
||||
ands r0, r1
|
||||
adds r3, 0x1
|
||||
str r3, [sp, 0x40]
|
||||
cmp r0, 0
|
||||
beq _080440FE
|
||||
lsrs r0, r1, 1
|
||||
mov r1, r10
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080440FE
|
||||
add r5, sp, 0x20
|
||||
movs r0, 0x8
|
||||
ldrsh r1, [r4, r0]
|
||||
adds r0, r5, 0
|
||||
mov r2, r9
|
||||
bl GetPokemonLevelData
|
||||
mov r1, r9
|
||||
strb r1, [r4, 0x3]
|
||||
ldr r0, [sp, 0x20]
|
||||
str r0, [r4, 0x1C]
|
||||
ldrh r0, [r5, 0x4]
|
||||
ldrh r1, [r4, 0x16]
|
||||
adds r0, r1
|
||||
movs r2, 0
|
||||
strh r0, [r4, 0x16]
|
||||
lsls r0, 16
|
||||
ldr r1, _080440E8
|
||||
cmp r0, r1
|
||||
ble _08044040
|
||||
ldr r0, _080440EC
|
||||
strh r0, [r4, 0x16]
|
||||
_08044040:
|
||||
ldrb r0, [r4, 0x18]
|
||||
str r0, [sp, 0x2C]
|
||||
ldrb r0, [r4, 0x19]
|
||||
str r0, [sp, 0x30]
|
||||
ldrb r0, [r4, 0x1A]
|
||||
str r0, [sp, 0x34]
|
||||
ldrb r0, [r4, 0x1B]
|
||||
str r0, [sp, 0x38]
|
||||
ldrb r1, [r5, 0x6]
|
||||
ldr r0, [sp, 0x2C]
|
||||
adds r0, r1
|
||||
str r0, [sp, 0x2C]
|
||||
ldrb r1, [r5, 0x7]
|
||||
ldr r0, [sp, 0x30]
|
||||
adds r0, r1
|
||||
str r0, [sp, 0x30]
|
||||
ldrb r1, [r5, 0x8]
|
||||
ldr r0, [sp, 0x34]
|
||||
adds r0, r1
|
||||
str r0, [sp, 0x34]
|
||||
ldrb r1, [r5, 0x9]
|
||||
ldr r0, [sp, 0x38]
|
||||
adds r0, r1
|
||||
str r0, [sp, 0x38]
|
||||
ldr r0, [sp, 0x2C]
|
||||
cmp r0, 0xFE
|
||||
ble _0804407A
|
||||
mov r0, r8
|
||||
str r0, [sp, 0x2C]
|
||||
_0804407A:
|
||||
ldr r0, [sp, 0x30]
|
||||
cmp r0, 0xFE
|
||||
ble _08044084
|
||||
mov r1, r8
|
||||
str r1, [sp, 0x30]
|
||||
_08044084:
|
||||
ldr r0, [sp, 0x34]
|
||||
cmp r0, 0xFE
|
||||
ble _0804408E
|
||||
mov r0, r8
|
||||
str r0, [sp, 0x34]
|
||||
_0804408E:
|
||||
ldr r0, [sp, 0x38]
|
||||
cmp r0, 0xFE
|
||||
ble _08044098
|
||||
mov r1, r8
|
||||
str r1, [sp, 0x38]
|
||||
_08044098:
|
||||
ldr r0, [sp, 0x2C]
|
||||
strb r0, [r4, 0x18]
|
||||
ldr r0, [sp, 0x30]
|
||||
strb r0, [r4, 0x19]
|
||||
ldr r0, [sp, 0x34]
|
||||
strb r0, [r4, 0x1A]
|
||||
ldr r0, [sp, 0x38]
|
||||
strb r0, [r4, 0x1B]
|
||||
movs r0, 0x8
|
||||
ldrsh r1, [r4, r0]
|
||||
ldrb r2, [r4, 0x3]
|
||||
mov r0, sp
|
||||
ldr r3, _080440EC
|
||||
bl sub_808E0AC
|
||||
adds r6, r0, 0
|
||||
cmp r6, 0
|
||||
beq _080440FE
|
||||
movs r0, 0
|
||||
cmp r0, r6
|
||||
bge _080440FE
|
||||
_080440C2:
|
||||
movs r3, 0
|
||||
adds r7, r0, 0x1
|
||||
lsls r0, 1
|
||||
mov r1, sp
|
||||
adds r5, r1, r0
|
||||
adds r2, r4, 0
|
||||
adds r2, 0x2C
|
||||
_080440D0:
|
||||
ldrb r1, [r2]
|
||||
mov r0, r10
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _080440F0
|
||||
ldrh r1, [r5]
|
||||
adds r0, r2, 0
|
||||
bl InitZeroedPPPokemonMove
|
||||
b _080440F8
|
||||
.align 2, 0
|
||||
_080440E4: .4byte gRecruitedPokemonRef
|
||||
_080440E8: .4byte 0x03e60000
|
||||
_080440EC: .4byte 0x000003e7
|
||||
_080440F0:
|
||||
adds r2, 0x8
|
||||
adds r3, 0x1
|
||||
cmp r3, 0x3
|
||||
ble _080440D0
|
||||
_080440F8:
|
||||
adds r0, r7, 0
|
||||
cmp r0, r6
|
||||
blt _080440C2
|
||||
_080440FE:
|
||||
ldr r3, [sp, 0x40]
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r3, r0
|
||||
bgt _0804410A
|
||||
b _08043FF0
|
||||
_0804410A:
|
||||
ldr r0, [sp, 0x3C]
|
||||
mov r9, r0
|
||||
cmp r0, 0x5
|
||||
bgt _08044114
|
||||
b _08043FE8
|
||||
_08044114:
|
||||
add sp, 0x44
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8043FD0
|
||||
|
||||
thumb_func_start sub_8044124
|
||||
sub_8044124:
|
||||
push {r4,r5,lr}
|
||||
ldr r0, _080441AC
|
||||
ldr r0, [r0]
|
||||
ldr r1, _080441B0
|
||||
adds r0, r1
|
||||
ldrb r0, [r0]
|
||||
bl GetMaxItemsAllowed
|
||||
cmp r0, 0
|
||||
bne _08044182
|
||||
movs r3, 0
|
||||
ldr r4, _080441B4
|
||||
movs r2, 0
|
||||
_0804413E:
|
||||
lsls r1, r3, 2
|
||||
ldr r0, [r4]
|
||||
adds r1, r0
|
||||
strb r2, [r1, 0x2]
|
||||
strb r2, [r1, 0x1]
|
||||
strb r2, [r1]
|
||||
adds r3, 0x1
|
||||
cmp r3, 0x13
|
||||
ble _0804413E
|
||||
movs r3, 0
|
||||
ldr r5, _080441B8
|
||||
movs r4, 0x1
|
||||
_08044156:
|
||||
movs r0, 0x58
|
||||
adds r1, r3, 0
|
||||
muls r1, r0
|
||||
ldr r0, [r5]
|
||||
adds r1, r0, r1
|
||||
ldrh r2, [r1]
|
||||
adds r0, r4, 0
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _08044178
|
||||
lsrs r0, r2, 1
|
||||
ands r0, r4
|
||||
cmp r0, 0
|
||||
beq _08044178
|
||||
adds r1, 0x28
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
_08044178:
|
||||
adds r3, 0x1
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r3, r0
|
||||
ble _08044156
|
||||
_08044182:
|
||||
ldr r0, _080441AC
|
||||
ldr r0, [r0]
|
||||
ldr r2, _080441B0
|
||||
adds r0, r2
|
||||
ldrb r0, [r0]
|
||||
bl IsKeepMoney
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
cmp r1, 0
|
||||
bne _080441A4
|
||||
ldr r0, _080441B4
|
||||
ldr r0, [r0]
|
||||
movs r2, 0x98
|
||||
lsls r2, 2
|
||||
adds r0, r2
|
||||
str r1, [r0]
|
||||
_080441A4:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080441AC: .4byte gDungeon
|
||||
_080441B0: .4byte 0x00000644
|
||||
_080441B4: .4byte gTeamInventoryRef
|
||||
_080441B8: .4byte gRecruitedPokemonRef
|
||||
thumb_func_end sub_8044124
|
||||
|
||||
.align 2, 0
|
||||
|
|
|
|||
|
|
@ -91,4 +91,11 @@ u32 sub_80913E0(Item *slot, u32, struct subStruct_203B240 **);
|
|||
UNUSED Item *item = &gTeamInventoryRef->teamItems[id]; \
|
||||
}
|
||||
|
||||
static inline void ZeroOutItem(Item *item)
|
||||
{
|
||||
item->id = 0;
|
||||
item->quantity = 0;
|
||||
item->flags = 0;
|
||||
}
|
||||
|
||||
#endif // GUARD_ITEMS_H
|
||||
|
|
|
|||
|
|
@ -89,4 +89,9 @@ void sub_8094060(Move *srcMoves, Move *destMoves);
|
|||
void sub_8094184(struct unkStruct_8094924 *, struct Moves *);
|
||||
void sub_80941FC(struct unkStruct_8094924 *, struct Moves *);
|
||||
|
||||
static inline bool8 MoveFlagExists(Move *move)
|
||||
{
|
||||
return (move->moveFlags & MOVE_FLAG_EXISTS);
|
||||
}
|
||||
|
||||
#endif // GUARD_MOVES_H
|
||||
|
|
|
|||
|
|
@ -98,4 +98,21 @@ extern PokemonStruct1 *sub_808D3F8(void);
|
|||
extern s32 GetUnitSum_808D544(u32);
|
||||
extern s32 sub_808D580(s32 *);
|
||||
|
||||
static inline bool8 PokemonFlag1(PokemonStruct1 *mon)
|
||||
{
|
||||
return ((mon->unk0 & 1));
|
||||
}
|
||||
|
||||
static inline bool8 PokemonFlag2(PokemonStruct1 *mon)
|
||||
{
|
||||
return (((mon->unk0 >> 1) & 1));
|
||||
}
|
||||
|
||||
#include "constants/dungeon.h"
|
||||
|
||||
static inline bool8 IsMonPartner(PokemonStruct1 *mon)
|
||||
{
|
||||
return (mon->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER);
|
||||
}
|
||||
|
||||
#endif // GUARD_POKEMON_H
|
||||
|
|
|
|||
|
|
@ -202,6 +202,7 @@ struct unkStruct_Dungeon5C4_sub
|
|||
struct unkStruct_Dungeon64C
|
||||
{
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
u32 unk4;
|
||||
};
|
||||
|
||||
|
|
@ -237,7 +238,7 @@ typedef struct Dungeon
|
|||
/* 0x57C */ u8 fill57C[0x5C0 - 0x57c];
|
||||
/* 0x5C0 */ s32 unk5C0;
|
||||
/* 0x5C4 */ struct unkStruct_Dungeon5C4_sub unk5C4[3];
|
||||
u8 fill5F4[0x644 - 0x5f4];
|
||||
/* 0x5F4 */ u8 faintStringBuffer[80];
|
||||
/* 0x644 */ DungeonLocation dungeonLocation;
|
||||
/* 0x648 */ DungeonLocation dungeonLocation2;
|
||||
struct unkStruct_Dungeon64C unk64C;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ typedef struct PokemonStruct1
|
|||
/* 0x8 */ s16 speciesNum;
|
||||
unkPokeSubStruct_C unkC[2];
|
||||
/* 0x14 */ s16 IQ;
|
||||
/* 0x16 */ u16 pokeHP;
|
||||
/* 0x16 */ s16 pokeHP;
|
||||
/* 0x18 */ Offense offense;
|
||||
/* 0x1C */ u32 currExp;
|
||||
/* 0x20 */ u32 IQSkills;
|
||||
|
|
|
|||
|
|
@ -17,15 +17,22 @@
|
|||
#include "cpu.h"
|
||||
#include "dungeon_music.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "code_8009804.h"
|
||||
#include "tile_types.h"
|
||||
#include "text1.h"
|
||||
#include "code_805D8C8.h"
|
||||
#include "code_803E668.h"
|
||||
#include "dungeon_engine.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "weather.h"
|
||||
#include "moves.h"
|
||||
#include "code_8094F88.h"
|
||||
#include "bg_palette_buffer.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "constants/monster.h"
|
||||
#include "constants/trap.h"
|
||||
|
||||
extern void sub_800EE5C(s32);
|
||||
extern void sub_800EF64(void);
|
||||
|
|
@ -360,8 +367,7 @@ extern void sub_8068F80(void);
|
|||
extern bool8 sub_8044B28(void);
|
||||
extern bool8 sub_8083C24(void);
|
||||
extern bool8 sub_8083C88(u8 param_1);
|
||||
extern bool8 sub_8043ED0(u8);
|
||||
extern u8 sub_8043D10(void);
|
||||
extern bool8 sub_8043ED0(bool8);
|
||||
extern void LoadDungeonTilesetAssets(void);
|
||||
extern void LoadDungeonPokemonSprites(void);
|
||||
extern void ShowDungeonNameBanner(void);
|
||||
|
|
@ -372,9 +378,16 @@ extern void sub_8083AB0(s16 param_0, Entity * target, Entity * entity);
|
|||
extern void sub_8080B30(u8 *param_1,u32 param_2);
|
||||
extern void sub_8046F84(s32 itemFlag);
|
||||
extern bool8 sub_8083C50(void);
|
||||
extern void sub_8068FE0(Entity *, u32, Entity *r2);
|
||||
extern void sub_806BFC0(EntityInfo *, u32);
|
||||
extern s32 sub_808E0AC(u16* a1, s16 species, s32 a3, s32 IQPoints);
|
||||
extern s32 sub_808E0AC(u16* a1, s16 species, s32 a3, s32 IQPoints);
|
||||
extern bool8 IsKeepMoney(u8 dungeon);
|
||||
extern void sub_8042B0C(Entity *);
|
||||
|
||||
extern s16 gUnknown_2026E4E;
|
||||
extern u8 gUnknown_202F32C;
|
||||
extern u8 gUnknown_202F1A8;
|
||||
extern s32 gFormatData_202DE30;
|
||||
extern s32 gUnknown_202EDC8;
|
||||
extern Entity *gLeaderPointer;
|
||||
|
|
@ -382,19 +395,23 @@ extern Entity *gLeaderPointer;
|
|||
void sub_8044124(void);
|
||||
void sub_8043FD0(void);
|
||||
void sub_806B404(void);
|
||||
u8 sub_8043D10(void);
|
||||
|
||||
extern const u8 *gUnknown_80FEC48;
|
||||
extern const u8 *gUnknown_80FEC7C;
|
||||
extern const u8 *gUnknown_81002B8;
|
||||
extern const u8 *gPtrFinalChanceMessage;
|
||||
extern const u8 *gPtrClientFaintedMessage;
|
||||
extern const u8 *const gUnknown_80F89B4;
|
||||
extern const u8 *const gUnknown_80F89D4;
|
||||
extern const u8 *const gUnknown_80F89D8;
|
||||
|
||||
extern const s16 gUnknown_80F6850[];
|
||||
extern const s16 gDungeonMusic[];
|
||||
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern OpenedFile *gDungeonNameBannerPalette;
|
||||
|
||||
|
||||
void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8)
|
||||
{
|
||||
bool8 check;
|
||||
|
|
@ -762,7 +779,7 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8)
|
|||
}
|
||||
|
||||
if (gDungeon->unk654 != 1) {
|
||||
if (sub_8043ED0(1)) {
|
||||
if (sub_8043ED0(TRUE)) {
|
||||
gDungeon->unk654 = 1;
|
||||
}
|
||||
}
|
||||
|
|
@ -888,8 +905,8 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8)
|
|||
var = 0x227;
|
||||
sub_8083AB0(var, NULL, GetLeader());
|
||||
check = TRUE;
|
||||
// This goto is a fakematch I had to create in order to generating matching code.
|
||||
// It has no real effect, because the control flow is the same without it(since check is TRUE).
|
||||
// This goto is a fakematch I had to create in order to generate matching code.
|
||||
// It has no real effect, because the control flow is the same without it(since check is TRUE). Unfortunately agbcc is blind and goto is needed.
|
||||
// Feel free to remove it.
|
||||
goto FAKEMATCH;
|
||||
}
|
||||
|
|
@ -944,7 +961,6 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
sub_806863C();
|
||||
sub_803E214();
|
||||
nullsub_56();
|
||||
|
|
@ -970,4 +986,225 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8)
|
|||
nullsub_16();
|
||||
}
|
||||
|
||||
//
|
||||
void sub_8043CD8(void)
|
||||
{
|
||||
vram_related_8009804();
|
||||
}
|
||||
|
||||
bool8 sub_8043CE4(s32 dungeonId)
|
||||
{
|
||||
if (gUnknown_202F1A8)
|
||||
return TRUE;
|
||||
|
||||
return (gDungeonWaterType[dungeonId] == 2);
|
||||
}
|
||||
|
||||
u8 sub_8043D10(void)
|
||||
{
|
||||
if (gDungeon->unk678 == 1 && gDungeon->unk64C.unk1 == gDungeon->dungeonLocation.floor)
|
||||
return 2;
|
||||
else if (IsBossFight())
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_8043D50(s32 *a0, s32 *a1)
|
||||
{
|
||||
*a1 = sizeof(Dungeon);
|
||||
*a0 = 0x4800; // Hmmm
|
||||
}
|
||||
|
||||
void sub_8043D60(void)
|
||||
{
|
||||
s32 x, y, monId;
|
||||
|
||||
for (monId = 0; monId < DUNGEON_MAX_WILD_POKEMON; monId++) {
|
||||
Entity *mon = gDungeon->wildPokemon[monId];
|
||||
if (EntityExists(mon)) {
|
||||
EntityInfo *monInfo = GetEntInfo(mon);
|
||||
bool32 unk = TRUE;
|
||||
|
||||
if (monInfo->shopkeeper == TRUE)
|
||||
unk = FALSE;
|
||||
if (IsClientOrTeamBase(monInfo->joinedAt.joinedAt))
|
||||
unk = FALSE;
|
||||
if (monInfo->clientType == CLIENT_TYPE_CLIENT)
|
||||
unk = FALSE;
|
||||
|
||||
if (unk) {
|
||||
sub_8068FE0(mon, 0x207, mon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (monId = 0; monId < MAX_TEAM_MEMBERS; monId++) {
|
||||
Entity *mon = gDungeon->teamPokemon[monId];
|
||||
if (EntityExists(mon)) {
|
||||
s32 i;
|
||||
EntityInfo *monInfo;
|
||||
|
||||
mon->unk22 = 0;
|
||||
mon->isVisible = TRUE;
|
||||
monInfo = GetEntInfo(mon);
|
||||
monInfo->HP = monInfo->maxHPStat;
|
||||
monInfo->belly = monInfo->maxBelly;
|
||||
gDungeon->itemHoldersIdentified = FALSE;
|
||||
sub_806BFC0(monInfo, 0);
|
||||
monInfo->apparentID = monInfo->id;
|
||||
monInfo->perishSongTurns = 0;
|
||||
for (i = 0; i < MAX_MON_MOVES; i++) {
|
||||
Move *move = &monInfo->moves.moves[i];
|
||||
if (move->moveFlags & MOVE_FLAG_EXISTS) {
|
||||
move->PP = GetMoveBasePP(move);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (y = 0; y < 32; y++) {
|
||||
for (x = 0; x < 56; x++) {
|
||||
Entity *object = GetTileSafe(x, y)->object;
|
||||
if (EntityExists(object) && GetEntityType(object) == ENTITY_TRAP) {
|
||||
Trap *trapData = GetTrapData(object);
|
||||
if (trapData->id == 27) {
|
||||
trapData->id = TRAP_PITFALL_TRAP;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub_8046F84(ITEM_FLAG_IN_SHOP);
|
||||
}
|
||||
|
||||
bool8 sub_8043ED0(bool8 a0)
|
||||
{
|
||||
bool8 ret = FALSE;
|
||||
|
||||
if (!a0 && sub_8044B28())
|
||||
return FALSE;
|
||||
|
||||
if (gDungeon->unk10 == 1) {
|
||||
Entity *leader = GetLeader();
|
||||
if (EntityExists(leader)) {
|
||||
if (!a0) {
|
||||
strcpy(gAvailablePokemonNames, gDungeon->faintStringBuffer);
|
||||
PrintFieldMessage(0, gUnknown_80F89B4, 1);
|
||||
}
|
||||
sub_8042B0C(leader);
|
||||
sub_8068FE0(leader, 0x21F, leader);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
else if (gDungeon->unk10 == 2) {
|
||||
Entity *leader = GetLeader();
|
||||
if (EntityExists(leader)) {
|
||||
if (!a0) {
|
||||
strcpy(gAvailablePokemonNames, gDungeon->faintStringBuffer);
|
||||
PrintFieldMessage(0, gUnknown_80F89D4, 1);
|
||||
}
|
||||
sub_8042B0C(leader);
|
||||
sub_8068FE0(leader, 0x222, leader);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
else if (gDungeon->unk10 == 3) {
|
||||
Entity *leader = GetLeader();
|
||||
if (EntityExists(leader)) {
|
||||
if (!a0) {
|
||||
strcpy(gAvailablePokemonNames, gDungeon->faintStringBuffer);
|
||||
PrintFieldMessage(0, gUnknown_80F89D8, 1);
|
||||
}
|
||||
sub_8042B0C(leader);
|
||||
sub_8068FE0(leader, 0x222, leader);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sub_8043FD0(void)
|
||||
{
|
||||
s32 level;
|
||||
for (level = 2; level < 6; level++) {
|
||||
s32 i, monId, movesCount;
|
||||
for (monId = 0; monId < NUM_MONSTERS; monId++) {
|
||||
PokemonStruct1 *monStruct = &gRecruitedPokemonRef->pokemon[monId];
|
||||
if (PokemonFlag1(monStruct) && PokemonFlag2(monStruct)) {
|
||||
u16 learnedMoves[16];
|
||||
LevelData levelData;
|
||||
// I have to make the variables volatile to get matching code. I'm sure there's a solution for this, but keeping it like that for now.
|
||||
#ifdef NONMATCHING
|
||||
s32 atk, spAtk, def, spDef;
|
||||
#else
|
||||
vs32 atk, spAtk, def, spDef;
|
||||
#endif // NONMATCHING
|
||||
|
||||
GetPokemonLevelData(&levelData, monStruct->speciesNum, level);
|
||||
monStruct->level = level;
|
||||
monStruct->currExp = levelData.expRequired;
|
||||
monStruct->pokeHP += levelData.gainHP;
|
||||
if (monStruct->pokeHP >= 999) // TODO: Make this a max hp define
|
||||
monStruct->pokeHP = 999;
|
||||
|
||||
atk = monStruct->offense.att[0];
|
||||
spAtk = monStruct->offense.att[1];
|
||||
def = monStruct->offense.def[0];
|
||||
spDef = monStruct->offense.def[1];
|
||||
|
||||
atk += levelData.gainAtt;
|
||||
spAtk += levelData.gainSPAtt;
|
||||
def += levelData.gainDef;
|
||||
spDef += levelData.gainSPDef;
|
||||
|
||||
// TODO: Make 255 max define for stats
|
||||
if (atk >= 255) {atk = 255;}
|
||||
if (spAtk >= 255) {spAtk = 255;}
|
||||
if (def >= 255) {def = 255;}
|
||||
if (spDef >= 255) {spDef = 255;}
|
||||
|
||||
monStruct->offense.att[0] = atk;
|
||||
monStruct->offense.att[1] = spAtk;
|
||||
monStruct->offense.def[0] = def;
|
||||
monStruct->offense.def[1] = spDef;
|
||||
|
||||
movesCount = sub_808E0AC(learnedMoves, monStruct->speciesNum, monStruct->level, 999);
|
||||
if (movesCount == 0)
|
||||
continue;
|
||||
|
||||
for (i = 0; i < movesCount; i++) {
|
||||
s32 moveSlot;
|
||||
for (moveSlot = 0; moveSlot < MAX_MON_MOVES; moveSlot++) {
|
||||
if (!MoveFlagExists(&monStruct->moves[moveSlot])) {
|
||||
InitZeroedPPPokemonMove(&monStruct->moves[moveSlot], learnedMoves[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8044124(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (GetMaxItemsAllowed(gDungeon->dungeonLocation.id) == 0)
|
||||
{
|
||||
for (i = 0; i < INVENTORY_SIZE; i++) {
|
||||
ZeroOutItem(&gTeamInventoryRef->teamItems[i]);
|
||||
}
|
||||
for (i = 0; i < NUM_MONSTERS; i++) {
|
||||
PokemonStruct1 *mon = (&gRecruitedPokemonRef->pokemon[i]);
|
||||
if (PokemonFlag1(mon) && PokemonFlag2(mon)) {
|
||||
mon->heldItem.id = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsKeepMoney(gDungeon->dungeonLocation.id)) {
|
||||
gTeamInventoryRef->teamMoney = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -489,13 +489,6 @@ void HandleDealingDamage(Entity *attacker, Entity *target, struct DamageStruct *
|
|||
}
|
||||
}
|
||||
|
||||
static inline void ZeroOutItem(Item *item)
|
||||
{
|
||||
item->id = 0;
|
||||
item->quantity = 0;
|
||||
item->flags = 0;
|
||||
}
|
||||
|
||||
static inline bool8 ItemSticky(Item *item)
|
||||
{
|
||||
return (item->flags & ITEM_FLAG_STICKY);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user