From 0d02904c9b230ef2fc2fdb1c1dee9e5e8ed7d164 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 17 Nov 2022 19:50:37 -0800 Subject: [PATCH] finish decomp of code_8075BA4.s --- asm/code_80428A0.s | 94 +- asm/code_80521D0.s | 30 +- asm/code_8057824.s | 164 +- asm/code_8069E0C.s | 2 +- asm/code_806CD90.s | 2 +- asm/code_8075BA4.s | 2625 --------------------------------- asm/code_807CD9C.s | 4 +- asm/code_807FCD4.s | 10 +- asm/code_809747C.s | 9 - include/code_8077274_1.h | 2 +- include/dungeon_entity.h | 10 +- include/dungeon_global_data.h | 3 +- include/status.h | 19 +- include/status_checker.h | 8 +- ld_script.txt | 1 - src/code_80428A0.c | 46 +- src/code_8048480.c | 14 +- src/code_8048DB8.c | 18 +- src/code_8057824.c | 36 +- src/code_8069E0C.c | 16 +- src/code_8077274_1.c | 2 +- src/dungeon_ai.c | 1065 ++++++++++++- src/dungeon_ai_targeting.c | 22 +- src/status.c | 22 +- src/status_checker.c | 69 +- 25 files changed, 1332 insertions(+), 2961 deletions(-) delete mode 100644 asm/code_8075BA4.s delete mode 100644 asm/code_809747C.s diff --git a/asm/code_80428A0.s b/asm/code_80428A0.s index f2e258a6f..c5a0a331e 100644 --- a/asm/code_80428A0.s +++ b/asm/code_80428A0.s @@ -5,98 +5,6 @@ .text - thumb_func_start sub_8042A84 -sub_8042A84: - push {r4-r7,lr} - adds r4, r1, 0 - adds r7, r2, 0 - lsls r0, 16 - asrs r5, r0, 16 - movs r6, 0x80 - lsls r6, 2 - adds r0, r4, 0 - bl sub_8042768 - lsls r0, 24 - cmp r0, 0 - beq _08042AF8 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl sub_804151C - adds r0, r7, 0 - movs r1, 0x42 - bl sub_803E708 - adds r5, r4, 0 - adds r5, 0x20 -_08042AB4: - ldr r1, [r4, 0x1C] - ldr r0, _08042B00 - cmp r1, r0 - bgt _08042AF0 - movs r0, 0x42 - bl sub_803E46C - ldr r1, [r4, 0x1C] - adds r1, r6 - str r1, [r4, 0x1C] - movs r0, 0x80 - lsls r0, 1 - adds r6, r0 - ldr r0, [r4, 0x10] - subs r0, r1 - cmp r0, 0 - bge _08042AD8 - adds r0, 0xFF -_08042AD8: - asrs r1, r0, 8 - ldr r0, _08042B04 - ldr r0, [r0] - ldr r2, _08042B08 - adds r0, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - subs r1, r0 - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - bge _08042AB4 -_08042AF0: - movs r0, 0 - strb r0, [r5] - bl sub_804178C -_08042AF8: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08042B00: .4byte 0x0000c7ff -_08042B04: .4byte gDungeonGlobalData -_08042B08: .4byte 0x000181f2 - thumb_func_end sub_8042A84 - - thumb_func_start sub_8042B0C -sub_8042B0C: - push {lr} - adds r1, r0, 0 - movs r0, 0x9F - lsls r0, 1 - movs r2, 0x5 - bl sub_8042A84 - pop {r0} - bx r0 - thumb_func_end sub_8042B0C - - thumb_func_start sub_8042B20 -sub_8042B20: - push {lr} - adds r1, r0, 0 - movs r0, 0xDE - lsls r0, 1 - movs r2, 0xE - bl sub_8042A84 - pop {r0} - bx r0 - thumb_func_end sub_8042B20 - thumb_func_start sub_8042B34 sub_8042B34: push {r4-r7,lr} @@ -2828,4 +2736,4 @@ _080441B4: .4byte gTeamInventory_203B460 _080441B8: .4byte gRecruitedPokemonRef thumb_func_end sub_8044124 - .align 2, 0 \ No newline at end of file + .align 2, 0 diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 60cd90689..d34ae8130 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -5073,14 +5073,14 @@ _0805502E: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805C480 + bl LongtossOrbAction b _080554BA _0805503C: adds r0, r7, 0 adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805C48C + bl PierceOrbAction b _080554BA _0805504A: adds r0, r7, 0 @@ -5115,7 +5115,7 @@ _08055082: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805C1F8 + bl ShockerOrbAction b _080554BA _08055090: adds r0, r7, 0 @@ -5138,7 +5138,7 @@ _080550B0: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805B2F0 + bl ProtectMoveAction b _080554BA _080550BE: adds r0, r7, 0 @@ -5229,7 +5229,7 @@ _08055166: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805991C + bl StockpileMoveAction b _080554BA _08055174: adds r0, r7, 0 @@ -5607,7 +5607,7 @@ _0805545A: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805C1B0 + bl IdentifyOrbAction b _080554BA _08055468: adds r0, r7, 0 @@ -5808,7 +5808,7 @@ _080555D6: adds r0, r7, 0 adds r1, r7, 0 movs r3, 0x2 - bl sub_8076E20 + bl LowerAttackStageTarget _08055604: add sp, 0x48 pop {r3-r5} @@ -6777,7 +6777,7 @@ _08055D54: adds r0, r5, 0 adds r1, r5, 0 movs r2, 0x1 - bl sub_8076090 + bl PausedStatusTarget adds r4, 0xFB ldrb r0, [r4] cmp r0, 0 @@ -6869,7 +6869,7 @@ _08055E48: adds r0, r4, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_8077780 + bl ParalyzeStatusTarget _08055E66: ldrh r1, [r5] movs r0, 0x10 @@ -6883,7 +6883,7 @@ _08055E66: adds r0, r4, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_8077780 + bl ParalyzeStatusTarget _08055E84: ldrh r1, [r5] movs r0, 0x20 @@ -6897,7 +6897,7 @@ _08055E84: adds r0, r4, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_80763F8 + bl PoisonedStatusTarget _08055EA2: ldrh r1, [r5] movs r0, 0x40 @@ -6911,7 +6911,7 @@ _08055EA2: adds r0, r4, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_80763F8 + bl PoisonedStatusTarget _08055EC0: ldrh r1, [r5] movs r0, 0x80 @@ -6946,7 +6946,7 @@ _08055EEA: adds r1, r4, 0 movs r2, 0x1 movs r3, 0x1 - bl sub_8076210 + bl BurnedStatusTarget _08055F0C: ldrh r1, [r5] movs r0, 0x80 @@ -6961,7 +6961,7 @@ _08055F0C: adds r0, r4, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_807614C + bl InfatuateStatusTarget _08055F2C: adds r5, r6, r7 ldrh r1, [r5] @@ -7557,7 +7557,7 @@ _08056418: adds r0, r5, 0 adds r1, r5, 0 movs r2, 0 - bl sub_8077AE4 + bl ConfuseStatusTarget adds r4, 0xFB ldrb r0, [r4] cmp r0, 0 diff --git a/asm/code_8057824.s b/asm/code_8057824.s index f09171f35..f30144155 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -305,13 +305,13 @@ sub_8057FCC: adds r4, r0, 0 adds r5, r1, 0 movs r2, 0x1 - bl sub_8077AE4 + bl ConfuseStatusTarget ldr r0, _08057FF0 ldr r2, [r0] adds r0, r4, 0 adds r1, r5, 0 movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget movs r0, 0x1 pop {r4,r5} pop {r1} @@ -366,7 +366,7 @@ _08058048: adds r1, r4, 0 movs r2, 0 movs r3, 0x1 - bl sub_8076210 + bl BurnedStatusTarget _08058054: movs r0, 0x1 pop {r4-r6} @@ -553,7 +553,7 @@ sub_805816C: adds r1, r7, 0 movs r2, 0 movs r3, 0 - bl sub_8076210 + bl BurnedStatusTarget _080581BE: mov r0, r8 add sp, 0x4 @@ -604,7 +604,7 @@ sub_80581D0: adds r1, r7, 0 movs r2, 0 movs r3, 0 - bl sub_8076210 + bl BurnedStatusTarget _08058222: mov r0, r8 add sp, 0x4 @@ -631,7 +631,7 @@ sub_8058234: _08058246: adds r0, r3, 0 adds r1, r4, 0 - bl sub_8078FDC + bl ExposeStatusTarget movs r0, 0x1 pop {r4} pop {r1} @@ -692,7 +692,7 @@ sub_80582AC: ldr r2, _080582C0 ldr r2, [r2] movs r3, 0x1 - bl sub_8077160 + bl RaiseDefenseStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -704,7 +704,7 @@ _080582C0: .4byte gUnknown_8106A4C sub_80582C4: push {lr} movs r2, 0x1 - bl sub_8077780 + bl ParalyzeStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -716,7 +716,7 @@ sub_80582D4: ldr r2, _080582E8 ldr r2, [r2] movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -878,7 +878,7 @@ sub_80583D8: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0x1 - bl sub_8076F80 + bl LowerDefenseStageTarget _0805841C: adds r0, r7, 0 add sp, 0x8 @@ -917,7 +917,7 @@ sub_8058430: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80776C0 + bl CringeStatusTarget _0805846A: adds r0, r7, 0 add sp, 0x4 @@ -955,7 +955,7 @@ sub_8058478: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077780 + bl ParalyzeStatusTarget _080584B2: adds r0, r7, 0 add sp, 0x4 @@ -1444,7 +1444,7 @@ sub_8058838: str r3, [sp] str r3, [sp, 0x4] movs r3, 0x3 - bl sub_8076F80 + bl LowerDefenseStageTarget movs r0, 0x1 add sp, 0x8 pop {r1} @@ -1469,14 +1469,14 @@ sub_8058858: adds r0, r6, 0 adds r2, r5, 0 movs r3, 0x1 - bl sub_8076E20 + bl LowerAttackStageTarget str r4, [sp] str r4, [sp, 0x4] adds r0, r6, 0 mov r1, r8 adds r2, r5, 0 movs r3, 0x1 - bl sub_8076F80 + bl LowerDefenseStageTarget movs r0, 0x1 add sp, 0x8 pop {r3} @@ -1610,24 +1610,24 @@ sub_8058930: adds r1, r7, 0 adds r2, r5, 0 movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget ldr r0, _080589D0 ldr r4, [r0] adds r0, r7, 0 adds r1, r7, 0 adds r2, r4, 0 movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget adds r0, r7, 0 adds r1, r7, 0 adds r2, r5, 0 movs r3, 0x1 - bl sub_8077160 + bl RaiseDefenseStageTarget adds r0, r7, 0 adds r1, r7, 0 adds r2, r4, 0 movs r3, 0x1 - bl sub_8077160 + bl RaiseDefenseStageTarget adds r6, 0xFB ldrb r0, [r6] cmp r0, 0 @@ -1749,13 +1749,13 @@ sub_8058A7C: ldr r2, [r0] adds r0, r4, 0 movs r3, 0x1 - bl sub_8077160 + bl RaiseDefenseStageTarget ldr r0, _08058AA8 ldr r2, [r0] adds r0, r4, 0 adds r1, r5, 0 movs r3, 0x1 - bl sub_8077160 + bl RaiseDefenseStageTarget movs r0, 0x1 pop {r4,r5} pop {r1} @@ -1806,7 +1806,7 @@ SkyAttackMoveAction: adds r0, r4, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80776C0 + bl CringeStatusTarget _08058B04: adds r0, r4, 0 bl sub_8079764 @@ -1864,7 +1864,7 @@ sub_8058B3C: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80767B0 + bl FrozenStatusTarget _08058B76: adds r0, r7, 0 add sp, 0x4 @@ -1904,7 +1904,7 @@ sub_8058B84: adds r0, r5, 0 adds r1, r5, 0 movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget adds r4, 0xFB ldrb r0, [r4] cmp r0, 0 @@ -1969,7 +1969,7 @@ sub_8058C00: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077AE4 + bl ConfuseStatusTarget _08058C3A: adds r0, r7, 0 add sp, 0x4 @@ -2057,7 +2057,7 @@ sub_8058C98: adds r1, r5, 0 adds r2, r7, 0 movs r3, 0x1 - bl sub_8076F80 + bl LowerDefenseStageTarget _08058CDE: adds r0, r6, 0 add sp, 0x8 @@ -2096,7 +2096,7 @@ sub_8058CEC: adds r0, r5, 0 adds r1, r5, 0 movs r3, 0x2 - bl sub_8076E20 + bl LowerAttackStageTarget _08058D28: adds r0, r6, 0 add sp, 0x8 @@ -2110,7 +2110,7 @@ _08058D34: .4byte gUnknown_8106A50 thumb_func_start sub_8058D38 sub_8058D38: push {lr} - bl sub_8075FCC + bl SleeplessStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -2476,7 +2476,7 @@ sub_8058FBC: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077780 + bl ParalyzeStatusTarget _08058FF6: adds r0, r7, 0 add sp, 0x4 @@ -2530,7 +2530,7 @@ sub_8059004: sub_8059050: push {lr} movs r2, 0x1 - bl sub_8077780 + bl ParalyzeStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -2581,7 +2581,7 @@ sub_8059080: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077780 + bl ParalyzeStatusTarget _080590BA: adds r0, r7, 0 add sp, 0x4 @@ -2722,7 +2722,7 @@ sub_8059190: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80776C0 + bl CringeStatusTarget _080591CA: adds r0, r7, 0 add sp, 0x4 @@ -3062,7 +3062,7 @@ sub_8059424: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80776C0 + bl CringeStatusTarget _0805945E: adds r0, r7, 0 add sp, 0x4 @@ -3210,7 +3210,7 @@ sub_8059540: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80763F8 + bl PoisonedStatusTarget _0805957A: adds r0, r7, 0 add sp, 0x4 @@ -3227,7 +3227,7 @@ sub_8059588: ldr r2, _0805959C ldr r2, [r2] movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -3263,7 +3263,7 @@ sub_80595A0: adds r1, r6, 0 movs r2, 0 movs r3, 0 - bl sub_8076210 + bl BurnedStatusTarget _080595DC: adds r0, r7, 0 add sp, 0x4 @@ -3684,14 +3684,14 @@ _08059914: .4byte gUnknown_80F4E00 _08059918: .4byte gUnknown_8106A4C thumb_func_end sub_80598CC - thumb_func_start sub_805991C -sub_805991C: + thumb_func_start StockpileMoveAction +StockpileMoveAction: push {lr} - bl sub_80787E4 + bl HandleStockpile movs r0, 0x1 pop {r1} bx r1 - thumb_func_end sub_805991C + thumb_func_end StockpileMoveAction thumb_func_start sub_8059928 sub_8059928: @@ -3732,7 +3732,7 @@ _08059948: adds r0, r5, 0 adds r1, r4, 0 movs r2, 0 - bl sub_80776C0 + bl CringeStatusTarget _08059978: adds r0, r6, 0 add sp, 0x4 @@ -3781,7 +3781,7 @@ _080599A8: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80763F8 + bl PoisonedStatusTarget _080599D6: adds r0, r7, 0 add sp, 0x4 @@ -3899,7 +3899,7 @@ _08059A90: sub_8059AA8: push {lr} movs r2, 0x1 - bl sub_8077AE4 + bl ConfuseStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -4027,7 +4027,7 @@ sub_8059B94: ldr r2, _08059BA8 ldr r2, [r2] movs r3, 0x2 - bl sub_8077084 + bl RaiseAttackStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -4172,13 +4172,13 @@ _08059CA8: adds r0, r5, 0 adds r1, r4, 0 movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget ldr r0, _08059CD4 ldr r2, [r0] adds r0, r5, 0 adds r1, r4, 0 movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget movs r6, 0x1 _08059CC6: adds r0, r6, 0 @@ -4196,7 +4196,7 @@ sub_8059CD8: ldr r2, _08059CEC ldr r2, [r2] movs r3, 0x2 - bl sub_8077160 + bl RaiseDefenseStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -4242,7 +4242,7 @@ sub_8059D00: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077780 + bl ParalyzeStatusTarget _08059D3A: adds r0, r7, 0 add sp, 0x4 @@ -4257,7 +4257,7 @@ _08059D44: .4byte gUnknown_80F4DE2 sub_8059D48: push {lr} movs r2, 0x1 - bl sub_8077780 + bl ParalyzeStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -4288,7 +4288,7 @@ sub_8059D58: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077780 + bl ParalyzeStatusTarget _08059D8E: adds r0, r7, 0 add sp, 0x4 @@ -4310,7 +4310,7 @@ sub_8059D98: sub_8059DA4: push {lr} movs r2, 0x1 - bl sub_80763F8 + bl PoisonedStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -4320,7 +4320,7 @@ sub_8059DA4: sub_8059DB4: push {lr} movs r2, 0x1 - bl sub_80765E0 + bl BadlyPoisonedStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -4353,7 +4353,7 @@ sub_8059DC4: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80765E0 + bl BadlyPoisonedStatusTarget _08059DFE: adds r0, r7, 0 add sp, 0x4 @@ -4391,7 +4391,7 @@ sub_8059E0C: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80763F8 + bl PoisonedStatusTarget _08059E46: adds r0, r7, 0 add sp, 0x4 @@ -4553,7 +4553,7 @@ sub_8059F38: adds r0, r4, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077780 + bl ParalyzeStatusTarget _08059F90: adds r0, r4, 0 bl sub_8079764 @@ -4730,7 +4730,7 @@ _0805A0EA: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077780 + bl ParalyzeStatusTarget b _0805A114 .align 2, 0 _0805A0F8: .4byte gUnknown_80F4DFC @@ -4739,13 +4739,13 @@ _0805A0FC: adds r1, r6, 0 movs r2, 0 movs r3, 0 - bl sub_8076210 + bl BurnedStatusTarget b _0805A114 _0805A10A: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80767B0 + bl FrozenStatusTarget _0805A114: adds r0, r7, 0 add sp, 0x4 @@ -4971,7 +4971,7 @@ sub_805A2B0: ldr r2, _0805A2C4 ldr r2, [r2] movs r3, 0x2 - bl sub_8077160 + bl RaiseDefenseStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -4988,7 +4988,7 @@ sub_805A2C8: movs r3, 0x1 str r3, [sp] str r3, [sp, 0x4] - bl sub_8076E20 + bl LowerAttackStageTarget movs r0, 0x1 add sp, 0x8 pop {r1} @@ -5134,7 +5134,7 @@ sub_805A3DC: movs r3, 0x1 str r3, [sp] str r3, [sp, 0x4] - bl sub_8076F80 + bl LowerDefenseStageTarget movs r0, 0x1 add sp, 0x8 pop {r1} @@ -5179,7 +5179,7 @@ sub_805A408: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80776C0 + bl CringeStatusTarget _0805A442: adds r0, r7, 0 add sp, 0x4 @@ -5273,7 +5273,7 @@ sub_805A4D4: adds r2, r0, 0 adds r0, r5, 0 adds r1, r4, 0 - bl sub_8075E74 + bl NappingStatusTarget movs r0, 0x1 pop {r4,r5} pop {r1} @@ -5285,7 +5285,7 @@ _0805A4F8: .4byte gUnknown_80F4E94 thumb_func_start sub_805A4FC sub_805A4FC: push {lr} - bl sub_8076AA4 + bl IngrainedStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -5393,14 +5393,14 @@ sub_805A588: adds r1, r6, 0 adds r2, r5, 0 movs r3, 0x1 - bl sub_8076E20 + bl LowerAttackStageTarget str r4, [sp] str r4, [sp, 0x4] adds r0, r6, 0 adds r1, r6, 0 adds r2, r5, 0 movs r3, 0x1 - bl sub_8076F80 + bl LowerDefenseStageTarget _0805A5D8: adds r0, r7, 0 add sp, 0x8 @@ -5441,7 +5441,7 @@ sub_805A5E8: adds r1, r5, 0 adds r2, r7, 0 movs r3, 0x1 - bl sub_8077160 + bl RaiseDefenseStageTarget adds r4, 0xFB ldrb r0, [r4] cmp r0, 0 @@ -5521,7 +5521,7 @@ sub_805A688: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077AE4 + bl ConfuseStatusTarget _0805A6BE: adds r0, r7, 0 add sp, 0x4 @@ -6055,7 +6055,7 @@ sub_805AAE0: adds r0, r4, 0 adds r1, r6, 0 movs r3, 0x63 - bl sub_8077084 + bl RaiseAttackStageTarget mov r0, sp movs r1, 0x1 bl sub_80943A0 @@ -6160,7 +6160,7 @@ _0805ABE0: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80763F8 + bl PoisonedStatusTarget b _0805AC86 _0805ABEC: ldr r1, _0805AC04 @@ -6192,7 +6192,7 @@ _0805AC16: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0x1 - bl sub_8076E20 + bl LowerAttackStageTarget b _0805AC86 .align 2, 0 _0805AC30: .4byte gUnknown_8106A4C @@ -6206,7 +6206,7 @@ _0805AC34: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0x1 - bl sub_8076F80 + bl LowerDefenseStageTarget b _0805AC86 .align 2, 0 _0805AC4C: .4byte gUnknown_8106A4C @@ -6224,19 +6224,19 @@ _0805AC64: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077AE4 + bl ConfuseStatusTarget b _0805AC86 _0805AC70: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_80776C0 + bl CringeStatusTarget b _0805AC86 _0805AC7C: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077780 + bl ParalyzeStatusTarget _0805AC86: adds r0, r7, 0 add sp, 0x8 @@ -6272,7 +6272,7 @@ sub_805AC90: adds r0, r5, 0 adds r1, r6, 0 movs r2, 0 - bl sub_8077AE4 + bl ConfuseStatusTarget _0805ACCA: adds r0, r7, 0 add sp, 0x4 @@ -6293,12 +6293,12 @@ sub_805ACD8: adds r0, r5, 0 adds r2, r4, 0 movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget adds r0, r5, 0 adds r1, r6, 0 adds r2, r4, 0 movs r3, 0x1 - bl sub_8077160 + bl RaiseDefenseStageTarget movs r0, 0x1 pop {r4-r6} pop {r1} @@ -6323,7 +6323,7 @@ sub_805AD04: adds r0, r5, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_8076090 + bl PausedStatusTarget movs r0, 0x1 add sp, 0x4 pop {r4,r5} @@ -6343,7 +6343,7 @@ sub_805AD34: str r3, [sp] str r3, [sp, 0x4] movs r3, 0x2 - bl sub_8076E20 + bl LowerAttackStageTarget movs r0, 0x1 add sp, 0x8 pop {r1} @@ -6536,7 +6536,7 @@ sub_805AE74: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0x1 - bl sub_8076F80 + bl LowerDefenseStageTarget _0805AEB8: adds r0, r7, 0 add sp, 0x8 @@ -6586,7 +6586,7 @@ sub_805AECC: adds r1, r7, 0 movs r2, 0 movs r3, 0 - bl sub_8076210 + bl BurnedStatusTarget _0805AF1E: mov r0, r8 add sp, 0x4 diff --git a/asm/code_8069E0C.s b/asm/code_8069E0C.s index 5d2836e35..96a4623b5 100644 --- a/asm/code_8069E0C.s +++ b/asm/code_8069E0C.s @@ -416,7 +416,7 @@ _0806A608: adds r1, r6, 0 movs r2, 0x1 movs r3, 0 - bl sub_8076210 + bl BurnedStatusTarget b _0806A6D2 .align 2, 0 _0806A640: .4byte gDungeonWaterType diff --git a/asm/code_806CD90.s b/asm/code_806CD90.s index 5dff0e3d4..e98e2a508 100644 --- a/asm/code_806CD90.s +++ b/asm/code_806CD90.s @@ -139,7 +139,7 @@ _0806D100: adds r0, r6, 0 adds r1, r5, 0 movs r3, 0x1 - bl sub_8077084 + bl RaiseAttackStageTarget _0806D118: adds r0, r6, 0 bl EntityExists diff --git a/asm/code_8075BA4.s b/asm/code_8075BA4.s deleted file mode 100644 index 0cc2a9738..000000000 --- a/asm/code_8075BA4.s +++ /dev/null @@ -1,2625 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8075CFC -sub_8075CFC: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r5, r3, 24 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08075DAA - ldr r0, _08075D4C - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - cmp r7, 0 - beq _08075D34 - adds r0, r6, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08075DAA -_08075D34: - adds r0, r4, 0 - movs r1, 0x11 - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08075D54 - cmp r5, 0 - beq _08075DAA - ldr r0, _08075D50 - b _08075DA0 - .align 2, 0 -_08075D4C: .4byte gAvailablePokemonNames -_08075D50: .4byte gUnknown_80FCD54 -_08075D54: - adds r0, r4, 0 - movs r1, 0x36 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08075D70 - cmp r5, 0 - beq _08075DAA - ldr r0, _08075D6C - b _08075DA0 - .align 2, 0 -_08075D6C: .4byte gUnknown_80FCD58 -_08075D70: - adds r0, r4, 0 - movs r1, 0x49 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08075D8C - cmp r5, 0 - beq _08075DAA - ldr r0, _08075D88 - b _08075DA0 - .align 2, 0 -_08075D88: .4byte gUnknown_80FCD88 -_08075D8C: - adds r0, r4, 0 - movs r1, 0x15 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _08075DB4 - cmp r5, 0 - beq _08075DAA - ldr r0, _08075DB0 -_08075DA0: - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08075DAA: - movs r0, 0x1 - b _08075DB6 - .align 2, 0 -_08075DB0: .4byte gUnknown_80FD548 -_08075DB4: - movs r0, 0 -_08075DB6: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8075CFC - - thumb_func_start sub_8075DBC -sub_8075DBC: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - adds r5, r1, 0 - mov r8, r2 - movs r0, 0 - mov r9, r0 - adds r0, r7, 0 - movs r2, 0x1 - movs r3, 0x1 - bl sub_8075CFC - lsls r0, 24 - cmp r0, 0 - bne _08075E62 - ldr r6, [r5, 0x70] - adds r4, r6, 0 - adds r4, 0xA8 - ldrb r0, [r4] - cmp r0, 0x2 - beq _08075E50 - adds r0, r5, 0 - bl sub_8041EC8 - ldrb r0, [r4] - cmp r0, 0x3 - beq _08075E1A - adds r4, 0x1 - mov r0, r8 - strb r0, [r4] - adds r0, r5, 0 - movs r1, 0x2F - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08075E1E - ldrb r0, [r4] - lsrs r0, 1 - strb r0, [r4] - cmp r0, 0 - bne _08075E1E - movs r0, 0x1 - strb r0, [r4] - b _08075E1E -_08075E1A: - movs r0, 0x1 - mov r9, r0 -_08075E1E: - adds r1, r6, 0 - adds r1, 0xA8 - movs r0, 0x3 - strb r0, [r1] - adds r0, r5, 0 - movs r1, 0x8 - bl sub_806CE68 - mov r0, r9 - cmp r0, 0 - beq _08075E3C - ldr r0, _08075E38 - b _08075E3E - .align 2, 0 -_08075E38: .4byte gUnknown_80FB3CC -_08075E3C: - ldr r0, _08075E4C -_08075E3E: - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _08075E5C - .align 2, 0 -_08075E4C: .4byte gUnknown_80FB3A4 -_08075E50: - ldr r0, _08075E70 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08075E5C: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_08075E62: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08075E70: .4byte gUnknown_80FB3D0 - thumb_func_end sub_8075DBC - - thumb_func_start sub_8075E74 -sub_8075E74: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - adds r5, r1, 0 - mov r8, r2 - movs r0, 0 - mov r9, r0 - adds r0, r7, 0 - movs r2, 0 - movs r3, 0x1 - bl sub_8075CFC - lsls r0, 24 - cmp r0, 0 - bne _08075F22 - ldr r6, [r5, 0x70] - adds r4, r6, 0 - adds r4, 0xA8 - ldrb r0, [r4] - cmp r0, 0x2 - beq _08075F10 - adds r0, r5, 0 - bl sub_8041ED8 - ldrb r0, [r4] - cmp r0, 0 - beq _08075EB2 - cmp r0, 0x4 - bne _08075ED8 -_08075EB2: - adds r4, r6, 0 - adds r4, 0xA9 - mov r0, r8 - strb r0, [r4] - adds r0, r5, 0 - movs r1, 0x2F - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08075EDC - ldrb r0, [r4] - lsrs r0, 1 - strb r0, [r4] - cmp r0, 0 - bne _08075EDC - movs r0, 0x1 - strb r0, [r4] - b _08075EDC -_08075ED8: - movs r0, 0x1 - mov r9, r0 -_08075EDC: - adds r1, r6, 0 - adds r1, 0xA8 - movs r0, 0x5 - strb r0, [r1] - adds r0, r5, 0 - movs r1, 0x8 - bl sub_806CE68 - mov r0, r9 - cmp r0, 0 - beq _08075EFC - ldr r0, _08075EF8 - b _08075EFE - .align 2, 0 -_08075EF8: .4byte gUnknown_80FB360 -_08075EFC: - ldr r0, _08075F0C -_08075EFE: - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _08075F1C - .align 2, 0 -_08075F0C: .4byte gUnknown_80FB31C -_08075F10: - ldr r0, _08075F30 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08075F1C: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_08075F22: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08075F30: .4byte gUnknown_80FB388 - thumb_func_end sub_8075E74 - - thumb_func_start sub_8075F34 -sub_8075F34: - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r6, r2, 0 - movs r2, 0x1 - movs r3, 0x1 - bl sub_8075CFC - lsls r0, 24 - cmp r0, 0 - bne _08075FC2 - ldr r2, [r4, 0x70] - adds r1, r2, 0 - adds r1, 0xA8 - ldrb r0, [r1] - cmp r0, 0 - bne _08075F78 - movs r0, 0x4 - strb r0, [r1] - adds r0, r2, 0 - adds r0, 0xA9 - strb r6, [r0] - adds r0, r4, 0 - bl nullsub_91 - adds r0, r4, 0 - movs r1, 0x8 - bl sub_806CE68 - ldr r0, _08075F74 - b _08075F9E - .align 2, 0 -_08075F74: .4byte gUnknown_80FB3E0 -_08075F78: - cmp r0, 0x1 - beq _08075F84 - cmp r0, 0x3 - beq _08075F84 - cmp r0, 0x5 - bne _08075F8C -_08075F84: - ldr r0, _08075F88 - b _08075F9E - .align 2, 0 -_08075F88: .4byte gUnknown_80FB418 -_08075F8C: - cmp r0, 0x2 - bne _08075F98 - ldr r0, _08075F94 - b _08075F9E - .align 2, 0 -_08075F94: .4byte gUnknown_80FB3F8 -_08075F98: - cmp r0, 0x4 - bne _08075FB0 - ldr r0, _08075FAC -_08075F9E: - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08075FBC - .align 2, 0 -_08075FAC: .4byte gUnknown_80FB414 -_08075FB0: - ldr r0, _08075FC8 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08075FBC: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08075FC2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08075FC8: .4byte gUnknown_80FB3E0 - thumb_func_end sub_8075F34 - - thumb_func_start sub_8075FCC -sub_8075FCC: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - movs r7, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08076086 - ldr r5, [r4, 0x70] - adds r0, r5, 0 - adds r0, 0xA8 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08075FF4 - cmp r0, 0x5 - beq _08075FF4 - cmp r0, 0x3 - bne _08075FF6 -_08075FF4: - movs r7, 0x1 -_08075FF6: - ldr r0, _08076060 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xA8 - ldrb r0, [r1] - cmp r0, 0x2 - beq _08076074 - movs r0, 0x2 - strb r0, [r1] - ldr r1, _08076064 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xA9 - strb r0, [r1] - ldr r0, _08076068 - adds r1, r5, r0 - movs r0, 0xFF - strb r0, [r1] - adds r0, 0x65 - adds r1, r5, r0 - movs r0, 0x1 - negs r0, r0 - strb r0, [r1] - adds r0, r4, 0 - bl sub_8041EE8 - adds r0, r4, 0 - movs r1, 0x8 - bl sub_806CE68 - cmp r7, 0 - beq _08076050 - ldr r0, _0807606C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076050: - ldr r0, _08076070 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08076080 - .align 2, 0 -_08076060: .4byte gAvailablePokemonNames -_08076064: .4byte gUnknown_80F4E7C -_08076068: .4byte 0x00000165 -_0807606C: .4byte gUnknown_80FB41C -_08076070: .4byte gUnknown_80FB458 -_08076074: - ldr r0, _0807608C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076080: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08076086: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807608C: .4byte gUnknown_80FB43C - thumb_func_end sub_8075FCC - - thumb_func_start sub_8076090 -sub_8076090: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - adds r4, r1, 0 - adds r7, r3, 0 - ldr r0, [sp, 0x1C] - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807613A - ldr r5, [r4, 0x70] - mov r0, r8 - cmp r0, 0 - beq _080760D0 - adds r0, r6, 0 - adds r1, r4, 0 - mov r2, r9 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _0807613A -_080760D0: - ldr r0, _08076100 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument_2 - adds r1, r5, 0 - adds r1, 0xBC - ldrb r0, [r1] - cmp r0, 0x3 - beq _08076110 - movs r0, 0x3 - strb r0, [r1] - adds r1, r7, 0x1 - adds r0, r5, 0 - adds r0, 0xBD - strb r1, [r0] - adds r0, r4, 0 - bl nullsub_72 - cmp r7, 0x1 - bne _08076108 - ldr r0, _08076104 - b _08076116 - .align 2, 0 -_08076100: .4byte gAvailablePokemonNames -_08076104: .4byte gUnknown_80FB480 -_08076108: - ldr r0, _0807610C - b _08076116 - .align 2, 0 -_0807610C: .4byte gUnknown_80FB4D4 -_08076110: - cmp r7, 0x1 - bne _08076128 - ldr r0, _08076124 -_08076116: - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08076134 - .align 2, 0 -_08076124: .4byte gUnknown_80FB4B0 -_08076128: - ldr r0, _08076148 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076134: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807613A: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08076148: .4byte gUnknown_80FB4F0 - thumb_func_end sub_8076090 - - thumb_func_start sub_807614C -sub_807614C: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r7, r2, 24 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08076206 - ldr r5, [r4, 0x70] - adds r0, r6, 0 - adds r1, r4, 0 - adds r2, r7, 0 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08076206 - adds r0, r4, 0 - movs r1, 0x29 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _080761A8 - ldr r0, _080761A0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - cmp r7, 0 - beq _08076206 - ldr r0, _080761A4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08076206 - .align 2, 0 -_080761A0: .4byte gAvailablePokemonNames -_080761A4: .4byte gUnknown_80FCC4C -_080761A8: - ldr r0, _080761E8 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument_2 - adds r1, r5, 0 - adds r1, 0xBC - ldrb r0, [r1] - cmp r0, 0x7 - beq _080761F4 - movs r0, 0x7 - strb r0, [r1] - ldr r1, _080761EC - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xBD - strb r0, [r1] - adds r0, r4, 0 - bl sub_8041EF8 - ldr r0, _080761F0 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08076200 - .align 2, 0 -_080761E8: .4byte gAvailablePokemonNames -_080761EC: .4byte gUnknown_80F4F00 -_080761F0: .4byte gUnknown_80FB50C -_080761F4: - ldr r0, _0807620C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076200: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08076206: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807620C: .4byte gUnknown_80FB52C - thumb_func_end sub_807614C - - thumb_func_start sub_8076210 -sub_8076210: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r7, r0, 0 - adds r5, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08076238 - b _080763DA -_08076238: - adds r0, r7, 0 - adds r1, r5, 0 - mov r2, r10 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - beq _0807624A - b _080763DA -_0807624A: - ldr r0, [r5, 0x70] - mov r8, r0 - ldr r0, _08076274 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument_2 - adds r0, r5, 0 - movs r1, 0x42 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0807627C - mov r1, r10 - cmp r1, 0 - bne _0807626E - b _080763DA -_0807626E: - ldr r0, _08076278 - b _080762CC - .align 2, 0 -_08076274: .4byte gAvailablePokemonNames -_08076278: .4byte gUnknown_80FCE5C -_0807627C: - adds r0, r5, 0 - movs r1, 0x2 - bl HasType - lsls r0, 24 - cmp r0, 0 - beq _0807629C - mov r2, r10 - cmp r2, 0 - bne _08076292 - b _080763DA -_08076292: - ldr r0, _08076298 - b _080762CC - .align 2, 0 -_08076298: .4byte gUnknown_80FCE84 -_0807629C: - adds r0, r5, 0 - bl GetMapTileForDungeonEntity_2 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x2 - bne _080762E8 - ldr r1, _080762D8 - ldr r0, _080762DC - ldr r0, [r0] - ldr r3, _080762E0 - adds r0, r3 - movs r2, 0 - ldrsh r0, [r0, r2] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080762E8 - mov r3, r10 - cmp r3, 0 - bne _080762CA - b _080763DA -_080762CA: - ldr r0, _080762E4 -_080762CC: - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _080763DA - .align 2, 0 -_080762D8: .4byte gDungeonWaterType -_080762DC: .4byte gDungeonGlobalData -_080762E0: .4byte 0x00003a0e -_080762E4: .4byte gUnknown_80FEBBC -_080762E8: - movs r6, 0x1 - mov r1, r8 - adds r1, 0xAC - ldrb r0, [r1] - cmp r0, 0x1 - beq _08076338 - movs r4, 0 - strb r6, [r1] - ldr r1, _08076330 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - mov r1, r8 - adds r1, 0xAD - strb r0, [r1] - mov r0, r8 - adds r0, 0xAE - strb r4, [r0] - adds r0, 0x1 - strb r4, [r0] - movs r6, 0 - mov r0, r9 - cmp r0, 0 - beq _08076322 - adds r0, r5, 0 - bl sub_8041C34 -_08076322: - ldr r0, _08076334 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _08076344 - .align 2, 0 -_08076330: .4byte gUnknown_80F4E30 -_08076334: .4byte gUnknown_80FB548 -_08076338: - ldr r0, _080763E8 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08076344: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites - adds r0, r5, 0 - movs r1, 0x19 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _080763DA - cmp r6, 0 - bne _080763DA - movs r1, 0 - mov r9, r1 - movs r6, 0 -_08076362: - movs r2, 0x4 - ldrsh r0, [r5, r2] - ldr r1, _080763EC - lsls r2, r6, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r5, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - ldr r4, [r0, 0x10] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080763D4 - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x1 - bne _080763D4 - mov r0, r9 - cmp r0, 0 - bne _080763B8 - movs r1, 0x1 - mov r9, r1 - ldr r0, _080763F0 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument_2 - ldr r0, _080763F4 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_080763B8: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807167C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080763D4 - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0x1 - mov r3, r10 - bl sub_8076210 -_080763D4: - adds r6, 0x1 - cmp r6, 0x7 - ble _08076362 -_080763DA: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080763E8: .4byte gUnknown_80FB564 -_080763EC: .4byte gAdjacentTileOffsets -_080763F0: .4byte gAvailablePokemonNames -_080763F4: .4byte gUnknown_80FF01C - thumb_func_end sub_8076210 - - thumb_func_start sub_80763F8 -sub_80763F8: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r7, r0, 0 - adds r5, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0807641A - b _080765C0 -_0807641A: - adds r0, r7, 0 - adds r1, r5, 0 - mov r2, r10 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - beq _0807642C - b _080765C0 -_0807642C: - ldr r0, [r5, 0x70] - mov r8, r0 - ldr r0, _08076454 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument_2 - adds r0, r5, 0 - movs r1, 0x14 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _0807645C - mov r1, r10 - cmp r1, 0 - bne _08076450 - b _080765C0 -_08076450: - ldr r0, _08076458 - b _080764A4 - .align 2, 0 -_08076454: .4byte gAvailablePokemonNames -_08076458: .4byte gUnknown_80FD524 -_0807645C: - adds r0, r5, 0 - movs r1, 0x45 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0807647C - mov r3, r10 - cmp r3, 0 - bne _08076472 - b _080765C0 -_08076472: - ldr r0, _08076478 - b _080764A4 - .align 2, 0 -_08076478: .4byte gUnknown_80FCEB0 -_0807647C: - adds r0, r5, 0 - movs r1, 0x8 - bl HasType - lsls r0, 24 - cmp r0, 0 - bne _0807649A - adds r0, r5, 0 - movs r1, 0x11 - bl HasType - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _080764B4 -_0807649A: - mov r0, r10 - cmp r0, 0 - bne _080764A2 - b _080765C0 -_080764A2: - ldr r0, _080764B0 -_080764A4: - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _080765C0 - .align 2, 0 -_080764B0: .4byte gUnknown_80FCEDC -_080764B4: - movs r6, 0x1 - mov r1, r8 - adds r1, 0xAC - ldrb r0, [r1] - cmp r0, 0x3 - beq _08076520 - cmp r0, 0x2 - beq _0807650C - movs r0, 0x2 - strb r0, [r1] - ldr r1, _08076504 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - mov r1, r8 - adds r1, 0xAD - strb r0, [r1] - mov r0, r8 - adds r0, 0xAE - strb r4, [r0] - adds r0, 0x1 - strb r4, [r0] - movs r6, 0 - adds r0, r5, 0 - bl sub_8041C6C - ldr r0, _08076508 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - adds r0, r5, 0 - movs r1, 0x8 - bl sub_806CE94 - b _0807652C - .align 2, 0 -_08076504: .4byte gUnknown_80F4E34 -_08076508: .4byte gUnknown_80FB598 -_0807650C: - ldr r0, _0807651C - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _0807652C - .align 2, 0 -_0807651C: .4byte gUnknown_80FB5D4 -_08076520: - ldr r0, _080765D0 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_0807652C: - adds r0, r5, 0 - movs r1, 0x19 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _080765BA - cmp r6, 0 - bne _080765BA - movs r1, 0 - mov r9, r1 - movs r6, 0 -_08076544: - movs r3, 0x4 - ldrsh r0, [r5, r3] - ldr r1, _080765D4 - lsls r2, r6, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r5, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - ldr r4, [r0, 0x10] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080765B4 - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x1 - bne _080765B4 - mov r0, r9 - cmp r0, 0 - bne _0807659A - movs r1, 0x1 - mov r9, r1 - ldr r0, _080765D8 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument_2 - ldr r0, _080765DC - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_0807659A: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807167C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080765B4 - adds r0, r7, 0 - adds r1, r4, 0 - mov r2, r10 - bl sub_80763F8 -_080765B4: - adds r6, 0x1 - cmp r6, 0x7 - ble _08076544 -_080765BA: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_080765C0: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080765D0: .4byte gUnknown_80FB5F8 -_080765D4: .4byte gAdjacentTileOffsets -_080765D8: .4byte gAvailablePokemonNames -_080765DC: .4byte gUnknown_80FF01C - thumb_func_end sub_80763F8 - - thumb_func_start sub_80765E0 -sub_80765E0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r7, r0, 0 - adds r5, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08076602 - b _08076790 -_08076602: - adds r0, r7, 0 - adds r1, r5, 0 - mov r2, r10 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - beq _08076614 - b _08076790 -_08076614: - ldr r0, [r5, 0x70] - mov r8, r0 - ldr r0, _0807663C - mov r1, r8 - movs r2, 0 - bl SetMessageArgument_2 - adds r0, r5, 0 - movs r1, 0x14 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _08076644 - mov r1, r10 - cmp r1, 0 - bne _08076638 - b _08076790 -_08076638: - ldr r0, _08076640 - b _0807668C - .align 2, 0 -_0807663C: .4byte gAvailablePokemonNames -_08076640: .4byte gUnknown_80FD524 -_08076644: - adds r0, r5, 0 - movs r1, 0x45 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08076664 - mov r3, r10 - cmp r3, 0 - bne _0807665A - b _08076790 -_0807665A: - ldr r0, _08076660 - b _0807668C - .align 2, 0 -_08076660: .4byte gUnknown_80FCEB0 -_08076664: - adds r0, r5, 0 - movs r1, 0x8 - bl HasType - lsls r0, 24 - cmp r0, 0 - bne _08076682 - adds r0, r5, 0 - movs r1, 0x11 - bl HasType - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _0807669C -_08076682: - mov r0, r10 - cmp r0, 0 - bne _0807668A - b _08076790 -_0807668A: - ldr r0, _08076698 -_0807668C: - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _08076790 - .align 2, 0 -_08076698: .4byte gUnknown_80FCEDC -_0807669C: - movs r6, 0x1 - mov r1, r8 - adds r1, 0xAC - ldrb r0, [r1] - cmp r0, 0x3 - beq _080766F0 - movs r0, 0x3 - strb r0, [r1] - ldr r1, _080766E8 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - mov r1, r8 - adds r1, 0xAD - strb r0, [r1] - mov r0, r8 - adds r0, 0xAE - strb r4, [r0] - adds r0, 0x1 - strb r4, [r0] - movs r6, 0 - adds r0, r5, 0 - bl sub_8041C7C - ldr r0, _080766EC - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - adds r0, r5, 0 - movs r1, 0x8 - bl sub_806CE94 - b _080766FC - .align 2, 0 -_080766E8: .4byte gUnknown_80F4E38 -_080766EC: .4byte gUnknown_80FB5B4 -_080766F0: - ldr r0, _080767A0 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_080766FC: - adds r0, r5, 0 - movs r1, 0x19 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0807678A - cmp r6, 0 - bne _0807678A - movs r1, 0 - mov r9, r1 - movs r6, 0 -_08076714: - movs r3, 0x4 - ldrsh r0, [r5, r3] - ldr r1, _080767A4 - lsls r2, r6, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r5, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - ldr r4, [r0, 0x10] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08076784 - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x1 - bne _08076784 - mov r0, r9 - cmp r0, 0 - bne _0807676A - movs r1, 0x1 - mov r9, r1 - ldr r0, _080767A8 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument_2 - ldr r0, _080767AC - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_0807676A: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807167C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08076784 - adds r0, r7, 0 - adds r1, r4, 0 - mov r2, r10 - bl sub_80765E0 -_08076784: - adds r6, 0x1 - cmp r6, 0x7 - ble _08076714 -_0807678A: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_08076790: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080767A0: .4byte gUnknown_80FB5F8 -_080767A4: .4byte gAdjacentTileOffsets -_080767A8: .4byte gAvailablePokemonNames -_080767AC: .4byte gUnknown_80FF01C - thumb_func_end sub_80765E0 - - thumb_func_start sub_80767B0 -sub_80767B0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r5, r1, 0 - lsls r2, 24 - lsrs r4, r2, 24 - adds r6, r4, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _080767CE - b _080768C8 -_080767CE: - ldr r0, _0807680C - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - ldr r7, [r5, 0x70] - adds r0, r7, 0 - adds r0, 0xB0 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080768C8 - mov r0, r8 - adds r1, r5, 0 - adds r2, r4, 0 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _080768C8 - adds r0, r5, 0 - movs r1, 0x41 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08076814 - cmp r4, 0 - beq _080768C8 - ldr r0, _08076810 - b _0807685C - .align 2, 0 -_0807680C: .4byte gAvailablePokemonNames -_08076810: .4byte gUnknown_80FCDE0 -_08076814: - adds r0, r5, 0 - movs r1, 0x6 - bl HasType - lsls r0, 24 - cmp r0, 0 - beq _08076830 - cmp r4, 0 - beq _080768C8 - ldr r0, _0807682C - b _0807685C - .align 2, 0 -_0807682C: .4byte gUnknown_80FCE00 -_08076830: - adds r0, r5, 0 - bl GetMapTileForDungeonEntity_2 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x2 - bne _08076878 - ldr r1, _08076868 - ldr r0, _0807686C - ldr r0, [r0] - ldr r2, _08076870 - adds r0, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08076878 - cmp r6, 0 - beq _080768C8 - ldr r0, _08076874 -_0807685C: - ldr r2, [r0] - mov r0, r8 - adds r1, r5, 0 - bl sub_80522F4 - b _080768C8 - .align 2, 0 -_08076868: .4byte gDungeonWaterType -_0807686C: .4byte gDungeonGlobalData -_08076870: .4byte 0x00003a0e -_08076874: .4byte gUnknown_80FCE34 -_08076878: - adds r6, r7, 0 - adds r6, 0xB0 - ldrb r0, [r6] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08076892 - adds r0, r7, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 -_08076892: - adds r0, r5, 0 - bl sub_8041F08 - movs r4, 0 - movs r0, 0x1 - strb r0, [r6] - ldr r1, _080768D4 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xB8 - strb r0, [r1] - adds r0, r7, 0 - adds r0, 0xB9 - strb r4, [r0] - ldr r0, _080768D8 - ldr r2, [r0] - mov r0, r8 - adds r1, r5, 0 - bl sub_80522F4 - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_080768C8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080768D4: .4byte gUnknown_80F4E2C -_080768D8: .4byte gUnknown_80FB610 - thumb_func_end sub_80767B0 - - thumb_func_start sub_80768DC -sub_80768DC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r5, r1, 0 - lsls r2, 16 - asrs r2, 16 - mov r8, r2 - lsls r3, 24 - lsrs r4, r3, 24 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080769BE - adds r0, r7, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _080769BE - ldr r6, [r5, 0x70] - adds r0, r6, 0 - adds r0, 0xB0 - ldrb r1, [r0] - subs r0, r1, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0807692A - adds r0, r6, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 - b _08076948 -_0807692A: - lsls r0, r1, 24 - lsrs r0, 24 - cmp r0, 0x5 - bne _08076948 - ldr r0, _0807699C - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _080769A0 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08076948: - ldr r0, _0807699C - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r6, 0 - adds r1, 0xB0 - ldrb r0, [r1] - cmp r0, 0x7 - beq _080769AC - movs r4, 0 - movs r0, 0x7 - strb r0, [r1] - ldr r1, _080769A4 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r6, 0 - adds r1, 0xB8 - strb r0, [r1] - adds r0, r6, 0 - adds r0, 0xB9 - strb r4, [r0] - subs r0, 0x5 - mov r1, r8 - str r1, [r0] - adds r0, r5, 0 - bl nullsub_71 - ldr r0, _080769A8 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - adds r0, r5, 0 - movs r1, 0x8 - bl sub_806CE94 - b _080769B8 - .align 2, 0 -_0807699C: .4byte gAvailablePokemonNames -_080769A0: .4byte gUnknown_80FA844 -_080769A4: .4byte gUnknown_80F4E58 -_080769A8: .4byte gUnknown_80FB628 -_080769AC: - ldr r0, _080769C8 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_080769B8: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_080769BE: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080769C8: .4byte gUnknown_80FB64C - thumb_func_end sub_80768DC - - thumb_func_start sub_80769CC -sub_80769CC: - push {r4-r7,lr} - adds r7, r0, 0 - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08076A9A - adds r0, r7, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08076A9A - ldr r6, [r5, 0x70] - adds r0, r6, 0 - adds r0, 0xB0 - ldrb r1, [r0] - subs r0, r1, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08076A0C - adds r0, r6, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 - b _08076A2A -_08076A0C: - lsls r0, r1, 24 - lsrs r0, 24 - cmp r0, 0x5 - bne _08076A2A - ldr r0, _08076A78 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08076A7C - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08076A2A: - ldr r0, _08076A78 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r6, 0 - adds r1, 0xB0 - ldrb r0, [r1] - cmp r0, 0x2 - beq _08076A88 - movs r4, 0 - movs r0, 0x2 - strb r0, [r1] - ldr r1, _08076A80 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r6, 0 - adds r1, 0xB8 - strb r0, [r1] - adds r0, r6, 0 - adds r0, 0xB9 - strb r4, [r0] - adds r0, r5, 0 - bl nullsub_70 - ldr r0, _08076A84 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 - adds r0, r5, 0 - movs r1, 0x8 - bl sub_806CE94 - b _08076A94 - .align 2, 0 -_08076A78: .4byte gAvailablePokemonNames -_08076A7C: .4byte gUnknown_80FA844 -_08076A80: .4byte gUnknown_80F4E54 -_08076A84: .4byte gUnknown_80FB668 -_08076A88: - ldr r0, _08076AA0 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08076A94: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_08076A9A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08076AA0: .4byte gUnknown_80FB688 - thumb_func_end sub_80769CC - - thumb_func_start sub_8076AA4 -sub_8076AA4: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08076B3A - ldr r1, [r5, 0x70] - adds r7, r1, 0 - adds r6, r1, 0 - adds r6, 0xB0 - ldrb r0, [r6] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08076AD8 - adds r0, r1, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 -_08076AD8: - ldr r0, _08076B1C - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - ldrb r0, [r6] - cmp r0, 0x5 - beq _08076B28 - movs r4, 0 - movs r0, 0x5 - strb r0, [r6] - ldr r1, _08076B20 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xB8 - strb r0, [r1] - adds r0, r7, 0 - adds r0, 0xB9 - strb r4, [r0] - adds r0, r5, 0 - bl nullsub_90 - ldr r0, _08076B24 - ldr r2, [r0] - mov r0, r8 - adds r1, r5, 0 - bl sub_80522F4 - b _08076B34 - .align 2, 0 -_08076B1C: .4byte gAvailablePokemonNames -_08076B20: .4byte gUnknown_80F4E60 -_08076B24: .4byte gUnknown_80FB6A4 -_08076B28: - ldr r0, _08076B44 - ldr r2, [r0] - mov r0, r8 - adds r1, r5, 0 - bl sub_80522F4 -_08076B34: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_08076B3A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08076B44: .4byte gUnknown_80FB6C0 - thumb_func_end sub_8076AA4 - - thumb_func_start WrapTarget -WrapTarget: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08076B60 - b _08076C9E -_08076B60: - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0 - beq _08076B74 - b _08076C9E -_08076B74: - ldr r5, [r6, 0x70] - ldr r0, [r4, 0x70] - mov r8, r0 - adds r1, r5, 0 - adds r1, 0xB0 - ldrb r0, [r1] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _08076C20 - mov r2, r8 - adds r2, 0xB0 - ldrb r0, [r2] - cmp r0, 0x3 - beq _08076C20 - cmp r0, 0x4 - beq _08076C20 - movs r0, 0x3 - strb r0, [r1] - adds r1, 0x8 - movs r0, 0x7F - strb r0, [r1] - adds r0, r5, 0 - adds r0, 0xB9 - strb r7, [r0] - movs r0, 0x4 - strb r0, [r2] - ldr r1, _08076C0C - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - mov r1, r8 - adds r1, 0xB8 - strb r0, [r1] - mov r0, r8 - adds r0, 0xB9 - strb r7, [r0] - adds r2, r5, 0 - adds r2, 0x9C - ldr r0, _08076C10 - ldr r1, [r0] - ldr r0, _08076C14 - adds r1, r0 - ldr r0, [r1] - str r0, [r2] - mov r2, r8 - adds r2, 0x9C - ldr r0, [r1] - str r0, [r2] - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - adds r0, r6, 0 - adds r1, r4, 0 - bl nullsub_69 - ldr r0, _08076C18 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08076C1C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - adds r0, r4, 0 - movs r1, 0x8 - bl sub_806CE94 - b _08076C98 - .align 2, 0 -_08076C0C: .4byte gUnknown_80F4E5C -_08076C10: .4byte gDungeonGlobalData -_08076C14: .4byte 0x000037f4 -_08076C18: .4byte gAvailablePokemonNames -_08076C1C: .4byte gUnknown_80FB6D8 -_08076C20: - adds r7, r5, 0 - adds r7, 0xB0 - ldrb r0, [r7] - cmp r0, 0x3 - bne _08076C40 - ldr r0, _08076CA8 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08076CAC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076C40: - mov r5, r8 - adds r5, 0xB0 - ldrb r0, [r5] - cmp r0, 0x3 - bne _08076C60 - ldr r0, _08076CA8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08076CAC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076C60: - ldrb r0, [r7] - cmp r0, 0x4 - bne _08076C7C - ldr r0, _08076CA8 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08076CB0 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076C7C: - ldrb r0, [r5] - cmp r0, 0x4 - bne _08076C98 - ldr r0, _08076CA8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08076CB0 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076C98: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08076C9E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08076CA8: .4byte gAvailablePokemonNames -_08076CAC: .4byte gUnknown_80FB6FC -_08076CB0: .4byte gUnknown_80FB718 - thumb_func_end WrapTarget - - thumb_func_start sub_8076CB4 -sub_8076CB4: - push {r4-r7,lr} - adds r7, r0, 0 - movs r5, 0 - movs r6, 0 -_08076CBC: - ldr r0, _08076D08 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08076D0C - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08076CFA - ldr r1, [r4, 0x70] - adds r2, r1, 0 - adds r2, 0x9C - ldr r0, [r2] - cmp r0, r7 - bne _08076CF4 - adds r1, 0xB0 - ldrb r0, [r1] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08076CF2 - strb r6, [r1] -_08076CF2: - str r6, [r2] -_08076CF4: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08076CFA: - adds r5, 0x1 - cmp r5, 0x13 - ble _08076CBC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08076D08: .4byte gDungeonGlobalData -_08076D0C: .4byte 0x000135cc - thumb_func_end sub_8076CB4 - - thumb_func_start sub_8076D10 -sub_8076D10: - push {r4-r7,lr} - adds r7, r0, 0 - adds r6, r1, 0 - adds r0, r6, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08076E0E - adds r0, r7, 0 - adds r1, r6, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08076E0E - adds r0, r6, 0 - bl sub_8041C08 - ldr r4, [r6, 0x70] - adds r5, r4, 0 - adds r5, 0xB0 - ldrb r0, [r5] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08076D54 - adds r0, r4, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 -_08076D54: - ldr r0, _08076D74 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldrb r0, [r5] - cmp r0, 0x6 - beq _08076DAC - movs r0, 0x6 - strb r0, [r5] - ldrb r0, [r4, 0x7] - cmp r0, 0 - beq _08076D7C - ldr r1, _08076D78 - b _08076D7E - .align 2, 0 -_08076D74: .4byte gAvailablePokemonNames -_08076D78: .4byte gUnknown_80F4EBC -_08076D7C: - ldr r1, _08076DA4 -_08076D7E: - adds r0, r6, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r4, 0 - adds r1, 0xB8 - strb r0, [r1] - adds r1, r4, 0 - adds r1, 0xB9 - movs r0, 0 - strb r0, [r1] - ldr r0, _08076DA8 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_80522F4 - b _08076DB8 - .align 2, 0 -_08076DA4: .4byte gUnknown_80F4EC0 -_08076DA8: .4byte gUnknown_80FB7BC -_08076DAC: - ldr r0, _08076E14 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_80522F4 -_08076DB8: - ldrb r0, [r4, 0x6] - cmp r0, 0 - beq _08076E08 - movs r5, 0 - movs r7, 0 -_08076DC2: - ldr r0, _08076E18 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08076E1C - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08076E02 - ldr r1, [r4, 0x70] - adds r3, r1, 0 - adds r3, 0x78 - ldrb r0, [r3] - cmp r0, 0x1 - bne _08076E02 - adds r2, r1, 0 - adds r2, 0x80 - ldr r0, [r2] - cmp r0, r6 - bne _08076E02 - movs r0, 0x6 - strb r0, [r3] - str r7, [r2] - adds r0, r1, 0 - adds r0, 0x7C - strh r7, [r0] - subs r0, 0x2 - strb r7, [r0] -_08076E02: - adds r5, 0x1 - cmp r5, 0x3 - ble _08076DC2 -_08076E08: - adds r0, r6, 0 - bl DungeonEntityUpdateStatusSprites -_08076E0E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08076E14: .4byte gUnknown_80FB7DC -_08076E18: .4byte gDungeonGlobalData -_08076E1C: .4byte 0x0001357c - thumb_func_end sub_8076D10 - - thumb_func_start sub_8076E20 -sub_8076E20: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - mov r9, r3 - ldr r0, [sp, 0x1C] - ldr r1, [sp, 0x20] - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08076E4C - b _08076F6E -_08076E4C: - cmp r5, 0 - beq _08076E64 - ldr r0, _08076E5C - ldr r1, _08076E60 - ldr r1, [r1] - bl strcpy - b _08076E6E - .align 2, 0 -_08076E5C: .4byte gUnknown_202DE58 -_08076E60: .4byte gUnknown_80FC0C8 -_08076E64: - ldr r0, _08076EA0 - ldr r1, _08076EA4 - ldr r1, [r1] - bl strcpy -_08076E6E: - cmp r7, 0 - beq _08076EE4 - adds r0, r6, 0 - adds r1, r4, 0 - mov r2, r8 - bl sub_8071728 - lsls r0, 24 - cmp r0, 0 - bne _08076F6E - adds r0, r4, 0 - movs r1, 0xB - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _08076EB0 - ldr r0, _08076EA8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08076EAC - b _08076ECE - .align 2, 0 -_08076EA0: .4byte gUnknown_202DE58 -_08076EA4: .4byte gUnknown_80FC0B8 -_08076EA8: .4byte gAvailablePokemonNames -_08076EAC: .4byte gUnknown_80FD550 -_08076EB0: - adds r0, r4, 0 - movs r1, 0x9 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08076EE4 - cmp r5, 0 - bne _08076EE4 - ldr r0, _08076EDC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08076EE0 -_08076ECE: - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08076F6E - .align 2, 0 -_08076EDC: .4byte gAvailablePokemonNames -_08076EE0: .4byte gUnknown_80FCA60 -_08076EE4: - ldr r7, [r4, 0x70] - ldr r0, _08076F0C - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8041F28 - mov r0, r9 - cmp r0, 0x1 - bne _08076F18 - ldr r0, _08076F10 - ldr r1, _08076F14 - ldr r1, [r1] - bl strcpy - b _08076F22 - .align 2, 0 -_08076F0C: .4byte gAvailablePokemonNames -_08076F10: .4byte gUnknown_202DEA8 -_08076F14: .4byte gUnknown_80FC0E4 -_08076F18: - ldr r0, _08076F50 - ldr r1, _08076F54 - ldr r1, [r1] - bl strcpy -_08076F22: - lsls r1, r5, 1 - adds r0, r7, 0 - adds r0, 0x1C - adds r1, r0, r1 - movs r2, 0 - ldrsh r3, [r1, r2] - mov r0, r9 - subs r3, r0 - cmp r3, 0 - bge _08076F38 - movs r3, 0 -_08076F38: - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, r3 - beq _08076F5C - strh r3, [r1] - ldr r0, _08076F58 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08076F68 - .align 2, 0 -_08076F50: .4byte gUnknown_202DEA8 -_08076F54: .4byte gUnknown_80FC0D4 -_08076F58: .4byte gUnknown_80FC15C -_08076F5C: - ldr r0, _08076F7C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08076F68: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08076F6E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08076F7C: .4byte gUnknown_80FC274 - thumb_func_end sub_8076E20 - - thumb_func_start sub_8076F80 -sub_8076F80: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - mov r9, r3 - ldr r0, [sp, 0x1C] - ldr r1, [sp, 0x20] - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08077072 - cmp r5, 0 - beq _08076FC4 - ldr r0, _08076FBC - ldr r1, _08076FC0 - ldr r1, [r1] - bl strcpy - b _08076FCE - .align 2, 0 -_08076FBC: .4byte gUnknown_202DE58 -_08076FC0: .4byte gUnknown_80FC0AC -_08076FC4: - ldr r0, _08077008 - ldr r1, _0807700C - ldr r1, [r1] - bl strcpy -_08076FCE: - cmp r7, 0 - beq _08076FE2 - adds r0, r6, 0 - adds r1, r4, 0 - mov r2, r8 - bl sub_8071728 - lsls r0, 24 - cmp r0, 0 - bne _08077072 -_08076FE2: - ldr r7, [r4, 0x70] - ldr r0, _08077010 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8041F4C - mov r0, r9 - cmp r0, 0x1 - bne _0807701C - ldr r0, _08077014 - ldr r1, _08077018 - ldr r1, [r1] - bl strcpy - b _08077026 - .align 2, 0 -_08077008: .4byte gUnknown_202DE58 -_0807700C: .4byte gUnknown_80FC09C -_08077010: .4byte gAvailablePokemonNames -_08077014: .4byte gUnknown_202DEA8 -_08077018: .4byte gUnknown_80FC0E4 -_0807701C: - ldr r0, _08077054 - ldr r1, _08077058 - ldr r1, [r1] - bl strcpy -_08077026: - lsls r1, r5, 1 - adds r0, r7, 0 - adds r0, 0x20 - adds r1, r0, r1 - movs r2, 0 - ldrsh r3, [r1, r2] - mov r0, r9 - subs r3, r0 - cmp r3, 0 - bge _0807703C - movs r3, 0 -_0807703C: - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, r3 - beq _08077060 - strh r3, [r1] - ldr r0, _0807705C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _0807706C - .align 2, 0 -_08077054: .4byte gUnknown_202DEA8 -_08077058: .4byte gUnknown_80FC0D4 -_0807705C: .4byte gUnknown_80FC158 -_08077060: - ldr r0, _08077080 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_0807706C: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08077072: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08077080: .4byte gUnknown_80FC248 - thumb_func_end sub_8076F80 - - thumb_func_start sub_8077084 -sub_8077084: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08077152 - ldr r7, [r4, 0x70] - ldr r0, _080770C4 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8041F70 - cmp r5, 0 - beq _080770D0 - ldr r0, _080770C8 - ldr r1, _080770CC - ldr r1, [r1] - bl strcpy - b _080770DA - .align 2, 0 -_080770C4: .4byte gAvailablePokemonNames -_080770C8: .4byte gUnknown_202DE58 -_080770CC: .4byte gUnknown_80FC0C8 -_080770D0: - ldr r0, _080770EC - ldr r1, _080770F0 - ldr r1, [r1] - bl strcpy -_080770DA: - cmp r6, 0x1 - bne _080770FC - ldr r0, _080770F4 - ldr r1, _080770F8 - ldr r1, [r1] - bl strcpy - b _08077106 - .align 2, 0 -_080770EC: .4byte gUnknown_202DE58 -_080770F0: .4byte gUnknown_80FC0B8 -_080770F4: .4byte gUnknown_202DEA8 -_080770F8: .4byte gUnknown_80FC0E4 -_080770FC: - ldr r0, _08077134 - ldr r1, _08077138 - ldr r1, [r1] - bl strcpy -_08077106: - lsls r1, r5, 1 - adds r0, r7, 0 - adds r0, 0x1C - adds r1, r0, r1 - movs r0, 0 - ldrsh r3, [r1, r0] - adds r3, r6 - cmp r3, 0x13 - ble _0807711A - movs r3, 0x14 -_0807711A: - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, r3 - beq _08077140 - strh r3, [r1] - ldr r0, _0807713C - ldr r2, [r0] - mov r0, r8 - adds r1, r4, 0 - bl sub_80522F4 - b _0807714C - .align 2, 0 -_08077134: .4byte gUnknown_202DEA8 -_08077138: .4byte gUnknown_80FC0D4 -_0807713C: .4byte gUnknown_80FC13C -_08077140: - ldr r0, _0807715C - ldr r2, [r0] - mov r0, r8 - adds r1, r4, 0 - bl sub_80522F4 -_0807714C: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08077152: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807715C: .4byte gUnknown_80FC270 - thumb_func_end sub_8077084 - - thumb_func_start sub_8077160 -sub_8077160: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807722E - ldr r7, [r4, 0x70] - ldr r0, _080771A0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8041F94 - cmp r5, 0 - beq _080771AC - ldr r0, _080771A4 - ldr r1, _080771A8 - ldr r1, [r1] - bl strcpy - b _080771B6 - .align 2, 0 -_080771A0: .4byte gAvailablePokemonNames -_080771A4: .4byte gUnknown_202DE58 -_080771A8: .4byte gUnknown_80FC0AC -_080771AC: - ldr r0, _080771C8 - ldr r1, _080771CC - ldr r1, [r1] - bl strcpy -_080771B6: - cmp r6, 0x1 - bne _080771D8 - ldr r0, _080771D0 - ldr r1, _080771D4 - ldr r1, [r1] - bl strcpy - b _080771E2 - .align 2, 0 -_080771C8: .4byte gUnknown_202DE58 -_080771CC: .4byte gUnknown_80FC09C -_080771D0: .4byte gUnknown_202DEA8 -_080771D4: .4byte gUnknown_80FC0E4 -_080771D8: - ldr r0, _08077210 - ldr r1, _08077214 - ldr r1, [r1] - bl strcpy -_080771E2: - lsls r1, r5, 1 - adds r0, r7, 0 - adds r0, 0x20 - adds r1, r0, r1 - movs r0, 0 - ldrsh r3, [r1, r0] - adds r3, r6 - cmp r3, 0x13 - ble _080771F6 - movs r3, 0x14 -_080771F6: - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, r3 - beq _0807721C - strh r3, [r1] - ldr r0, _08077218 - ldr r2, [r0] - mov r0, r8 - adds r1, r4, 0 - bl sub_80522F4 - b _08077228 - .align 2, 0 -_08077210: .4byte gUnknown_202DEA8 -_08077214: .4byte gUnknown_80FC0D4 -_08077218: .4byte gUnknown_80FC138 -_0807721C: - ldr r0, _08077238 - ldr r2, [r0] - mov r0, r8 - adds r1, r4, 0 - bl sub_80522F4 -_08077228: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807722E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08077238: .4byte gUnknown_80FC21C - thumb_func_end sub_8077160 - - .align 2, 0 diff --git a/asm/code_807CD9C.s b/asm/code_807CD9C.s index 24e523fec..d5703dd8c 100644 --- a/asm/code_807CD9C.s +++ b/asm/code_807CD9C.s @@ -515,7 +515,7 @@ _0807D1A4: bl sub_80522F4 mov r0, r8 adds r1, r5, 0 - bl sub_8076D10 + bl PetrifiedStatusTarget b _0807D3A8 .align 2, 0 _0807D1D0: .4byte gDungeonGlobalData @@ -708,7 +708,7 @@ _0807D35C: bne _0807D36A mov r0, r8 adds r1, r5, 0 - bl sub_8076D10 + bl PetrifiedStatusTarget _0807D36A: mov r1, r10 ldrb r0, [r1, 0x7] diff --git a/asm/code_807FCD4.s b/asm/code_807FCD4.s index 83358f573..b1b7b238e 100644 --- a/asm/code_807FCD4.s +++ b/asm/code_807FCD4.s @@ -653,7 +653,7 @@ _080801F2: adds r0, r5, 0 adds r1, r4, 0 movs r3, 0x1 - bl sub_8076E20 + bl LowerAttackStageTarget b _08080240 .align 2, 0 _08080208: .4byte gUnknown_8106A50 @@ -668,7 +668,7 @@ _0808020C: adds r0, r5, 0 adds r1, r4, 0 movs r3, 0x1 - bl sub_8076F80 + bl LowerDefenseStageTarget b _08080240 .align 2, 0 _08080228: .4byte gUnknown_8106A4C @@ -681,7 +681,7 @@ _0808022C: adds r0, r5, 0 adds r1, r4, 0 movs r3, 0x1 - bl sub_8076F80 + bl LowerDefenseStageTarget _08080240: add sp, 0x8 pop {r4,r5} @@ -837,7 +837,7 @@ sub_8080364: cmp r1, 0 beq _08080370 movs r2, 0x1 - bl sub_8077AE4 + bl ConfuseStatusTarget _08080370: pop {r0} bx r0 @@ -899,7 +899,7 @@ sub_80803C8: cmp r1, 0 beq _080803D4 movs r2, 0x1 - bl sub_80763F8 + bl PoisonedStatusTarget _080803D4: pop {r0} bx r0 diff --git a/asm/code_809747C.s b/asm/code_809747C.s deleted file mode 100644 index 08f7d44eb..000000000 --- a/asm/code_809747C.s +++ /dev/null @@ -1,9 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - .align 2,0 - diff --git a/include/code_8077274_1.h b/include/code_8077274_1.h index 1a6fd57c2..0d8a4fb9b 100644 --- a/include/code_8077274_1.h +++ b/include/code_8077274_1.h @@ -4,7 +4,7 @@ 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 ExposeStatusTarget(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); diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 3c2dd7501..289089c2c 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -116,7 +116,8 @@ struct DungeonEntityData /* 0xAE */ u8 nonVolatileStatusDamageTimer; u8 fillAF; /* 0xB0 */ u8 immobilizeStatus; - u8 fillB1[0xB8 - 0xB1]; + u8 fillB1[0xB4 - 0xB1]; + /* 0xB4 */ s32 unkB4; /* 0xB8 */ u8 immobilizeStatusTurnsLeft; /* 0xB9 */ u8 immobilizeStatusDamageTimer; u8 fillBA[0xBC - 0xBA]; @@ -211,7 +212,10 @@ struct DungeonEntityData u8 unk15D; u8 unk15E; u8 unk15F; - u8 fill160[0x169 - 0x160]; + u8 fill160[0x164 - 0x160]; + /* 0x164 */ u8 unk164; + /* 0x165 */ u8 unk165; + u8 fill166[0x169 - 0x166]; u8 turnsSinceWarpScarfActivation; /* 0x16C */ struct Position targetPosition; /* 0x170 */ struct Position posPixel; @@ -246,7 +250,7 @@ struct DungeonEntity // X = (posWorld * 24 + 16) * 256, while Y = (posWorld * 24 + 12) * 256. /* 0xC */ struct Position32 posPixel; /* 0x14 */ struct Position32 prevPosPixel; - u8 fill1C[0x20 - 0x1C]; + s32 unk1C; /* 0x20 */ bool8 visible; // Turned off when a Pokémon faints. u8 fill21[0x25 - 0x21]; /* 0x25 */ u8 roomIndex; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 3b72ec24b..c10fd0baa 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -77,7 +77,8 @@ struct DungeonGlobalData /* 0x68A */ u8 unk68A; u8 fill68B[0x363C - 0x68B]; /* 0x363C */ u8 expYieldRankings[NUM_SPECIES]; - u8 fill37E3[0x37F8 - 0x37D9]; + u8 fill37E3[0x37F4 - 0x37D9]; + /* 0x37F4 */ s32 unk37F4; /* 0x37F8 */ bool8 hasPlus[2]; // Index 0: Enemy , Index 1: Team /* 0x37FA */ bool8 hasMinus[2]; // Index 0: Enemy , Index 1: Team /* 0x37FC */ bool8 decoyActive; diff --git a/include/status.h b/include/status.h index 8017623e6..d6a25cde0 100644 --- a/include/status.h +++ b/include/status.h @@ -13,16 +13,27 @@ void sub_80772C0(struct DungeonEntity *pokemon, struct DungeonEntity *target, u3 void sub_8077434(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage); void sub_8077540(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage); void sub_80775DC(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage, bool8 displayMessage); -void sub_80776C0(struct DungeonEntity * pokemon,struct DungeonEntity * target, bool8 displayMessage); -void sub_8077780(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void CringeStatusTarget(struct DungeonEntity * pokemon,struct DungeonEntity * target, bool8 displayMessage); +void ParalyzeStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 diplayMessage); void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 param_3, bool8 displayMessage); -void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); -void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void ConfuseStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void CowerStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, u32 displayMessage); void HandleScannerOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target); void HandleStairsOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target); void HandleRadarOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target); void HandleLeechSeed(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void DestinyBondStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void SureShotStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target, s32 turns); +void WhifferStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target, s32 turns); +void FixedDamageStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target); +void FocusEnergyStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target); +void CurseStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target); +void SnatchStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void TauntStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void HandleStockpile(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void InvisibleStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void PerishSongTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); #endif diff --git a/include/status_checker.h b/include/status_checker.h index 2bd1be767..8f9a2e07b 100644 --- a/include/status_checker.h +++ b/include/status_checker.h @@ -37,10 +37,10 @@ bool8 TrapbustOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *targ bool8 sub_805C080(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C128(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C138(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); -bool8 sub_805C1B0(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 IdentifyOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); u32 sub_805C1BC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); bool8 sub_805C1E4(struct DungeonEntity *pokemon, struct DungeonEntity *target); -bool8 sub_805C1F8(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 ShockerOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C208(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4); bool8 sub_805C288(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C2A0(struct DungeonEntity *pokemon, struct DungeonEntity *target); @@ -50,8 +50,8 @@ bool8 sub_805C3F8(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C45C(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C468(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 StairsOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); -bool8 sub_805C480(struct DungeonEntity *pokemon, struct DungeonEntity *target); -bool8 sub_805C48C(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 LongtossOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 PierceOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 CanUseOnSelfWithStatusChecker(struct DungeonEntity *pokemon, struct PokemonMove *move); bool8 CanUseOnTargetWithStatusChecker(struct DungeonEntity *user, struct DungeonEntity *target, struct PokemonMove *move); bool8 HasDisabledMove(struct PokemonMove *moves); diff --git a/ld_script.txt b/ld_script.txt index f1a26239b..4f3221ff5 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -248,7 +248,6 @@ SECTIONS { src/code_8073CF0.o(.text); asm/code_8073CF0.o(.text); src/dungeon_ai.o(.text); - asm/code_8075BA4.o(.text); src/status.o(.text); asm/code_8077274.o(.text); src/code_8077274_1.o(.text); diff --git a/src/code_80428A0.c b/src/code_80428A0.c index 01f9f1fcf..86a17fd5a 100644 --- a/src/code_80428A0.c +++ b/src/code_80428A0.c @@ -1,12 +1,15 @@ #include "global.h" #include "dungeon_entity.h" - +#include "dungeon_global_data.h" extern void sub_804151C(struct DungeonEntity *r0, u32 r1, u8 r2); extern void sub_803E708(u32 r0, u32 r1); extern void sub_80416A4(struct DungeonEntity *r0, u32 r1, u32 r2); extern void sub_80421C0(struct DungeonEntity *r0, u16 r1); - +extern u8 sub_8042768(struct DungeonEntity *pokemon); +extern void sub_804178C(u32); +extern void sub_804151C(struct DungeonEntity *pokemon, u32 r1, u8 r2); +extern void sub_803E46C(u32); void sub_80428A0(struct DungeonEntity *r0) { @@ -146,3 +149,42 @@ void sub_8042A74(struct DungeonEntity *r0) { sub_804151C(r0, 0x18, 1); } + +void sub_8042A84(s16 param_1, struct DungeonEntity *entity, u32 param_3) +{ + s32 iVar2; + s32 iVar3; + s32 r6; + s32 param_1_s16; + + param_1_s16 = param_1; + + r6 = 0x200; + if (sub_8042768(entity) != 0) { + sub_804151C(entity,param_1_s16,0); + sub_803E708(param_3,0x42); + do { + if (0xc7ff < entity->unk1C) break; + sub_803E46C(0x42); + iVar2 = entity->unk1C + r6; + entity->unk1C = iVar2; + r6 += 0x100; + iVar3 = entity->posPixel.y - iVar2; + if (iVar3 < 0) { + iVar3 += 0xff; + } + } while (-8 <= (iVar3 >> 8) - gDungeonGlobalData->posScreenPixel.y); + entity->visible = 0; + sub_804178C(0); + } +} + +void sub_8042B0C(struct DungeonEntity *entity) +{ + sub_8042A84(0x13e, entity, 5); +} + +void sub_8042B20(struct DungeonEntity *entity) +{ + sub_8042A84(0x1BC, entity, 0xE); +} diff --git a/src/code_8048480.c b/src/code_8048480.c index 6f2d2c044..dbeb976d7 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -8,6 +8,7 @@ #include "number_util.h" #include "moves.h" #include "code_8077274_1.h" +#include "status.h" extern u8 *gUnknown_80F89F4[]; extern u8 gAvailablePokemonNames[0x58]; @@ -34,16 +35,13 @@ extern u8 *gUnknown_80F9740[]; extern u8 *gUnknown_80F9760[]; extern void sub_807D148(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32 r2, u32 r3); -extern void sub_8075FCC(struct DungeonEntity *pokemon, struct DungeonEntity *r1); -extern void sub_8077AE4(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32 r2); +extern void SleeplessStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity *r1); extern void sub_8072008(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32 r2, u8 r3, u32); -extern void sub_8076D10(struct DungeonEntity *pokemon, struct DungeonEntity *r1); +extern void PetrifiedStatusTarget(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_80522F4(struct DungeonEntity *pokemon, struct DungeonEntity *r1, const char[]); -extern void sub_8077910(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32, u32); -extern void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *r1, s16, s16, u32); 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 s32 sub_8042520(struct DungeonEntity *); @@ -126,12 +124,12 @@ void sub_8048480(struct DungeonEntity *pokemon, struct DungeonEntity *target) void sub_8048490(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8075FCC(pokemon, target); + SleeplessStatusTarget(pokemon, target); } void sub_804849C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8077AE4(pokemon, target, 1); + ConfuseStatusTarget(pokemon, target, TRUE); } void sub_80484A8(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -141,7 +139,7 @@ void sub_80484A8(struct DungeonEntity *pokemon, struct DungeonEntity *target) void sub_80484BC(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8076D10(pokemon, target); + PetrifiedStatusTarget(pokemon, target); } void sub_80484C8(struct DungeonEntity *pokemon, struct DungeonEntity *target) diff --git a/src/code_8048DB8.c b/src/code_8048DB8.c index b55d1076f..f5718337a 100644 --- a/src/code_8048DB8.c +++ b/src/code_8048DB8.c @@ -3,15 +3,15 @@ #include "code_80521D0.h" #include "dungeon_random.h" #include "item.h" +#include "status.h" extern void sub_803E708(u32, u32); extern void sub_80421C0(struct DungeonEntity *r0, u16 r1); extern void sub_8078B5C(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32); -extern void sub_80763F8(struct DungeonEntity *, struct DungeonEntity *, u32); +extern void PoisonedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, u32); extern void sub_80769CC(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8076210(struct DungeonEntity *, struct DungeonEntity *, u32, u32); -extern void sub_8077780(struct DungeonEntity *, struct DungeonEntity *, u32); -extern void sub_8076E20(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); +extern void BurnedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32); +extern void LowerAttackStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); extern u8 gAvailablePokemonNames[]; extern u8 gUnknown_202DE58[]; @@ -69,20 +69,20 @@ void sub_8048E04(struct DungeonEntity *pokemon, struct DungeonEntity * target) switch(DungeonRandomCapped(5)) { case 0: - sub_80763F8(pokemon, target, 1); + PoisonedStatusTarget(pokemon, target, TRUE); break; case 1: sub_80769CC(pokemon, target); break; case 2: - sub_8076210(pokemon, target, 1, 1); + BurnedStatusTarget(pokemon, target, 1, TRUE); break; case 3: - sub_8077780(pokemon, target, 1); + ParalyzeStatusTarget(pokemon, target, TRUE); break; case 4: - sub_8076E20(pokemon, target, gUnknown_8106A4C, 3, 1, 1); - sub_8076E20(pokemon, target, gUnknown_8106A50, 3, 1, 1); + LowerAttackStageTarget(pokemon, target, gUnknown_8106A4C, 3, 1, 1); + LowerAttackStageTarget(pokemon, target, gUnknown_8106A50, 3, 1, 1); break; } } diff --git a/src/code_8057824.c b/src/code_8057824.c index 028d36aa3..173cec575 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -9,6 +9,7 @@ #include "code_808417C.h" #include "map.h" #include "moves.h" +#include "status.h" #include "status_checks_1.h" #include "tile_types.h" #include "weather.h" @@ -54,26 +55,19 @@ struct unkStruct_80928C0 void sub_80928C0(u8 *buffer, struct PokemonMove *move, struct unkStruct_80928C0 *param_3); -extern void sub_80775DC(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32); -extern void sub_80768DC(struct DungeonEntity *, struct DungeonEntity *, u32, u32); -extern void sub_80772C0(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32, u32); +extern void SqueezedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern u8 sub_807EAA0(u32, u32); extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, const char[]); -extern void sub_8077434(struct DungeonEntity *r0, struct DungeonEntity *r1, u32 , u32, u32); extern s32 sub_80556BC(struct DungeonEntity *, struct DungeonEntity *, u8, struct PokemonMove *, u32, u32); extern u8 sub_805727C(struct DungeonEntity *, struct DungeonEntity *, s16); -extern void sub_80779F0(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern void sub_8078968(struct DungeonEntity *r0, struct DungeonEntity *r1); -extern void sub_8077AE4(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32); -extern void sub_8077084(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32, u32); -extern u8 sub_80776C0(struct DungeonEntity *, struct DungeonEntity *, u8); -extern void sub_8076F80(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); +extern void RaiseAttackStageTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32, u32); +extern void LowerDefenseStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); extern void sub_806F370(struct DungeonEntity *r0, struct DungeonEntity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); extern void SetMessageArgument(char[], struct DungeonEntity*, u32); extern u32 sub_8055640(struct DungeonEntity *, struct DungeonEntity *, struct PokemonMove *, u32, u32); -extern void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *r1, s16, s16, u32); -extern void sub_8075DBC(struct DungeonEntity *, struct DungeonEntity *, s32); -extern void sub_8075F34(struct DungeonEntity *, struct DungeonEntity *, s32); +extern void NightmareStatusTarget(struct DungeonEntity *, struct DungeonEntity *, s32); +extern void YawnedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, s32); extern void sub_8075C58(struct DungeonEntity *, struct DungeonEntity *, s32, s32); u8 sub_8057620(u32 param_1); extern s16 sub_8094828(u16, u8); @@ -148,7 +142,7 @@ bool8 sub_8057634(struct DungeonEntity *pokemon, struct DungeonEntity *target, s if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { uVar3 = TRUE; if (sub_805727C(pokemon, target, gUnknown_80F4DB4) != 0) { - sub_8076F80(pokemon, target, gUnknown_8106A4C, 1, 1, 0); + LowerDefenseStageTarget(pokemon, target, gUnknown_8106A4C, 1, 1, 0); } } return uVar3; @@ -170,7 +164,7 @@ bool8 sub_805768C(struct DungeonEntity *pokemon, struct DungeonEntity *target, s bool8 sub_80576D0(struct DungeonEntity * pokemon, struct DungeonEntity *target) { - sub_8075F34(pokemon, target, CalculateStatusTurns(target,gUnknown_80F4F28,TRUE) + 1); + YawnedStatusTarget(pokemon, target, CalculateStatusTurns(target,gUnknown_80F4F28,TRUE) + 1); return TRUE; } @@ -182,7 +176,7 @@ bool8 sub_80576F8(struct DungeonEntity * pokemon, struct DungeonEntity *target) bool8 sub_8057720(struct DungeonEntity * pokemon, struct DungeonEntity *target) { - sub_8075DBC(pokemon, target, CalculateStatusTurns(target,gUnknown_80F4E78,TRUE)); + NightmareStatusTarget(pokemon, target, CalculateStatusTurns(target,gUnknown_80F4E78,TRUE)); return TRUE; } @@ -405,8 +399,8 @@ bool8 sub_8057BB4(struct DungeonEntity *pokemon, struct DungeonEntity *target) bool8 sub_8057BC4(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8077AE4(pokemon, target, 1); - sub_8077084(pokemon, target, gUnknown_8106A4C, 2); + ConfuseStatusTarget(pokemon, target, 1); + RaiseAttackStageTarget(pokemon, target, gUnknown_8106A4C, 2); return TRUE; } @@ -419,7 +413,7 @@ bool8 sub_8057BEC(struct DungeonEntity *pokemon, struct DungeonEntity *target, s if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { uVar3 = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4E0A) != 0) { - sub_80776C0(pokemon,target,0); + CringeStatusTarget(pokemon,target,0); } } } @@ -443,7 +437,7 @@ bool8 sub_8057C88(struct DungeonEntity *pokemon, struct DungeonEntity *target, s if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { uVar3 = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4DF6) != 0) { - sub_80776C0(pokemon,target,0); + CringeStatusTarget(pokemon,target,0); } } return uVar3; @@ -478,7 +472,7 @@ bool8 sub_8057D20(struct DungeonEntity * pokemon, struct DungeonEntity * target, if (sub_8055640(pokemon,target,move,uVar3,param_4) != 0) { uVar4 = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4E08) != 0) { - sub_80768DC(pokemon,target,0x3b,0); + SqueezedStatusTarget(pokemon,target,0x3b,0); } } return uVar4; @@ -486,6 +480,6 @@ bool8 sub_8057D20(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 sub_8057D7C(struct DungeonEntity * param_1, struct DungeonEntity * param_2) { - sub_8076F80(param_1, param_2, gUnknown_8106A50, 2, 1, 1); + LowerDefenseStageTarget(param_1, param_2, gUnknown_8106A50, 2, 1, 1); return TRUE; } diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index 48b31cc89..a97c91950 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -36,7 +36,7 @@ void sub_80522F4(struct DungeonEntity *r0, struct DungeonEntity *r1, const char extern void sub_8042900(struct DungeonEntity *r0); extern void sub_8042968(struct DungeonEntity *r0); extern void sub_806ABAC(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8076090(struct DungeonEntity *, struct DungeonEntity *,u32,u32,u32); +extern void PausedStatusTarget(struct DungeonEntity *, struct DungeonEntity *,u32,u32,u32); void sub_8041BBC(struct DungeonEntity *r0); extern u8 sub_8045888(struct DungeonEntity *); extern void sub_806A2BC(struct DungeonEntity *, u8); @@ -69,15 +69,15 @@ void sub_8069E0C(struct DungeonEntity *pokemon) void TriggerWeatherAbilities(void) { struct DungeonEntity *entity; - s32 iVar5; + s32 index; if (gDungeonGlobalData->unkC != 0) { gDungeonGlobalData->unkC = 0; gDungeonGlobalData->negateWeatherEffects = FALSE; - for(iVar5 = 0; iVar5 < DUNGEON_MAX_POKEMON; iVar5++) + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) { - entity = gDungeonGlobalData->allPokemon[iVar5]; + entity = gDungeonGlobalData->allPokemon[index]; if (EntityExists(entity)) { if (HasAbility(entity, ABILITY_DRIZZLE)) { gDungeonGlobalData->startingWeather[WEATHER_RAIN] = 1; @@ -225,20 +225,20 @@ void sub_806A120(struct DungeonEntity * pokemon, struct DungeonEntity * target, void sub_806A1B0(struct DungeonEntity *pokemon) { if ((EntityExists(pokemon)) && (HasAbility(pokemon, ABILITY_TRUANT))) { - sub_8076090(pokemon,pokemon,0,1,0); + PausedStatusTarget(pokemon,pokemon,0,1,0); } } void sub_806A1E8(struct DungeonEntity *pokemon) { bool8 bVar3; - struct DungeonEntityData *iVar1; + struct DungeonEntityData *entityData; bVar3 = FALSE; if (EntityExists(pokemon)) { if (GetEntityType(pokemon) == ENTITY_POKEMON) { - iVar1 = pokemon->entityData; - bVar3 = (!iVar1->isEnemy); + entityData = pokemon->entityData; + bVar3 = (!entityData->isEnemy); } if (gUnknown_203B46C->unk1 == '\0') { bVar3 = FALSE; diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index e696dba4e..60f1f09f2 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -321,7 +321,7 @@ void sub_8078F50(struct DungeonEntity * pokemon, struct DungeonEntity * target) } } -void sub_8078FDC(struct DungeonEntity * pokemon, struct DungeonEntity * target, s16 param_3) +void ExposeStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s16 param_3) { struct DungeonEntityData *entityData; s32 param_3_s16; diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index 92f6b7720..c16daec4a 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -5,17 +5,23 @@ #include "constants/dungeon_action.h" #include "constants/direction.h" #include "constants/iq_skill.h" +#include "constants/item.h" #include "constants/status.h" #include "constants/targeting.h" +#include "constants/type.h" #include "code_80521D0.h" #include "code_8077274_1.h" +#include "code_808417C.h" #include "dungeon_action.h" #include "dungeon_ai_attack.h" #include "dungeon_ai_items.h" #include "dungeon_ai_movement.h" +#include "dungeon_ai_targeting.h" #include "dungeon_capabilities_1.h" #include "dungeon_global_data.h" +#include "dungeon_items.h" #include "dungeon_leader.h" +#include "dungeon_map_access.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" @@ -25,6 +31,7 @@ #include "pokemon.h" #include "status_checks.h" #include "targeting.h" +#include "tile_types.h" extern char gAvailablePokemonNames[]; extern char *gPtrCouldntBeUsedMessage; @@ -34,18 +41,123 @@ extern u8 *gUnknown_80FB384[]; extern u8 *gUnknown_80FB338[]; extern u8 *gUnknown_80FB318[]; extern u8 *gUnknown_80FB35C[]; +extern u8 *gUnknown_80FD548[]; +extern u8 *gUnknown_80FCD88[]; +extern u8 *gUnknown_80FCD58[]; +extern u8 *gUnknown_80FCD54[]; +extern u8 *gUnknown_80FB3D0[]; +extern u8 *gUnknown_80FB3CC[]; +extern u8 *gUnknown_80FB3A4[]; +extern u8 *gUnknown_80FB360[]; +extern u8 *gUnknown_80FB31C[]; +extern u8 *gUnknown_80FB388[]; +extern u8 *gUnknown_80FB3E0[]; +extern u8 *gUnknown_80FB418[]; +extern u8 *gUnknown_80FB3F8[]; +extern u8 *gUnknown_80FB414[]; +extern u8 *gUnknown_80FB43C[]; +extern u8 *gUnknown_80FB41C[]; +extern u8 *gUnknown_80FB458[]; +extern s16 gUnknown_80F4E7C[]; +extern s16 gUnknown_80F4F00[]; +extern u8 *gUnknown_80FB52C[]; +extern u8 *gUnknown_80FCC4C[]; +extern u8 *gUnknown_80FB50C[]; +extern s16 gUnknown_80F4E30[]; +extern u8 *gUnknown_80FF01C[]; +extern u8 *gUnknown_80FEBBC[]; +extern u8 *gUnknown_80FB564[]; +extern u8 *gUnknown_80FB548[]; +extern u8 *gUnknown_80FCE84[]; +extern u8 *gUnknown_80FCE5C[]; +extern const u8 gDungeonWaterType[]; +extern u8 *gUnknown_80FD524[]; +extern s16 gUnknown_80F4E34[]; +extern u8 *gUnknown_80FCEDC[]; +extern u8 *gUnknown_80FCEB0[]; +extern u8 *gUnknown_80FB5D4[]; +extern u8 *gUnknown_80FB598[]; +extern u8 *gUnknown_80FB5F8[]; +extern u8 *gUnknown_80FB5B4[]; +extern s16 gUnknown_80F4E38[]; +extern u8 *gUnknown_80FCE34[]; +extern s16 gUnknown_80F4E2C[]; +extern u8 *gUnknown_80FB610[]; +extern u8 *gUnknown_80FCDE0[]; +extern u8 *gUnknown_80FCE00[]; +extern u8 *gUnknown_80FA844[]; +extern u8 *gUnknown_80FB64C[]; +extern s16 gUnknown_80F4E58[]; +extern u8 *gUnknown_80FB628[]; +extern u8 *gUnknown_80FB4F0[]; +extern u8 *gUnknown_80FB4B0[]; +extern u8 *gUnknown_80FB480[]; +extern u8 *gUnknown_80FB4D4[]; +extern s16 gUnknown_80F4E54[]; +extern u8 *gUnknown_80FB668[]; +extern u8 *gUnknown_80FB688[]; +extern s16 gUnknown_80F4E60[]; +extern u8 *gUnknown_80FB6A4[]; +extern u8 *gUnknown_80FB6C0[]; +extern s16 gUnknown_80F4E5C[]; +extern u8 *gUnknown_80FB6D8[]; +extern u8 *gUnknown_80FB6FC[]; +extern u8 *gUnknown_80FB718[]; +extern s16 gUnknown_80F4EC0[]; +extern s16 gUnknown_80F4EBC[]; +extern u8 *gUnknown_80FB7DC[]; +extern u8 *gUnknown_80FB7BC[]; +extern u8 *gUnknown_80FC0B8[]; +extern u8 *gUnknown_80FC0C8[]; +extern u8 *gUnknown_80FC0E4[]; +extern u8 *gUnknown_80FC0D4[]; +extern u8 gUnknown_202DEA8[]; +extern u8 gUnknown_202DE58[]; +extern u8 *gUnknown_80FC274[]; +extern u8 *gUnknown_80FC15C[]; +extern u8 *gUnknown_80FCA60[]; +extern u8 *gUnknown_80FD550[]; +extern u8 *gUnknown_80FC0AC[]; +extern u8 *gUnknown_80FC158[]; +extern u8 *gUnknown_80FC248[]; +extern u8 *gUnknown_80FC09C[]; +extern u8 *gUnknown_80FC13C[]; +extern u8 *gUnknown_80FC270[]; +extern bool8 sub_8071728(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +extern void sub_8041F28(struct DungeonEntity *, s32); +extern void sub_8041F4C(struct DungeonEntity *, s32); +extern void sub_8041F70(struct DungeonEntity *, s32); +extern void sub_8041F94(struct DungeonEntity *, s32); +extern void sub_8041C08(struct DungeonEntity *); +extern void sub_8076CB4(s32); +extern void sub_8041F08(struct DungeonEntity *); +extern void sub_8041C7C(struct DungeonEntity *); +extern void sub_8041C6C(struct DungeonEntity *); +extern void sub_806CE94(struct DungeonEntity *, u32); +extern void sub_8041C34(struct DungeonEntity *); +extern void sub_8041EF8(struct DungeonEntity *); +extern void sub_8041EE8(struct DungeonEntity *); +extern void sub_8041EC8(struct DungeonEntity *); +extern void sub_8041ED8(struct DungeonEntity *); extern void DungeonEntityUpdateStatusSprites(struct DungeonEntity *); extern void SetMessageArgument(char[], struct DungeonEntity*, u32); +extern void SetMessageArgument_2(char[], struct DungeonEntityData*, u32); extern u8 sub_8044B28(void); extern void sub_807AB38(struct DungeonEntity *, u32); extern void sub_8041888(u32); extern u8 sub_803F428(s16 *); extern void sub_803E708(u32, u32); -extern u8 sub_8075CFC(struct DungeonEntity *, struct DungeonEntity *, u32, u32); +extern bool8 CannotSleep(struct DungeonEntity *, struct DungeonEntity *, u8, u8); extern void sub_8041AF4(struct DungeonEntity *); extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, u8 *); extern void sub_806CE68(struct DungeonEntity *, s32); +extern void nullsub_91(struct DungeonEntity *); +extern void nullsub_90(struct DungeonEntity *); +extern void nullsub_72(struct DungeonEntity *); +extern void nullsub_71(struct DungeonEntity *); +extern void nullsub_70(struct DungeonEntity *); +extern void nullsub_69(struct DungeonEntity *, struct DungeonEntity *); u32 sub_8075818(struct DungeonEntity *entity) { @@ -327,25 +439,25 @@ u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 sleepTurns) return uVar4; } -void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 param_3, u8 param_4) +void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, u8 displayMessage) { u8 sleepStatus; u8 cVar2; - if (sub_8075CFC(pokemon,target,1,param_4) == '\0') { + if (!CannotSleep(pokemon,target,1,displayMessage)) { sleepStatus = target->entityData->sleepStatus; if (sleepStatus == SLEEP_STATUS_SLEEPLESS) { - if (param_4) + if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FB380); } else if (sleepStatus == SLEEP_STATUS_NAPPING) { - if (param_4) + if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FB384); } else { sub_8041AF4(target); - cVar2 = sub_8075BF4(target,param_3); + cVar2 = sub_8075BF4(target, turns); sub_806CE68(target,8); if (cVar2 == 1) @@ -357,3 +469,944 @@ void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, } } } + +bool8 CannotSleep(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, bool8 displayMessage) +{ + if ((!EntityExists(target)) || + ((SetMessageArgument(gAvailablePokemonNames,target,0), param_3 != 0 && + (HasSafeguardStatus(pokemon,target,displayMessage))))) { + return TRUE; + } + else if (HasIQSkill(target, IQ_SKILL_NONSLEEPER)) { + if (displayMessage) { + sub_80522F4(pokemon,target,*gUnknown_80FCD54); + } + return TRUE; + } + else if (HasAbility(target, ABILITY_INSOMNIA)) { + if (displayMessage) { + sub_80522F4(pokemon,target,*gUnknown_80FCD58); + } + return TRUE; + } + else if (HasAbility(target, ABILITY_VITAL_SPIRIT)) { + if (displayMessage) { + sub_80522F4(pokemon,target,*gUnknown_80FCD88); + } + return TRUE; + } + else if (HasItem(target, ITEM_ID_INSOMNISCOPE)) { + if (displayMessage) { + sub_80522F4(pokemon,target,*gUnknown_80FD548); + } + return TRUE; + } + return FALSE; +} + +void NightmareStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns) +{ + bool8 hasNightmare; + struct DungeonEntityData *entityData; + + hasNightmare = FALSE; + if (!CannotSleep(pokemon, target, 1, TRUE)) { + entityData = target->entityData; + if (entityData->sleepStatus != SLEEP_STATUS_SLEEPLESS) { + sub_8041EC8(target); + if (entityData->sleepStatus != SLEEP_STATUS_NIGHTMARE) { + entityData->sleepStatusTurnsLeft = turns; + if ((HasAbility(target, ABILITY_EARLY_BIRD)) && (entityData->sleepStatusTurnsLeft >>= 1, entityData->sleepStatusTurnsLeft == 0)) { + entityData->sleepStatusTurnsLeft = 1; + } + } + else + { + hasNightmare = TRUE; + } + entityData->sleepStatus = SLEEP_STATUS_NIGHTMARE; + sub_806CE68(target,8); + if (hasNightmare) { + sub_80522F4(pokemon,target,*gUnknown_80FB3CC); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB3A4); + } + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB3D0); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void NappingStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns) +{ + bool8 isSleeping; + struct DungeonEntityData *entityData; + + isSleeping = FALSE; + if (!CannotSleep(pokemon, target, 0, TRUE)) { + entityData = target->entityData; + if (entityData->sleepStatus != SLEEP_STATUS_SLEEPLESS) { + sub_8041ED8(target); + if (entityData->sleepStatus == SLEEP_STATUS_NONE || entityData->sleepStatus == SLEEP_STATUS_YAWNING) { + entityData->sleepStatusTurnsLeft = turns; + if ((HasAbility(target, ABILITY_EARLY_BIRD)) && (entityData->sleepStatusTurnsLeft >>= 1, entityData->sleepStatusTurnsLeft == 0)) { + entityData->sleepStatusTurnsLeft = 1; + } + } + else + { + isSleeping = TRUE; + } + entityData->sleepStatus = SLEEP_STATUS_NAPPING; + sub_806CE68(target, 8); + if (isSleeping) { + sub_80522F4(pokemon,target,*gUnknown_80FB360); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB31C); + } + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB388); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void YawnedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns) +{ + struct DungeonEntityData *entityData; + + if (CannotSleep(pokemon,target,1,TRUE)) { + return; + } + entityData = target->entityData; + if (entityData->sleepStatus == SLEEP_STATUS_NONE) { + entityData->sleepStatus = SLEEP_STATUS_YAWNING; + entityData->sleepStatusTurnsLeft = turns; + nullsub_91(target); + sub_806CE68(target, 8); + sub_80522F4(pokemon,target,*gUnknown_80FB3E0); + } + else if (((entityData->sleepStatus == SLEEP_STATUS_SLEEP) || (entityData->sleepStatus == SLEEP_STATUS_NIGHTMARE)) || (entityData->sleepStatus == SLEEP_STATUS_NAPPING)) { + sub_80522F4(pokemon,target,*gUnknown_80FB418); + } + else if (entityData->sleepStatus == SLEEP_STATUS_SLEEPLESS) { + sub_80522F4(pokemon,target,*gUnknown_80FB3F8); + } + else { + if (entityData->sleepStatus == SLEEP_STATUS_YAWNING) + sub_80522F4(pokemon,target,*gUnknown_80FB414); + else + sub_80522F4(pokemon,target,*gUnknown_80FB3E0); + } + DungeonEntityUpdateStatusSprites(target); +} + +void SleeplessStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + bool8 isAsleep; + + isAsleep = FALSE; + if (!EntityExists(target)) { + return; + } + + entityData = target->entityData; + if ((entityData->sleepStatus == SLEEP_STATUS_SLEEP) || (entityData->sleepStatus == SLEEP_STATUS_NAPPING) || (entityData->sleepStatus == SLEEP_STATUS_NIGHTMARE)) { + isAsleep = TRUE; + } + SetMessageArgument(gAvailablePokemonNames, target, 0); + + if (entityData->sleepStatus != SLEEP_STATUS_SLEEPLESS) + { + entityData->sleepStatus = SLEEP_STATUS_SLEEPLESS; + entityData->sleepStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4E7C, FALSE) + 1; + entityData->unk165 = 0xFF; + entityData->unk164 = 0xFF; + sub_8041EE8(target); + sub_806CE68(target,8); + if(isAsleep) + sub_80522F4(pokemon,target,*gUnknown_80FB41C); + sub_80522F4(pokemon,target,*gUnknown_80FB458); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB43C); + } + DungeonEntityUpdateStatusSprites(target); +} + +void PausedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, s32 turns, bool8 displayMessage) +{ + struct DungeonEntityData *entityData; + + if (!EntityExists(target)) { + return; + } + entityData = target->entityData; + if ((param_3 != 0) && (HasSafeguardStatus(pokemon,target,displayMessage))) { + return; + } + SetMessageArgument_2(gAvailablePokemonNames,entityData,0); + if (entityData->volatileStatus != VOLATILE_STATUS_PAUSED) { + entityData->volatileStatus = VOLATILE_STATUS_PAUSED; + entityData->volatileStatusTurnsLeft = turns + 1; + nullsub_72(target); + if (turns == 1) { + sub_80522F4(pokemon,target,*gUnknown_80FB480); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB4D4); + } + } + else { + if (turns == 1) { + sub_80522F4(pokemon,target,*gUnknown_80FB4B0); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB4F0); + } + } + DungeonEntityUpdateStatusSprites(target); +} + +void InfatuateStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +{ + struct DungeonEntityData *entityData; + + + if (EntityExists(target)) { + entityData = target->entityData; + if (!HasSafeguardStatus(pokemon,target,displayMessage)) { + if (HasAbility(target,ABILITY_OBLIVIOUS)) { + SetMessageArgument(gAvailablePokemonNames,target,0); + if (displayMessage) { + sub_80522F4(pokemon,target,*gUnknown_80FCC4C); + } + } + else + { + SetMessageArgument_2(gAvailablePokemonNames,entityData,0); + if (entityData->volatileStatus != VOLATILE_STATUS_INFATUATED) { + entityData->volatileStatus = VOLATILE_STATUS_INFATUATED; + entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4F00,TRUE) + 1; + sub_8041EF8(target); + sub_80522F4(pokemon,target,*gUnknown_80FB50C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB52C); + } + DungeonEntityUpdateStatusSprites(target); + } + } + } +} + +void BurnedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, bool8 displayMessage) +{ + bool8 isNotBurned; + bool8 hasSynchronized; + struct DungeonEntityData *entityData; + struct MapTile *tile_1; + struct MapTile *tile_2; + struct DungeonEntity *entity; + s32 index; + + if (!EntityExists(target)) { + return; + } + + if (!HasSafeguardStatus(pokemon,target,displayMessage)) { + entityData = target->entityData; + SetMessageArgument_2(gAvailablePokemonNames,entityData,0); + if (HasAbility(target, ABILITY_WATER_VEIL)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCE5C); + } + else + { + if (HasType(target, TYPE_FIRE)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCE84); + } + else + { + tile_1 = GetMapTileForDungeonEntity_2(target); + if (((tile_1->tileType & (TILE_TYPE_LIQUID | TILE_TYPE_FLOOR)) == TILE_TYPE_LIQUID) && + (gDungeonWaterType[gDungeonGlobalData->tileset] != DUNGEON_WATER_TYPE_LAVA)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FEBBC); + } + else + { + isNotBurned = TRUE; + if (entityData->nonVolatileStatus != NON_VOLATILE_STATUS_BURNED) { + entityData->nonVolatileStatus = NON_VOLATILE_STATUS_BURNED; + entityData->nonVolatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E30,TRUE) + 1; + entityData->nonVolatileStatusDamageTimer = 0; + entityData->fillAF = 0; + isNotBurned = FALSE; + if (param_3 != 0) { + sub_8041C34(target); + } + sub_80522F4(pokemon,target,*gUnknown_80FB548); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB564); + } + DungeonEntityUpdateStatusSprites(target); + + if (!HasAbility(target, ABILITY_SYNCHRONIZE)) { + return; + } + + if (isNotBurned) { + return; + } + + hasSynchronized = FALSE; + + for(index = 0; index < NUM_DIRECTIONS; index++) + { + tile_2 = GetMapTile_1(target->posWorld.x + + gAdjacentTileOffsets[index].x, + target->posWorld.y + gAdjacentTileOffsets[index].y); + entity = tile_2->pokemon; + if ((EntityExists(entity)) && (GetEntityType(entity) == ENTITY_POKEMON)) { + if (!hasSynchronized) { + hasSynchronized = TRUE; + SetMessageArgument_2(gAvailablePokemonNames,entityData,0); + sub_80522F4(pokemon,target,*gUnknown_80FF01C); + } + if (sub_807167C(target,entity) == TARGET_CAPABILITY_CAN_TARGET) { + // Recurse with the new target + BurnedStatusTarget(pokemon,entity,1,displayMessage); + } + } + } + } + } + } + } +} + +void PoisonedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +{ + bool8 isNotPoisoned; + bool8 hasSynchronized; + struct DungeonEntityData *entityData; + struct MapTile *tile; + struct DungeonEntity *entity; + s32 index; + + if (!EntityExists(target)) { + return; + } + + if (!HasSafeguardStatus(pokemon,target,displayMessage)) { + entityData = target->entityData; + SetMessageArgument_2(gAvailablePokemonNames,entityData,0); + if (HasItem(target, ITEM_ID_PECHA_SCARF)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FD524); + } + else + { + if (HasAbility(target, ABILITY_IMMUNITY)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCEB0); + } + else + { + if(HasType(target, TYPE_POISON) || HasType(target, TYPE_STEEL)){ + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCEDC); + } + else + { + isNotPoisoned = TRUE; + + if(entityData->nonVolatileStatus != NON_VOLATILE_STATUS_BADLY_POISONED) + { + if(entityData->nonVolatileStatus != NON_VOLATILE_STATUS_POISONED) + { + entityData->nonVolatileStatus = NON_VOLATILE_STATUS_POISONED; + entityData->nonVolatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E34,TRUE) + 1; + entityData->nonVolatileStatusDamageTimer = 0; + entityData->fillAF = 0; + isNotPoisoned = FALSE; + sub_8041C6C(target); + sub_80522F4(pokemon,target,*gUnknown_80FB598); + sub_806CE94(target, 8); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB5D4); + } + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB5F8); + } + + if ((HasAbility(target, ABILITY_SYNCHRONIZE)) && !isNotPoisoned) + { + hasSynchronized = FALSE; + + for(index = 0; index < NUM_DIRECTIONS; index++) + { + tile = GetMapTile_1(target->posWorld.x + + gAdjacentTileOffsets[index].x, + target->posWorld.y + gAdjacentTileOffsets[index].y); + entity = tile->pokemon; + if ((EntityExists(entity)) && (GetEntityType(entity) == ENTITY_POKEMON)) { + if (!hasSynchronized) { + hasSynchronized = TRUE; + SetMessageArgument_2(gAvailablePokemonNames,entityData,0); + sub_80522F4(pokemon,target,*gUnknown_80FF01C); + } + if (sub_807167C(target,entity) == TARGET_CAPABILITY_CAN_TARGET) { + // Recurse with the new target + PoisonedStatusTarget(pokemon,entity,displayMessage); + } + } + } + } + DungeonEntityUpdateStatusSprites(target); + } + } + } + } +} + +void BadlyPoisonedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +{ + bool8 isNotBadlyPoisoned; + bool8 hasSynchronized; + struct DungeonEntityData *entityData; + struct MapTile *tile; + struct DungeonEntity *entity; + s32 index; + + if (!EntityExists(target)) { + return; + } + + if (!HasSafeguardStatus(pokemon,target,displayMessage)) { + entityData = target->entityData; + SetMessageArgument_2(gAvailablePokemonNames,entityData,0); + if (HasItem(target, ITEM_ID_PECHA_SCARF)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FD524); + } + else + { + if (HasAbility(target, ABILITY_IMMUNITY)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCEB0); + } + else + { + if(HasType(target, TYPE_POISON) || HasType(target, TYPE_STEEL)){ + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCEDC); + } + else + { + isNotBadlyPoisoned = TRUE; + + if(entityData->nonVolatileStatus != NON_VOLATILE_STATUS_BADLY_POISONED) + { + entityData->nonVolatileStatus = NON_VOLATILE_STATUS_BADLY_POISONED; + entityData->nonVolatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E38,TRUE) + 1; + entityData->nonVolatileStatusDamageTimer = 0; + entityData->fillAF = 0; + isNotBadlyPoisoned = FALSE; + sub_8041C7C(target); + sub_80522F4(pokemon,target,*gUnknown_80FB5B4); + sub_806CE94(target, 8); + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FB5F8); + } + + if ((HasAbility(target, ABILITY_SYNCHRONIZE)) && !isNotBadlyPoisoned) + { + hasSynchronized = FALSE; + + for(index = 0; index < NUM_DIRECTIONS; index++) + { + tile = GetMapTile_1(target->posWorld.x + + gAdjacentTileOffsets[index].x, + target->posWorld.y + gAdjacentTileOffsets[index].y); + entity = tile->pokemon; + if ((EntityExists(entity)) && (GetEntityType(entity) == ENTITY_POKEMON)) { + if (!hasSynchronized) { + hasSynchronized = TRUE; + SetMessageArgument_2(gAvailablePokemonNames,entityData,0); + sub_80522F4(pokemon,target,*gUnknown_80FF01C); + } + if (sub_807167C(target,entity) == TARGET_CAPABILITY_CAN_TARGET) { + // Recurse with the new target + BadlyPoisonedStatusTarget(pokemon,entity,displayMessage); + } + } + } + } + DungeonEntityUpdateStatusSprites(target); + } + } + } + } +} + +void FrozenStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +{ + struct DungeonEntityData *entityData; + struct MapTile *tile; + + if (!EntityExists(target)) { + return; + } + + SetMessageArgument(gAvailablePokemonNames, target, 0); + entityData = target->entityData; + + if ((entityData->immobilizeStatus != IMMOBILIZE_STATUS_FROZEN) && !HasSafeguardStatus(pokemon,target,displayMessage)) { + if (HasAbility(target, ABILITY_MAGMA_ARMOR)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCDE0); + } + else + { + if (HasType(target, TYPE_ICE)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCE00); + } + else + { + tile = GetMapTileForDungeonEntity_2(target); + if (((tile->tileType & (TILE_TYPE_LIQUID | TILE_TYPE_FLOOR)) == TILE_TYPE_LIQUID) && + (gDungeonWaterType[gDungeonGlobalData->tileset] == DUNGEON_WATER_TYPE_LAVA)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FCE34); + } + else + { + if ((u8)(entityData->immobilizeStatus - 3) <= 1) { + sub_8076CB4(entityData->unk9C); + } + sub_8041F08(target); + entityData->immobilizeStatus = IMMOBILIZE_STATUS_FROZEN; + entityData->immobilizeStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E2C,TRUE) + 1; + entityData->immobilizeStatusDamageTimer = 0; + sub_80522F4(pokemon,target,*gUnknown_80FB610); + DungeonEntityUpdateStatusSprites(target); + } + } + } + } +} + +void SqueezedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s16 param_3, bool32 displayMessage) +{ + struct DungeonEntityData *entityData; + s32 param_3_s32 = param_3; + bool8 displayMessage_u8 = displayMessage; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,displayMessage_u8))) { + entityData = target->entityData; + if ((u8)(entityData->immobilizeStatus - 3U) < 2) { + sub_8076CB4(entityData->unk9C); + } + else if (entityData->immobilizeStatus == IMMOBILIZE_STATUS_INGRAIN) { + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FA844); + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->immobilizeStatus != IMMOBILIZE_STATUS_SQUEEZED) { + entityData->immobilizeStatus = IMMOBILIZE_STATUS_SQUEEZED; + entityData->immobilizeStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E58,1) + 1; + entityData->immobilizeStatusDamageTimer = 0; + entityData->unkB4 = param_3_s32; + nullsub_71(target); + sub_80522F4(pokemon,target,*gUnknown_80FB628); + sub_806CE94(target,8); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB64C); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_80769CC(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,TRUE))) { + entityData = target->entityData; + if ((u8)(entityData->immobilizeStatus - 3U) < 2) { + sub_8076CB4(entityData->unk9C); + } + else if (entityData->immobilizeStatus == IMMOBILIZE_STATUS_INGRAIN) { + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FA844); + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->immobilizeStatus != IMMOBILIZE_STATUS_IMMOBILIZED) { + entityData->immobilizeStatus = IMMOBILIZE_STATUS_IMMOBILIZED; + entityData->immobilizeStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E54,TRUE) + 1; + entityData->immobilizeStatusDamageTimer = 0; + nullsub_70(target); + sub_80522F4(pokemon,target,*gUnknown_80FB668); + sub_806CE94(target,8); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB688); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void IngrainedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData2; + + if (EntityExists(target)) { + entityData = target->entityData; + entityData2 = entityData; + if ((u8)(entityData->immobilizeStatus - 3U) < 2) { + sub_8076CB4(entityData->unk9C); + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData2->immobilizeStatus != IMMOBILIZE_STATUS_INGRAIN) { + entityData2->immobilizeStatus = IMMOBILIZE_STATUS_INGRAIN; + entityData2->immobilizeStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E60,TRUE) + 1; + entityData2->immobilizeStatusDamageTimer = 0; + nullsub_90(target); + sub_80522F4(pokemon,target,*gUnknown_80FB6A4); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB6C0); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void WrapTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData * targetEntityData; + s32 *piVar3; + s32 *iVar5; + struct DungeonEntityData * pokemonEntityData; + + if (!EntityExists(target)) { + return; + } + + if (HasSafeguardStatus(pokemon, target, TRUE)) { + return; + } + pokemonEntityData = pokemon->entityData; + targetEntityData = target->entityData; + if ((u8)(pokemonEntityData->immobilizeStatus - 3U) > 1) { + if ((targetEntityData->immobilizeStatus != IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE)) + { + if(targetEntityData->immobilizeStatus != IMMOBILIZE_STATUS_WRAPPED_BY_FOE) { + pokemonEntityData->immobilizeStatus = IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE; + pokemonEntityData->immobilizeStatusTurnsLeft = 0x7f; + pokemonEntityData->immobilizeStatusDamageTimer = 0; + targetEntityData->immobilizeStatus = IMMOBILIZE_STATUS_WRAPPED_BY_FOE; + targetEntityData->immobilizeStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4E5C, TRUE) + 1; + targetEntityData->immobilizeStatusDamageTimer = 0; + iVar5 = &pokemonEntityData->unk9C; + piVar3 = &gDungeonGlobalData->unk37F4; + *iVar5 = *piVar3; + targetEntityData->unk9C = *piVar3; + *piVar3 +=1; + nullsub_69(pokemon, target); + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FB6D8); + sub_806CE94(target,8); + goto _08076C98; + } + } + } + if (pokemonEntityData->immobilizeStatus == IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE) { + SetMessageArgument(gAvailablePokemonNames,pokemon,0); + sub_80522F4(pokemon,target,*gUnknown_80FB6FC); + } + if (targetEntityData->immobilizeStatus == IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE) { + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FB6FC); + } + if (pokemonEntityData->immobilizeStatus == IMMOBILIZE_STATUS_WRAPPED_BY_FOE) { + SetMessageArgument(gAvailablePokemonNames,pokemon,0); + sub_80522F4(pokemon,target,*gUnknown_80FB718); + } + if (targetEntityData->immobilizeStatus == IMMOBILIZE_STATUS_WRAPPED_BY_FOE) { + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FB718); + } +_08076C98: + DungeonEntityUpdateStatusSprites(target); +} + +void sub_8076CB4(s32 param_1) +{ + struct DungeonEntity *entity; + struct DungeonEntityData *entityData; + s32 index; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeonGlobalData->allPokemon[index]; + if (EntityExists(entity)) { + entityData = entity->entityData; + if (entityData->unk9C == param_1) { + if ((u8)(entityData->immobilizeStatus - 3U) < 2) { + entityData->immobilizeStatus = IMMOBILIZE_STATUS_NONE; + } + entityData->unk9C = 0; + } + DungeonEntityUpdateStatusSprites(entity); + } + } +} + +void PetrifiedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData * targetEntityData; + struct DungeonEntityData * entityData; + struct DungeonEntity * entity; + s32 index; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,TRUE))) { + sub_8041C08(target); + targetEntityData = target->entityData; + if ((u8)(targetEntityData->immobilizeStatus - 3U) < 2) { + sub_8076CB4(targetEntityData->unk9C); + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (targetEntityData->immobilizeStatus != IMMOBILIZE_STATUS_PETRIFIED) { + targetEntityData->immobilizeStatus = IMMOBILIZE_STATUS_PETRIFIED; + if (targetEntityData->isLeader) { + targetEntityData->immobilizeStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4EBC,TRUE) + 1; + } + else { + targetEntityData->immobilizeStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4EC0,TRUE) + 1; + } + targetEntityData->immobilizeStatusDamageTimer = 0; + sub_80522F4(pokemon,target,*gUnknown_80FB7BC); + + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB7DC); + } + if (targetEntityData->isEnemy) { + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + entity = gDungeonGlobalData->teamPokemon[index]; + if (EntityExists(entity)) { + entityData = entity->entityData; + if ((entityData->movementAction == MOVEMENT_ACTION_FOLLOW) && (entityData->targetPokemon == target)) { + entityData->movementAction = MOVEMENT_ACTION_FACE_RANDOM_DIRECTION; + entityData->targetPokemon = NULL; + entityData->targetPokemonSpawnIndex = 0; + entityData->hasTarget = FALSE; + } + } + } + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void LowerAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 decrement, u8 param_5, bool8 displayMessage) +{ + struct DungeonEntityData *entityData; + s32 attackStage = decrement; + + if (!EntityExists(target)) { + return; + } + if (index != STAT_STAGE_ATTACK) { + strcpy(gUnknown_202DE58,*gUnknown_80FC0C8); + } + else { + strcpy(gUnknown_202DE58,*gUnknown_80FC0B8); + } + if (param_5) { + if (sub_8071728(pokemon,target,displayMessage)) { + return; + } + if (HasItem(target, ITEM_ID_TWIST_BAND)) { + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FD550); + } + else { + if ((!HasAbility(target, ABILITY_HYPER_CUTTER)) || (index != STAT_STAGE_ATTACK)) goto _08076EE4; + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FCA60); + } + } + else { +_08076EE4: + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_8041F28(target,index); + if (decrement == 1) { + strcpy(gUnknown_202DEA8,*gUnknown_80FC0E4); + } + else { + strcpy(gUnknown_202DEA8,*gUnknown_80FC0D4); + } + attackStage = entityData->attackStages[index]; + attackStage -= decrement; + if (attackStage < 0) { + attackStage = 0; + } + if (entityData->attackStages[index] != attackStage) { + entityData->attackStages[index] = attackStage; + sub_80522F4(pokemon,target,*gUnknown_80FC15C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FC274); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void LowerDefenseStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 decrement, u8 param_5, bool8 displayMessage) +{ + struct DungeonEntityData *entityData; + s32 defenseStage = decrement; + + if (!EntityExists(target)) { + return; + } + if (index != STAT_STAGE_DEFENSE) { + strcpy(gUnknown_202DE58,*gUnknown_80FC0AC); + } + else { + strcpy(gUnknown_202DE58,*gUnknown_80FC09C); + } + if (!param_5 || !sub_8071728(pokemon,target,displayMessage)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_8041F4C(target,index); + if (decrement == 1) { + strcpy(gUnknown_202DEA8,*gUnknown_80FC0E4); + } + else { + strcpy(gUnknown_202DEA8,*gUnknown_80FC0D4); + } + defenseStage = entityData->defenseStages[index]; + defenseStage = defenseStage - decrement; + if (defenseStage < 0) { + defenseStage = 0; + } + if (entityData->defenseStages[index] != defenseStage) { + entityData->defenseStages[index] = defenseStage; + sub_80522F4(pokemon,target,*gUnknown_80FC158); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FC248); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void RaiseAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 increment) +{ + struct DungeonEntityData *entityData; + s32 attackStage = increment; + + if (!EntityExists(target)) { + return; + } + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_8041F70(target,index); + if (index != STAT_STAGE_ATTACK) { + strcpy(gUnknown_202DE58,*gUnknown_80FC0C8); + } + else { + strcpy(gUnknown_202DE58,*gUnknown_80FC0B8); + } + + if (increment == 1) { + strcpy(gUnknown_202DEA8,*gUnknown_80FC0E4); + } + else { + strcpy(gUnknown_202DEA8,*gUnknown_80FC0D4); + } + + attackStage = entityData->attackStages[index]; + attackStage = attackStage + increment; + if (attackStage >= MAX_STAT_STAGE) { + attackStage = MAX_STAT_STAGE; + } + if (entityData->attackStages[index] != attackStage) { + entityData->attackStages[index] = attackStage; + sub_80522F4(pokemon,target,*gUnknown_80FC13C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FC270); + } + DungeonEntityUpdateStatusSprites(target); +} + +extern u8 *gUnknown_80FC138[]; +extern u8 *gUnknown_80FC21C[]; + +void RaiseDefenseStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 increment) +{ + struct DungeonEntityData *entityData; + s32 defenseStage = increment; + + if (!EntityExists(target)) { + return; + } + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_8041F94(target,index); + if (index != STAT_STAGE_DEFENSE) { + strcpy(gUnknown_202DE58,*gUnknown_80FC0AC); + } + else { + strcpy(gUnknown_202DE58,*gUnknown_80FC09C); + } + + if (increment == 1) { + strcpy(gUnknown_202DEA8,*gUnknown_80FC0E4); + } + else { + strcpy(gUnknown_202DEA8,*gUnknown_80FC0D4); + } + + defenseStage = entityData->defenseStages[index]; + defenseStage = defenseStage + increment; + if (defenseStage >= MAX_STAT_STAGE) { + defenseStage = MAX_STAT_STAGE; + } + if (entityData->defenseStages[index] != defenseStage) { + entityData->defenseStages[index] = defenseStage; + sub_80522F4(pokemon,target,*gUnknown_80FC138); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FC21C); + } + DungeonEntityUpdateStatusSprites(target); +} diff --git a/src/dungeon_ai_targeting.c b/src/dungeon_ai_targeting.c index 4df7d7e16..c5c16d709 100644 --- a/src/dungeon_ai_targeting.c +++ b/src/dungeon_ai_targeting.c @@ -384,23 +384,23 @@ static inline bool8 JoinLocationCannotUseItems_1(struct DungeonEntityData *pokem u8 sub_807167C(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - bool8 bVar1; - struct DungeonEntityData * iVar3; - struct DungeonEntityData * iVar4; + bool8 cannotUseItems; + struct DungeonEntityData * targetEntityData; + struct DungeonEntityData * pokemonEntityData; - iVar4 = pokemon->entityData; - iVar3 = target->entityData; - if (iVar4->clientType != CLIENT_TYPE_CLIENT) { - bVar1 = JoinLocationCannotUseItems_1(iVar4); - if (!bVar1 && (iVar4->shopkeeperMode == SHOPKEEPER_NONE) && (iVar3->clientType != CLIENT_TYPE_CLIENT)) { - bVar1 = JoinLocationCannotUseItems_1(iVar3); - if (bVar1 || (iVar3->shopkeeperMode != SHOPKEEPER_NONE)) { + pokemonEntityData = pokemon->entityData; + targetEntityData = target->entityData; + if (pokemonEntityData->clientType != CLIENT_TYPE_CLIENT) { + cannotUseItems = JoinLocationCannotUseItems_1(pokemonEntityData); + if (!cannotUseItems && (pokemonEntityData->shopkeeperMode == SHOPKEEPER_NONE) && (targetEntityData->clientType != CLIENT_TYPE_CLIENT)) { + cannotUseItems = JoinLocationCannotUseItems_1(targetEntityData); + if (cannotUseItems || (targetEntityData->shopkeeperMode != SHOPKEEPER_NONE)) { error: return TARGET_CAPABILITY_CAN_ATTACK_NOT_TARGET; } else { - if ((iVar4->isEnemy) != (iVar3->isEnemy)) { + if ((pokemonEntityData->isEnemy) != (targetEntityData->isEnemy)) { return TARGET_CAPABILITY_CAN_TARGET; } else { diff --git a/src/status.c b/src/status.c index 22af89648..8f4334fd2 100644 --- a/src/status.c +++ b/src/status.c @@ -118,8 +118,8 @@ extern s32 gUnknown_202DE30[10]; extern void sub_8041D84(struct DungeonEntity *); extern void sub_804178C(u32); extern void sub_8041D5C(struct DungeonEntity *); -extern void sub_8077084(struct DungeonEntity *, struct DungeonEntity *, u32, u32); -extern void sub_8077160(struct DungeonEntity *, struct DungeonEntity *, u32, u32); +extern void RaiseAttackStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32); +extern void RaiseDefenseStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern void sub_8041D48(struct DungeonEntity *); extern u8 sub_806CEBC(struct DungeonEntity *); extern void sub_8041D38(struct DungeonEntity * pokemon); @@ -385,7 +385,7 @@ void sub_80775DC(struct DungeonEntity * pokemon, struct DungeonEntity * target, } } -void sub_80776C0(struct DungeonEntity * pokemon,struct DungeonEntity * target, bool8 displayMessage) +void CringeStatusTarget(struct DungeonEntity * pokemon,struct DungeonEntity * target, bool8 displayMessage) { struct DungeonEntityData *entityData; @@ -416,7 +416,7 @@ void sub_80776C0(struct DungeonEntity * pokemon,struct DungeonEntity * target, b } } -void sub_8077780(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +void ParalyzeStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) { struct MapTile *mapTile; register struct DungeonEntityData *entityData; @@ -464,7 +464,7 @@ void sub_8077780(struct DungeonEntity * pokemon, struct DungeonEntity * target, sub_80522F4(pokemon,target,*gUnknown_80FF01C); } if (sub_807167C(target,mapPokemonEntity) == 1) { - sub_8077780(pokemon, mapPokemonEntity, displayMessage); + ParalyzeStatusTarget(pokemon, mapPokemonEntity, displayMessage); } } } @@ -564,7 +564,7 @@ void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, DungeonEntityUpdateStatusSprites(target); } -void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +void ConfuseStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) { struct DungeonEntityData *entityData; @@ -604,7 +604,7 @@ void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, } } -void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +void CowerStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) { struct DungeonEntityData *entityData; @@ -1060,8 +1060,8 @@ void CurseStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * tar } else { uVar1 = gUnknown_8106A4C; - sub_8077084(pokemon,pokemon,uVar1,1); - sub_8077160(pokemon,pokemon,uVar1,1); + RaiseAttackStageTarget(pokemon,pokemon,uVar1,1); + RaiseDefenseStageTarget(pokemon,pokemon,uVar1,1); sub_80779F0(pokemon,pokemon,1,1); } DungeonEntityUpdateStatusSprites(target); @@ -1123,7 +1123,7 @@ void TauntStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * ta } } -void sub_80787E4(struct DungeonEntity * pokemon, struct DungeonEntity * target) +void HandleStockpile(struct DungeonEntity * pokemon, struct DungeonEntity * target) { struct DungeonEntityData *entityData; @@ -1144,7 +1144,7 @@ void sub_80787E4(struct DungeonEntity * pokemon, struct DungeonEntity * target) } } -void sub_807885C(struct DungeonEntity * pokemon, struct DungeonEntity * target) +void InvisibleStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) { struct DungeonEntityData * targetEntityData; struct DungeonEntityData * targetEntityData_1; diff --git a/src/status_checker.c b/src/status_checker.c index fd7eddb20..bfbc19013 100644 --- a/src/status_checker.c +++ b/src/status_checker.c @@ -33,9 +33,7 @@ extern void sub_807F43C(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8078F50(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); -extern void sub_807885C(struct DungeonEntity *, struct DungeonEntity *); extern u32 sub_803D73C(u32); extern void sub_8045C28(struct ItemSlot *, u8 , u8 *); extern void sub_80464C8(struct DungeonEntity *, struct Position *, struct ItemSlot *); @@ -57,7 +55,7 @@ extern void sub_807FE04(u32 *, u32); extern void sub_807DB74(struct DungeonEntity *); extern void SetMessageArgument(char[], struct DungeonEntity*, u32); extern void HandleLuminousOrbAction(struct DungeonEntity *pokemon); -extern void sub_8076D10(struct DungeonEntity *, struct DungeonEntity *); +extern void PetrifiedStatusTarget(struct DungeonEntity *, struct DungeonEntity *); extern void sub_807D510(struct DungeonEntity *, struct DungeonEntity *); extern void sub_807DA14(struct DungeonEntity *, struct DungeonEntity *, s32); extern s16 sub_803D970(u32); @@ -72,20 +70,17 @@ extern void sub_807D3CC(struct DungeonEntity *, struct DungeonEntity *); extern u8 sub_8069D18(s32 *); extern u8 sub_804AD34(s32 *); extern u8 sub_8057308(struct DungeonEntity *, u32); -extern void sub_8076F80(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); -extern void sub_8077084(struct DungeonEntity *, struct DungeonEntity *, u32, u32); -extern void SnatchStatusTarget(struct DungeonEntity *, struct DungeonEntity *); +extern void LowerDefenseStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); +extern void RaiseAttackStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern void sub_806F324(struct DungeonEntity *, s32, u32, u32); -extern void sub_8077160(struct DungeonEntity *, struct DungeonEntity *, u32, u32); +extern void RaiseDefenseStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern bool8 sub_805755C(struct DungeonEntity* pokemon,u16 moveID); -extern void sub_807614C(struct DungeonEntity *, struct DungeonEntity *, u32); -extern void DestinyBondStatusTarget(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8076E20(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); +extern void InfatuateStatusTarget(struct DungeonEntity *, struct DungeonEntity *, u32); +extern void LowerAttackStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); extern void sub_80783C4(struct DungeonEntity *, struct DungeonEntity *, u32); extern bool8 sub_807FCD4(struct Position *, u32, u8); -extern void PerishSongTarget(struct DungeonEntity *, struct DungeonEntity *); extern void WrapTarget(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_80768DC(struct DungeonEntity *, struct DungeonEntity *, s32, s32); +extern void SqueezedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, s32, s32); extern void sub_807CD9C(struct DungeonEntity *, struct DungeonEntity *, u8 facingDir); @@ -236,7 +231,7 @@ const u8 gDungeonCamouflageTypes[76] = { extern s16 gUnknown_80F4DC6; extern u8 *gUnknown_80FEFF4[]; -extern void sub_80763F8(struct DungeonEntity *, struct DungeonEntity *, u32); +extern void PoisonedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, u32); extern u32 gUnknown_80F51C4[]; @@ -282,7 +277,7 @@ bool8 sub_805AFA4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 sub_805B028(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move) { - sub_8077780(pokemon,target, 1); + ParalyzeStatusTarget(pokemon,target, TRUE); return TRUE; } @@ -307,7 +302,7 @@ bool8 sub_805B074(struct DungeonEntity * pokemon, struct DungeonEntity * target, if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { uVar5 = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4DC6) != 0) { - sub_80763F8(pokemon,target,0); + PoisonedStatusTarget(pokemon,target,FALSE); } } return uVar5; @@ -345,7 +340,7 @@ bool8 HandleColorChange(struct DungeonEntity * pokemon, struct DungeonEntity * t bool8 sub_805B164(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) { - sub_8077084(pokemon,target,gUnknown_8106A50, 2); + RaiseAttackStageTarget(pokemon,target,gUnknown_8106A50, 2); return TRUE; } @@ -368,7 +363,7 @@ bool8 sub_805B17C(struct DungeonEntity * pokemon, struct DungeonEntity * target, if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { uVar5 = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4E08) != 0) { - sub_80768DC(pokemon,target,uVar4,0); + SqueezedStatusTarget(pokemon,target,uVar4,0); } } return uVar5; @@ -439,7 +434,7 @@ bool8 sub_805B2E4(struct DungeonEntity * pokemon,struct DungeonEntity * target,s return TRUE; } -bool8 sub_805B2F0(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) +bool8 ProtectMoveAction(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) { ProtectStatusTarget(pokemon, target); return TRUE; @@ -447,7 +442,7 @@ bool8 sub_805B2F0(struct DungeonEntity * pokemon,struct DungeonEntity * target,s bool8 sub_805B2FC(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) { - sub_8077160(pokemon,target,gUnknown_8106A4C,1); + RaiseDefenseStageTarget(pokemon,target,gUnknown_8106A4C,1); return TRUE; } @@ -465,7 +460,7 @@ bool8 sub_805B324(struct DungeonEntity * pokemon,struct DungeonEntity * target,s if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { uVar3 = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4DD8) != 0) { - sub_8076E20(pokemon,target,gUnknown_8106A50,1,1,0); + LowerAttackStageTarget(pokemon,target,gUnknown_8106A50,1,1,0); } } return uVar3; @@ -491,8 +486,8 @@ bool8 sub_805B3A8(struct DungeonEntity * pokemon,struct DungeonEntity * target,s bool8 sub_805B3B4(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) { u32 uVar1 = gUnknown_8106A50; - sub_8077084(pokemon,target,uVar1,1); - sub_8077160(pokemon,target,uVar1,1); + RaiseAttackStageTarget(pokemon,target,uVar1,1); + RaiseDefenseStageTarget(pokemon,target,uVar1,1); return TRUE; } @@ -504,17 +499,17 @@ bool8 sub_805B3E0(struct DungeonEntity * pokemon,struct DungeonEntity * target,s bool8 sub_805B3FC(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4, s32 param_5) { - struct DungeonEntityData *iVar2; + struct DungeonEntityData *entityData; bool8 uVar4; uVar4 = FALSE; if (sub_8055640(pokemon,target,move,0x100,param_5) != 0) { uVar4 = TRUE; if (sub_805727C(pokemon,pokemon,gUnknown_80F4DCE) != 0) { - iVar2 = pokemon->entityData; - sub_8077084(pokemon,pokemon,param_4,1); - if (iVar2->unkFB == 0) { - iVar2->unkFB = 1; + entityData = pokemon->entityData; + RaiseAttackStageTarget(pokemon,pokemon,param_4,1); + if (entityData->unkFB == 0) { + entityData->unkFB = 1; } } } @@ -523,7 +518,7 @@ bool8 sub_805B3FC(struct DungeonEntity * pokemon,struct DungeonEntity * target,s bool8 sub_805B454(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_807614C(pokemon, target, 1); + InfatuateStatusTarget(pokemon, target, TRUE); return TRUE; } @@ -747,7 +742,7 @@ bool8 sub_805B808(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 sub_805B884( struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8077084(pokemon, target, gUnknown_8106A4C, 1); + RaiseAttackStageTarget(pokemon, target, gUnknown_8106A4C, 1); sub_8077910(pokemon, target, 0, TRUE); return TRUE; } @@ -776,7 +771,7 @@ bool8 sub_805B910(struct DungeonEntity * pokemon, struct DungeonEntity * target, flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4DDC)) { - sub_8076F80(pokemon, target, gUnknown_8106A50, 1, 1, 0); + LowerDefenseStageTarget(pokemon, target, gUnknown_8106A50, 1, 1, 0); } } return flag; @@ -1082,7 +1077,7 @@ bool8 LuminousOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * t bool8 sub_805BEAC(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8076D10(pokemon, target); + PetrifiedStatusTarget(pokemon, target); return TRUE; } @@ -1206,7 +1201,7 @@ bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *target) bool8 sub_805C128(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_807885C(pokemon, pokemon); + InvisibleStatusTarget(pokemon, pokemon); return TRUE; } @@ -1220,7 +1215,7 @@ bool8 sub_805C138(struct DungeonEntity * pokemon, struct DungeonEntity * target, return local_20; } -bool8 sub_805C1B0(struct DungeonEntity *pokemon, struct DungeonEntity *target) +bool8 IdentifyOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target) { IdentityItemHolders(pokemon, target); return TRUE; @@ -1240,9 +1235,9 @@ bool8 sub_805C1E4(struct DungeonEntity *pokemon, struct DungeonEntity *target) return FALSE; } -bool8 sub_805C1F8(struct DungeonEntity *pokemon, struct DungeonEntity *target) +bool8 ShockerOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8077BB4(pokemon, target, 1); + CowerStatusTarget(pokemon, target, TRUE); return TRUE; } @@ -1372,13 +1367,13 @@ bool8 StairsOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *targe return TRUE; } -bool8 sub_805C480(struct DungeonEntity *pokemon, struct DungeonEntity *target) +bool8 LongtossOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target) { LongTossStatusTarget(pokemon, target); return TRUE; } -bool8 sub_805C48C(struct DungeonEntity *pokemon, struct DungeonEntity *target) +bool8 PierceOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target) { PierceStatusTarget(pokemon, target); return TRUE;