From 7a26ec4d063d4748396c0bf5b78c2e469830c191 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 22 Aug 2022 11:54:53 -0700 Subject: [PATCH] more decomping and some cleanup --- asm/code_805744C.s | 2 +- asm/code_8057824.s | 26 +- asm/code_8077274.s | 2187 +-------------------------------- include/code_8077274_1.h | 31 + include/dungeon_entity.h | 10 +- include/dungeon_global_data.h | 3 +- src/code_8048480.c | 12 +- src/code_8057824.c | 7 +- src/code_8077274_1.c | 1015 ++++++++++++++- src/status_checker.c | 7 +- 10 files changed, 1061 insertions(+), 2239 deletions(-) diff --git a/asm/code_805744C.s b/asm/code_805744C.s index 4d95c0ee3..98f5cef32 100644 --- a/asm/code_805744C.s +++ b/asm/code_805744C.s @@ -464,7 +464,7 @@ _08057778: .4byte gUnknown_80F502A thumb_func_start sub_805777C sub_805777C: push {lr} - bl sub_8079DB8 + bl VitalThrowStatusTarget movs r0, 0x1 pop {r1} bx r1 diff --git a/asm/code_8057824.s b/asm/code_8057824.s index a46b59f84..f61f52a69 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -111,7 +111,7 @@ sub_8057E50: bl sub_807A9D8 adds r0, r4, 0 adds r1, r5, 0 - bl sub_8079CA0 + bl MirrorMoveStatusTarget movs r0, 0x1 pop {r4,r5} pop {r1} @@ -1925,7 +1925,7 @@ _08058BDC: .4byte gUnknown_8106A4C sub_8058BE0: push {lr} adds r1, r0, 0 - bl sub_8079C24 + bl EndureStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -2595,7 +2595,7 @@ _080590C4: .4byte gUnknown_80F4DE8 thumb_func_start sub_80590C8 sub_80590C8: push {lr} - bl sub_80798B0 + bl MistStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -2736,7 +2736,7 @@ _080591D4: .4byte gUnknown_80F4DEA thumb_func_start sub_80591D8 sub_80591D8: push {lr} - bl sub_8079834 + bl SafeguardStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -4145,7 +4145,7 @@ _08059C7C: .4byte gUnknown_80FE36C thumb_func_start sub_8059C80 sub_8059C80: push {lr} - bl sub_8079D1C + bl Conversion2StatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -5146,7 +5146,7 @@ _0805A3F8: .4byte gUnknown_8106A4C thumb_func_start sub_805A3FC sub_805A3FC: push {lr} - bl sub_807992C + bl WishStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -6089,7 +6089,7 @@ _0805AB44: .4byte gUnknown_80FC5CC thumb_func_start sub_805AB48 sub_805AB48: push {lr} - bl sub_8079A24 + bl LightScreenStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -7106,7 +7106,7 @@ _0805B2E0: .4byte gUnknown_80F4F94 thumb_func_start sub_805B2E4 sub_805B2E4: push {lr} - bl sub_80799A8 + bl MagicCoatStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -7115,7 +7115,7 @@ sub_805B2E4: thumb_func_start sub_805B2F0 sub_805B2F0: push {lr} - bl sub_8079B1C + bl ProtectStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -7220,7 +7220,7 @@ _0805B39E: thumb_func_start sub_805B3A8 sub_805B3A8: push {lr} - bl sub_8079BA8 + bl MirrorCoatStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -7797,7 +7797,7 @@ _0805B7F8: .4byte gUnknown_80FDCA0 thumb_func_start sub_805B7FC sub_805B7FC: push {lr} - bl sub_8079AA0 + bl ReflectStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -8518,7 +8518,7 @@ _0805BD52: thumb_func_start sub_805BD64 sub_805BD64: push {lr} - bl sub_8078D8C + bl MuzzleTarget movs r0, 0x1 pop {r1} bx r1 @@ -9095,7 +9095,7 @@ _0805C1AC: .4byte 0x0000270f thumb_func_start sub_805C1B0 sub_805C1B0: push {lr} - bl sub_80790C8 + bl IdentityItemHolders movs r0, 0x1 pop {r1} bx r1 diff --git a/asm/code_8077274.s b/asm/code_8077274.s index fcc6d51be..00e6db990 100644 --- a/asm/code_8077274.s +++ b/asm/code_8077274.s @@ -2121,2189 +2121,4 @@ _08078D78: _08078D88: .4byte gUnknown_80FBE84 thumb_func_end sub_8078B5C - thumb_func_start sub_8078D8C -sub_8078D8C: - 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 _08078E0E - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08078E0E - ldr r6, [r4, 0x70] - ldr r0, _08078DF0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r6, 0 - adds r1, 0xEC - ldrb r0, [r1] - cmp r0, 0x1 - beq _08078DFC - movs r0, 0x1 - strb r0, [r1] - ldr r1, _08078DF4 - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r6, 0 - adds r1, 0xED - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_86 - ldr r0, _08078DF8 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08078E08 - .align 2, 0 -_08078DF0: .4byte gAvailablePokemonNames -_08078DF4: .4byte gUnknown_80F4F1C -_08078DF8: .4byte gUnknown_80FBF68 -_08078DFC: - ldr r0, _08078E14 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08078E08: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08078E0E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08078E14: .4byte gUnknown_80FBF84 - thumb_func_end sub_8078D8C - - thumb_func_start sub_8078E18 -sub_8078E18: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _08078E48 - add sp, r4 - mov r10, r0 - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08078F2E - ldr r7, [r5, 0x70] - adds r0, r7, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x2 - bne _08078E50 - ldr r0, _08078E4C - b _08078EC0 - .align 2, 0 -_08078E48: .4byte 0xfffffe00 -_08078E4C: .4byte gUnknown_80FBF04 -_08078E50: - ldr r0, _08078ECC - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - mov r0, sp - movs r1, 0 - bl sub_803D870 - mov r8, r0 - cmp r0, 0 - beq _08078EBE - movs r0, 0 - mov r9, r0 - movs r6, 0 -_08078E6E: - mov r0, r8 - bl DungeonRandomCapped - lsls r0, 3 - add r0, sp - bl ExtractSpeciesIndex - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r5, 0 - bl sub_8069F54 - lsls r0, 16 - asrs r4, r0, 16 - movs r1, 0x4 - ldrsh r0, [r7, r1] - cmp r4, r0 - beq _08078EAE - adds r0, r4, 0 - movs r1, 0x1 - bl sub_806AA0C - lsls r0, 24 - cmp r0, 0 - beq _08078EAE - adds r0, r4, 0 - bl sub_80687D0 - mov r9, r0 - cmp r0, 0 - bne _08078EB4 -_08078EAE: - adds r6, 0x1 - cmp r6, 0x13 - ble _08078E6E -_08078EB4: - cmp r6, 0x14 - beq _08078EBE - mov r2, r9 - cmp r2, 0 - bne _08078ED4 -_08078EBE: - ldr r0, _08078ED0 -_08078EC0: - ldr r2, [r0] - mov r0, r10 - adds r1, r5, 0 - bl sub_80522F4 - b _08078F2E - .align 2, 0 -_08078ECC: .4byte gAvailablePokemonNames -_08078ED0: .4byte gUnknown_80FBEE4 -_08078ED4: - strh r4, [r7, 0x4] - mov r0, r9 - str r0, [r5, 0x64] - adds r1, r7, 0 - adds r1, 0xE4 - movs r0, 0x2 - strb r0, [r1] - ldr r1, _08078F44 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xE5 - strb r0, [r1] - adds r0, r5, 0 - bl sub_806CF98 - adds r0, r5, 0 - bl nullsub_87 - 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, _08078F48 - movs r2, 0x4 - ldrsh r1, [r7, r2] - bl CopyCyanSpeciesNametoBuffer - ldr r0, _08078F4C - ldr r2, [r0] - mov r0, r10 - adds r1, r5, 0 - bl sub_80522F4 - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_08078F2E: - movs r3, 0x80 - lsls r3, 2 - add sp, r3 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078F44: .4byte gUnknown_80F4EFC -_08078F48: .4byte gUnknown_202DFE8 -_08078F4C: .4byte gUnknown_80FBEC0 - thumb_func_end sub_8078E18 - - thumb_func_start sub_8078F50 -sub_8078F50: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08078FD2 - ldr r0, [r4, 0x70] - adds r7, r0, 0 - adds r5, r7, 0 - adds r5, 0xE4 - ldrb r0, [r5] - cmp r0, 0x2 - bne _08078F78 - adds r0, r6, 0 - adds r1, r4, 0 - bl SendTransformEndMessage -_08078F78: - ldr r0, _08078FB4 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldrb r0, [r5] - cmp r0, 0x3 - beq _08078FC0 - movs r0, 0x3 - strb r0, [r5] - ldr r1, _08078FB8 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xE5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_88 - ldr r0, _08078FBC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08078FCC - .align 2, 0 -_08078FB4: .4byte gAvailablePokemonNames -_08078FB8: .4byte gUnknown_80F4F04 -_08078FBC: .4byte gUnknown_80FBF28 -_08078FC0: - ldr r0, _08078FD8 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08078FCC: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08078FD2: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078FD8: .4byte gUnknown_80FBF50 - thumb_func_end sub_8078F50 - - thumb_func_start sub_8078FDC -sub_8078FDC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r6, r0, 0 - adds r4, r1, 0 - lsls r2, 16 - asrs r7, r2, 16 - mov r10, r7 - movs r0, 0 - mov r8, r0 - mov r9, r0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080790B6 - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _080790B6 - ldr r5, [r4, 0x70] - ldr r0, _08079064 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - movs r1, 0x26 - ldrsh r0, [r5, r1] - cmp r0, 0xA - ble _0807902E - movs r0, 0xA - strh r0, [r5, 0x26] - movs r0, 0x1 - mov r8, r0 -_0807902E: - mov r1, r8 - cmp r1, 0 - beq _0807904C - adds r0, r4, 0 - adds r1, r7, 0 - bl sub_8041DD8 - ldr r0, _08079068 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0x1 - mov r9, r0 -_0807904C: - adds r5, 0xF5 - ldrb r0, [r5] - cmp r0, 0 - beq _08079070 - ldr r0, _0807906C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _080790B6 - .align 2, 0 -_08079064: .4byte gAvailablePokemonNames -_08079068: .4byte gUnknown_80FC000 -_0807906C: .4byte gUnknown_80FBFB8 -_08079070: - mov r1, r9 - cmp r1, 0 - bne _0807907E - adds r0, r4, 0 - mov r1, r10 - bl sub_8041DD8 -_0807907E: - adds r0, r4, 0 - movs r1, 0xE - bl HasType - lsls r0, 24 - cmp r0, 0 - bne _080790A0 - ldr r0, _0807909C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _080790B0 - .align 2, 0 -_0807909C: .4byte gUnknown_80FBFD8 -_080790A0: - movs r0, 0x1 - strb r0, [r5] - ldr r0, _080790C4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080790B0: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080790B6: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080790C4: .4byte gUnknown_80FBF9C - thumb_func_end sub_8078FDC - - thumb_func_start sub_80790C8 -sub_80790C8: - 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 _08079134 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08079134 - ldr r6, _0807911C - ldr r0, [r6] - ldr r1, _08079120 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08079128 - adds r0, r4, 0 - bl nullsub_89 - ldr r0, [r6] - ldr r1, _08079120 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites - ldr r0, _08079124 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079134 - .align 2, 0 -_0807911C: .4byte gDungeonGlobalData -_08079120: .4byte 0x00000676 -_08079124: .4byte gUnknown_80FC028 -_08079128: - ldr r0, _0807913C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079134: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807913C: .4byte gUnknown_80FC054 - thumb_func_end sub_80790C8 - - thumb_func_start BlindTarget -BlindTarget: - 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 _080791CE - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _080791CE - ldr r6, [r4, 0x70] - ldr r0, _080791B0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r6, 0 - adds r1, 0xE8 - ldrb r0, [r1] - cmp r0, 0x1 - beq _080791BC - movs r0, 0x1 - strb r0, [r1] - ldr r1, _080791B4 - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r6, 0 - adds r1, 0xE9 - strb r0, [r1] - adds r0, r4, 0 - bl sub_8041E0C - ldr r0, _080791B8 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0x31 - bl sub_803E46C - bl sub_8049ED4 - bl sub_8040A84 - b _080791C8 - .align 2, 0 -_080791B0: .4byte gAvailablePokemonNames -_080791B4: .4byte gUnknown_80F4F08 -_080791B8: .4byte gUnknown_80FB7F4 -_080791BC: - ldr r0, _080791D4 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080791C8: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080791CE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080791D4: .4byte gUnknown_80FB810 - thumb_func_end BlindTarget - - thumb_func_start sub_80791D8 -sub_80791D8: - push {r4-r7,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079266 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08079266 - ldr r7, [r4, 0x70] - ldr r0, _08079248 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r6, r7, 0 - adds r6, 0xE8 - ldrb r0, [r6] - cmp r0, 0x2 - beq _08079254 - adds r0, r4, 0 - bl sub_8041E1C - ldr r0, _0807924C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0x2 - strb r0, [r6] - ldr r1, _08079250 - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xE9 - strb r0, [r1] - movs r0, 0x1 - bl sub_803F580 - bl sub_8049ED4 - bl sub_8040A84 - b _08079260 - .align 2, 0 -_08079248: .4byte gAvailablePokemonNames -_0807924C: .4byte gUnknown_80FB834 -_08079250: .4byte gUnknown_80F4F0C -_08079254: - ldr r0, _0807926C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079260: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079266: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807926C: .4byte gUnknown_80FB85C - thumb_func_end sub_80791D8 - - thumb_func_start RestoreVisionTarget -RestoreVisionTarget: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080792EE - ldr r5, [r4, 0x70] - ldr r0, _080792D0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xE8 - ldrb r0, [r1] - cmp r0, 0x3 - beq _080792DC - movs r0, 0x3 - strb r0, [r1] - ldr r1, _080792D4 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xE9 - strb r0, [r1] - adds r0, r4, 0 - bl sub_8041E3C - ldr r0, _080792D8 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0x31 - bl sub_803E46C - bl sub_8049ED4 - bl sub_8040A84 - b _080792E8 - .align 2, 0 -_080792D0: .4byte gAvailablePokemonNames -_080792D4: .4byte gUnknown_80F4F10 -_080792D8: .4byte gUnknown_80FB880 -_080792DC: - ldr r0, _080792F4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080792E8: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080792EE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080792F4: .4byte gUnknown_80FB89C - thumb_func_end RestoreVisionTarget - - thumb_func_start sub_80792F8 -sub_80792F8: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r10, r0 - adds r6, r1, 0 - mov r9, r2 - movs r0, 0 - mov r8, r0 - adds r0, r6, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807939A - ldr r0, [r6, 0x70] - movs r1, 0x8C - lsls r1, 1 - adds r4, r0, r1 - adds r5, r4, 0 - movs r7, 0x3 -_08079326: - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0807935E - ldrb r0, [r4, 0x4] - str r0, [sp] - adds r0, r5, 0 - bl GetMoveMaxPP - str r0, [sp, 0x4] - ldr r1, [sp] - ldr r0, [sp, 0x4] - cmp r1, r0 - bge _0807935E - ldr r0, [sp] - add r0, r9 - str r0, [sp] - ldr r1, [sp] - ldr r0, [sp, 0x4] - cmp r1, r0 - ble _08079356 - ldr r0, [sp, 0x4] - str r0, [sp] -_08079356: - ldr r0, [sp] - strb r0, [r4, 0x4] - movs r0, 0x1 - mov r8, r0 -_0807935E: - adds r4, 0x8 - adds r5, 0x8 - subs r7, 0x1 - cmp r7, 0 - bge _08079326 - mov r1, r8 - cmp r1, 0 - beq _08079388 - adds r0, r6, 0 - bl sub_8041E4C - ldr r0, _08079384 - ldr r2, [r0] - mov r0, r10 - adds r1, r6, 0 - bl sub_80522F4 - b _08079394 - .align 2, 0 -_08079384: .4byte gUnknown_80FDBD0 -_08079388: - ldr r0, _080793AC - ldr r2, [r0] - mov r0, r10 - adds r1, r6, 0 - bl sub_80522F4 -_08079394: - adds r0, r6, 0 - bl DungeonEntityUpdateStatusSprites -_0807939A: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080793AC: .4byte gUnknown_80FDBF0 - thumb_func_end sub_80792F8 - - thumb_func_start sub_80793B0 -sub_80793B0: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079416 - ldr r0, _080793FC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, [r4, 0x70] - adds r1, r0, 0 - ldrb r0, [r1, 0x14] - adds r2, r0, 0 - adds r0, r2, r5 - cmp r0, 0xFE - ble _080793DE - movs r0, 0xFF -_080793DE: - strb r0, [r1, 0x14] - lsls r0, 24 - lsrs r0, 24 - cmp r2, r0 - bcs _08079404 - adds r0, r4, 0 - bl sub_8041E60 - ldr r0, _08079400 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079410 - .align 2, 0 -_080793FC: .4byte gAvailablePokemonNames -_08079400: .4byte gUnknown_80FC33C -_08079404: - ldr r0, _0807941C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079410: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079416: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807941C: .4byte gUnknown_80FC360 - thumb_func_end sub_80793B0 - - thumb_func_start sub_8079420 -sub_8079420: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079486 - ldr r0, _0807946C - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, [r4, 0x70] - adds r1, r0, 0 - ldrb r0, [r1, 0x15] - adds r2, r0, 0 - adds r0, r2, r5 - cmp r0, 0xFE - ble _0807944E - movs r0, 0xFF -_0807944E: - strb r0, [r1, 0x15] - lsls r0, 24 - lsrs r0, 24 - cmp r2, r0 - bcs _08079474 - adds r0, r4, 0 - bl sub_8041E74 - ldr r0, _08079470 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079480 - .align 2, 0 -_0807946C: .4byte gAvailablePokemonNames -_08079470: .4byte gUnknown_80FC388 -_08079474: - ldr r0, _0807948C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079480: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079486: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807948C: .4byte gUnknown_80FC3B4 - thumb_func_end sub_8079420 - - thumb_func_start sub_8079490 -sub_8079490: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080794F6 - ldr r0, _080794DC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, [r4, 0x70] - adds r1, r0, 0 - ldrb r0, [r1, 0x16] - adds r2, r0, 0 - adds r0, r2, r5 - cmp r0, 0xFE - ble _080794BE - movs r0, 0xFF -_080794BE: - strb r0, [r1, 0x16] - lsls r0, 24 - lsrs r0, 24 - cmp r2, r0 - bcs _080794E4 - adds r0, r4, 0 - bl sub_8041E84 - ldr r0, _080794E0 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _080794F0 - .align 2, 0 -_080794DC: .4byte gAvailablePokemonNames -_080794E0: .4byte gUnknown_80FC3D8 -_080794E4: - ldr r0, _080794FC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080794F0: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080794F6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080794FC: .4byte gUnknown_80FC3FC - thumb_func_end sub_8079490 - - thumb_func_start sub_8079500 -sub_8079500: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079566 - ldr r0, _0807954C - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, [r4, 0x70] - adds r1, r0, 0 - ldrb r0, [r1, 0x17] - adds r2, r0, 0 - adds r0, r2, r5 - cmp r0, 0xFE - ble _0807952E - movs r0, 0xFF -_0807952E: - strb r0, [r1, 0x17] - lsls r0, 24 - lsrs r0, 24 - cmp r2, r0 - bcs _08079554 - adds r0, r4, 0 - bl sub_8041E94 - ldr r0, _08079550 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079560 - .align 2, 0 -_0807954C: .4byte gAvailablePokemonNames -_08079550: .4byte gUnknown_80FC428 -_08079554: - ldr r0, _0807956C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079560: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079566: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807956C: .4byte gUnknown_80FC454 - thumb_func_end sub_8079500 - - thumb_func_start sub_8079570 -sub_8079570: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - ldr r4, [r5, 0x70] - ldr r0, _080795A0 - movs r2, 0 - bl SetMessageArgument - adds r4, 0xE0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _080795A8 - movs r0, 0x1 - strb r0, [r4] - adds r0, r5, 0 - bl sub_8041EA4 - ldr r0, _080795A4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _080795B4 - .align 2, 0 -_080795A0: .4byte gUnknown_202DFE8 -_080795A4: .4byte gUnknown_80FD20C -_080795A8: - ldr r0, _080795C0 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 -_080795B4: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080795C0: .4byte gUnknown_80FD22C - thumb_func_end sub_8079570 - - thumb_func_start sub_80795C4 -sub_80795C4: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - ldr r4, [r5, 0x70] - ldr r0, _080795F4 - movs r2, 0 - bl SetMessageArgument - adds r4, 0xE0 - ldrb r0, [r4] - cmp r0, 0x2 - beq _080795FC - movs r0, 0x2 - strb r0, [r4] - adds r0, r5, 0 - bl sub_8041EB4 - ldr r0, _080795F8 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _08079608 - .align 2, 0 -_080795F4: .4byte gUnknown_202DFE8 -_080795F8: .4byte gUnknown_80FD254 -_080795FC: - ldr r0, _08079614 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08079608: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079614: .4byte gUnknown_80FD27C - thumb_func_end sub_80795C4 - - thumb_func_start sub_8079618 -sub_8079618: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r9, r0 - adds r7, r1, 0 - mov r8, r3 - lsls r2, 24 - lsrs r6, r2, 24 - adds r0, r7, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08079638 - b _08079752 -_08079638: - ldr r5, [r7, 0x70] - ldr r0, _08079660 - adds r1, r7, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r5, 0 - adds r0, 0xC0 - ldrb r0, [r0] - cmp r0, r6 - bne _08079668 - cmp r6, 0xC - bne _08079668 - ldr r0, _08079664 - ldr r2, [r0] - mov r0, r9 - adds r1, r7, 0 - bl sub_80522F4 - b _08079752 - .align 2, 0 -_08079660: .4byte gAvailablePokemonNames -_08079664: .4byte gUnknown_80FC074 -_08079668: - adds r0, r5, 0 - adds r0, 0xC0 - strb r6, [r0] - movs r4, 0 - movs r1, 0x8C - lsls r1, 1 - adds r0, r5, r1 - subs r2, r6, 0x7 - b _0807968A -_0807967A: - adds r4, 0x1 - cmp r4, 0x3 - bgt _08079694 - lsls r0, r4, 3 - movs r1, 0x8C - lsls r1, 1 - adds r0, r1 - adds r0, r5, r0 -_0807968A: - cmp r0, r8 - bne _0807967A - adds r0, r5, 0 - adds r0, 0xC2 - strb r4, [r0] -_08079694: - movs r1, 0xA5 - lsls r1, 1 - adds r0, r5, r1 - movs r1, 0x1 - strb r1, [r0] - movs r4, 0 - lsls r0, r2, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080796B2 - adds r0, r5, 0 - adds r0, 0xFF - strb r1, [r0] - movs r4, 0x1 - b _080796C6 -_080796B2: - adds r0, r6, 0 - subs r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080796C6 - adds r1, r5, 0 - adds r1, 0xFF - movs r0, 0x2 - strb r0, [r1] -_080796C6: - cmp r6, 0x1 - bne _080796E4 - ldr r1, _08079718 - adds r0, r7, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r2, r5, 0 - adds r2, 0xC1 - movs r1, 0 - strb r0, [r2] - adds r0, r5, 0 - adds r0, 0xA0 - str r1, [r0] -_080796E4: - cmp r6, 0xC - bne _080796FA - ldr r1, _0807971C - adds r0, r7, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC1 - strb r0, [r1] -_080796FA: - adds r0, r7, 0 - adds r1, r4, 0 - bl sub_8041BD0 - mov r0, r9 - adds r1, r7, 0 - ldr r2, [sp, 0x1C] - bl sub_80522F4 - adds r0, r7, 0 - bl DungeonEntityUpdateStatusSprites - movs r4, 0 - ldr r6, _08079720 - b _0807972C - .align 2, 0 -_08079718: .4byte gUnknown_80F4E9C -_0807971C: .4byte gUnknown_80F4EA0 -_08079720: .4byte 0x0000c7ff -_08079724: - movs r0, 0x53 - bl sub_803E46C - adds r4, 0x1 -_0807972C: - ldr r0, _08079760 - cmp r4, r0 - bgt _08079752 - movs r1, 0x1 - adds r0, r5, 0 - adds r0, 0xFF - ldrb r0, [r0] - cmp r0, 0x1 - bne _0807974E - movs r1, 0xBA - lsls r1, 1 - adds r0, r5, r1 - ldr r0, [r0] - movs r1, 0 - cmp r0, r6 - ble _0807974E - movs r1, 0x1 -_0807974E: - cmp r1, 0 - beq _08079724 -_08079752: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079760: .4byte 0x0000018f - thumb_func_end sub_8079618 - - thumb_func_start sub_8079764 -sub_8079764: - push {r4,lr} - adds r4, r0, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807979A - ldr r2, [r4, 0x70] - adds r3, r2, 0 - adds r3, 0xC0 - ldrb r0, [r3] - cmp r0, 0x1 - beq _08079794 - cmp r0, 0xC - beq _08079794 - movs r1, 0 - strb r1, [r3] - movs r3, 0xA5 - lsls r3, 1 - adds r0, r2, r3 - strb r1, [r0] - adds r0, r2, 0 - adds r0, 0xFF - strb r1, [r0] -_08079794: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807979A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8079764 - - thumb_func_start sub_80797A0 -sub_80797A0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r7, r2, 24 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079822 - ldr r6, [r4, 0x70] - ldr r0, _080797E0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r5, r6, 0 - adds r5, 0xC4 - ldrb r0, [r5] - cmp r0, r7 - bne _080797E8 - ldr r0, _080797E4 - ldr r2, [r0] - mov r0, r8 - adds r1, r4, 0 - bl sub_80522F4 - b _08079822 - .align 2, 0 -_080797E0: .4byte gAvailablePokemonNames -_080797E4: .4byte gUnknown_80FB10C -_080797E8: - adds r0, r4, 0 - bl nullsub_57 - ldrb r0, [r5] - cmp r0, 0x4 - beq _0807980A - cmp r0, 0xA - beq _0807980A - ldr r1, _0807982C - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r6, 0 - adds r1, 0xC5 - strb r0, [r1] -_0807980A: - adds r0, r6, 0 - adds r0, 0xC4 - strb r7, [r0] - ldr r0, _08079830 - ldr r2, [r0] - mov r0, r8 - adds r1, r4, 0 - bl sub_80522F4 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079822: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807982C: .4byte gUnknown_80F4E98 -_08079830: .4byte gUnknown_80FB0E0 - thumb_func_end sub_80797A0 - - thumb_func_start sub_8079834 -sub_8079834: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080798A6 - ldr r5, [r4, 0x70] - ldr r0, _08079888 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0x2 - beq _08079894 - movs r0, 0x2 - strb r0, [r1] - ldr r1, _0807988C - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_58 - ldr r0, _08079890 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _080798A0 - .align 2, 0 -_08079888: .4byte gAvailablePokemonNames -_0807988C: .4byte gUnknown_80F4E88 -_08079890: .4byte gUnknown_80FB048 -_08079894: - ldr r0, _080798AC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080798A0: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080798A6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080798AC: .4byte gUnknown_80FB074 - thumb_func_end sub_8079834 - - thumb_func_start sub_80798B0 -sub_80798B0: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079922 - ldr r5, [r4, 0x70] - ldr r0, _08079904 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0xE - beq _08079910 - movs r0, 0xE - strb r0, [r1] - ldr r1, _08079908 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_59 - ldr r0, _0807990C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _0807991C - .align 2, 0 -_08079904: .4byte gAvailablePokemonNames -_08079908: .4byte gUnknown_80F4E8C -_0807990C: .4byte gUnknown_80FB09C -_08079910: - ldr r0, _08079928 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_0807991C: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079922: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079928: .4byte gUnknown_80FB0C4 - thumb_func_end sub_80798B0 - - thumb_func_start sub_807992C -sub_807992C: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807999E - ldr r5, [r4, 0x70] - ldr r0, _08079980 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0x6 - beq _0807998C - movs r0, 0x6 - strb r0, [r1] - ldr r1, _08079984 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl sub_8041B34 - ldr r0, _08079988 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079998 - .align 2, 0 -_08079980: .4byte gAvailablePokemonNames -_08079984: .4byte gUnknown_80F4EB4 -_08079988: .4byte gUnknown_80FAE1C -_0807998C: - ldr r0, _080799A4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079998: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807999E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080799A4: .4byte gUnknown_80FAE3C - thumb_func_end sub_807992C - - thumb_func_start sub_80799A8 -sub_80799A8: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079A1A - ldr r5, [r4, 0x70] - ldr r0, _080799FC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0x5 - beq _08079A08 - movs r0, 0x5 - strb r0, [r1] - ldr r1, _08079A00 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_60 - ldr r0, _08079A04 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079A14 - .align 2, 0 -_080799FC: .4byte gAvailablePokemonNames -_08079A00: .4byte gUnknown_80F4E90 -_08079A04: .4byte gUnknown_80FAF5C -_08079A08: - ldr r0, _08079A20 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079A14: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079A1A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079A20: .4byte gUnknown_80FAF8C - thumb_func_end sub_80799A8 - - thumb_func_start sub_8079A24 -sub_8079A24: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079A96 - ldr r5, [r4, 0x70] - ldr r0, _08079A78 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0x3 - beq _08079A84 - movs r0, 0x3 - strb r0, [r1] - ldr r1, _08079A7C - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_61 - ldr r0, _08079A80 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079A90 - .align 2, 0 -_08079A78: .4byte gAvailablePokemonNames -_08079A7C: .4byte gUnknown_80F4E84 -_08079A80: .4byte gUnknown_80FB130 -_08079A84: - ldr r0, _08079A9C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079A90: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079A96: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079A9C: .4byte gUnknown_80FB160 - thumb_func_end sub_8079A24 - - thumb_func_start sub_8079AA0 -sub_8079AA0: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079B12 - ldr r5, [r4, 0x70] - ldr r0, _08079AF4 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0x1 - beq _08079B00 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _08079AF8 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_62 - ldr r0, _08079AFC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079B0C - .align 2, 0 -_08079AF4: .4byte gAvailablePokemonNames -_08079AF8: .4byte gUnknown_80F4E80 -_08079AFC: .4byte gUnknown_80FB17C -_08079B00: - ldr r0, _08079B18 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079B0C: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079B12: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079B18: .4byte gUnknown_80FB1A8 - thumb_func_end sub_8079AA0 - - thumb_func_start sub_8079B1C -sub_8079B1C: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079B98 - adds r0, r4, 0 - bl nullsub_63 - ldr r5, [r4, 0x70] - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0x7 - beq _08079B7C - movs r0, 0x7 - strb r0, [r1] - ldr r1, _08079B70 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - ldr r0, _08079B74 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08079B78 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079B92 - .align 2, 0 -_08079B70: .4byte gUnknown_80F4ED4 -_08079B74: .4byte gAvailablePokemonNames -_08079B78: .4byte gUnknown_80FB9B0 -_08079B7C: - ldr r0, _08079BA0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08079BA4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079B92: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079B98: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079BA0: .4byte gAvailablePokemonNames -_08079BA4: .4byte gUnknown_80FB9D8 - thumb_func_end sub_8079B1C - - thumb_func_start sub_8079BA8 -sub_8079BA8: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079C1A - ldr r5, [r4, 0x70] - ldr r0, _08079BFC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0x8 - beq _08079C08 - movs r0, 0x8 - strb r0, [r1] - ldr r1, _08079C00 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_64 - ldr r0, _08079C04 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079C14 - .align 2, 0 -_08079BFC: .4byte gAvailablePokemonNames -_08079C00: .4byte gUnknown_80F4EE8 -_08079C04: .4byte gUnknown_80FBAC0 -_08079C08: - ldr r0, _08079C20 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079C14: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079C1A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079C20: .4byte gUnknown_80FBAE4 - thumb_func_end sub_8079BA8 - - thumb_func_start sub_8079C24 -sub_8079C24: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079C96 - ldr r5, [r4, 0x70] - ldr r0, _08079C78 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0x9 - beq _08079C84 - movs r0, 0x9 - strb r0, [r1] - ldr r1, _08079C7C - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_65 - ldr r0, _08079C80 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079C90 - .align 2, 0 -_08079C78: .4byte gAvailablePokemonNames -_08079C7C: .4byte gUnknown_80F4EF8 -_08079C80: .4byte gUnknown_80FBBF0 -_08079C84: - ldr r0, _08079C9C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079C90: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079C96: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079C9C: .4byte gUnknown_80FBC14 - thumb_func_end sub_8079C24 - - thumb_func_start sub_8079CA0 -sub_8079CA0: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079D12 - ldr r5, [r4, 0x70] - ldr r0, _08079CF4 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0xB - beq _08079D00 - movs r0, 0xB - strb r0, [r1] - ldr r1, _08079CF8 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_66 - ldr r0, _08079CFC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079D0C - .align 2, 0 -_08079CF4: .4byte gAvailablePokemonNames -_08079CF8: .4byte gUnknown_80F4F18 -_08079CFC: .4byte gUnknown_80FBC38 -_08079D00: - ldr r0, _08079D18 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079D0C: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079D12: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079D18: .4byte gUnknown_80FBC5C - thumb_func_end sub_8079CA0 - - thumb_func_start sub_8079D1C -sub_8079D1C: - 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 _08079DAE - ldr r6, [r4, 0x70] - adds r0, r4, 0 - movs r1, 0x25 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08079D50 - ldr r0, _08079D4C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079DAE - .align 2, 0 -_08079D4C: .4byte gPtrForecastPreventsConversion2Message -_08079D50: - ldr r0, _08079D90 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r6, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0xC - beq _08079D9C - movs r0, 0xC - strb r0, [r1] - ldr r1, _08079D94 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r6, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_67 - ldr r0, _08079D98 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079DA8 - .align 2, 0 -_08079D90: .4byte gAvailablePokemonNames -_08079D94: .4byte gUnknown_80F4F20 -_08079D98: .4byte gUnknown_80FBC7C -_08079D9C: - ldr r0, _08079DB4 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079DA8: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079DAE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079DB4: .4byte gUnknown_80FBCA4 - thumb_func_end sub_8079D1C - - thumb_func_start sub_8079DB8 -sub_8079DB8: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079E2A - ldr r5, [r4, 0x70] - ldr r0, _08079E0C - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xC4 - ldrb r0, [r1] - cmp r0, 0xD - beq _08079E18 - movs r0, 0xD - strb r0, [r1] - ldr r1, _08079E10 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xC5 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_68 - ldr r0, _08079E14 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08079E24 - .align 2, 0 -_08079E0C: .4byte gAvailablePokemonNames -_08079E10: .4byte gUnknown_80F4F24 -_08079E14: .4byte gUnknown_80FBCC8 -_08079E18: - ldr r0, _08079E30 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08079E24: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08079E2A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079E30: .4byte gUnknown_80FBCF0 - thumb_func_end sub_8079DB8 - - thumb_func_start sub_8079E34 -sub_8079E34: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r8, r0 - adds r5, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - movs r6, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08079F0E - ldr r0, [r5, 0x70] - mov r12, r0 - movs r4, 0 - movs r7, 0xA -_08079E5C: - lsls r2, r4, 1 - mov r0, r12 - adds r0, 0x1C - adds r1, r0, r2 - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0xA - beq _08079E70 - strh r7, [r1] - movs r6, 0x1 -_08079E70: - mov r0, r12 - adds r0, 0x20 - adds r1, r0, r2 - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0xA - beq _08079E82 - strh r7, [r1] - movs r6, 0x1 -_08079E82: - mov r0, r12 - adds r0, 0x24 - adds r1, r0, r2 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0xA - beq _08079E94 - strh r7, [r1] - movs r6, 0x1 -_08079E94: - lsls r3, r4, 2 - mov r0, r12 - adds r0, 0x2C - adds r1, r0, r3 - ldr r0, [r1] - movs r2, 0x80 - lsls r2, 1 - cmp r0, r2 - beq _08079EAA - str r2, [r1] - movs r6, 0x1 -_08079EAA: - mov r0, r12 - adds r0, 0x34 - adds r1, r0, r3 - ldr r0, [r1] - cmp r0, r2 - beq _08079EBA - str r2, [r1] - movs r6, 0x1 -_08079EBA: - adds r4, 0x1 - cmp r4, 0x1 - ble _08079E5C - cmp r6, 0 - beq _08079ECC - adds r0, r5, 0 - bl sub_80420C8 - b _08079ED8 -_08079ECC: - mov r3, r9 - cmp r3, 0 - beq _08079ED8 - adds r0, r5, 0 - bl sub_80420C8 -_08079ED8: - ldr r0, _08079EF4 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - cmp r6, 0 - beq _08079EFC - ldr r0, _08079EF8 - ldr r2, [r0] - mov r0, r8 - adds r1, r5, 0 - bl sub_80522F4 - b _08079F08 - .align 2, 0 -_08079EF4: .4byte gAvailablePokemonNames -_08079EF8: .4byte gUnknown_80FBD18 -_08079EFC: - ldr r0, _08079F1C - ldr r2, [r0] - mov r0, r8 - adds r1, r5, 0 - bl sub_80522F4 -_08079F08: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_08079F0E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079F1C: .4byte gUnknown_80FBD3C - thumb_func_end sub_8079E34 - - .align 2, 0 + .align 2,0 diff --git a/include/code_8077274_1.h b/include/code_8077274_1.h index e7a81dfbb..e51f592a2 100644 --- a/include/code_8077274_1.h +++ b/include/code_8077274_1.h @@ -1,6 +1,37 @@ #ifndef GUARD_CODE_8077274_1_H #define GUARD_CODE_8077274_1_H +void MuzzleTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target); +void sub_8078E18(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void sub_8078F50(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void sub_8078FDC(struct DungeonEntity * pokemon, struct DungeonEntity * target, s16 param_3); +void IdentityItemHolders(struct DungeonEntity *pokemon, struct DungeonEntity *target); +void BlindTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target); +void CrossEyeVisionTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target); +void RestoreVisionTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target); +void RestorePPTarget(struct DungeonEntity * pokemon,struct DungeonEntity * target, s32 param_3); +void sub_80793B0(struct DungeonEntity * pokemon,struct DungeonEntity * target, s32 param_3); +void sub_8079420(struct DungeonEntity * pokemon,struct DungeonEntity * target, s32 param_3); +void sub_8079490(struct DungeonEntity * pokemon,struct DungeonEntity * target, s32 param_3); +void sub_8079500(struct DungeonEntity * pokemon,struct DungeonEntity * target, s32 param_3); +void LongTossStatusTarget(struct DungeonEntity * pokemon,struct DungeonEntity * target); +void PierceStatusTarget(struct DungeonEntity * pokemon,struct DungeonEntity * target); +void sub_8079618(struct DungeonEntity *pokemon, struct DungeonEntity *target, u8 newStatus, struct PokemonMove *move, u8 *message); +void sub_8079764(struct DungeonEntity * pokemon); +void sub_80797A0(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 newStatus); +void SafeguardStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void MistStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void WishStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void MagicCoatStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void LightScreenStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void ReflectStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void ProtectStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void MirrorCoatStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void EndureStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void MirrorMoveStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void Conversion2StatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void VitalThrowStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void sub_8079618(struct DungeonEntity * pokemon, struct DungeonEntity *target, u8 newStatus, struct PokemonMove *move, u8 *message); 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); diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index b99cf8a29..48d9db873 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -103,7 +103,7 @@ struct DungeonEntityData /* 0x94 */ u8 tactic; u8 fill95[0x9C - 0x95]; /* 0x9C */ u32 unk9C; - u8 fillA0[0xA4 - 0xA0]; + /* 0xA0 */ u32 unkA0; /* 0xA4 */ u8 clientType; u8 fillA5[0xA8 - 0xA5]; // Statuses are split into groups based on which ones can't overlap. @@ -151,8 +151,8 @@ struct DungeonEntityData /* 0xE5 */ u8 transformStatusTurnsLeft; u8 fillE6[0xE8 - 0xE6]; /* 0xE8 */ u8 eyesightStatus; - u8 fillE9; - /* 0xEA */ u8 eyesightStatusTurnsLeft; + /* 0xE9 */ u8 eyesightStatusTurnsLeft; + /* 0xEA */ u8 unkEA; u8 fillEB; /* 0xEC */ bool8 muzzledStatus; /* 0xED */ u8 muzzledTurnsLeft; @@ -195,7 +195,9 @@ struct DungeonEntityData u8 fill146; /* 0x147 */ bool8 waiting; // True if an AI Pokémon decided to do nothing this turn. /* 0x148 */ bool8 attacking; - u8 fill149[0x14E - 0x149]; + /* 0x149 */ u8 unk149; + /* 0x14A */ u8 unk14A; + u8 fill14B[0x14E - 0x14B]; /* 0x14E */ u16 visualFlags; /* 0x150 */ u16 previousVisualFlags; /* 0x152 */ u8 unk152; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index b0bebc9cc..392ea8063 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -61,7 +61,8 @@ struct DungeonGlobalData u8 fill673[0x674 - 0x673]; u8 unk674; u8 unk675; - u8 unk676[0x68A - 0x676]; + /* 0x676 */ bool8 itemHoldersIdentified; + u8 unk677[0x68A - 0x677]; /* 0x68A */ u8 unk68A; u8 fill68B[0x363C - 0x68B]; /* 0x363C */ u8 expYieldRankings[NUM_SPECIES]; diff --git a/src/code_8048480.c b/src/code_8048480.c index 0244461de..331dc1037 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -7,6 +7,7 @@ #include "dungeon_random.h" #include "number_util.h" #include "moves.h" +#include "code_8077274_1.h" extern u8 *gUnknown_80F89F4[]; extern u8 gAvailablePokemonNames[0x58]; @@ -40,18 +41,11 @@ 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 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); -extern void sub_80791D8(struct DungeonEntity *pokemon, struct DungeonEntity *r1); -extern void BlindTarget(struct DungeonEntity *pokemon, struct DungeonEntity *r1); extern void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *r1, s16, s16, u32); -extern void sub_80792F8(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32); -extern void sub_8079F20(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32, u8); extern void sub_806F370(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); extern void sub_8078A58(struct DungeonEntity *, struct DungeonEntity *, s16, u32); -extern void SendImmobilizeEndMessage(struct DungeonEntity*, struct DungeonEntity*); extern s32 sub_8042520(struct DungeonEntity *); struct DungeonEntity *sub_80696FC(struct DungeonEntity *); extern void sub_80943A0(void*, s32); @@ -79,7 +73,7 @@ void sub_804839C(struct DungeonEntity *pokemon, struct DungeonEntity *target) void sub_80483C4(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_80792F8(pokemon, target, 999); + RestorePPTarget(pokemon, target, 999); } void sub_80483D4(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -94,7 +88,7 @@ void sub_80483F4(struct DungeonEntity *pokemon, struct DungeonEntity *target) void sub_8048400(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_80791D8(pokemon, target); + CrossEyeVisionTarget(pokemon, target); } void sub_804840C(struct DungeonEntity *pokemon, struct DungeonEntity *target) diff --git a/src/code_8057824.c b/src/code_8057824.c index 8d18c8dd3..fb55134a2 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -12,7 +12,7 @@ extern u8 gAvailablePokemonNames[]; extern s16 gUnknown_80F4DB6; extern u16 gUnknown_80F4F42; -extern u32 gUnknown_80FAC88; +extern u8 *gUnknown_80FAC88; extern u8 *gUnknown_80FD018[]; extern u8 *gUnknown_80FCFBC[]; extern u8 *gUnknown_80FCFE4[]; @@ -49,7 +49,6 @@ extern u8 sub_805727C(struct DungeonEntity *, struct DungeonEntity *, s16); extern u32 sub_8055640(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32); extern void sub_80779F0(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern void sub_8078968(struct DungeonEntity *r0, struct DungeonEntity *r1); -extern void sub_8079618(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32, u32); extern void sub_8077AE4(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32); extern void sub_8077084(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32, u32); @@ -122,10 +121,10 @@ bool32 sub_8057948(struct DungeonEntity *pokemon, struct DungeonEntity *target) return TRUE; } -bool32 sub_8057954(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 param_3) +bool32 sub_8057954(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move) { // {ARG_POKEMON_0} is enraged - sub_8079618(pokemon,target,0xc,param_3,gUnknown_80FAC88); + sub_8079618(pokemon,target,0xc,move,gUnknown_80FAC88); return TRUE; } diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index a7f08e949..a29fea254 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -1,16 +1,23 @@ #include "global.h" +#include "constants/ability.h" #include "constants/item.h" #include "constants/status.h" +#include "constants/type.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_random.h" #include "dungeon_items.h" #include "dungeon_util.h" #include "code_80521D0.h" #include "code_8077274_1.h" #include "code_808417C.h" +#include "moves.h" +#include "pokemon.h" #include "status_checks_1.h" extern u8 gAvailablePokemonNames[0x58]; +extern u8 gUnknown_202DFE8[0x58]; extern u8 *gUnknown_80FA8BC[]; extern u8 *gUnknown_80FA824[]; extern u8 *gUnknown_80FA81C[]; @@ -68,6 +75,90 @@ extern u8 *gPtrSealedMoveReleasedMessage[]; extern u8 *gUnknown_81004E8[]; extern u8 *gPtrExposedWoreOffMessage[]; extern u8 *gUnknown_8100594[]; +extern u8 *gUnknown_80FBD18[]; +extern u8 *gUnknown_80FBD3C[]; +extern u8 *gUnknown_80FBCF0[]; +extern u8 *gUnknown_80FBCC8[]; +extern s16 gUnknown_80F4F24[]; +extern u8 *gUnknown_80FBCA4[]; +extern u8 *gUnknown_80FBC7C[]; +extern u8 *gPtrForecastPreventsConversion2Message[]; +extern s16 gUnknown_80F4F20[]; +extern u8 *gUnknown_80FBC5C[]; +extern u8 *gUnknown_80FBC38[]; +extern s16 gUnknown_80F4F18[]; +extern u8 *gUnknown_80FBC14[]; +extern u8 *gUnknown_80FBBF0[]; +extern s16 gUnknown_80F4EF8[]; +extern u8 *gUnknown_80FBAE4[]; +extern u8 *gUnknown_80FBAC0[]; +extern s16 gUnknown_80F4EE8[]; +extern u8 *gUnknown_80FB9B0[]; +extern u8 *gUnknown_80FB9D8[]; +extern s16 gUnknown_80F4ED4[]; +extern s16 gUnknown_80F4E80[]; +extern u8 *gUnknown_80FB17C[]; +extern u8 *gUnknown_80FB1A8[]; +extern s16 gUnknown_80F4E84[]; +extern u8 *gUnknown_80FB130[]; +extern u8 *gUnknown_80FB160[]; +extern s16 gUnknown_80F4E90[]; +extern u8 *gUnknown_80FAF5C[]; +extern u8 *gUnknown_80FAF8C[]; +extern s16 gUnknown_80F4EB4[]; +extern u8 *gUnknown_80FAE1C[]; +extern u8 *gUnknown_80FAE3C[]; +extern s16 gUnknown_80F4E8C[]; +extern u8 *gUnknown_80FB09C[]; +extern u8 *gUnknown_80FB0C4[]; +extern s16 gUnknown_80F4E88[]; +extern u8 *gUnknown_80FB048[]; +extern u8 *gUnknown_80FB074[]; +extern s16 gUnknown_80F4E98[]; +extern u8 *gUnknown_80FB10C[]; +extern u8 *gUnknown_80FB0E0[]; +extern u8 *gUnknown_80FC074[]; +extern s16 gUnknown_80F4E9C[]; +extern s16 gUnknown_80F4EA0[]; +extern u8 *gUnknown_80FD254[]; +extern u8 *gUnknown_80FD27C[]; +extern u8 *gUnknown_80FD22C[]; +extern u8 *gUnknown_80FD20C[]; +extern u8 *gUnknown_80FC428[]; +extern u8 *gUnknown_80FC454[]; +extern u8 *gUnknown_80FC3D8[]; +extern u8 *gUnknown_80FC3FC[]; +extern u8 *gUnknown_80FC388[]; +extern u8 *gUnknown_80FC3B4[]; +extern u8 *gUnknown_80FC33C[]; +extern u8 *gUnknown_80FC360[]; +extern u8 *gUnknown_80FDBD0[]; +extern u8 *gUnknown_80FDBF0[]; +extern u8 *gUnknown_80FB880[]; +extern u8 *gUnknown_80FB89C[]; +extern s16 gUnknown_80F4F10[]; +extern u8 *gUnknown_80FB834[]; +extern u8 *gUnknown_80FB85C[]; +extern s16 gUnknown_80F4F0C[]; +extern s16 gUnknown_80F4F08[]; +extern u8 *gUnknown_80FB810[]; +extern u8 *gUnknown_80FB7F4[]; +extern u8 *gUnknown_80FC028[]; +extern u8 *gUnknown_80FC054[]; +extern u8 *gUnknown_80FC000[]; +extern u8 *gUnknown_80FBFD8[]; +extern u8 *gUnknown_80FBF9C[]; +extern u8 *gUnknown_80FBFB8[]; +extern u8 *gUnknown_80FBF04[]; +extern u8 *gUnknown_80FBEC0[]; +extern s16 gUnknown_80F4EFC[]; +extern u8 *gUnknown_80FBEE4[]; +extern s16 gUnknown_80F4F04[]; +extern u8 *gUnknown_80FBF50[]; +extern u8 *gUnknown_80FBF28[]; +extern s16 gUnknown_80F4F1C[]; +extern u8 *gUnknown_80FBF68[]; +extern u8 *gUnknown_80FBF84[]; extern void sub_8049ED4(); extern void sub_8040A84(); @@ -90,10 +181,900 @@ 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); +extern void nullsub_68(struct DungeonEntity *); +extern void nullsub_67(struct DungeonEntity *); +extern void nullsub_66(struct DungeonEntity *); +extern void nullsub_65(struct DungeonEntity *); +extern void nullsub_64(struct DungeonEntity *); +extern void nullsub_63(struct DungeonEntity *); +extern void nullsub_62(struct DungeonEntity *); +extern void nullsub_61(struct DungeonEntity *); +extern void nullsub_60(struct DungeonEntity *); +extern void nullsub_59(struct DungeonEntity *); +extern void nullsub_58(struct DungeonEntity *); +extern void nullsub_57(struct DungeonEntity *); +extern void sub_8041B34(struct DungeonEntity *); +void sub_8041BD0(struct DungeonEntity *r0, u8 r1); +void sub_8041EB4(struct DungeonEntity *); +void sub_8041EA4(struct DungeonEntity *); +extern void sub_8041E84(struct DungeonEntity *); +extern void sub_8041E94(struct DungeonEntity *); +extern void sub_8041E74(struct DungeonEntity *); +extern void sub_8041E60(struct DungeonEntity *); +extern void sub_8041E4C(struct DungeonEntity *); +extern void sub_8041E3C(struct DungeonEntity *); +extern void sub_803F580(u32); +extern void sub_8041E1C(struct DungeonEntity *); +extern void nullsub_89(struct DungeonEntity *); +extern void nullsub_88(struct DungeonEntity *); +extern void nullsub_87(struct DungeonEntity *); +extern void nullsub_86(struct DungeonEntity *); +extern void sub_8041E0C(struct DungeonEntity *); +extern void sub_8041DD8(struct DungeonEntity *r0, s32 r1); // NOTE: is s16 in another file +extern s32 sub_803D870(void *, u32); +extern void sub_806CF98(struct DungeonEntity *); +extern bool8 sub_806AA0C(s32, u32); +u32 ExtractSpeciesIndex(struct PokemonStruct **r0); // TODO: look more into this and fix it. + +void MuzzleTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + struct DungeonEntityData *entityData; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon, target, TRUE))) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->muzzledStatus != MUZZLED_STATUS_MUZZLED) { + entityData->muzzledStatus = MUZZLED_STATUS_MUZZLED; + entityData->muzzledTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4F1C, TRUE) + 1; + nullsub_86(target); + sub_80522F4(pokemon, target, *gUnknown_80FBF68); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FBF84); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +// TODO: still gross but does match +void sub_8078E18(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + s16 species; + s32 iVar5; + s32 transformSpecies; + s16 transformSpecies_s16; + s32 index; + struct DungeonEntityData *entityData; + s32 iVar9; + struct PokemonStruct *auStack544[128]; + + + if (EntityExists(target)) { + entityData = target->entityData; + if (entityData->transformStatus == TRANSFORM_STATUS_TRANSFORMED) { + sub_80522F4(pokemon,target,*gUnknown_80FBF04); + } + else { + SetMessageArgument(gAvailablePokemonNames,target,0); + iVar5 = sub_803D870(auStack544,0); + if (iVar5 == 0) { + goto print; + } + else + { + iVar9 = 0; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + species = ExtractSpeciesIndex(&auStack544[DungeonRandomCapped(iVar5) << 1]); + transformSpecies_s16 = sub_8069F54(target, species); + transformSpecies = transformSpecies_s16; + if (((transformSpecies != entityData->transformSpecies) && (sub_806AA0C(transformSpecies, 1))) && + (iVar9 = sub_80687D0(transformSpecies), iVar9 != 0)) break; + } + if ((index == DUNGEON_MAX_POKEMON) || (iVar9 == 0)) { +print: + sub_80522F4(pokemon,target,*gUnknown_80FBEE4); + } + else + { + entityData->transformSpecies = transformSpecies; + target->unk64 = iVar9; + entityData->transformStatus = TRANSFORM_STATUS_TRANSFORMED; + entityData->transformStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4EFC,TRUE) + 1; + sub_806CF98(target); + nullsub_87(target); + sub_806CCB4(target, sub_806CEBC(target)); + CopyCyanSpeciesNametoBuffer(gUnknown_202DFE8, entityData->transformSpecies); + sub_80522F4(pokemon,target,*gUnknown_80FBEC0); + DungeonEntityUpdateStatusSprites(target); + } + } + } + } +} + +void sub_8078F50(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData_1; + struct DungeonEntityData *entityData; + + + if (EntityExists(target)) { + entityData_1 = target->entityData; + entityData = entityData_1; + + if (entityData->transformStatus == TRANSFORM_STATUS_TRANSFORMED) { + SendTransformEndMessage(pokemon,target); + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->transformStatus != TRANSFORM_STATUS_MOBILE) { + entityData->transformStatus = TRANSFORM_STATUS_MOBILE; + entityData->transformStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4F04, FALSE) + 1; + nullsub_88(target); + sub_80522F4(pokemon,target,*gUnknown_80FBF28); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBF50); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_8078FDC(struct DungeonEntity * pokemon, struct DungeonEntity * target, s16 param_3) +{ + struct DungeonEntityData *entityData; + s32 param_3_s16; + s32 param_3_s16_2; + bool32 flag; + bool32 flag2; + + param_3_s16 = param_3; + param_3_s16_2 = param_3_s16; + flag = FALSE; + flag2 = FALSE; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,TRUE))) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->accuracyStages[1] > 10) { + entityData->accuracyStages[1] = 10; + flag = TRUE; + } + if(flag) + { + sub_8041DD8(target,param_3_s16); + sub_80522F4(pokemon,target,*gUnknown_80FC000); + flag2 = TRUE; + } + if (entityData->exposedStatus) { + sub_80522F4(pokemon,target,*gUnknown_80FBFB8); + } + else + { + if (!flag2) { + sub_8041DD8(target,param_3_s16_2); + } + if (!HasType(target, TYPE_GHOST)) { + sub_80522F4(pokemon,target,*gUnknown_80FBFD8); + } + else { + entityData->exposedStatus = TRUE; + sub_80522F4(pokemon,target,*gUnknown_80FBF9C); + } + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void IdentityItemHolders(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + struct DungeonEntityData *entityData; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon, target, TRUE))) { + entityData = target->entityData; + if (!gDungeonGlobalData->itemHoldersIdentified) { + nullsub_89(target); + gDungeonGlobalData->itemHoldersIdentified = TRUE; + DungeonEntityUpdateStatusSprites(target); + sub_80522F4(pokemon,target,*gUnknown_80FC028); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FC054); + } + } +} + +void BlindTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + struct DungeonEntityData *entityData; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon, target, TRUE))) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->eyesightStatus != EYESIGHT_STATUS_BLINKER) { + entityData->eyesightStatus = EYESIGHT_STATUS_BLINKER; + entityData->eyesightStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4F08, TRUE) + 1; + sub_8041E0C(target); + sub_80522F4(pokemon,target,*gUnknown_80FB7F4); + sub_803E46C(0x31); + sub_8049ED4(); + sub_8040A84(); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB810); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void CrossEyeVisionTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + struct DungeonEntityData *entityData; + + + if (EntityExists(target)) { + if(!HasSafeguardStatus(pokemon, target, TRUE)) + { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->eyesightStatus != EYESIGHT_STATUS_CROSS_EYED) { + sub_8041E1C(target); + sub_80522F4(pokemon,target,*gUnknown_80FB834); + entityData->eyesightStatus = EYESIGHT_STATUS_CROSS_EYED; + entityData->eyesightStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4F0C, TRUE) + 1; + sub_803F580(0x1); + sub_8049ED4(); + sub_8040A84(); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB85C); + } + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void RestoreVisionTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + struct DungeonEntityData *entityData; + + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->eyesightStatus != EYESIGHT_STATUS_EYEDROPS) { + entityData->eyesightStatus = EYESIGHT_STATUS_EYEDROPS; + entityData->eyesightStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4F10, FALSE) + 1; + sub_8041E3C(target); + sub_80522F4(pokemon,target,*gUnknown_80FB880); + sub_803E46C(0x31); + sub_8049ED4(); + sub_8040A84(); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB89C); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void RestorePPTarget(struct DungeonEntity * pokemon,struct DungeonEntity * target, s32 param_3) +{ + volatile s32 PP; + volatile s32 maxPP; + struct PokemonMove *movePtr; + struct PokemonMove *movePtr1; + s32 index; + bool8 PPChanged; + struct DungeonEntityData *entityData; + + PPChanged = FALSE; + if (EntityExists(target)) { + entityData = target->entityData; + + for(index = 0; index < MAX_MON_MOVES; index++) + { + movePtr = &entityData->moves[index]; + movePtr1 = movePtr; + if ((movePtr->moveFlags & MOVE_FLAG_EXISTS) != 0) { + PP = movePtr->PP; + maxPP = GetMoveMaxPP(movePtr1); + if (PP < maxPP) { + PP += param_3; + if (PP > maxPP) { + PP = maxPP; + } + movePtr->PP = PP; + PPChanged = TRUE; + } + } + } + if (PPChanged) { + sub_8041E4C(target); + sub_80522F4(pokemon,target,*gUnknown_80FDBD0); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FDBF0); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_80793B0(struct DungeonEntity * pokemon, struct DungeonEntity *target, s32 param_3) +{ + u32 oldStat; + u32 oldStat1; + s32 newStat; + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData1; + + if (EntityExists(target)) { + SetMessageArgument(gAvailablePokemonNames,target,0); + + // NOTE: had to have duplicates to match.. + entityData = target->entityData; + entityData1 = entityData; + oldStat = entityData->attack; + oldStat1 = oldStat; + + newStat = entityData->attack + param_3; + if (0xfe < newStat) { + newStat = 0xff; + } + entityData1->attack = newStat; + if (oldStat1 < (u8)newStat) { + sub_8041E60(target); + sub_80522F4(pokemon,target,*gUnknown_80FC33C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FC360); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_8079420(struct DungeonEntity * pokemon, struct DungeonEntity *target, s32 param_3) +{ + u32 oldStat; + u32 oldStat1; + s32 newStat; + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData1; + + if (EntityExists(target)) { + SetMessageArgument(gAvailablePokemonNames,target,0); + + // NOTE: had to have duplicates to match.. + entityData = target->entityData; + entityData1 = entityData; + oldStat = entityData->specialAttack; + oldStat1 = oldStat; + + newStat = entityData->specialAttack + param_3; + if (0xfe < newStat) { + newStat = 0xff; + } + entityData1->specialAttack = newStat; + if (oldStat1 < (u8)newStat) { + sub_8041E74(target); + sub_80522F4(pokemon,target,*gUnknown_80FC388); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FC3B4); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_8079490(struct DungeonEntity * pokemon, struct DungeonEntity *target, s32 param_3) +{ + u32 oldStat; + u32 oldStat1; + s32 newStat; + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData1; + + if (EntityExists(target)) { + SetMessageArgument(gAvailablePokemonNames,target,0); + + // NOTE: had to have duplicates to match.. + entityData = target->entityData; + entityData1 = entityData; + oldStat = entityData->defense; + oldStat1 = oldStat; + + newStat = entityData->defense + param_3; + if (0xfe < newStat) { + newStat = 0xff; + } + entityData1->defense = newStat; + if (oldStat1 < (u8)newStat) { + sub_8041E84(target); + sub_80522F4(pokemon,target,*gUnknown_80FC3D8); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FC3FC); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_8079500(struct DungeonEntity * pokemon, struct DungeonEntity *target, s32 param_3) +{ + u32 oldStat; + u32 oldStat1; + s32 newStat; + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData1; + + if (EntityExists(target)) { + SetMessageArgument(gAvailablePokemonNames,target,0); + + // NOTE: had to have duplicates to match.. + entityData = target->entityData; + entityData1 = entityData; + oldStat = entityData->specialDefense; + oldStat1 = oldStat; + + newStat = entityData->specialDefense + param_3; + if (0xfe < newStat) { + newStat = 0xff; + } + entityData1->specialDefense = newStat; + if (oldStat1 < (u8)newStat) { + sub_8041E94(target); + sub_80522F4(pokemon,target,*gUnknown_80FC428); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FC454); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void LongTossStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + entityData = target->entityData; + SetMessageArgument(gUnknown_202DFE8,target,0); + if (entityData->itemStatus != ITEM_STATUS_LONG_TOSS) { + entityData->itemStatus = ITEM_STATUS_LONG_TOSS; + sub_8041EA4(target); + sub_80522F4(pokemon,target,*gUnknown_80FD20C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FD22C); + } + DungeonEntityUpdateStatusSprites(target); +} + +void PierceStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + entityData = target->entityData; + SetMessageArgument(gUnknown_202DFE8,target,0); + if (entityData->itemStatus != ITEM_STATUS_PIERCE) { + entityData->itemStatus = ITEM_STATUS_PIERCE; + sub_8041EB4(target); + sub_80522F4(pokemon,target,*gUnknown_80FD254); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FD27C); + } + DungeonEntityUpdateStatusSprites(target); +} + +void sub_8079618(struct DungeonEntity *pokemon, struct DungeonEntity *target, u8 newStatus, struct PokemonMove *move, u8 *message) +{ + bool8 bVar2; + struct PokemonMove *movePtr; + s32 index; + bool8 uVar5; + s32 iVar7; + s32 iVar8; + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if ((entityData->chargingStatus == newStatus) && (newStatus == CHARGING_STATUS_RAGE)) { + sub_80522F4(pokemon,target,*gUnknown_80FC074); + } + else { + entityData->chargingStatus = newStatus; + + for(index = 0; index < MAX_MON_MOVES; index++) + { + movePtr = &entityData->moves[index]; + if(movePtr == move) + { + entityData->chargingStatusMoveIndex = index; + break; + } + } + entityData->unk14A = 1; + + uVar5 = FALSE; + if ((u8)(newStatus - 7) < 2) { + entityData->unkFF = 1; + uVar5 = TRUE; + } + else if ((u8)(newStatus - 9) < 2) { + entityData->unkFF = 2; + } + if (newStatus == 1) { + entityData->chargingStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E9C, FALSE) + 1; + entityData->unkA0 = 0; + } + if (newStatus == CHARGING_STATUS_RAGE) { + entityData->chargingStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4EA0, FALSE) + 1; + } + sub_8041BD0(target,uVar5); + sub_80522F4(pokemon,target,message); + DungeonEntityUpdateStatusSprites(target); + + // TODO: this could probably be cleaner.. + for (index = 0, iVar8 = 0xc7ff; index < 400; index++) { + bVar2 = TRUE; + if (entityData->unkFF == 1) + if(iVar7 = entityData->unk174, bVar2 = FALSE, iVar7 > iVar8) // unk174 -> u32 to s32 + { + bVar2 = TRUE; + } + if (bVar2) { + break; + } + sub_803E46C(0x53); + } + } + } +} + +void sub_8079764(struct DungeonEntity * pokemon) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(pokemon)) { + entityData = pokemon->entityData; + if ((entityData->chargingStatus != CHARGING_STATUS_BIDE) && (entityData->chargingStatus != CHARGING_STATUS_RAGE)) { + entityData->chargingStatus = CHARGING_STATUS_NONE; + entityData->unk14A = 0; + entityData->unkFF = 0; + } + DungeonEntityUpdateStatusSprites(pokemon); + } +} + +void sub_80797A0(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 newStatus) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus == newStatus) { + sub_80522F4(pokemon,target,*gUnknown_80FB10C); + } + else { + nullsub_57(target); + if ((entityData->protectionStatus != PROTECTION_STATUS_COUNTER) && (entityData->protectionStatus != PROTECTION_STATUS_MINI_COUNTER)) { + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E98, FALSE) + 1; + } + entityData->protectionStatus = newStatus; + sub_80522F4(pokemon,target,*gUnknown_80FB0E0); + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void SafeguardStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_SAFEGUARD) { + entityData->protectionStatus = PROTECTION_STATUS_SAFEGUARD; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4E88, FALSE) + 1; + nullsub_58(target); + sub_80522F4(pokemon,target,*gUnknown_80FB048); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB074); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void MistStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_MIST) { + entityData->protectionStatus = PROTECTION_STATUS_MIST; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4E8C, FALSE) + 1; + nullsub_59(target); + sub_80522F4(pokemon,target,*gUnknown_80FB09C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB0C4); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void WishStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_WISH) { + entityData->protectionStatus = PROTECTION_STATUS_WISH; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4EB4, FALSE) + 1; + sub_8041B34(target); + sub_80522F4(pokemon,target,*gUnknown_80FAE1C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FAE3C); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void MagicCoatStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_MAGIC_COAT) { + entityData->protectionStatus = PROTECTION_STATUS_MAGIC_COAT; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4E90, FALSE) + 1; + nullsub_60(target); + sub_80522F4(pokemon,target,*gUnknown_80FAF5C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FAF8C); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void LightScreenStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_LIGHT_SCREEN) { + entityData->protectionStatus = PROTECTION_STATUS_LIGHT_SCREEN; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4E84, FALSE) + 1; + nullsub_61(target); + sub_80522F4(pokemon,target,*gUnknown_80FB130); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB160); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void ReflectStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_REFLECT) { + entityData->protectionStatus = PROTECTION_STATUS_REFLECT; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4E80, FALSE) + 1; + nullsub_62(target); + sub_80522F4(pokemon,target,*gUnknown_80FB17C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB1A8); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void ProtectStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + nullsub_63(target); + entityData = target->entityData; + if (entityData->protectionStatus != PROTECTION_STATUS_PROTECT) { + entityData->protectionStatus = PROTECTION_STATUS_PROTECT; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4ED4, FALSE) + 1; + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FB9B0); + } + else { + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FB9D8); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void MirrorCoatStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_MIRROR_COAT) { + entityData->protectionStatus = PROTECTION_STATUS_MIRROR_COAT; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4EE8, FALSE) + 1; + nullsub_64(target); + sub_80522F4(pokemon,target,*gUnknown_80FBAC0); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBAE4); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void EndureStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_ENDURE) { + entityData->protectionStatus = PROTECTION_STATUS_ENDURE; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4EF8, FALSE) + 1; + nullsub_65(target); + sub_80522F4(pokemon,target,*gUnknown_80FBBF0); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBC14); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void MirrorMoveStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_MIRROR_MOVE) { + entityData->protectionStatus = PROTECTION_STATUS_MIRROR_MOVE; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4F18, FALSE) + 1; + nullsub_66(target); + sub_80522F4(pokemon,target,*gUnknown_80FBC38); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBC5C); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void Conversion2StatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + + if(HasAbility(target, ABILITY_FORECAST)) + sub_80522F4(pokemon,target,*gPtrForecastPreventsConversion2Message); + else + { + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_CONVERSION_2) { + entityData->protectionStatus = PROTECTION_STATUS_CONVERSION_2; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4F20, FALSE) + 1; + nullsub_67(target); + sub_80522F4(pokemon,target,*gUnknown_80FBC7C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBCA4); + } + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void VitalThrowStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->protectionStatus != PROTECTION_STATUS_VITAL_THROW) { + entityData->protectionStatus = PROTECTION_STATUS_VITAL_THROW; + entityData->protectionStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4F24, FALSE) + 1; + nullsub_68(target); + sub_80522F4(pokemon,target,*gUnknown_80FBCC8); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBCF0); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_8079E34(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 param_3) +{ + bool8 statChanged; + struct DungeonEntityData *iVar3; + s32 index; + + statChanged = FALSE; + if (EntityExists(target)) { + iVar3 = target->entityData; + + for(index = 0; index < 2; index++) + { + if (iVar3->attackStages[index] != DEFAULT_STAT_STAGE) { + iVar3->attackStages[index] = DEFAULT_STAT_STAGE; + statChanged = TRUE; + } + if (iVar3->defenseStages[index] != DEFAULT_STAT_STAGE) { + iVar3->defenseStages[index] = DEFAULT_STAT_STAGE; + statChanged = TRUE; + } + if (iVar3->accuracyStages[index] != DEFAULT_STAT_STAGE) { + iVar3->accuracyStages[index] = DEFAULT_STAT_STAGE; + statChanged = TRUE; + } + if (iVar3->attackMultipliers[index] != DEFAULT_STAT_MULTIPLIER) { + iVar3->attackMultipliers[index] = DEFAULT_STAT_MULTIPLIER; + statChanged = TRUE; + } + if (iVar3->defenseMultipliers[index] != DEFAULT_STAT_MULTIPLIER) { + iVar3->defenseMultipliers[index] = DEFAULT_STAT_MULTIPLIER; + statChanged = TRUE; + } + } + if (statChanged) { + sub_80420C8(target); + } + else if (param_3 != 0) { + sub_80420C8(target); + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (statChanged) { + sub_80522F4(pokemon,target,*gUnknown_80FBD18); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBD3C); + } + DungeonEntityUpdateStatusSprites(target); + } +} void sub_8079F20(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, u8 param_4) { - bool8 bVar1; // r9 + bool8 moveUnsealed; // r9 s32 moveSpeed; struct PokemonMove *move; struct DungeonEntityData *entityData; // r7 @@ -101,7 +1082,7 @@ void sub_8079F20(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index; bVar8 = FALSE; - bVar1 = FALSE; + moveUnsealed = FALSE; if (EntityExists(target)) { entityData = target->entityData; if (HasNegativeStatus(target)) { @@ -122,8 +1103,8 @@ void sub_8079F20(struct DungeonEntity * pokemon, struct DungeonEntity * target, entityData->perishSongTimer = 0; sub_80522F4(pokemon,target,*gUnknown_8100594); } - if (entityData->exposedStatus != 0) { - entityData->exposedStatus = 0; + if (entityData->exposedStatus) { + entityData->exposedStatus = FALSE; sub_80522F4(pokemon,target,*gPtrExposedWoreOffMessage); } } @@ -144,7 +1125,7 @@ void sub_8079F20(struct DungeonEntity * pokemon, struct DungeonEntity * target, move = &entityData->moves[index]; if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags2 & MOVE_FLAG_EXISTS)) { bVar8 = TRUE; - bVar1 = TRUE; + moveUnsealed = TRUE; move->moveFlags2 &= 0xfe; } } @@ -153,7 +1134,7 @@ void sub_8079F20(struct DungeonEntity * pokemon, struct DungeonEntity * target, if (param_3 != 0) { sub_80420C8(target); } - if (bVar1) { + if (moveUnsealed) { sub_80522F4(pokemon,target,*gPtrSealedMoveReleasedMessage); } } @@ -174,7 +1155,7 @@ void sub_807A0CC(struct DungeonEntity * pokemon, struct DungeonEntity * target) entityData = target->entityData; sub_806BFC0(entityData,0); entityData->perishSongTimer = 0; - entityData->exposedStatus = 0; + entityData->exposedStatus = FALSE; for(index = 0; index < MAX_MON_MOVES; index++) { @@ -226,7 +1207,7 @@ void SendSleepEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * case SLEEP_STATUS_YAWNING: if (param_3) { entityData->sleepStatus = SLEEP_STATUS_NONE; - sub_8075C58(pokemon,target,CalculateStatusTurns(target,gUnknown_80F4F2C,1) + 1,1); + sub_8075C58(pokemon,target,CalculateStatusTurns(target, gUnknown_80F4F2C, TRUE) + 1, 1); return; } sub_80522F4(pokemon,target,*gUnknown_80FA734); @@ -450,12 +1431,12 @@ void SendWaitingEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity void SendLinkedEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - struct DungeonEntityData *iVar3; + struct DungeonEntityData *entityData; if (EntityExists(target)) { - iVar3 = target->entityData; + entityData = target->entityData; SetMessageArgument(gAvailablePokemonNames,target,0); - switch(iVar3->linkedStatus) + switch(entityData->linkedStatus) { case LINKED_STATUS_NONE: break; @@ -466,8 +1447,8 @@ void SendLinkedEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * SendMessage(target,*gUnknown_80FAA8C); break; } - iVar3->linkedStatus = LINKED_STATUS_NONE; - iVar3->unkD8 = 0xff; + entityData->linkedStatus = LINKED_STATUS_NONE; + entityData->unkD8 = 0xff; DungeonEntityUpdateStatusSprites(target); } } @@ -504,11 +1485,11 @@ void SendMoveEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * t void SendTransformEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target) { - bool8 bVar1; + bool8 isInvisible; struct DungeonEntityData *entityData; u32 uVar3; - bVar1 = FALSE; + isInvisible = FALSE; if (!EntityExists(target)) { return; } @@ -519,7 +1500,7 @@ void SendTransformEndMessage(struct DungeonEntity * pokemon, struct DungeonEntit case 4: break; case TRANSFORM_STATUS_INVISIBLE: - bVar1 = TRUE; + isInvisible = TRUE; SendMessage(target,*gUnknown_80FA9F4); break; case TRANSFORM_STATUS_MOBILE: @@ -535,7 +1516,7 @@ void SendTransformEndMessage(struct DungeonEntity * pokemon, struct DungeonEntit } entityData->transformStatus = TRANSFORM_STATUS_NONE; DungeonEntityUpdateStatusSprites(target); - if (bVar1) { + if (isInvisible) { sub_807EC28(1); } } diff --git a/src/status_checker.c b/src/status_checker.c index 040d73440..2d6f71dd8 100644 --- a/src/status_checker.c +++ b/src/status_checker.c @@ -2,6 +2,7 @@ #include "status_checker.h" #include "code_80521D0.h" +#include "code_8077274_1.h" #include "constants/move_id.h" #include "constants/status.h" #include "constants/type.h" @@ -24,8 +25,6 @@ extern void sub_807F43C(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8078F50(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8077E4C(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8079570(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_80795C4(struct DungeonEntity *, struct DungeonEntity *); extern void sub_807DC68(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8077BB4(struct DungeonEntity *, struct DungeonEntity *, u8); extern void sub_8078A58(struct DungeonEntity *, struct DungeonEntity *, s16, u32); @@ -281,13 +280,13 @@ bool8 sub_805C474(struct DungeonEntity *pokemon, struct DungeonEntity *target) bool8 sub_805C480(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8079570(pokemon, target); + LongTossStatusTarget(pokemon, target); return TRUE; } bool8 sub_805C48C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_80795C4(pokemon, target); + PierceStatusTarget(pokemon, target); return TRUE; }