mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 15:46:18 -05:00
sub_8074FB0
This commit is contained in:
parent
49b0d2e77d
commit
b50c8b2803
|
|
@ -5,634 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start TickStatusHeal
|
||||
TickStatusHeal:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r7, r0, 0
|
||||
cmp r7, 0
|
||||
bne _08074B62
|
||||
b _08074F96
|
||||
_08074B62:
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074B6E
|
||||
b _08074F96
|
||||
_08074B6E:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074B7A
|
||||
b _08074F96
|
||||
_08074B7A:
|
||||
bl sub_805229C
|
||||
ldr r6, [r7, 0x70]
|
||||
movs r1, 0xA3
|
||||
lsls r1, 1
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08074C48
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xAC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x2
|
||||
beq _08074C48
|
||||
cmp r0, 0x3
|
||||
beq _08074C48
|
||||
movs r4, 0
|
||||
ldrb r0, [r6, 0x6]
|
||||
cmp r0, 0
|
||||
bne _08074BAE
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r6, r2]
|
||||
bl GetRegenSpeed
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
_08074BAE:
|
||||
cmp r4, 0
|
||||
beq _08074C48
|
||||
adds r0, r7, 0
|
||||
movs r1, 0xA
|
||||
bl HasHeldItem
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074BC8
|
||||
ldr r0, _08074EF8
|
||||
movs r3, 0
|
||||
ldrsh r0, [r0, r3]
|
||||
adds r4, r0
|
||||
_08074BC8:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xC4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x6
|
||||
bne _08074BDA
|
||||
ldr r0, _08074EFC
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
adds r4, r0
|
||||
_08074BDA:
|
||||
adds r0, r7, 0
|
||||
movs r1, 0x3
|
||||
bl HasAbility
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074BFE
|
||||
adds r0, r7, 0
|
||||
bl GetApparentWeather
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
bne _08074BFE
|
||||
ldr r0, _08074F00
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
adds r4, r0
|
||||
_08074BFE:
|
||||
movs r0, 0xFA
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _08074C08
|
||||
adds r4, r0, 0
|
||||
_08074C08:
|
||||
cmp r4, 0x1D
|
||||
bgt _08074C0E
|
||||
movs r4, 0x1E
|
||||
_08074C0E:
|
||||
movs r3, 0xFC
|
||||
lsls r3, 1
|
||||
adds r1, r6, r3
|
||||
ldrh r0, [r6, 0x10]
|
||||
ldrh r2, [r1]
|
||||
adds r0, r2
|
||||
strh r0, [r1]
|
||||
movs r3, 0
|
||||
ldrsh r0, [r1, r3]
|
||||
cmp r0, r4
|
||||
blt _08074C38
|
||||
_08074C24:
|
||||
ldrh r0, [r6, 0xE]
|
||||
adds r0, 0x1
|
||||
strh r0, [r6, 0xE]
|
||||
ldrh r0, [r1]
|
||||
subs r0, r4
|
||||
strh r0, [r1]
|
||||
movs r2, 0
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, r4
|
||||
bge _08074C24
|
||||
_08074C38:
|
||||
movs r3, 0xE
|
||||
ldrsh r1, [r6, r3]
|
||||
ldrh r2, [r6, 0x10]
|
||||
movs r3, 0x10
|
||||
ldrsh r0, [r6, r3]
|
||||
cmp r1, r0
|
||||
blt _08074C48
|
||||
strh r2, [r6, 0xE]
|
||||
_08074C48:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xA8
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074C6E
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xA9
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074C6E
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x1
|
||||
movs r3, 0x1
|
||||
bl SendSleepEndMessage
|
||||
_08074C6E:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074C7C
|
||||
b _08074F96
|
||||
_08074C7C:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074C88
|
||||
b _08074F96
|
||||
_08074C88:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xAC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074CAA
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xAD
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074CAA
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendNonVolatileEndMessage
|
||||
_08074CAA:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074CB8
|
||||
b _08074F96
|
||||
_08074CB8:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074CC4
|
||||
b _08074F96
|
||||
_08074CC4:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xB0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074CE6
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xB8
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074CE6
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendImmobilizeEndMessage
|
||||
_08074CE6:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074CF4
|
||||
b _08074F96
|
||||
_08074CF4:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074D00
|
||||
b _08074F96
|
||||
_08074D00:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xBC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074D22
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xBD
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074D22
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendVolatileEndMessage
|
||||
_08074D22:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074D30
|
||||
b _08074F96
|
||||
_08074D30:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074D3C
|
||||
b _08074F96
|
||||
_08074D3C:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xC4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074D5E
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xC5
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074D5E
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendProtectionEndMessage
|
||||
_08074D5E:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074D6C
|
||||
b _08074F96
|
||||
_08074D6C:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074D78
|
||||
b _08074F96
|
||||
_08074D78:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xC8
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074D9C
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xCB
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074D9C
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
movs r2, 0
|
||||
bl SendWaitingEndMessage
|
||||
_08074D9C:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074DAA
|
||||
b _08074F96
|
||||
_08074DAA:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074DB6
|
||||
b _08074F96
|
||||
_08074DB6:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xD0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074DD8
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xD9
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074DD8
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendLinkedEndMessage
|
||||
_08074DD8:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074DE6
|
||||
b _08074F96
|
||||
_08074DE6:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074DF2
|
||||
b _08074F96
|
||||
_08074DF2:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xDC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074E14
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xDD
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074E14
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendMoveEndMessage
|
||||
_08074E14:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074E22
|
||||
b _08074F96
|
||||
_08074E22:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074E2E
|
||||
b _08074F96
|
||||
_08074E2E:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xE4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074E50
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xE5
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074E50
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendTransformEndMessage
|
||||
_08074E50:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074E5E
|
||||
b _08074F96
|
||||
_08074E5E:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074E6A
|
||||
b _08074F96
|
||||
_08074E6A:
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xE8
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074E8C
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xE9
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074E8C
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendEyesightEndMessage
|
||||
_08074E8C:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074E9A
|
||||
b _08074F96
|
||||
_08074E9A:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074F96
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xEC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074EC6
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xED
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074EC6
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl SendMuzzledEndMessage
|
||||
_08074EC6:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08074F96
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08074F96
|
||||
adds r4, r6, 0
|
||||
adds r4, 0xFA
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
beq _08074F18
|
||||
adds r0, r4, 0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074F18
|
||||
ldr r0, _08074F04
|
||||
adds r1, r7, 0
|
||||
b _08074F08
|
||||
.align 2, 0
|
||||
_08074EF8: .4byte gUnknown_80F4FC4
|
||||
_08074EFC: .4byte gUnknown_80F4FC0
|
||||
_08074F00: .4byte gUnknown_80F4FC2
|
||||
_08074F04: .4byte gAvailablePokemonNames
|
||||
_08074F08:
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
ldr r0, _08074FA0
|
||||
ldr r1, [r0]
|
||||
adds r0, r7, 0
|
||||
bl SendMessage
|
||||
_08074F18:
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
movs r5, 0
|
||||
_08074F1E:
|
||||
ldr r1, _08074FA4
|
||||
adds r0, r6, r1
|
||||
adds r4, r0, r5
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
beq _08074F3C
|
||||
adds r0, r5, r1
|
||||
adds r0, r6, r0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074F3C
|
||||
movs r2, 0x1
|
||||
mov r8, r2
|
||||
_08074F3C:
|
||||
movs r3, 0x84
|
||||
lsls r3, 1
|
||||
adds r0, r6, r3
|
||||
adds r4, r0, r5
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
beq _08074F5C
|
||||
adds r0, r5, r3
|
||||
adds r0, r6, r0
|
||||
bl sub_80838EC
|
||||
ldrb r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _08074F5C
|
||||
movs r0, 0x1
|
||||
mov r8, r0
|
||||
_08074F5C:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x4
|
||||
ble _08074F1E
|
||||
mov r1, r8
|
||||
cmp r1, 0
|
||||
beq _08074F96
|
||||
ldr r0, [r7, 0x70]
|
||||
movs r2, 0x82
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
ldr r4, [r0]
|
||||
adds r0, r7, 0
|
||||
bl CalcSpeedStage
|
||||
adds r5, r0, 0
|
||||
cmp r4, r5
|
||||
beq _08074F96
|
||||
ldr r0, _08074FA8
|
||||
adds r1, r7, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
ldr r1, _08074FAC
|
||||
lsls r0, r5, 2
|
||||
adds r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r7, 0
|
||||
bl SendMessage
|
||||
_08074F96:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08074FA0: .4byte gPtrStenchWavedOffMessage
|
||||
_08074FA4: .4byte 0x0000010d
|
||||
_08074FA8: .4byte gAvailablePokemonNames
|
||||
_08074FAC: .4byte gUnknown_80FA124
|
||||
thumb_func_end TickStatusHeal
|
||||
|
||||
thumb_func_start sub_8074FB0
|
||||
sub_8074FB0:
|
||||
push {r4-r6,lr}
|
||||
adds r3, r0, 0
|
||||
adds r5, r1, 0
|
||||
ldr r4, [r3, 0x70]
|
||||
movs r1, 0xFA
|
||||
lsls r1, 1
|
||||
adds r0, r4, r1
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
cmp r0, 0x3
|
||||
ble _08074FD0
|
||||
adds r1, r4, 0
|
||||
adds r1, 0x44
|
||||
movs r0, 0
|
||||
strh r0, [r1]
|
||||
b _08075040
|
||||
_08074FD0:
|
||||
ldr r0, _08074FE0
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08074FE8
|
||||
ldr r1, _08074FE4
|
||||
movs r0, 0x2
|
||||
b _08074FEC
|
||||
.align 2, 0
|
||||
_08074FE0: .4byte gGameOptionsRef
|
||||
_08074FE4: .4byte gUnknown_202F378
|
||||
_08074FE8:
|
||||
ldr r1, _08075048
|
||||
movs r0, 0x1
|
||||
_08074FEC:
|
||||
str r0, [r1]
|
||||
adds r6, r1, 0
|
||||
movs r1, 0xFA
|
||||
lsls r1, 1
|
||||
adds r0, r4, r1
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
lsls r1, r0, 3
|
||||
subs r1, r0
|
||||
lsls r1, 2
|
||||
movs r0, 0xC2
|
||||
lsls r0, 1
|
||||
adds r1, r0
|
||||
adds r1, r4, r1
|
||||
movs r0, 0
|
||||
strb r0, [r1, 0x1A]
|
||||
str r5, [r1, 0xC]
|
||||
ldrh r0, [r3, 0x4]
|
||||
strh r0, [r1]
|
||||
ldrh r0, [r3, 0x6]
|
||||
strh r0, [r1, 0x2]
|
||||
movs r3, 0
|
||||
ldrsh r0, [r2, r3]
|
||||
str r0, [r1, 0x4]
|
||||
movs r3, 0x2
|
||||
ldrsh r0, [r2, r3]
|
||||
str r0, [r1, 0x8]
|
||||
ldr r0, _0807504C
|
||||
lsls r2, r5, 2
|
||||
adds r2, r0
|
||||
movs r5, 0
|
||||
ldrsh r0, [r2, r5]
|
||||
ldr r3, [r6]
|
||||
muls r0, r3
|
||||
str r0, [r1, 0x10]
|
||||
movs r5, 0x2
|
||||
ldrsh r0, [r2, r5]
|
||||
muls r0, r3
|
||||
str r0, [r1, 0x14]
|
||||
adds r0, r4, 0
|
||||
bl sub_8075050
|
||||
_08075040:
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08075048: .4byte gUnknown_202F378
|
||||
_0807504C: .4byte gUnknown_80F4D44
|
||||
thumb_func_end sub_8074FB0
|
||||
|
||||
thumb_func_start sub_8075050
|
||||
sub_8075050:
|
||||
|
|
|
|||
|
|
@ -157,6 +157,17 @@ typedef struct Muzzled
|
|||
/* 0xED */ u8 muzzledTurns;
|
||||
} Muzzled;
|
||||
|
||||
typedef struct Unk_Entity_x184
|
||||
{
|
||||
/* 0x184 - 0x0 */ Position previousTargetMovePosition1;
|
||||
/* 0x188 - 0x4 */ Position32 previousTargetMovePosition2;
|
||||
/* 0x190 - 0xC */ s32 lastMoveDirection; // The last direction that the Pokémon moved in.
|
||||
// Number of tiles that the Pokémon moved last, multiplied by 0x100.
|
||||
/* 0x194 - 0x10*/ Position32 lastMoveIncrement;
|
||||
/* 0x19C - 0x18 */ u8 walkAnimFramesLeft; // Set when the Pokémon starts moving, and counts down until the Pokémon's walk animation stops.
|
||||
/* 0x19D - 0x19 */ u8 fill19d;
|
||||
/* 0x19e - 0x1a */ u8 unk1A;
|
||||
} Unk_Entity_x184 ;
|
||||
|
||||
// size: 0x208
|
||||
typedef struct EntityInfo
|
||||
|
|
@ -306,15 +317,8 @@ typedef struct EntityInfo
|
|||
u16 unk178;
|
||||
/* 0x17A */ u16 mimicMoveIDs[MAX_MON_MOVES]; // All moves that Mimic has copied (not sure on size...)
|
||||
// Previous value of targetPosition for movement, 1 and 2 moves ago.
|
||||
/* 0x184 */ Position previousTargetMovePosition1;
|
||||
/* 0x188 */ Position32 previousTargetMovePosition2;
|
||||
/* 0x190 */ u8 lastMoveDirection; // The last direction that the Pokémon moved in.
|
||||
// Number of tiles that the Pokémon moved last, multiplied by 0x100.
|
||||
/* 0x194 */ Position32 lastMoveIncrement;
|
||||
/* 0x19C */ u8 walkAnimFramesLeft; // Set when the Pokémon starts moving, and counts down until the Pokémon's walk animation stops.
|
||||
u8 fill19D[0x1F4 - 0x19D];
|
||||
/* 0x1F4 */ u8 numMoveTiles; // Number of tiles to move in a turn. Can be greater than 1 if the user's movement speed is boosted.
|
||||
u8 fill1F5;
|
||||
/* 0x184 */ Unk_Entity_x184 unk184[4];
|
||||
/* 0x1F4 */ s16 numMoveTiles; // Number of tiles to move in a turn. Can be greater than 1 if the user's movement speed is boosted.
|
||||
/* 0x1F6 */ bool8 notMoving;
|
||||
/* 0x1F8 */ s16 unk1F8;
|
||||
/* 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.
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@
|
|||
#include "structs/map.h"
|
||||
#include "structs/str_moves.h"
|
||||
#include "dungeon_music.h"
|
||||
#include "dungeon_movement.h"
|
||||
#include "game_options.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "moves.h"
|
||||
#include "dungeon_random.h"
|
||||
|
|
@ -80,6 +82,8 @@ extern const u8 *gUnknown_80FD628;
|
|||
extern const u8 *gUnknown_80FEB30;
|
||||
extern const u8 *gUnknown_80FABD8;
|
||||
extern const u8 *gPtrProtectSavedItMessage;
|
||||
extern const u8 *gPtrStenchWavedOffMessage;
|
||||
extern const u8 *gUnknown_80FA124[];
|
||||
|
||||
void sub_8073D14(Entity *entity)
|
||||
{
|
||||
|
|
@ -240,6 +244,8 @@ extern const s16 gUnknown_80F4F70;
|
|||
extern const s16 gUnknown_80F4F72;
|
||||
extern const s16 gUnknown_80F4F30;
|
||||
extern const s16 gUnknown_80F4F38;
|
||||
extern const s16 gUnknown_80F4FC4;
|
||||
extern const s16 gUnknown_80F4FC0;
|
||||
extern const s16 gUnknown_80F4F3A;
|
||||
extern const s16 gUnknown_80F4F3C;
|
||||
extern const s16 gUnknown_80F4FB2;
|
||||
|
|
@ -247,6 +253,7 @@ extern const s16 gUnknown_80F4F3E;
|
|||
extern const s16 gUnknown_80F4FB4;
|
||||
extern const s16 gUnknown_80F4F40;
|
||||
extern const s16 gUnknown_80F4F74;
|
||||
extern const s16 gUnknown_80F4FC2;
|
||||
extern const s16 gUnknown_80F4F76;
|
||||
extern const s16 gUnknown_80F4F36;
|
||||
extern const u8 gUnknown_80F54F4[][8];
|
||||
|
|
@ -595,5 +602,218 @@ void sub_8074094(Entity *entity)
|
|||
return;
|
||||
}
|
||||
|
||||
void TickStatusHeal(Entity *entity)
|
||||
{
|
||||
s32 i;
|
||||
bool32 spdChange;
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (entity == NULL)
|
||||
return;
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
sub_805229C();
|
||||
entityInfo = entity->info;
|
||||
|
||||
// HP heal
|
||||
if (entityInfo->unk146 == 0 && entityInfo->nonVolatile.nonVolatileStatus != STATUS_POISONED && entityInfo->nonVolatile.nonVolatileStatus != STATUS_BADLY_POISONED) {
|
||||
s32 r4 = 0;
|
||||
|
||||
if (!entityInfo->isNotTeamMember)
|
||||
r4 = GetRegenSpeed(entityInfo->id);
|
||||
|
||||
if (r4 != 0) {
|
||||
if (HasHeldItem(entity, ITEM_HEAL_RIBBON))
|
||||
r4 += gUnknown_80F4FC4;
|
||||
if (entityInfo->protection.protectionStatus == STATUS_WISH)
|
||||
r4 += gUnknown_80F4FC0;
|
||||
if (HasAbility(entity, ABILITY_RAIN_DISH) && GetApparentWeather(entity) == WEATHER_RAIN)
|
||||
r4 += gUnknown_80F4FC2;
|
||||
|
||||
if (r4 > 500)
|
||||
r4 = 500;
|
||||
if (r4 < 30)
|
||||
r4 = 30;
|
||||
|
||||
entityInfo->unk1F8 += entityInfo->maxHPStat;
|
||||
while (entityInfo->unk1F8 >= r4) {
|
||||
entityInfo->HP++;
|
||||
entityInfo->unk1F8 -= r4;
|
||||
}
|
||||
|
||||
if (entityInfo->HP >= entityInfo->maxHPStat)
|
||||
entityInfo->HP = entityInfo->maxHPStat;
|
||||
}
|
||||
}
|
||||
|
||||
if (entityInfo->sleep.sleep != 0) {
|
||||
sub_80838EC(&entityInfo->sleep.sleepTurns);
|
||||
if (entityInfo->sleep.sleepTurns == 0) {
|
||||
SendSleepEndMessage(entity, entity, TRUE, TRUE);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->nonVolatile.nonVolatileStatus != 0) {
|
||||
sub_80838EC(&entityInfo->nonVolatile.nonVolatileStatusTurns);
|
||||
if (entityInfo->nonVolatile.nonVolatileStatusTurns == 0) {
|
||||
SendNonVolatileEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->immobilize.immobilizeStatus != 0) {
|
||||
sub_80838EC(&entityInfo->immobilize.immobilizeStatusTurns);
|
||||
if (entityInfo->immobilize.immobilizeStatusTurns == 0) {
|
||||
SendImmobilizeEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->volatileStatus.volatileStatus != 0) {
|
||||
sub_80838EC(&entityInfo->volatileStatus.volatileStatusTurns);
|
||||
if (entityInfo->volatileStatus.volatileStatusTurns == 0) {
|
||||
SendVolatileEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->protection.protectionStatus != 0) {
|
||||
sub_80838EC(&entityInfo->protection.protectionStatusTurns);
|
||||
if (entityInfo->protection.protectionStatusTurns == 0) {
|
||||
SendProtectionEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->waitingStruct.waitingStatus != 0) {
|
||||
sub_80838EC(&entityInfo->waitingStruct.waitingStatusTurns);
|
||||
if (entityInfo->waitingStruct.waitingStatusTurns == 0) {
|
||||
SendWaitingEndMessage(entity, entity, 0);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->linked.linkedStatus != 0) {
|
||||
sub_80838EC(&entityInfo->linked.linkedStatusTurns);
|
||||
if (entityInfo->linked.linkedStatusTurns == 0) {
|
||||
SendLinkedEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->moveStatus.moveStatus != 0) {
|
||||
sub_80838EC(&entityInfo->moveStatus.moveStatusTurns);
|
||||
if (entityInfo->moveStatus.moveStatusTurns == 0) {
|
||||
SendMoveEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->transformStatus.transformStatus != 0) {
|
||||
sub_80838EC(&entityInfo->transformStatus.transformStatusTurns);
|
||||
if (entityInfo->transformStatus.transformStatusTurns == 0) {
|
||||
SendTransformEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->eyesightStatus.eyesightStatus != 0) {
|
||||
sub_80838EC(&entityInfo->eyesightStatus.eyesightStatusTurns);
|
||||
if (entityInfo->eyesightStatus.eyesightStatusTurns == 0) {
|
||||
SendEyesightEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->muzzled.muzzled != 0) {
|
||||
sub_80838EC(&entityInfo->muzzled.muzzledTurns);
|
||||
if (entityInfo->muzzled.muzzledTurns == 0) {
|
||||
SendMuzzledEndMessage(entity, entity);
|
||||
}
|
||||
}
|
||||
if (!EntityExists(entity) || sub_8044B28())
|
||||
return;
|
||||
|
||||
if (entityInfo->terrifiedTurns != 0) {
|
||||
sub_80838EC(&entityInfo->terrifiedTurns);
|
||||
if (entityInfo->terrifiedTurns == 0) {
|
||||
SetMessageArgument(gAvailablePokemonNames, entity, 0);
|
||||
SendMessage(entity, gPtrStenchWavedOffMessage);
|
||||
}
|
||||
}
|
||||
|
||||
spdChange = FALSE;
|
||||
for (i = 0; i < NUM_SPEED_COUNTERS; i++) {
|
||||
if (entityInfo->speedDownCounters[i] != 0) {
|
||||
sub_80838EC(&entityInfo->speedDownCounters[i]);
|
||||
if (entityInfo->speedDownCounters[i] == 0)
|
||||
spdChange = TRUE;
|
||||
}
|
||||
|
||||
if (entityInfo->speedUpCounters[i] != 0) {
|
||||
sub_80838EC(&entityInfo->speedUpCounters[i]);
|
||||
if (entityInfo->speedUpCounters[i] == 0)
|
||||
spdChange = TRUE;
|
||||
}
|
||||
}
|
||||
if (spdChange) {
|
||||
s32 oldSpdStage = entity->info->speedStage;
|
||||
s32 newSpdStage = CalcSpeedStage(entity);
|
||||
|
||||
if (oldSpdStage != newSpdStage) {
|
||||
SetMessageArgument(gAvailablePokemonNames, entity, 0);
|
||||
SendMessage(entity, gUnknown_80FA124[newSpdStage]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern s32 gUnknown_202F378;
|
||||
extern const Position gUnknown_80F4D44[];
|
||||
|
||||
void sub_8075050(EntityInfo *info);
|
||||
|
||||
void sub_8074FB0(Entity *entity, s32 a1, Position *pos)
|
||||
{
|
||||
#ifdef NONMATCHING
|
||||
Unk_Entity_x184 *strPtr;
|
||||
#else
|
||||
register Unk_Entity_x184 *strPtr asm("r1");
|
||||
#endif // NONMATCHING
|
||||
|
||||
EntityInfo *entityInfo = entity->info;
|
||||
|
||||
if (entityInfo->numMoveTiles > 3) {
|
||||
entityInfo->action.action = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (gGameOptionsRef->dungeonSpeed != 0)
|
||||
gUnknown_202F378 = 2;
|
||||
else
|
||||
gUnknown_202F378 = 1;
|
||||
|
||||
strPtr = &entityInfo->unk184[entityInfo->numMoveTiles];
|
||||
strPtr->unk1A = 0;
|
||||
strPtr->lastMoveDirection = a1;
|
||||
strPtr->previousTargetMovePosition1.x = entity->pos.x;
|
||||
strPtr->previousTargetMovePosition1.y = entity->pos.y;
|
||||
strPtr->previousTargetMovePosition2.x = pos->x;
|
||||
strPtr->previousTargetMovePosition2.y = pos->y;
|
||||
strPtr->lastMoveIncrement.x = gUnknown_80F4D44[a1].x * gUnknown_202F378;
|
||||
strPtr->lastMoveIncrement.y = gUnknown_80F4D44[a1].y * gUnknown_202F378;
|
||||
sub_8075050(entityInfo);
|
||||
}
|
||||
//
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user