From 7fd9ef920a23a4485907cecc9eb3d6bb1f72aa7b Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 20 Aug 2022 10:03:09 -0700 Subject: [PATCH] continue decomping more dungeon side --- asm/code_80521D0.s | 2 +- asm/code_8057824.s | 4 +- asm/code_8069E0C.s | 16 +- asm/code_806CD90.s | 10 +- asm/code_8073CF0.s | 20 +- asm/code_8077274.s | 1862 +-------------------------------- asm/code_8077274_1.s | 344 ++++++ include/code_8077274_1.h | 22 + include/dungeon_entity.h | 11 +- include/dungeon_global_data.h | 6 +- ld_script.txt | 2 + src/code_8048480.c | 8 +- src/code_8057824.c | 2 +- src/code_8077274_1.c | 743 +++++++++++++ 14 files changed, 1162 insertions(+), 1890 deletions(-) create mode 100644 asm/code_8077274_1.s create mode 100644 include/code_8077274_1.h create mode 100644 src/code_8077274_1.c diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 5e0829f03..620bff5f9 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -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] diff --git a/asm/code_8057824.s b/asm/code_8057824.s index 1d3288b72..a46b59f84 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -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 diff --git a/asm/code_8069E0C.s b/asm/code_8069E0C.s index 2e8f0da14..5d2836e35 100644 --- a/asm/code_8069E0C.s +++ b/asm/code_8069E0C.s @@ -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} diff --git a/asm/code_806CD90.s b/asm/code_806CD90.s index abb3d79c1..5dff0e3d4 100644 --- a/asm/code_806CD90.s +++ b/asm/code_806CD90.s @@ -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 diff --git a/asm/code_8073CF0.s b/asm/code_8073CF0.s index b4d2e59a4..acc2ada43 100644 --- a/asm/code_8073CF0.s +++ b/asm/code_8073CF0.s @@ -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 diff --git a/asm/code_8077274.s b/asm/code_8077274.s index 67aaf86cc..fcc6d51be 100644 --- a/asm/code_8077274.s +++ b/asm/code_8077274.s @@ -1029,7 +1029,7 @@ _08078442: adds r0, r5, 0 adds r1, r4, 0 movs r2, 0 - bl sub_807A5D0 + bl SendWaitingEndMessage movs r0, 0x2A bl sub_803E46C _08078480: @@ -1049,7 +1049,7 @@ _08078480: adds r0, r5, 0 adds r1, r7, 0 movs r2, 0x2 - bl sub_807A5D0 + bl SendWaitingEndMessage _080784A8: movs r4, 0 movs r0, 0x2 @@ -1193,7 +1193,7 @@ sub_8078594: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0x1 - bl sub_807A5D0 + bl SendWaitingEndMessage adds r0, r6, 0 bl sub_8041D48 movs r1, 0xE @@ -1284,7 +1284,7 @@ sub_8078678: adds r0, r7, 0 adds r1, r6, 0 movs r2, 0x3 - bl sub_807A5D0 + bl SendWaitingEndMessage movs r5, 0 _0807869A: ldr r0, _0807873C @@ -1307,7 +1307,7 @@ _0807869A: adds r0, r7, 0 adds r1, r4, 0 movs r2, 0 - bl sub_807A5D0 + bl SendWaitingEndMessage _080786C8: adds r5, 0x1 cmp r5, 0x13 @@ -1516,7 +1516,7 @@ sub_807885C: bne _08078884 adds r0, r6, 0 adds r1, r4, 0 - bl sub_807A7C8 + bl SendTransformEndMessage _08078884: ldr r0, _080788C0 adds r1, r4, 0 @@ -2351,7 +2351,7 @@ sub_8078F50: bne _08078F78 adds r0, r6, 0 adds r1, r4, 0 - bl sub_807A7C8 + bl SendTransformEndMessage _08078F78: ldr r0, _08078FB4 adds r1, r4, 0 @@ -4306,1852 +4306,4 @@ _08079F0E: _08079F1C: .4byte gUnknown_80FBD3C thumb_func_end sub_8079E34 - thumb_func_start sub_8079F20 -sub_8079F20: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r5, r0, 0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp] - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - movs r0, 0 - mov r8, r0 - mov r9, r0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08079F50 - b _0807A0B8 -_08079F50: - ldr r7, [r4, 0x70] - adds r0, r4, 0 - bl HasNegativeStatus - lsls r0, 24 - cmp r0, 0 - beq _08079FF2 - movs r2, 0x1 - mov r8, r2 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0 - bl sub_807A124 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08079F7C - b _0807A0B8 -_08079F7C: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807A290 - adds r0, r5, 0 - adds r1, r4, 0 - bl SendImmobilizeEndMessage - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807A400 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_807A5D0 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807A6C8 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807A734 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807A888 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807A924 - adds r1, r7, 0 - adds r1, 0xFD - ldrb r0, [r1] - cmp r0, 0 - beq _08079FD8 - mov r0, r9 - strb r0, [r1] - ldr r0, _0807A08C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079FD8: - adds r1, r7, 0 - adds r1, 0xF5 - ldrb r0, [r1] - cmp r0, 0 - beq _08079FF2 - mov r2, r9 - strb r2, [r1] - ldr r0, _0807A090 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079FF2: - adds r0, r4, 0 - bl GetMovementSpeed - adds r6, r0, 0 - movs r1, 0 - movs r3, 0x4 - ldr r2, _0807A094 - adds r0, r7, r2 -_0807A002: - strb r1, [r0] - subs r0, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _0807A002 - adds r0, r4, 0 - bl GetMovementSpeed - cmp r6, r0 - beq _0807A032 - movs r0, 0x1 - mov r8, r0 - ldr r1, _0807A098 - movs r2, 0x82 - lsls r2, 1 - adds r0, r7, r2 - ldr r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_0807A032: - movs r6, 0x1 - movs r0, 0x8C - lsls r0, 1 - adds r2, r7, r0 - movs r7, 0xFE - movs r3, 0x3 -_0807A03E: - ldrb r1, [r2] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _0807A05E - ldrb r1, [r2, 0x1] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _0807A05E - movs r0, 0x1 - mov r8, r0 - mov r9, r0 - adds r0, r7, 0 - ands r0, r1 - strb r0, [r2, 0x1] -_0807A05E: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _0807A03E - mov r2, r8 - cmp r2, 0 - beq _0807A0A0 - ldr r0, [sp] - cmp r0, 0 - beq _0807A078 - adds r0, r4, 0 - bl sub_80420C8 -_0807A078: - mov r2, r9 - cmp r2, 0 - beq _0807A0B2 - ldr r0, _0807A09C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _0807A0B2 - .align 2, 0 -_0807A08C: .4byte gUnknown_8100594 -_0807A090: .4byte gPtrExposedWoreOffMessage -_0807A094: .4byte 0x00000111 -_0807A098: .4byte gUnknown_80FA124 -_0807A09C: .4byte gPtrSealedMoveReleasedMessage -_0807A0A0: - mov r0, r10 - cmp r0, 0 - bne _0807A0B2 - ldr r0, _0807A0C8 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_0807A0B2: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807A0B8: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807A0C8: .4byte gUnknown_81004E8 - thumb_func_end sub_8079F20 - - thumb_func_start sub_807A0CC -sub_807A0CC: - push {r4-r7,lr} - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A11E - ldr r4, [r5, 0x70] - adds r0, r4, 0 - movs r1, 0 - bl sub_806BFC0 - adds r1, r4, 0 - adds r1, 0xFD - movs r0, 0 - strb r0, [r1] - subs r1, 0x8 - strb r0, [r1] - movs r7, 0x1 - movs r6, 0xFE - movs r0, 0x8C - lsls r0, 1 - adds r2, r4, r0 - movs r3, 0x3 -_0807A0FE: - ldrb r1, [r2] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _0807A110 - ldrb r1, [r2, 0x1] - adds r0, r6, 0 - ands r0, r1 - strb r0, [r2, 0x1] -_0807A110: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _0807A0FE - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_0807A11E: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_807A0CC - - thumb_func_start sub_807A124 -sub_807A124: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r6, r0, 0 - adds r5, r1, 0 - lsls r2, 24 - lsrs r4, r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - movs r0, 0 - mov r9, r0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0807A14E - b _0807A27C -_0807A14E: - ldr r7, [r5, 0x70] - ldr r0, _0807A170 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r7, 0 - adds r0, 0xA8 - ldrb r0, [r0] - cmp r0, 0x6 - bls _0807A166 - b _0807A260 -_0807A166: - lsls r0, 2 - ldr r1, _0807A174 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A170: .4byte gAvailablePokemonNames -_0807A174: .4byte _0807A178 - .align 2, 0 -_0807A178: - .4byte _0807A260 - .4byte _0807A194 - .4byte _0807A1A0 - .4byte _0807A1B4 - .4byte _0807A228 - .4byte _0807A1E8 - .4byte _0807A260 -_0807A194: - movs r1, 0x1 - mov r9, r1 - ldr r0, _0807A19C - b _0807A1A2 - .align 2, 0 -_0807A19C: .4byte gUnknown_80FA6E8 -_0807A1A0: - ldr r0, _0807A1B0 -_0807A1A2: - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _0807A260 - .align 2, 0 -_0807A1B0: .4byte gUnknown_80FA708 -_0807A1B4: - movs r2, 0x1 - mov r9, r2 - ldr r0, _0807A1DC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 - mov r0, r8 - cmp r0, 0 - beq _0807A260 - ldr r0, _0807A1E0 - movs r2, 0 - ldrsh r1, [r0, r2] - ldr r3, _0807A1E4 - adds r0, r5, 0 - movs r2, 0x8 - bl sub_806F324 - b _0807A260 - .align 2, 0 -_0807A1DC: .4byte gUnknown_80FA70C -_0807A1E0: .4byte gUnknown_80F4F78 -_0807A1E4: .4byte 0x0000020f -_0807A1E8: - movs r0, 0x1 - mov r9, r0 - ldr r0, _0807A220 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 - ldr r0, _0807A224 - movs r1, 0 - ldrsh r2, [r0, r1] - movs r4, 0 - str r4, [sp] - adds r0, r6, 0 - adds r1, r5, 0 - movs r3, 0 - bl HealTargetHP - adds r0, r7, 0 - adds r0, 0xA8 - strb r4, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x1 - bl sub_8079F20 - b _0807A260 - .align 2, 0 -_0807A220: .4byte gUnknown_80FA710 -_0807A224: .4byte gUnknown_80F4F7A -_0807A228: - cmp r4, 0 - beq _0807A254 - adds r1, r7, 0 - adds r1, 0xA8 - movs r0, 0 - strb r0, [r1] - ldr r1, _0807A250 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r2, r0, 0 - adds r2, 0x1 - adds r0, r6, 0 - adds r1, r5, 0 - movs r3, 0x1 - bl sub_8075C58 - b _0807A27C - .align 2, 0 -_0807A250: .4byte gUnknown_80F4F2C -_0807A254: - ldr r0, _0807A28C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 -_0807A260: - adds r1, r7, 0 - adds r1, 0xA8 - movs r0, 0 - strb r0, [r1] - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites - mov r2, r9 - cmp r2, 0 - beq _0807A27C - adds r0, r5, 0 - movs r1, 0x8 - bl sub_806CE68 -_0807A27C: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807A28C: .4byte gUnknown_80FA734 - thumb_func_end sub_807A124 - - thumb_func_start sub_807A290 -sub_807A290: - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A31A - ldr r6, [r4, 0x70] - ldr r0, _0807A2C4 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r6, 0 - adds r0, 0xAC - ldrb r0, [r0] - cmp r0, 0x5 - bhi _0807A30C - lsls r0, 2 - ldr r1, _0807A2C8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A2C4: .4byte gAvailablePokemonNames -_0807A2C8: .4byte _0807A2CC - .align 2, 0 -_0807A2CC: - .4byte _0807A30C - .4byte _0807A300 - .4byte _0807A2E4 - .4byte _0807A2E4 - .4byte _0807A2EC - .4byte _0807A30C -_0807A2E4: - ldr r0, _0807A2E8 - b _0807A2EE - .align 2, 0 -_0807A2E8: .4byte gUnknown_80FA8A8 -_0807A2EC: - ldr r0, _0807A2FC -_0807A2EE: - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _0807A30C - .align 2, 0 -_0807A2FC: .4byte gUnknown_80FA868 -_0807A300: - ldr r0, _0807A320 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_0807A30C: - adds r1, r6, 0 - adds r1, 0xAC - movs r0, 0 - strb r0, [r1] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807A31A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807A320: .4byte gUnknown_80FA888 - thumb_func_end sub_807A290 - - thumb_func_start SendImmobilizeEndMessage -SendImmobilizeEndMessage: - push {r4-r7,lr} - adds r5, r0, 0 - adds r4, r1, 0 - movs r7, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A3F4 - ldr r6, [r4, 0x70] - ldr r0, _0807A358 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r6, 0 - adds r0, 0xB0 - ldrb r0, [r0] - cmp r0, 0x8 - bhi _0807A3DC - lsls r0, 2 - ldr r1, _0807A35C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A358: .4byte gAvailablePokemonNames -_0807A35C: .4byte _0807A360 - .align 2, 0 -_0807A360: - .4byte _0807A3DC - .4byte _0807A384 - .4byte _0807A3A0 - .4byte _0807A3B4 - .4byte _0807A3B4 - .4byte _0807A3A0 - .4byte _0807A3D0 - .4byte _0807A398 - .4byte _0807A3DC -_0807A384: - ldr r0, _0807A394 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r7, 0x1 - b _0807A3DC - .align 2, 0 -_0807A394: .4byte gUnknown_80FA8BC -_0807A398: - ldr r0, _0807A39C - b _0807A3A2 - .align 2, 0 -_0807A39C: .4byte gUnknown_80FA820 -_0807A3A0: - ldr r0, _0807A3B0 -_0807A3A2: - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _0807A3DC - .align 2, 0 -_0807A3B0: .4byte gUnknown_80FA824 -_0807A3B4: - ldr r0, _0807A3CC - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - adds r0, r6, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 - b _0807A3DC - .align 2, 0 -_0807A3CC: .4byte gUnknown_80FA81C -_0807A3D0: - ldr r0, _0807A3FC - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_0807A3DC: - adds r1, r6, 0 - adds r1, 0xB0 - movs r0, 0 - strb r0, [r1] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites - cmp r7, 0 - beq _0807A3F4 - adds r0, r4, 0 - bl sub_8042A74 -_0807A3F4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807A3FC: .4byte gUnknown_80FABF8 - thumb_func_end SendImmobilizeEndMessage - - thumb_func_start sub_807A400 -sub_807A400: - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A4BC - ldr r6, [r5, 0x70] - ldr r0, _0807A434 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r6, 0 - adds r0, 0xBC - ldrb r0, [r0] - cmp r0, 0x8 - bhi _0807A4A8 - lsls r0, 2 - ldr r1, _0807A438 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A434: .4byte gAvailablePokemonNames -_0807A438: .4byte _0807A43C - .align 2, 0 -_0807A43C: - .4byte _0807A4A8 - .4byte _0807A49C - .4byte _0807A460 - .4byte _0807A478 - .4byte _0807A468 - .4byte _0807A470 - .4byte _0807A488 - .4byte _0807A480 - .4byte _0807A4A8 -_0807A460: - ldr r0, _0807A464 - b _0807A48A - .align 2, 0 -_0807A464: .4byte gUnknown_80FA800 -_0807A468: - ldr r0, _0807A46C - b _0807A48A - .align 2, 0 -_0807A46C: .4byte gUnknown_80FA97C -_0807A470: - ldr r0, _0807A474 - b _0807A48A - .align 2, 0 -_0807A474: .4byte gUnknown_80FA9DC -_0807A478: - ldr r0, _0807A47C - b _0807A48A - .align 2, 0 -_0807A47C: .4byte gUnknown_80FAC38 -_0807A480: - ldr r0, _0807A484 - b _0807A48A - .align 2, 0 -_0807A484: .4byte gUnknown_80FAB90 -_0807A488: - ldr r0, _0807A498 -_0807A48A: - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _0807A4A8 - .align 2, 0 -_0807A498: .4byte gUnknown_80FAAAC -_0807A49C: - ldr r0, _0807A4C4 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80522F4 -_0807A4A8: - adds r1, r6, 0 - adds r1, 0xBC - movs r0, 0 - strb r0, [r1] - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites - adds r0, r5, 0 - bl GetMovementSpeed -_0807A4BC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807A4C4: .4byte gUnknown_80FAC18 - thumb_func_end sub_807A400 - - thumb_func_start sub_807A4C8 -sub_807A4C8: - push {r4,r5,lr} - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0807A4DA - b _0807A5C4 -_0807A4DA: - ldr r5, [r4, 0x70] - ldr r0, _0807A4FC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r5, 0 - adds r0, 0xC4 - ldrb r0, [r0] - cmp r0, 0xF - bhi _0807A5B6 - lsls r0, 2 - ldr r1, _0807A500 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A4FC: .4byte gAvailablePokemonNames -_0807A500: .4byte _0807A504 - .align 2, 0 -_0807A504: - .4byte _0807A5B6 - .4byte _0807A544 - .4byte _0807A54C - .4byte _0807A554 - .4byte _0807A55C - .4byte _0807A564 - .4byte _0807A56C - .4byte _0807A574 - .4byte _0807A57C - .4byte _0807A584 - .4byte _0807A55C - .4byte _0807A58C - .4byte _0807A594 - .4byte _0807A59C - .4byte _0807A5AC - .4byte _0807A5B6 -_0807A544: - ldr r0, _0807A548 - b _0807A59E - .align 2, 0 -_0807A548: .4byte gUnknown_80FA638 -_0807A54C: - ldr r0, _0807A550 - b _0807A59E - .align 2, 0 -_0807A550: .4byte gUnknown_80FA69C -_0807A554: - ldr r0, _0807A558 - b _0807A59E - .align 2, 0 -_0807A558: .4byte gUnknown_80FA658 -_0807A55C: - ldr r0, _0807A560 - b _0807A59E - .align 2, 0 -_0807A560: .4byte gUnknown_80FA67C -_0807A564: - ldr r0, _0807A568 - b _0807A59E - .align 2, 0 -_0807A568: .4byte gUnknown_80FA6BC -_0807A56C: - ldr r0, _0807A570 - b _0807A59E - .align 2, 0 -_0807A570: .4byte gUnknown_80FA6D4 -_0807A574: - ldr r0, _0807A578 - b _0807A59E - .align 2, 0 -_0807A578: .4byte gUnknown_80FA9C0 -_0807A57C: - ldr r0, _0807A580 - b _0807A59E - .align 2, 0 -_0807A580: .4byte gUnknown_80FAA68 -_0807A584: - ldr r0, _0807A588 - b _0807A59E - .align 2, 0 -_0807A588: .4byte gUnknown_80FAAC8 -_0807A58C: - ldr r0, _0807A590 - b _0807A59E - .align 2, 0 -_0807A590: .4byte gUnknown_80FAAE8 -_0807A594: - ldr r0, _0807A598 - b _0807A59E - .align 2, 0 -_0807A598: .4byte gUnknown_80FAB08 -_0807A59C: - ldr r0, _0807A5A8 -_0807A59E: - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage - b _0807A5B6 - .align 2, 0 -_0807A5A8: .4byte gUnknown_80FAB28 -_0807A5AC: - ldr r0, _0807A5CC - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage -_0807A5B6: - adds r1, r5, 0 - adds r1, 0xC4 - movs r0, 0 - strb r0, [r1] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807A5C4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807A5CC: .4byte gUnknown_80FAB40 - thumb_func_end sub_807A4C8 - - thumb_func_start sub_807A5D0 -sub_807A5D0: - push {r4-r7,lr} - adds r5, r1, 0 - lsls r2, 24 - lsrs r6, r2, 24 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A6B2 - ldr r7, [r5, 0x70] - ldr r0, _0807A604 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r7, 0 - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x4 - bhi _0807A6A4 - lsls r0, 2 - ldr r1, _0807A608 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A604: .4byte gAvailablePokemonNames -_0807A608: .4byte _0807A60C - .align 2, 0 -_0807A60C: - .4byte _0807A6A4 - .4byte _0807A620 - .4byte _0807A668 - .4byte _0807A634 - .4byte _0807A6A4 -_0807A620: - cmp r6, 0x1 - beq _0807A6A4 - ldr r0, _0807A630 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage - b _0807A6A4 - .align 2, 0 -_0807A630: .4byte gUnknown_80FA7BC -_0807A634: - cmp r6, 0x3 - beq _0807A642 - ldr r0, _0807A658 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage -_0807A642: - ldr r0, _0807A65C - ldr r0, [r0] - ldr r2, _0807A660 - adds r1, r0, r2 - movs r2, 0 - str r2, [r1] - ldr r1, _0807A664 - adds r0, r1 - str r2, [r0] - b _0807A6A4 - .align 2, 0 -_0807A658: .4byte gUnknown_80FA7DC -_0807A65C: .4byte gDungeonGlobalData -_0807A660: .4byte 0x00017b30 -_0807A664: .4byte 0x00017b3c -_0807A668: - adds r0, r7, 0 - adds r0, 0xC8 - movs r4, 0 - strb r4, [r0] - adds r0, r5, 0 - bl sub_806CEBC - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl sub_806CCB4 - ldr r0, _0807A6B8 - ldr r0, [r0] - ldr r2, _0807A6BC - adds r0, r2 - strb r4, [r0] - cmp r6, 0x2 - beq _0807A6A4 - ldr r0, _0807A6C0 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _0807A6C4 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage -_0807A6A4: - adds r1, r7, 0 - adds r1, 0xC8 - movs r0, 0 - strb r0, [r1] - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_0807A6B2: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807A6B8: .4byte gDungeonGlobalData -_0807A6BC: .4byte 0x000037fc -_0807A6C0: .4byte gAvailablePokemonNames -_0807A6C4: .4byte gUnknown_80FA9A0 - thumb_func_end sub_807A5D0 - - thumb_func_start sub_807A6C8 -sub_807A6C8: - push {r4,r5,lr} - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A72A - ldr r5, [r4, 0x70] - ldr r0, _0807A6F8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r5, 0 - adds r0, 0xD0 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0807A6FC - cmp r0, 0x1 - ble _0807A716 - cmp r0, 0x2 - beq _0807A70C - b _0807A716 - .align 2, 0 -_0807A6F8: .4byte gAvailablePokemonNames -_0807A6FC: - ldr r0, _0807A708 - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage - b _0807A716 - .align 2, 0 -_0807A708: .4byte gUnknown_80FA79C -_0807A70C: - ldr r0, _0807A730 - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage -_0807A716: - adds r1, r5, 0 - adds r1, 0xD0 - movs r0, 0 - strb r0, [r1] - adds r1, 0x8 - movs r0, 0xFF - strb r0, [r1] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807A72A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807A730: .4byte gUnknown_80FAA8C - thumb_func_end sub_807A6C8 - - thumb_func_start sub_807A734 -sub_807A734: - push {r4,r5,lr} - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A7BC - ldr r5, [r4, 0x70] - ldr r0, _0807A764 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r5, 0 - adds r0, 0xDC - ldrb r0, [r0] - cmp r0, 0x5 - bhi _0807A7AE - lsls r0, 2 - ldr r1, _0807A768 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A764: .4byte gAvailablePokemonNames -_0807A768: .4byte _0807A76C - .align 2, 0 -_0807A76C: - .4byte _0807A7AE - .4byte _0807A784 - .4byte _0807A78C - .4byte _0807A794 - .4byte _0807A7A4 - .4byte _0807A7AE -_0807A784: - ldr r0, _0807A788 - b _0807A796 - .align 2, 0 -_0807A788: .4byte gUnknown_80FA8E0 -_0807A78C: - ldr r0, _0807A790 - b _0807A796 - .align 2, 0 -_0807A790: .4byte gUnknown_80FA90C -_0807A794: - ldr r0, _0807A7A0 -_0807A796: - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage - b _0807A7AE - .align 2, 0 -_0807A7A0: .4byte gUnknown_80FA934 -_0807A7A4: - ldr r0, _0807A7C4 - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage -_0807A7AE: - adds r1, r5, 0 - adds r1, 0xDC - movs r0, 0 - strb r0, [r1] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807A7BC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807A7C4: .4byte gUnknown_80FA95C - thumb_func_end sub_807A734 - - thumb_func_start sub_807A7C8 -sub_807A7C8: - push {r4-r6,lr} - adds r4, r1, 0 - movs r6, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A87E - ldr r5, [r4, 0x70] - ldr r0, _0807A7FC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r5, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x4 - bhi _0807A866 - lsls r0, 2 - ldr r1, _0807A800 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A7FC: .4byte gAvailablePokemonNames -_0807A800: .4byte _0807A804 - .align 2, 0 -_0807A804: - .4byte _0807A866 - .4byte _0807A818 - .4byte _0807A834 - .4byte _0807A824 - .4byte _0807A866 -_0807A818: - movs r6, 0x1 - ldr r0, _0807A820 - b _0807A826 - .align 2, 0 -_0807A820: .4byte gUnknown_80FA9F4 -_0807A824: - ldr r0, _0807A830 -_0807A826: - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage - b _0807A866 - .align 2, 0 -_0807A830: .4byte gUnknown_80FABBC -_0807A834: - movs r0, 0x2 - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl sub_8069F54 - strh r0, [r5, 0x4] - movs r1, 0x4 - ldrsh r0, [r5, r1] - bl sub_80687D0 - str r0, [r4, 0x64] - adds r0, r4, 0 - bl sub_806CEBC - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_806CCB4 - ldr r0, _0807A884 - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage -_0807A866: - adds r1, r5, 0 - adds r1, 0xE4 - movs r0, 0 - strb r0, [r1] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites - cmp r6, 0 - beq _0807A87E - movs r0, 0x1 - bl sub_807EC28 -_0807A87E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807A884: .4byte gUnknown_80FAB6C - thumb_func_end sub_807A7C8 - - thumb_func_start sub_807A888 -sub_807A888: - push {r4,r5,lr} - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A918 - ldr r5, [r4, 0x70] - ldr r0, _0807A8B8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r5, 0 - adds r0, 0xE8 - ldrb r0, [r0] - cmp r0, 0x4 - bhi _0807A8F6 - lsls r0, 2 - ldr r1, _0807A8BC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A8B8: .4byte gAvailablePokemonNames -_0807A8BC: .4byte _0807A8C0 - .align 2, 0 -_0807A8C0: - .4byte _0807A8F6 - .4byte _0807A8D4 - .4byte _0807A8DC - .4byte _0807A8EC - .4byte _0807A8F6 -_0807A8D4: - ldr r0, _0807A8D8 - b _0807A8DE - .align 2, 0 -_0807A8D8: .4byte gUnknown_80FAA0C -_0807A8DC: - ldr r0, _0807A8E8 -_0807A8DE: - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage - b _0807A8F6 - .align 2, 0 -_0807A8E8: .4byte gUnknown_80FAA2C -_0807A8EC: - ldr r0, _0807A920 - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage -_0807A8F6: - adds r0, r5, 0 - adds r0, 0xE8 - movs r1, 0 - strb r1, [r0] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _0807A918 - movs r0, 0x31 - bl sub_803E46C - bl sub_8049ED4 - bl sub_8040A84 -_0807A918: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807A920: .4byte gUnknown_80FAA48 - thumb_func_end sub_807A888 - - thumb_func_start sub_807A924 -sub_807A924: - push {r4,r5,lr} - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807A95C - ldr r4, [r5, 0x70] - ldr r0, _0807A964 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r4, 0xEC - ldrb r0, [r4] - cmp r0, 0x1 - bne _0807A952 - ldr r0, _0807A968 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage -_0807A952: - movs r0, 0 - strb r0, [r4] - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_0807A95C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807A964: .4byte gAvailablePokemonNames -_0807A968: .4byte gUnknown_80FABC0 - thumb_func_end sub_807A924 - - thumb_func_start sub_807A96C -sub_807A96C: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r0, [r4, 0x70] - adds r5, r0, 0 - movs r2, 0 - adds r0, 0xB0 - ldrb r0, [r0] - cmp r0, 0x6 - bne _0807A988 - adds r0, r6, 0 - bl SendImmobilizeEndMessage - movs r2, 0x1 -_0807A988: - adds r0, r5, 0 - adds r0, 0xA8 - ldrh r1, [r0] - ldr r0, _0807A9AC - cmp r1, r0 - bne _0807A9A2 - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x1 - bl sub_807A124 - movs r2, 0x1 -_0807A9A2: - adds r0, r2, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0807A9AC: .4byte 0x00007f01 - thumb_func_end sub_807A96C - - thumb_func_start sub_807A9B0 -sub_807A9B0: - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0xA8 - movs r2, 0 - strb r2, [r1] - adds r0, 0xA9 - strb r2, [r0] - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_806A898 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_807A9B0 - - thumb_func_start sub_807A9D8 -sub_807A9D8: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807AA20 - ldr r2, [r4, 0x70] - adds r3, r2, 0 - adds r3, 0xB0 - ldrb r0, [r3] - cmp r0, 0x1 - bne _0807AA20 - movs r1, 0 - strb r1, [r3] - adds r0, r2, 0 - adds r0, 0xB8 - strb r1, [r0] - adds r0, 0x1 - strb r1, [r0] - ldr r0, _0807AA28 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _0807AA2C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807AA20: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807AA28: .4byte gAvailablePokemonNames -_0807AA2C: .4byte gUnknown_80FA8BC - thumb_func_end sub_807A9D8 - - thumb_func_start sub_807AA30 -sub_807AA30: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r4, 0 -_0807AA3C: - ldr r0, _0807AAD8 - ldr r0, [r0] - lsls r1, r4, 2 - ldr r2, _0807AADC - adds r0, r2 - adds r0, r1 - ldr r5, [r0] - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - adds r4, 0x1 - mov r10, r4 - cmp r0, 0 - beq _0807AB22 - ldr r1, [r5, 0x70] - adds r0, r1, 0 - adds r0, 0xA8 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0807AB22 - adds r0, r1, 0 - adds r0, 0xA9 - ldrb r0, [r0] - cmp r0, 0x7F - bne _0807AB22 - movs r0, 0 - mov r9, r0 - mov r8, r0 - adds r0, r5, 0 - bl GetEntityRoomIndex - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0 -_0807AA82: - ldr r0, _0807AAD8 - ldr r0, [r0] - lsls r1, r6, 2 - ldr r2, _0807AAE0 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807AB00 - adds r0, r4, 0 - movs r1, 0x18 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _0807AB00 - movs r0, 0x4 - ldrsh r1, [r4, r0] - movs r2, 0x4 - ldrsh r0, [r5, r2] - subs r1, r0 - cmp r1, 0 - bge _0807AABA - negs r1, r1 -_0807AABA: - cmp r1, 0x1 - bgt _0807AAE4 - movs r0, 0x6 - ldrsh r1, [r4, r0] - movs r2, 0x6 - ldrsh r0, [r5, r2] - subs r1, r0 - cmp r1, 0 - bge _0807AACE - negs r1, r1 -_0807AACE: - cmp r1, 0x1 - bgt _0807AAE4 - movs r0, 0x1 - mov r9, r0 - b _0807AB06 - .align 2, 0 -_0807AAD8: .4byte gDungeonGlobalData -_0807AADC: .4byte 0x0001358c -_0807AAE0: .4byte 0x0001357c -_0807AAE4: - adds r0, r4, 0 - movs r1, 0x1D - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _0807AB00 - adds r0, r4, 0 - bl GetEntityRoomIndex - lsls r0, 24 - lsrs r0, 24 - cmp r7, r0 - beq _0807AB1C -_0807AB00: - adds r6, 0x1 - cmp r6, 0x3 - ble _0807AA82 -_0807AB06: - mov r2, r8 - cmp r2, 0 - bne _0807AB1C - mov r0, r9 - cmp r0, 0 - beq _0807AB16 - movs r2, 0x1 - mov r8, r2 -_0807AB16: - mov r0, r8 - cmp r0, 0 - beq _0807AB22 -_0807AB1C: - adds r0, r5, 0 - bl sub_807A9B0 -_0807AB22: - mov r4, r10 - cmp r4, 0xF - ble _0807AA3C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_807AA30 - - 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 diff --git a/asm/code_8077274_1.s b/asm/code_8077274_1.s new file mode 100644 index 000000000..322710401 --- /dev/null +++ b/asm/code_8077274_1.s @@ -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 diff --git a/include/code_8077274_1.h b/include/code_8077274_1.h new file mode 100644 index 000000000..e7a81dfbb --- /dev/null +++ b/include/code_8077274_1.h @@ -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 diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 750f4a96e..b99cf8a29 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.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; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index bc40855d6..b0bebc9cc 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -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; diff --git a/ld_script.txt b/ld_script.txt index 98c0abc29..a7638126c 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -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); diff --git a/src/code_8048480.c b/src/code_8048480.c index 427d96267..0244461de 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -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); diff --git a/src/code_8057824.c b/src/code_8057824.c index cc950883a..8d18c8dd3 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -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); diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c new file mode 100644 index 000000000..a7f08e949 --- /dev/null +++ b/src/code_8077274_1.c @@ -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); + } + } + } +}