mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-17 10:36:50 -05:00
continue decomping more dungeon side
This commit is contained in:
parent
00940175b4
commit
7fd9ef920a
|
|
@ -7542,7 +7542,7 @@ _08056400:
|
|||
bl SendImmobilizeEndMessage
|
||||
adds r0, r5, 0
|
||||
adds r1, r5, 0
|
||||
bl sub_807A6C8
|
||||
bl SendLinkedEndMessage
|
||||
_08056418:
|
||||
ldr r0, _08056464
|
||||
ldrb r0, [r0]
|
||||
|
|
|
|||
|
|
@ -1133,7 +1133,7 @@ _080585EC:
|
|||
bl sub_80522F4
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_807A4C8
|
||||
bl SendProtectionEndMessage
|
||||
movs r6, 0x1
|
||||
_08058602:
|
||||
movs r3, 0x80
|
||||
|
|
@ -1414,7 +1414,7 @@ sub_80587E8:
|
|||
lsrs r4, r1, 31
|
||||
adds r0, r6, 0
|
||||
adds r1, r5, 0
|
||||
bl sub_807A290
|
||||
bl SendNonVolatileEndMessage
|
||||
b _0805882E
|
||||
_0805881A:
|
||||
movs r3, 0x80
|
||||
|
|
|
|||
|
|
@ -431,7 +431,7 @@ _0806A650:
|
|||
bne _0806A6D2
|
||||
adds r0, r6, 0
|
||||
adds r1, r6, 0
|
||||
bl sub_807A290
|
||||
bl SendNonVolatileEndMessage
|
||||
b _0806A6D2
|
||||
_0806A664:
|
||||
cmp r1, 0
|
||||
|
|
@ -1157,7 +1157,7 @@ sub_806ABAC:
|
|||
bne _0806ABD4
|
||||
adds r0, r6, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_807A290
|
||||
bl SendNonVolatileEndMessage
|
||||
_0806ABD4:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x40
|
||||
|
|
@ -1172,7 +1172,7 @@ _0806ABD4:
|
|||
bne _0806ABF4
|
||||
adds r0, r6, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_807A400
|
||||
bl SendVolatileEndMessage
|
||||
_0806ABF4:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x42
|
||||
|
|
@ -1187,7 +1187,7 @@ _0806ABF4:
|
|||
bne _0806AC14
|
||||
adds r0, r6, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_807A290
|
||||
bl SendNonVolatileEndMessage
|
||||
_0806AC14:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x29
|
||||
|
|
@ -1202,7 +1202,7 @@ _0806AC14:
|
|||
bne _0806AC34
|
||||
adds r0, r6, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_807A400
|
||||
bl SendVolatileEndMessage
|
||||
_0806AC34:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x36
|
||||
|
|
@ -1232,7 +1232,7 @@ _0806AC66:
|
|||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
movs r3, 0x1
|
||||
bl sub_807A124
|
||||
bl SendSleepEndMessage
|
||||
_0806AC72:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x41
|
||||
|
|
@ -1265,7 +1265,7 @@ _0806AC92:
|
|||
bhi _0806ACB8
|
||||
adds r0, r6, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_807A290
|
||||
bl SendNonVolatileEndMessage
|
||||
_0806ACB8:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x25
|
||||
|
|
@ -1284,7 +1284,7 @@ _0806ACB8:
|
|||
bne _0806ACE0
|
||||
adds r0, r6, 0
|
||||
adds r1, r4, 0
|
||||
bl sub_807A4C8
|
||||
bl SendProtectionEndMessage
|
||||
_0806ACE0:
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
|
|
|
|||
|
|
@ -1232,7 +1232,7 @@ _0806D9D4:
|
|||
bne _0806D9E6
|
||||
mov r0, r9
|
||||
adds r1, r7, 0
|
||||
bl sub_807A7C8
|
||||
bl SendTransformEndMessage
|
||||
_0806D9E6:
|
||||
mov r0, r8
|
||||
cmp r0, 0
|
||||
|
|
@ -1692,7 +1692,7 @@ _0806DD62:
|
|||
mov r0, r9
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x3
|
||||
bl sub_807A5D0
|
||||
bl SendWaitingEndMessage
|
||||
b _0806DDA2
|
||||
.align 2, 0
|
||||
_0806DD80: .4byte gDungeonGlobalData
|
||||
|
|
@ -1706,7 +1706,7 @@ _0806DD94:
|
|||
mov r0, r9
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x2
|
||||
bl sub_807A5D0
|
||||
bl SendWaitingEndMessage
|
||||
_0806DDA2:
|
||||
adds r0, r7, 0
|
||||
bl sub_8078084
|
||||
|
|
@ -1854,7 +1854,7 @@ _0806DEC8:
|
|||
mov r0, r9
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x3
|
||||
bl sub_807A5D0
|
||||
bl SendWaitingEndMessage
|
||||
b _0806DEF2
|
||||
.align 2, 0
|
||||
_0806DED4: .4byte gTeamInventory_203B460
|
||||
|
|
@ -1867,7 +1867,7 @@ _0806DEE4:
|
|||
mov r0, r9
|
||||
adds r1, r7, 0
|
||||
movs r2, 0x2
|
||||
bl sub_807A5D0
|
||||
bl SendWaitingEndMessage
|
||||
_0806DEF2:
|
||||
adds r0, r7, 0
|
||||
bl sub_8078084
|
||||
|
|
|
|||
|
|
@ -1880,7 +1880,7 @@ _08074C48:
|
|||
adds r1, r7, 0
|
||||
movs r2, 0x1
|
||||
movs r3, 0x1
|
||||
bl sub_807A124
|
||||
bl SendSleepEndMessage
|
||||
_08074C6E:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -1909,7 +1909,7 @@ _08074C88:
|
|||
bne _08074CAA
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_807A290
|
||||
bl SendNonVolatileEndMessage
|
||||
_08074CAA:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -1967,7 +1967,7 @@ _08074D00:
|
|||
bne _08074D22
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_807A400
|
||||
bl SendVolatileEndMessage
|
||||
_08074D22:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -1996,7 +1996,7 @@ _08074D3C:
|
|||
bne _08074D5E
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_807A4C8
|
||||
bl SendProtectionEndMessage
|
||||
_08074D5E:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -2026,7 +2026,7 @@ _08074D78:
|
|||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
movs r2, 0
|
||||
bl sub_807A5D0
|
||||
bl SendWaitingEndMessage
|
||||
_08074D9C:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -2055,7 +2055,7 @@ _08074DB6:
|
|||
bne _08074DD8
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_807A6C8
|
||||
bl SendLinkedEndMessage
|
||||
_08074DD8:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -2084,7 +2084,7 @@ _08074DF2:
|
|||
bne _08074E14
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_807A734
|
||||
bl SendMoveEndMessage
|
||||
_08074E14:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -2113,7 +2113,7 @@ _08074E2E:
|
|||
bne _08074E50
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_807A7C8
|
||||
bl SendTransformEndMessage
|
||||
_08074E50:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -2142,7 +2142,7 @@ _08074E6A:
|
|||
bne _08074E8C
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_807A888
|
||||
bl SendEyesightEndMessage
|
||||
_08074E8C:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
@ -2169,7 +2169,7 @@ _08074E9A:
|
|||
bne _08074EC6
|
||||
adds r0, r7, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_807A924
|
||||
bl SendMuzzledEndMessage
|
||||
_08074EC6:
|
||||
adds r0, r7, 0
|
||||
bl EntityExists
|
||||
|
|
|
|||
1862
asm/code_8077274.s
1862
asm/code_8077274.s
File diff suppressed because it is too large
Load Diff
344
asm/code_8077274_1.s
Normal file
344
asm/code_8077274_1.s
Normal file
|
|
@ -0,0 +1,344 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_807AB38
|
||||
sub_807AB38:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x1A8
|
||||
adds r2, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r4, r1, 24
|
||||
ldr r0, [r2, 0x70]
|
||||
ldrb r0, [r0, 0x6]
|
||||
cmp r0, 0
|
||||
beq _0807AB54
|
||||
b _0807ADA6
|
||||
_0807AB54:
|
||||
adds r0, r2, 0
|
||||
str r2, [sp, 0x1A4]
|
||||
bl GetMapTileForDungeonEntity_2
|
||||
ldrh r1, [r0]
|
||||
movs r0, 0x40
|
||||
ands r0, r1
|
||||
ldr r2, [sp, 0x1A4]
|
||||
cmp r0, 0
|
||||
bne _0807AB6A
|
||||
b _0807ADA6
|
||||
_0807AB6A:
|
||||
ldr r3, _0807AC10
|
||||
ldr r0, [r3]
|
||||
ldr r5, _0807AC14
|
||||
adds r1, r0, r5
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0
|
||||
beq _0807AB7A
|
||||
b _0807ADA6
|
||||
_0807AB7A:
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r3, [r3]
|
||||
ldr r1, _0807AC18
|
||||
adds r0, r3, r1
|
||||
ldrb r1, [r0]
|
||||
cmp r1, 0xFF
|
||||
bne _0807AB8C
|
||||
b _0807ADA6
|
||||
_0807AB8C:
|
||||
lsls r0, r1, 3
|
||||
subs r0, r1
|
||||
lsls r0, 2
|
||||
ldr r5, _0807AC1C
|
||||
adds r0, r5
|
||||
adds r3, r0
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
cmp r4, 0
|
||||
beq _0807AC20
|
||||
movs r1, 0x6
|
||||
ldrsh r0, [r2, r1]
|
||||
subs r6, r0, 0x4
|
||||
adds r0, 0x4
|
||||
cmp r6, r0
|
||||
ble _0807ABAE
|
||||
b _0807ACB4
|
||||
_0807ABAE:
|
||||
movs r4, 0x4
|
||||
ldrsh r0, [r2, r4]
|
||||
subs r4, r0, 0x4
|
||||
adds r0, 0x4
|
||||
adds r5, r6, 0x1
|
||||
mov r9, r5
|
||||
cmp r4, r0
|
||||
bgt _0807AC00
|
||||
mov r1, r8
|
||||
lsls r0, r1, 2
|
||||
mov r1, sp
|
||||
adds r5, r0, r1
|
||||
_0807ABC6:
|
||||
adds r0, r4, 0
|
||||
adds r1, r6, 0
|
||||
str r2, [sp, 0x1A4]
|
||||
bl GetMapTile_2
|
||||
adds r1, r0, 0
|
||||
ldr r0, [r1, 0x10]
|
||||
ldr r2, [sp, 0x1A4]
|
||||
cmp r0, 0
|
||||
bne _0807ABF4
|
||||
ldrh r1, [r1]
|
||||
movs r0, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0x1
|
||||
bne _0807ABF4
|
||||
mov r0, r8
|
||||
cmp r0, 0x63
|
||||
bgt _0807ABF4
|
||||
strh r4, [r5]
|
||||
strh r6, [r5, 0x2]
|
||||
adds r5, 0x4
|
||||
movs r1, 0x1
|
||||
add r8, r1
|
||||
_0807ABF4:
|
||||
adds r4, 0x1
|
||||
movs r1, 0x4
|
||||
ldrsh r0, [r2, r1]
|
||||
adds r0, 0x4
|
||||
cmp r4, r0
|
||||
ble _0807ABC6
|
||||
_0807AC00:
|
||||
mov r6, r9
|
||||
movs r4, 0x6
|
||||
ldrsh r0, [r2, r4]
|
||||
adds r0, 0x4
|
||||
cmp r6, r0
|
||||
ble _0807ABAE
|
||||
b _0807ACB4
|
||||
.align 2, 0
|
||||
_0807AC10: .4byte gDungeonGlobalData
|
||||
_0807AC14: .4byte 0x00000671
|
||||
_0807AC18: .4byte 0x00003a0c
|
||||
_0807AC1C: .4byte 0x000104c4
|
||||
_0807AC20:
|
||||
movs r5, 0x4
|
||||
ldrsh r0, [r2, r5]
|
||||
subs r1, r0, 0x4
|
||||
movs r5, 0x2
|
||||
ldrsh r4, [r3, r5]
|
||||
mov r10, r4
|
||||
cmp r10, r1
|
||||
bge _0807AC32
|
||||
mov r10, r1
|
||||
_0807AC32:
|
||||
adds r1, r0, 0x5
|
||||
movs r0, 0x6
|
||||
ldrsh r7, [r3, r0]
|
||||
cmp r7, r1
|
||||
ble _0807AC3E
|
||||
adds r7, r1, 0
|
||||
_0807AC3E:
|
||||
movs r1, 0x6
|
||||
ldrsh r0, [r2, r1]
|
||||
subs r2, r0, 0x4
|
||||
movs r4, 0x4
|
||||
ldrsh r1, [r3, r4]
|
||||
cmp r1, r2
|
||||
bge _0807AC4E
|
||||
adds r1, r2, 0
|
||||
_0807AC4E:
|
||||
adds r0, 0x5
|
||||
movs r5, 0x8
|
||||
ldrsh r2, [r3, r5]
|
||||
cmp r2, r0
|
||||
ble _0807AC5A
|
||||
adds r2, r0, 0
|
||||
_0807AC5A:
|
||||
adds r6, r1, 0
|
||||
cmp r6, r2
|
||||
bge _0807ACB4
|
||||
_0807AC60:
|
||||
mov r4, r10
|
||||
adds r0, r6, 0x1
|
||||
mov r9, r0
|
||||
cmp r4, r7
|
||||
bge _0807ACAE
|
||||
mov r1, r8
|
||||
lsls r0, r1, 2
|
||||
mov r1, sp
|
||||
adds r5, r0, r1
|
||||
_0807AC72:
|
||||
adds r0, r4, 0
|
||||
adds r1, r6, 0
|
||||
str r2, [sp, 0x1A4]
|
||||
bl GetMapTile_2
|
||||
adds r1, r0, 0
|
||||
ldr r0, [r1, 0x10]
|
||||
ldr r2, [sp, 0x1A4]
|
||||
cmp r0, 0
|
||||
bne _0807ACA8
|
||||
ldrh r1, [r1]
|
||||
movs r0, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0x1
|
||||
bne _0807ACA8
|
||||
movs r0, 0x40
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0807ACA8
|
||||
mov r0, r8
|
||||
cmp r0, 0x63
|
||||
bgt _0807ACA8
|
||||
strh r4, [r5]
|
||||
strh r6, [r5, 0x2]
|
||||
adds r5, 0x4
|
||||
movs r1, 0x1
|
||||
add r8, r1
|
||||
_0807ACA8:
|
||||
adds r4, 0x1
|
||||
cmp r4, r7
|
||||
blt _0807AC72
|
||||
_0807ACAE:
|
||||
mov r6, r9
|
||||
cmp r6, r2
|
||||
blt _0807AC60
|
||||
_0807ACB4:
|
||||
ldr r0, _0807AD74
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
ldr r1, _0807AD78
|
||||
movs r4, 0
|
||||
ldrsh r1, [r1, r4]
|
||||
bl DungeonRandomRange
|
||||
adds r7, r0, 0
|
||||
cmp r7, r8
|
||||
blt _0807ACCC
|
||||
mov r7, r8
|
||||
_0807ACCC:
|
||||
movs r6, 0
|
||||
cmp r6, r7
|
||||
bge _0807ADA0
|
||||
mov r10, r6
|
||||
_0807ACD4:
|
||||
mov r0, r8
|
||||
bl DungeonRandomCapped
|
||||
adds r2, r0, 0
|
||||
movs r3, 0
|
||||
cmp r3, r8
|
||||
bge _0807AD0C
|
||||
lsls r0, r2, 2
|
||||
mov r5, sp
|
||||
adds r1, r5, r0
|
||||
movs r4, 0
|
||||
ldrsh r1, [r1, r4]
|
||||
adds r5, r0, 0
|
||||
cmp r1, 0
|
||||
bne _0807AD1C
|
||||
_0807ACF2:
|
||||
adds r2, 0x1
|
||||
cmp r2, r8
|
||||
blt _0807ACFA
|
||||
movs r2, 0
|
||||
_0807ACFA:
|
||||
adds r3, 0x1
|
||||
cmp r3, r8
|
||||
bge _0807AD0C
|
||||
lsls r0, r2, 2
|
||||
add r0, sp
|
||||
movs r5, 0
|
||||
ldrsh r0, [r0, r5]
|
||||
cmp r0, 0
|
||||
beq _0807ACF2
|
||||
_0807AD0C:
|
||||
lsls r0, r2, 2
|
||||
mov r2, sp
|
||||
adds r1, r2, r0
|
||||
movs r4, 0
|
||||
ldrsh r1, [r1, r4]
|
||||
adds r5, r0, 0
|
||||
cmp r1, 0
|
||||
beq _0807ADA0
|
||||
_0807AD1C:
|
||||
movs r0, 0x1
|
||||
bl sub_803D970
|
||||
add r4, sp, 0x190
|
||||
movs r1, 0
|
||||
strh r0, [r4]
|
||||
mov r0, r10
|
||||
strh r0, [r4, 0x8]
|
||||
strb r1, [r4, 0x2]
|
||||
mov r1, r10
|
||||
str r1, [r4, 0x4]
|
||||
movs r0, 0x1
|
||||
strb r0, [r4, 0x10]
|
||||
mov r2, sp
|
||||
adds r1, r2, r5
|
||||
ldrh r0, [r1]
|
||||
strh r0, [r4, 0xC]
|
||||
ldrh r0, [r1, 0x2]
|
||||
strh r0, [r4, 0xE]
|
||||
movs r5, 0
|
||||
ldrsh r0, [r4, r5]
|
||||
movs r1, 0x1
|
||||
bl sub_806AA0C
|
||||
lsls r0, 24
|
||||
adds r6, 0x1
|
||||
mov r9, r6
|
||||
cmp r0, 0
|
||||
beq _0807AD9A
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_806B7F8
|
||||
adds r4, r0, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0807AD9A
|
||||
movs r0, 0xC8
|
||||
lsls r0, 8
|
||||
str r0, [r4, 0x1C]
|
||||
movs r5, 0
|
||||
b _0807AD84
|
||||
.align 2, 0
|
||||
_0807AD74: .4byte gUnknown_80F4DA2
|
||||
_0807AD78: .4byte gUnknown_80F4DA4
|
||||
_0807AD7C:
|
||||
movs r0, 0x57
|
||||
bl sub_803E46C
|
||||
adds r5, 0x1
|
||||
_0807AD84:
|
||||
cmp r5, 0x63
|
||||
bgt _0807AD96
|
||||
ldr r0, [r4, 0x1C]
|
||||
movs r1, 0xAA
|
||||
bl sub_8009DA4
|
||||
str r0, [r4, 0x1C]
|
||||
cmp r0, 0xFF
|
||||
bgt _0807AD7C
|
||||
_0807AD96:
|
||||
mov r0, r10
|
||||
str r0, [r4, 0x1C]
|
||||
_0807AD9A:
|
||||
mov r6, r9
|
||||
cmp r6, r7
|
||||
blt _0807ACD4
|
||||
_0807ADA0:
|
||||
movs r0, 0x1
|
||||
bl sub_804178C
|
||||
_0807ADA6:
|
||||
add sp, 0x1A8
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_807AB38
|
||||
|
||||
.align 2,0
|
||||
22
include/code_8077274_1.h
Normal file
22
include/code_8077274_1.h
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef GUARD_CODE_8077274_1_H
|
||||
#define GUARD_CODE_8077274_1_H
|
||||
|
||||
void sub_8079F20(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, u8 param_4);
|
||||
void sub_807A0CC(struct DungeonEntity * pokemon, struct DungeonEntity * target);
|
||||
void SendSleepEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 param_3, bool8 param_4);
|
||||
void SendNonVolatileEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target);
|
||||
void SendImmobilizeEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target);
|
||||
void SendVolatileEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target);
|
||||
void SendProtectionEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target);
|
||||
void SendWaitingEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 waitingStatus);
|
||||
void SendLinkedEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target);
|
||||
void SendMoveEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target);
|
||||
void SendTransformEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target);
|
||||
void SendEyesightEndMessage(struct DungeonEntity * pokemon,struct DungeonEntity * target);
|
||||
void SendMuzzledEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target);
|
||||
void sub_807A96C(struct DungeonEntity *pokemon, struct DungeonEntity *target);
|
||||
void sub_807A9B0(struct DungeonEntity * pokemon);
|
||||
void sub_807A9D8(struct DungeonEntity *pokemon, struct DungeonEntity *target);
|
||||
void sub_807AA30(void);
|
||||
|
||||
#endif // !GUARD_CODE_8077274_1_H
|
||||
|
|
@ -101,7 +101,9 @@ struct DungeonEntityData
|
|||
/* 0x8C */ u8 IQSkillsSelected[4]; // IQ skills selected in the IQ skills menu.
|
||||
/* 0x90 */ u8 IQSkillsEnabled[4];
|
||||
/* 0x94 */ u8 tactic;
|
||||
u8 fill95[0xA4 - 0x95];
|
||||
u8 fill95[0x9C - 0x95];
|
||||
/* 0x9C */ u32 unk9C;
|
||||
u8 fillA0[0xA4 - 0xA0];
|
||||
/* 0xA4 */ u8 clientType;
|
||||
u8 fillA5[0xA8 - 0xA5];
|
||||
// Statuses are split into groups based on which ones can't overlap.
|
||||
|
|
@ -135,7 +137,8 @@ struct DungeonEntityData
|
|||
/* 0xCC */ u8 cursedDamageTimer;
|
||||
u8 fillCD[0xD0 - 0xCD];
|
||||
/* 0xD0 */ u8 linkedStatus;
|
||||
u8 fillD1[0xD9 - 0xD1];
|
||||
u8 fillD1[0xD8 - 0xD1];
|
||||
/* 0xD8 */ u8 unkD8;
|
||||
/* 0xD9 */ u8 linkedStatusTurnsLeft;
|
||||
/* 0xDA */ u8 linkedStatusDamageTimer;
|
||||
u8 fillDB;
|
||||
|
|
@ -270,7 +273,9 @@ struct DungeonEntity
|
|||
/* 0x50 */ u16 spriteBaseForDirection;
|
||||
u8 fill52[0x54 - 0x52];
|
||||
/* 0x54 */ u16 spriteGlobalIndex;
|
||||
u8 fill56[0x6A - 0x56];
|
||||
u8 fill56[0x64 - 0x56];
|
||||
u32 unk64;
|
||||
u8 fill68[2];
|
||||
/* 0x6A */ u8 unk6A;
|
||||
/* 0x6A */ u8 unk6B;
|
||||
/* 0x6C */ u8 facingDir;
|
||||
|
|
|
|||
|
|
@ -110,7 +110,11 @@ struct DungeonGlobalData
|
|||
/* 0x1358C */ struct DungeonEntity *wildPokemon[DUNGEON_MAX_WILD_POKEMON];
|
||||
/* 0x135CC */ struct DungeonEntity *allPokemon[DUNGEON_MAX_POKEMON]; // Contains both team and wild Pokémon
|
||||
/* 0x1361C */ struct DungeonEntity *clientPokemon[2]; // Not sure how large this array is.
|
||||
u8 fill13624[0x181E8 - 0x13624];
|
||||
u8 fill13624[0x17B30 - 0x13624];
|
||||
/* 0x17B30 */ u32 unk17B30;
|
||||
/* 0x17B34 */ u8 fillunk1734[0x17B3C - 0x17B34];
|
||||
/* 0x17B30 */ u32 unk17B3C;
|
||||
u8 fill17B40[0x181E8 - 0x17B40];
|
||||
/* 0x181E8 */ struct Position posScreenWorld;
|
||||
/* 0x181EC */ struct Position prevPosScreenWorld;
|
||||
/* 0x181F0 */ struct Position posScreenPixel;
|
||||
|
|
|
|||
|
|
@ -243,6 +243,8 @@ SECTIONS {
|
|||
asm/code_8075BA4.o(.text);
|
||||
src/status.o(.text);
|
||||
asm/code_8077274.o(.text);
|
||||
src/code_8077274_1.o(.text);
|
||||
asm/code_8077274_1.o(.text);
|
||||
src/dungeon_ai_movement.o(.text);
|
||||
asm/code_807AEBC.o(.text);
|
||||
src/dungeon_ai_movement_1.o(.text);
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ extern void sub_8076D10(struct DungeonEntity *pokemon, struct DungeonEntity *r1)
|
|||
extern void LevelDownTarget(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32 r2);
|
||||
extern void sub_8078B5C(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32);
|
||||
extern void SetMessageArgument(u8 *buffer, struct DungeonEntity *r1, u32);
|
||||
extern void sub_807A290(struct DungeonEntity *pokemon, struct DungeonEntity *r1);
|
||||
extern void SendNonVolatileEndMessage(struct DungeonEntity *pokemon, struct DungeonEntity *r1);
|
||||
extern void sub_80522F4(struct DungeonEntity *pokemon, struct DungeonEntity *r1, const char[]);
|
||||
extern void RestoreVisionTarget(struct DungeonEntity *pokemon, struct DungeonEntity *r1);
|
||||
extern void sub_8077910(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32, u32);
|
||||
|
|
@ -110,7 +110,7 @@ void sub_804841C(struct DungeonEntity *pokemon, struct DungeonEntity *target)
|
|||
void sub_8048428(struct DungeonEntity *pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
if(target->entityData->nonVolatileStatus == NON_VOLATILE_STATUS_PARALYZED)
|
||||
sub_807A290(pokemon, target);
|
||||
SendNonVolatileEndMessage(pokemon, target);
|
||||
else
|
||||
// Pointer to "But nothing happened!"
|
||||
sub_80522F4(pokemon, target, *gUnknown_80F89F4);
|
||||
|
|
@ -119,7 +119,7 @@ void sub_8048428(struct DungeonEntity *pokemon, struct DungeonEntity *target)
|
|||
void sub_8048450(struct DungeonEntity *pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
if((u8)(target->entityData->nonVolatileStatus - 2) <= 1)
|
||||
sub_807A290(pokemon, target);
|
||||
SendNonVolatileEndMessage(pokemon, target);
|
||||
else
|
||||
// Pointer to "But nothing happened!"
|
||||
sub_80522F4(pokemon, target, *gUnknown_80F89F4);
|
||||
|
|
@ -164,7 +164,7 @@ void sub_80484DC(struct DungeonEntity *pokemon, struct DungeonEntity *target)
|
|||
void sub_80484E8(struct DungeonEntity *pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
if(target->entityData->nonVolatileStatus == NON_VOLATILE_STATUS_BURNED)
|
||||
sub_807A290(pokemon, target);
|
||||
SendNonVolatileEndMessage(pokemon, target);
|
||||
else
|
||||
{
|
||||
SetMessageArgument(gAvailablePokemonNames, target, 0);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include "constants/status.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "dungeon_entity.h"
|
||||
#include "code_8077274_1.h"
|
||||
#include "moves.h"
|
||||
#include "status_checks_1.h"
|
||||
#include "weather.h"
|
||||
|
|
@ -42,7 +43,6 @@ extern void sub_80768DC(struct DungeonEntity *, struct DungeonEntity *, u32, u32
|
|||
extern void sub_80772C0(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32, u32);
|
||||
extern u8 sub_807EAA0(u32, u32);
|
||||
extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, const char[]);
|
||||
extern void sub_8079F20(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32);
|
||||
extern void sub_8077434(struct DungeonEntity *r0, struct DungeonEntity *r1, u32 , u32, u32);
|
||||
extern s32 sub_80556BC(struct DungeonEntity *, struct DungeonEntity *, u8, u32, u32, u32);
|
||||
extern u8 sub_805727C(struct DungeonEntity *, struct DungeonEntity *, s16);
|
||||
|
|
|
|||
743
src/code_8077274_1.c
Normal file
743
src/code_8077274_1.c
Normal file
|
|
@ -0,0 +1,743 @@
|
|||
#include "global.h"
|
||||
#include "constants/item.h"
|
||||
#include "constants/status.h"
|
||||
#include "dungeon_entity.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "code_80521D0.h"
|
||||
#include "code_8077274_1.h"
|
||||
#include "code_808417C.h"
|
||||
#include "status_checks_1.h"
|
||||
|
||||
extern u8 gAvailablePokemonNames[0x58];
|
||||
extern u8 *gUnknown_80FA8BC[];
|
||||
extern u8 *gUnknown_80FA824[];
|
||||
extern u8 *gUnknown_80FA81C[];
|
||||
extern u8 *gUnknown_80FABF8[];
|
||||
extern u8 *gUnknown_80FA820[];
|
||||
extern u8 *gUnknown_80FA800[];
|
||||
extern u8 *gUnknown_80FAC38[];
|
||||
extern u8 *gUnknown_80FA97C[];
|
||||
extern u8 *gUnknown_80FA9DC[];
|
||||
extern u8 *gUnknown_80FAAAC[];
|
||||
extern u8 *gUnknown_80FAB90[];
|
||||
extern u8 *gUnknown_80FAC18[];
|
||||
extern u8 *gUnknown_80FA638[];
|
||||
extern u8 *gUnknown_80FA69C[];
|
||||
extern u8 *gUnknown_80FA658[];
|
||||
extern u8 *gUnknown_80FA67C[];
|
||||
extern u8 *gUnknown_80FA6BC[];
|
||||
extern u8 *gUnknown_80FA6D4[];
|
||||
extern u8 *gUnknown_80FA9C0[];
|
||||
extern u8 *gUnknown_80FAA68[];
|
||||
extern u8 *gUnknown_80FAAC8[];
|
||||
extern u8 *gUnknown_80FAAE8[];
|
||||
extern u8 *gUnknown_80FAB08[];
|
||||
extern u8 *gUnknown_80FAB28[];
|
||||
extern u8 *gUnknown_80FAB40[];
|
||||
extern u8 *gUnknown_80FA7BC[];
|
||||
extern u8 *gUnknown_80FA9A0[];
|
||||
extern u8 *gUnknown_80FA7DC[];
|
||||
extern u8 *gUnknown_80FA79C[];
|
||||
extern u8 *gUnknown_80FAA8C[];
|
||||
extern u8 *gUnknown_80FA8E0[];
|
||||
extern u8 *gUnknown_80FA90C[];
|
||||
extern u8 *gUnknown_80FA934[];
|
||||
extern u8 *gUnknown_80FA95C[];
|
||||
extern u8 *gUnknown_80FABBC[];
|
||||
extern u8 *gUnknown_80FAB6C[];
|
||||
extern u8 *gUnknown_80FA9F4[];
|
||||
extern u8 *gUnknown_80FAA0C[];
|
||||
extern u8 *gUnknown_80FAA2C[];
|
||||
extern u8 *gUnknown_80FAA48[];
|
||||
extern u8 *gUnknown_80FABC0[];
|
||||
extern u8 *gUnknown_80FA888[];
|
||||
extern u8 *gUnknown_80FA8A8[];
|
||||
extern u8 *gUnknown_80FA868[];
|
||||
extern s16 gUnknown_80F4F78;
|
||||
extern s16 gUnknown_80F4F2C[];
|
||||
extern s32 gUnknown_80F4F7A;
|
||||
extern u8 *gUnknown_80FA6E8[];
|
||||
extern u8 *gUnknown_80FA708[];
|
||||
extern u8 *gUnknown_80FA70C[];
|
||||
extern u8 *gUnknown_80FA734[];
|
||||
extern u8 *gUnknown_80FA710[];
|
||||
extern u8 *gUnknown_80FA124[];
|
||||
extern u8 *gPtrSealedMoveReleasedMessage[];
|
||||
extern u8 *gUnknown_81004E8[];
|
||||
extern u8 *gPtrExposedWoreOffMessage[];
|
||||
extern u8 *gUnknown_8100594[];
|
||||
|
||||
extern void sub_8049ED4();
|
||||
extern void sub_8040A84();
|
||||
extern void sub_803E46C(u32);
|
||||
extern u8 sub_806CEBC(struct DungeonEntity *);
|
||||
extern void sub_806CCB4(struct DungeonEntity *, u8);
|
||||
extern void SetMessageArgument(u8 *buffer, struct DungeonEntity *r1, u32);
|
||||
extern void sub_80522F4(struct DungeonEntity *pokemon, struct DungeonEntity *r1, const char[]);
|
||||
extern void DungeonEntityUpdateStatusSprites(struct DungeonEntity *);
|
||||
extern void sub_8042A74(struct DungeonEntity *r0);
|
||||
extern void sub_8076CB4(u32);
|
||||
extern s32 GetMovementSpeed(struct DungeonEntity *);
|
||||
extern void sub_807EC28(u32);
|
||||
extern s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2);
|
||||
extern u32 sub_80687D0(s16);
|
||||
extern void sub_806A898(struct DungeonEntity *, u32, u32);
|
||||
extern void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *r1, s16, s16, u32);
|
||||
extern void sub_806CE68(struct DungeonEntity *, s32);
|
||||
extern void sub_806F324(struct DungeonEntity *, s16, u32, u32);
|
||||
extern void sub_8075C58(struct DungeonEntity *, struct DungeonEntity *, s32, s32);
|
||||
extern void sub_806BFC0(struct DungeonEntityData *, u32);
|
||||
extern void sub_80420C8(struct DungeonEntity *r0);
|
||||
|
||||
void sub_8079F20(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, u8 param_4)
|
||||
{
|
||||
bool8 bVar1; // r9
|
||||
s32 moveSpeed;
|
||||
struct PokemonMove *move;
|
||||
struct DungeonEntityData *entityData; // r7
|
||||
bool8 bVar8; // r8
|
||||
s32 index;
|
||||
|
||||
bVar8 = FALSE;
|
||||
bVar1 = FALSE;
|
||||
if (EntityExists(target)) {
|
||||
entityData = target->entityData;
|
||||
if (HasNegativeStatus(target)) {
|
||||
bVar8 = TRUE;
|
||||
SendSleepEndMessage(pokemon,target,0,0);
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
SendNonVolatileEndMessage(pokemon,target);
|
||||
SendImmobilizeEndMessage(pokemon,target);
|
||||
SendVolatileEndMessage(pokemon,target);
|
||||
SendWaitingEndMessage(pokemon,target,0);
|
||||
SendLinkedEndMessage(pokemon,target);
|
||||
SendMoveEndMessage(pokemon,target);
|
||||
SendEyesightEndMessage(pokemon,target);
|
||||
SendMuzzledEndMessage(pokemon,target);
|
||||
if (entityData->perishSongTimer != 0) {
|
||||
entityData->perishSongTimer = 0;
|
||||
sub_80522F4(pokemon,target,*gUnknown_8100594);
|
||||
}
|
||||
if (entityData->exposedStatus != 0) {
|
||||
entityData->exposedStatus = 0;
|
||||
sub_80522F4(pokemon,target,*gPtrExposedWoreOffMessage);
|
||||
}
|
||||
}
|
||||
|
||||
moveSpeed = GetMovementSpeed(target);
|
||||
for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++)
|
||||
{
|
||||
entityData->slowTurnsLeft[index] = 0;
|
||||
}
|
||||
|
||||
if (moveSpeed != GetMovementSpeed(target)) {
|
||||
bVar8 = TRUE;
|
||||
sub_80522F4(pokemon,target,gUnknown_80FA124[entityData->movementSpeed]);
|
||||
}
|
||||
|
||||
for(index = 0; index < MAX_MON_MOVES; index++)
|
||||
{
|
||||
move = &entityData->moves[index];
|
||||
if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags2 & MOVE_FLAG_EXISTS)) {
|
||||
bVar8 = TRUE;
|
||||
bVar1 = TRUE;
|
||||
move->moveFlags2 &= 0xfe;
|
||||
}
|
||||
}
|
||||
|
||||
if (bVar8) {
|
||||
if (param_3 != 0) {
|
||||
sub_80420C8(target);
|
||||
}
|
||||
if (bVar1) {
|
||||
sub_80522F4(pokemon,target,*gPtrSealedMoveReleasedMessage);
|
||||
}
|
||||
}
|
||||
else if (param_4 == 0) {
|
||||
sub_80522F4(pokemon,target,*gUnknown_81004E8);
|
||||
}
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807A0CC(struct DungeonEntity * pokemon, struct DungeonEntity * target)
|
||||
{
|
||||
struct PokemonMove *move;
|
||||
struct DungeonEntityData *entityData;
|
||||
s32 index;
|
||||
|
||||
if (EntityExists(target)) {
|
||||
entityData = target->entityData;
|
||||
sub_806BFC0(entityData,0);
|
||||
entityData->perishSongTimer = 0;
|
||||
entityData->exposedStatus = 0;
|
||||
|
||||
for(index = 0; index < MAX_MON_MOVES; index++)
|
||||
{
|
||||
move = &entityData->moves[index];
|
||||
if ((move->moveFlags & MOVE_FLAG_EXISTS) != 0) {
|
||||
move->moveFlags2 = move->moveFlags2 & 0xfe;
|
||||
}
|
||||
}
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
};
|
||||
}
|
||||
|
||||
void SendSleepEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 param_3, bool8 param_4)
|
||||
{
|
||||
struct DungeonEntityData *entityData;
|
||||
bool8 bVar4;
|
||||
|
||||
bVar4 = FALSE;
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->sleepStatus) {
|
||||
case SLEEP_STATUS_NONE:
|
||||
case 6:
|
||||
break;
|
||||
case SLEEP_STATUS_SLEEP:
|
||||
bVar4 = TRUE;
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA6E8);
|
||||
break;
|
||||
case SLEEP_STATUS_SLEEPLESS:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA708);
|
||||
break;
|
||||
case SLEEP_STATUS_NIGHTMARE:
|
||||
bVar4 = TRUE;
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA70C);
|
||||
if (param_4) {
|
||||
sub_806F324(target,gUnknown_80F4F78,8,0x20f);
|
||||
}
|
||||
break;
|
||||
case SLEEP_STATUS_NAPPING:
|
||||
bVar4 = TRUE;
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA710);
|
||||
HealTargetHP(pokemon,target,gUnknown_80F4F7A,0,0);
|
||||
entityData->sleepStatus = 0;
|
||||
sub_8079F20(pokemon,target,1,1);
|
||||
break;
|
||||
case SLEEP_STATUS_YAWNING:
|
||||
if (param_3) {
|
||||
entityData->sleepStatus = SLEEP_STATUS_NONE;
|
||||
sub_8075C58(pokemon,target,CalculateStatusTurns(target,gUnknown_80F4F2C,1) + 1,1);
|
||||
return;
|
||||
}
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA734);
|
||||
break;
|
||||
}
|
||||
entityData->sleepStatus = SLEEP_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
if (bVar4) {
|
||||
sub_806CE68(target,8);
|
||||
}
|
||||
}
|
||||
|
||||
void SendNonVolatileEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target)
|
||||
{
|
||||
struct DungeonEntityData *entityData;
|
||||
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->nonVolatileStatus) {
|
||||
case NON_VOLATILE_STATUS_NONE:
|
||||
case 5:
|
||||
break;
|
||||
case NON_VOLATILE_STATUS_POISONED:
|
||||
case NON_VOLATILE_STATUS_BADLY_POISONED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA8A8);
|
||||
break;
|
||||
case NON_VOLATILE_STATUS_PARALYZED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA868);
|
||||
break;
|
||||
case NON_VOLATILE_STATUS_BURNED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA888);
|
||||
break;
|
||||
|
||||
}
|
||||
entityData->nonVolatileStatus = NON_VOLATILE_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
void SendImmobilizeEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
bool8 bVar1;
|
||||
struct DungeonEntityData *entityData;
|
||||
|
||||
bVar1 = FALSE;
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->immobilizeStatus) {
|
||||
case IMMOBILIZE_STATUS_NONE:
|
||||
case 8:
|
||||
break;
|
||||
case IMMOBILIZE_STATUS_FROZEN:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA8BC);
|
||||
bVar1 = TRUE;
|
||||
break;
|
||||
case IMMOBILIZE_STATUS_SQUEEZED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA820);
|
||||
break;
|
||||
case IMMOBILIZE_STATUS_IMMOBILIZED:
|
||||
case IMMOBILIZE_STATUS_INGRAIN:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA824);
|
||||
break;
|
||||
case IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE:
|
||||
case IMMOBILIZE_STATUS_WRAPPED_BY_FOE:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA81C);
|
||||
sub_8076CB4(entityData->unk9C);
|
||||
break;
|
||||
case IMMOBILIZE_STATUS_PETRIFIED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FABF8);
|
||||
break;
|
||||
}
|
||||
entityData->immobilizeStatus = IMMOBILIZE_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
if (bVar1) {
|
||||
sub_8042A74(target);
|
||||
}
|
||||
}
|
||||
|
||||
void SendVolatileEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
struct DungeonEntityData *entityData;
|
||||
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->volatileStatus) {
|
||||
case VOLATILE_STATUS_NONE:
|
||||
case 8:
|
||||
break;
|
||||
case VOLATILE_STATUS_CONFUSED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA800);
|
||||
break;
|
||||
case VOLATILE_STATUS_COWERING:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA97C);
|
||||
break;
|
||||
case VOLATILE_STATUS_TAUNTED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA9DC);
|
||||
break;
|
||||
case VOLATILE_STATUS_PAUSED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FAC38);
|
||||
break;
|
||||
case VOLATILE_STATUS_INFATUATED:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FAB90);
|
||||
break;
|
||||
case VOLATILE_STATUS_ENCORE:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FAAAC);
|
||||
break;
|
||||
case VOLATILE_STATUS_CRINGING:
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FAC18);
|
||||
break;
|
||||
}
|
||||
entityData->volatileStatus = VOLATILE_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
GetMovementSpeed(target);
|
||||
}
|
||||
|
||||
void SendProtectionEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
struct DungeonEntityData *entityData;
|
||||
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->protectionStatus) {
|
||||
case PROTECTION_STATUS_NONE:
|
||||
case 0xF:
|
||||
break;
|
||||
case PROTECTION_STATUS_REFLECT:
|
||||
SendMessage(target,*gUnknown_80FA638);
|
||||
break;
|
||||
case PROTECTION_STATUS_SAFEGUARD:
|
||||
SendMessage(target,*gUnknown_80FA69C);
|
||||
break;
|
||||
case PROTECTION_STATUS_LIGHT_SCREEN:
|
||||
SendMessage(target,*gUnknown_80FA658);
|
||||
break;
|
||||
case PROTECTION_STATUS_COUNTER:
|
||||
case PROTECTION_STATUS_MINI_COUNTER:
|
||||
SendMessage(target,*gUnknown_80FA67C);
|
||||
break;
|
||||
case PROTECTION_STATUS_MAGIC_COAT:
|
||||
SendMessage(target,*gUnknown_80FA6BC);
|
||||
break;
|
||||
case PROTECTION_STATUS_WISH:
|
||||
SendMessage(target,*gUnknown_80FA6D4);
|
||||
break;
|
||||
case PROTECTION_STATUS_PROTECT:
|
||||
SendMessage(target,*gUnknown_80FA9C0);
|
||||
break;
|
||||
case PROTECTION_STATUS_MIRROR_COAT:
|
||||
SendMessage(target,*gUnknown_80FAA68);
|
||||
break;
|
||||
case PROTECTION_STATUS_ENDURE:
|
||||
SendMessage(target,*gUnknown_80FAAC8);
|
||||
break;
|
||||
case PROTECTION_STATUS_MIRROR_MOVE:
|
||||
SendMessage(target,*gUnknown_80FAAE8);
|
||||
break;
|
||||
case PROTECTION_STATUS_CONVERSION_2:
|
||||
SendMessage(target,*gUnknown_80FAB08);
|
||||
break;
|
||||
case PROTECTION_STATUS_VITAL_THROW:
|
||||
SendMessage(target,*gUnknown_80FAB28);
|
||||
break;
|
||||
case PROTECTION_STATUS_MIST:
|
||||
SendMessage(target,*gUnknown_80FAB40);
|
||||
break;
|
||||
}
|
||||
entityData->protectionStatus = PROTECTION_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
void SendWaitingEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 waitingStatus)
|
||||
{
|
||||
u32 uVar3;
|
||||
struct DungeonEntityData *entityData;
|
||||
|
||||
if (EntityExists(target)) {
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->waitingStatus) {
|
||||
case WAITING_STATUS_NONE:
|
||||
case 4:
|
||||
break;
|
||||
case WAITING_STATUS_CURSED:
|
||||
if (waitingStatus != WAITING_STATUS_CURSED) {
|
||||
SendMessage(target,*gUnknown_80FA7BC);
|
||||
}
|
||||
break;
|
||||
case WAITING_STATUS_SNATCH:
|
||||
if (waitingStatus != WAITING_STATUS_SNATCH) {
|
||||
SendMessage(target,*gUnknown_80FA7DC);
|
||||
}
|
||||
gDungeonGlobalData->unk17B30 = 0;
|
||||
gDungeonGlobalData->unk17B3C = 0;
|
||||
break;
|
||||
case WAITING_STATUS_DECOY:
|
||||
entityData->waitingStatus = WAITING_STATUS_NONE;
|
||||
uVar3 = sub_806CEBC(target);
|
||||
sub_806CCB4(target,uVar3);
|
||||
gDungeonGlobalData->decoyActive = FALSE;
|
||||
if (waitingStatus != WAITING_STATUS_DECOY) {
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
SendMessage(target,*gUnknown_80FA9A0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
entityData->waitingStatus = WAITING_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void SendLinkedEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target)
|
||||
{
|
||||
struct DungeonEntityData *iVar3;
|
||||
|
||||
if (EntityExists(target)) {
|
||||
iVar3 = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(iVar3->linkedStatus)
|
||||
{
|
||||
case LINKED_STATUS_NONE:
|
||||
break;
|
||||
case LINKED_STATUS_LEECH_SEED:
|
||||
SendMessage(target,*gUnknown_80FA79C);
|
||||
break;
|
||||
case LINKED_STATUS_DESTINY_BOND:
|
||||
SendMessage(target,*gUnknown_80FAA8C);
|
||||
break;
|
||||
}
|
||||
iVar3->linkedStatus = LINKED_STATUS_NONE;
|
||||
iVar3->unkD8 = 0xff;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void SendMoveEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target)
|
||||
{
|
||||
struct DungeonEntityData * entityData;
|
||||
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->moveStatus) {
|
||||
case MOVE_STATUS_NONE:
|
||||
case 5:
|
||||
break;
|
||||
case MOVE_STATUS_SURE_SHOT:
|
||||
SendMessage(target,*gUnknown_80FA8E0);
|
||||
break;
|
||||
case MOVE_STATUS_WHIFFER:
|
||||
SendMessage(target,*gUnknown_80FA90C);
|
||||
break;
|
||||
case MOVE_STATUS_SET_DAMAGE:
|
||||
SendMessage(target,*gUnknown_80FA934);
|
||||
break;
|
||||
case MOVE_STATUS_FOCUS_ENERGY:
|
||||
SendMessage(target,*gUnknown_80FA95C);
|
||||
break;
|
||||
}
|
||||
entityData->moveStatus = MOVE_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
void SendTransformEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
bool8 bVar1;
|
||||
struct DungeonEntityData *entityData;
|
||||
u32 uVar3;
|
||||
|
||||
bVar1 = FALSE;
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->transformStatus) {
|
||||
case TRANSFORM_STATUS_NONE:
|
||||
case 4:
|
||||
break;
|
||||
case TRANSFORM_STATUS_INVISIBLE:
|
||||
bVar1 = TRUE;
|
||||
SendMessage(target,*gUnknown_80FA9F4);
|
||||
break;
|
||||
case TRANSFORM_STATUS_MOBILE:
|
||||
SendMessage(target,*gUnknown_80FABBC);
|
||||
break;
|
||||
case TRANSFORM_STATUS_TRANSFORMED:
|
||||
entityData->transformSpecies = sub_8069F54(target, entityData->entityID);
|
||||
target->unk64 = sub_80687D0(entityData->transformSpecies);
|
||||
uVar3 = sub_806CEBC(target);
|
||||
sub_806CCB4(target,uVar3);
|
||||
SendMessage(target,*gUnknown_80FAB6C);
|
||||
break;
|
||||
}
|
||||
entityData->transformStatus = TRANSFORM_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
if (bVar1) {
|
||||
sub_807EC28(1);
|
||||
}
|
||||
}
|
||||
|
||||
void SendEyesightEndMessage(struct DungeonEntity * pokemon,struct DungeonEntity * target)
|
||||
{
|
||||
struct DungeonEntityData *entityData;
|
||||
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->eyesightStatus) {
|
||||
case EYESIGHT_STATUS_NONE:
|
||||
case 4:
|
||||
break;
|
||||
case EYESIGHT_STATUS_BLINKER:
|
||||
SendMessage(target,*gUnknown_80FAA0C);
|
||||
break;
|
||||
case EYESIGHT_STATUS_CROSS_EYED:
|
||||
SendMessage(target,*gUnknown_80FAA2C);
|
||||
break;
|
||||
case EYESIGHT_STATUS_EYEDROPS:
|
||||
SendMessage(target,*gUnknown_80FAA48);
|
||||
break;
|
||||
}
|
||||
entityData->eyesightStatus = EYESIGHT_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
if (entityData->isLeader) {
|
||||
sub_803E46C(0x31);
|
||||
sub_8049ED4();
|
||||
sub_8040A84();
|
||||
}
|
||||
}
|
||||
|
||||
void SendMuzzledEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target)
|
||||
{
|
||||
struct DungeonEntityData *entityData;
|
||||
|
||||
if (!EntityExists(target)) {
|
||||
return;
|
||||
}
|
||||
entityData = target->entityData;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
switch(entityData->muzzledStatus) {
|
||||
case MUZZLED_STATUS_NONE:
|
||||
case 2:
|
||||
break;
|
||||
case MUZZLED_STATUS_MUZZLED:
|
||||
SendMessage(target,*gUnknown_80FABC0);
|
||||
break;
|
||||
}
|
||||
entityData->muzzledStatus = MUZZLED_STATUS_NONE;
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
// TODO: this involves a union for sleepStatus/sleepStatusTurnsLeft that I don't want to deal with right now
|
||||
/*
|
||||
bool32 sub_807A96C(struct DungeonEntity * pokemon, struct DungeonEntity * target)
|
||||
{
|
||||
struct DungeonEntityData *entityData;
|
||||
struct DungeonEntityData *entityData_1;
|
||||
register bool32 bVar3 asm("r2");
|
||||
|
||||
entityData = target->entityData;
|
||||
entityData_1 = entityData;
|
||||
bVar3 = FALSE;
|
||||
if (entityData->immobilizeStatus == 6) {
|
||||
SendImmobilizeEndMessage(pokemon, target);
|
||||
bVar3 = TRUE;
|
||||
}
|
||||
TODO: this is where the union is needed..
|
||||
if ((entityData_1 + 0xa8) == 0x7f01) {
|
||||
SendSleepEndMessage(pokemon,target,0,1);
|
||||
bVar3 = TRUE;
|
||||
}
|
||||
return bVar3;
|
||||
}
|
||||
*/
|
||||
NAKED
|
||||
void sub_807A96C(struct DungeonEntity *pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4-r6,lr}\n"
|
||||
"\tadds r6, r0, 0\n"
|
||||
"\tadds r4, r1, 0\n"
|
||||
"\tldr r0, [r4, 0x70]\n"
|
||||
"\tadds r5, r0, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tadds r0, 0xB0\n"
|
||||
"\tldrb r0, [r0]\n"
|
||||
"\tcmp r0, 0x6\n"
|
||||
"\tbne _0807A988\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tbl SendImmobilizeEndMessage\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"_0807A988:\n"
|
||||
"\tadds r0, r5, 0\n"
|
||||
"\tadds r0, 0xA8\n"
|
||||
"\tldrh r1, [r0]\n"
|
||||
"\tldr r0, _0807A9AC\n"
|
||||
"\tcmp r1, r0\n"
|
||||
"\tbne _0807A9A2\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tadds r1, r4, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tmovs r3, 0x1\n"
|
||||
"\tbl SendSleepEndMessage\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"_0807A9A2:\n"
|
||||
"\tadds r0, r2, 0\n"
|
||||
"\tpop {r4-r6}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0807A9AC: .4byte 0x00007f01");
|
||||
}
|
||||
|
||||
void sub_807A9B0(struct DungeonEntity * pokemon)
|
||||
{
|
||||
struct DungeonEntityData *entityData;
|
||||
|
||||
entityData = pokemon->entityData;
|
||||
entityData->sleepStatus = SLEEP_STATUS_NONE;
|
||||
entityData->sleepStatusTurnsLeft = 0;
|
||||
sub_806A898(pokemon, 1, 1);
|
||||
DungeonEntityUpdateStatusSprites(pokemon);
|
||||
}
|
||||
|
||||
void sub_807A9D8(struct DungeonEntity *pokemon, struct DungeonEntity *target)
|
||||
{
|
||||
struct DungeonEntityData *iVar2;
|
||||
|
||||
if (EntityExists(target)) {
|
||||
iVar2 = target->entityData;
|
||||
if (iVar2->immobilizeStatus == IMMOBILIZE_STATUS_FROZEN) {
|
||||
iVar2->immobilizeStatus = IMMOBILIZE_STATUS_NONE;
|
||||
iVar2->immobilizeStatusTurnsLeft = 0;
|
||||
iVar2->immobilizeStatusDamageTimer = 0;
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FA8BC);
|
||||
DungeonEntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807AA30(void)
|
||||
{
|
||||
bool32 adjacentCheck;
|
||||
bool32 forceWakeup;
|
||||
u8 roomIndex;
|
||||
s32 xDiff;
|
||||
s32 wildIndex;
|
||||
s32 yDiff;
|
||||
struct DungeonEntity *teamEntity;
|
||||
struct DungeonEntity *wildEntity;
|
||||
struct DungeonEntityData *entityData;
|
||||
s32 teamIndex;
|
||||
|
||||
for(wildIndex = 0; wildIndex < DUNGEON_MAX_WILD_POKEMON; wildIndex++)
|
||||
{
|
||||
wildEntity = gDungeonGlobalData->wildPokemon[wildIndex];
|
||||
if (EntityExists(wildEntity) &&
|
||||
(entityData = wildEntity->entityData, entityData->sleepStatus == SLEEP_STATUS_SLEEP) &&
|
||||
(entityData->sleepStatusTurnsLeft == 0x7F)) {
|
||||
adjacentCheck = FALSE;
|
||||
forceWakeup = FALSE;
|
||||
roomIndex = GetEntityRoomIndex(wildEntity);
|
||||
|
||||
for(teamIndex = 0; teamIndex < MAX_TEAM_MEMBERS; teamIndex++)
|
||||
{
|
||||
teamEntity = gDungeonGlobalData->teamPokemon[teamIndex];
|
||||
if (EntityExists(teamEntity) && !HasItem(teamEntity, ITEM_ID_SNEAK_SCARF)) {
|
||||
xDiff = teamEntity->posWorld.x - wildEntity->posWorld.x;
|
||||
if (xDiff < 0) {
|
||||
xDiff = -xDiff;
|
||||
}
|
||||
if (xDiff < 2) {
|
||||
yDiff = teamEntity->posWorld.y- wildEntity->posWorld.y;
|
||||
if (yDiff < 0) {
|
||||
yDiff = -yDiff;
|
||||
}
|
||||
if (yDiff < 2) {
|
||||
adjacentCheck = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (HasItem(teamEntity, ITEM_ID_RACKET_BAND) && (roomIndex == GetEntityRoomIndex(teamEntity)))
|
||||
goto _WakeUp;
|
||||
}
|
||||
}
|
||||
|
||||
if(forceWakeup)
|
||||
goto _WakeUp;
|
||||
else if(adjacentCheck)
|
||||
forceWakeup = TRUE;
|
||||
|
||||
if (forceWakeup) {
|
||||
_WakeUp:
|
||||
sub_807A9B0(wildEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user