From 5ecb84bfbcddb14a010e7e0af4df852b5c0efee9 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 18 Oct 2022 18:45:08 -0500 Subject: [PATCH 01/21] doing some more decomp --- asm/code_8044210.s | 191 ---------------------------------- asm/code_805D8C8.s | 12 +-- asm/code_8083654.s | 9 -- include/dungeon_global_data.h | 6 +- include/dungeon_leader.h | 1 + include/item.h | 2 +- src/dungeon_action.c | 97 +++++++++++++++++ src/dungeon_leader.c | 5 + src/items.c | 2 +- 9 files changed, 115 insertions(+), 210 deletions(-) diff --git a/asm/code_8044210.s b/asm/code_8044210.s index f92362577..72ac45fbf 100644 --- a/asm/code_8044210.s +++ b/asm/code_8044210.s @@ -1033,195 +1033,4 @@ _08044B20: .4byte gDungeonGlobalData _08044B24: .4byte 0x000135cc thumb_func_end sub_8044AB4 - thumb_func_start sub_8044B28 -sub_8044B28: - push {r4,lr} - ldr r4, _08044B48 - ldr r0, [r4] - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _08044B76 - bl GetLeaderEntity - cmp r0, 0 - bne _08044B50 - ldr r0, [r4] - ldr r1, _08044B4C - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - b _08044B76 - .align 2, 0 -_08044B48: .4byte gDungeonGlobalData -_08044B4C: .4byte 0x00000654 -_08044B50: - ldr r0, [r4] - ldrb r2, [r0, 0x2] - cmp r2, 0x1 - bne _08044B68 - ldr r2, _08044B64 - adds r1, r0, r2 - movs r0, 0x2 - strb r0, [r1] - b _08044B76 - .align 2, 0 -_08044B64: .4byte 0x00000654 -_08044B68: - cmp r2, 0x2 - beq _08044B70 - movs r0, 0 - b _08044B78 -_08044B70: - ldr r1, _08044B80 - adds r0, r1 - strb r2, [r0] -_08044B76: - movs r0, 0x1 -_08044B78: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08044B80: .4byte 0x00000654 - thumb_func_end sub_8044B28 - - thumb_func_start sub_8044B84 -sub_8044B84: - push {lr} - ldr r0, _08044B9C - ldr r0, [r0] - ldrb r0, [r0, 0x10] - cmp r0, 0 - bne _08044BA0 - bl sub_8044B28 - lsls r0, 24 - lsrs r0, 24 - b _08044BA2 - .align 2, 0 -_08044B9C: .4byte gDungeonGlobalData -_08044BA0: - movs r0, 0x1 -_08044BA2: - pop {r1} - bx r1 - thumb_func_end sub_8044B84 - - thumb_func_start sub_8044BA8 -sub_8044BA8: - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 24 - lsrs r5, r1, 24 - cmp r4, 0x26 - bne _08044BCC - bl sub_8043D10 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _08044BCC - ldr r0, _08044BC8 - b _08044C02 - .align 2, 0 -_08044BC8: .4byte gUnknown_80F91EC -_08044BCC: - ldr r1, _08044BEC - lsls r0, r4, 3 - adds r4, r0, r1 - ldr r0, [r4] - ldr r1, _08044BF0 - bl strcmp - cmp r0, 0 - beq _08044BE0 - movs r0, 0x1 -_08044BE0: - lsls r0, 24 - cmp r0, 0 - beq _08044BF4 - ldr r0, [r4] - b _08044C04 - .align 2, 0 -_08044BEC: .4byte gUnknown_80F7C50 -_08044BF0: .4byte gUnknown_80F697C -_08044BF4: - ldr r4, _08044C0C - adds r0, r5, 0 - bl GetItemCategory - lsls r0, 3 - adds r4, 0x4 - adds r0, r4 -_08044C02: - ldr r0, [r0] -_08044C04: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08044C0C: .4byte gActions - thumb_func_end sub_8044BA8 - - thumb_func_start sub_8044C10 -sub_8044C10: - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8083654 - adds r2, r0, 0 - adds r1, r2, 0 - adds r1, 0x44 - movs r3, 0 - movs r0, 0 - strh r0, [r1] - cmp r4, 0 - beq _08044C44 - adds r0, r2, 0 - adds r0, 0x48 - strb r3, [r0] - adds r0, 0x8 - strb r3, [r0] - adds r1, 0x14 - ldr r0, _08044C4C - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x1 - negs r0, r0 - strh r0, [r1] -_08044C44: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08044C4C: .4byte 0x0000ffff - thumb_func_end sub_8044C10 - - thumb_func_start sub_8044C50 -sub_8044C50: - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_8083654 - adds r2, r0, 0 - adds r0, 0x44 - movs r1, 0 - strh r4, [r0] - adds r0, 0x4 - strb r1, [r0] - adds r0, 0x8 - strb r1, [r0] - adds r1, r2, 0 - adds r1, 0x58 - ldr r0, _08044C84 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x1 - negs r0, r0 - strh r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08044C84: .4byte 0x0000ffff - thumb_func_end sub_8044C50 - .align 2, 0 diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index f7d79d2f3..cb68e38cc 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -2907,7 +2907,7 @@ sub_805EFB4: mov r8, r0 lsls r1, 24 lsrs r7, r1, 24 - bl sub_8083654 + bl GetLeaderEntityData adds r6, r0, 0 cmp r7, 0 beq _0805EFE2 @@ -3146,7 +3146,7 @@ _0805F19C: .4byte gUnknown_80F9BB0 thumb_func_start sub_805F1A0 sub_805F1A0: push {lr} - bl sub_8083654 + bl GetLeaderEntityData adds r0, 0x44 pop {r1} bx r1 @@ -3155,7 +3155,7 @@ sub_805F1A0: thumb_func_start sub_805F1AC sub_805F1AC: push {lr} - bl sub_8083654 + bl GetLeaderEntityData adds r0, 0x44 ldrh r0, [r0] pop {r1} @@ -3638,7 +3638,7 @@ _0805F5B0: movs r2, 0x1 movs r3, 0x1 bl sub_804A728 - bl sub_8083654 + bl GetLeaderEntityData adds r0, 0x48 strb r7, [r0] movs r0, 0 @@ -3726,7 +3726,7 @@ _0805F65C: cmp r0, 0 beq _0805F64E _0805F676: - bl sub_8083654 + bl GetLeaderEntityData adds r0, 0x48 strb r7, [r0] cmp r4, r7 @@ -7991,7 +7991,7 @@ _08061994: subs r0, 0x1 cmp r0, r9 bge _08061994 - bl sub_8083654 + bl GetLeaderEntityData ldrb r1, [r0, 0x9] add r0, sp, 0x4 bl GetAvailTacticsforLvl diff --git a/asm/code_8083654.s b/asm/code_8083654.s index ac0e95c88..e1996fa57 100644 --- a/asm/code_8083654.s +++ b/asm/code_8083654.s @@ -5,15 +5,6 @@ .text - thumb_func_start sub_8083654 -sub_8083654: - push {lr} - bl GetLeaderEntity - ldr r0, [r0, 0x70] - pop {r1} - bx r1 - thumb_func_end sub_8083654 - thumb_func_start sub_8083660 sub_8083660: push {r4-r7,lr} diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index ed6b25640..c75fa3288 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -35,7 +35,7 @@ struct DungeonGlobalData u8 unkC; u8 unkD[0xF - 0xD]; /* 0xF */ bool8 inputAllowed; // Whether the game is currently accepting input. Set to false while action animations play. - u8 fill10; + u8 unk10; u8 unk11; s16 unk12; u8 fill14[0x16D - 0x14]; @@ -47,7 +47,9 @@ struct DungeonGlobalData /* 0x57C */ u8 fill57C[0x644 - 0x57c]; /* 0x644 */ u8 unk644; /* 0x645 */ u8 floorNumber; - u8 fill646[0x65C - 0x646]; + u8 fill646[0x654 - 0x646]; + u8 unk654; + u8 fill655[0x65C - 0x655]; u8 unk65C; u8 fill65D[0x660 - 0x65D]; /* 0x660 */ s16 speedTurnCounter; // Handles turn order when Pokémon have different movement speeds. diff --git a/include/dungeon_leader.h b/include/dungeon_leader.h index 52f70cbca..58f433127 100644 --- a/include/dungeon_leader.h +++ b/include/dungeon_leader.h @@ -2,5 +2,6 @@ #define GUARD_DUNGEON_LEADER_H struct DungeonEntity* GetLeaderEntity(); +struct DungeonEntityData* GetLeaderEntityData(void); #endif diff --git a/include/item.h b/include/item.h index 799d8e528..1b687c341 100644 --- a/include/item.h +++ b/include/item.h @@ -88,7 +88,7 @@ s32 GetItemBuyPrice(u8 itemIndex); s32 GetItemSellPrice(u8 itemIndex); s32 GetItemOrder(u8 itemIndex); u8 GetItemPalette(u8 itemIndex); -u8 GetItemCategory(u8 itemIndex); +u32 GetItemCategory(u8 itemIndex); u32 GetItemUnkThrow(u8 itemIndex, u32 r1); u8 *GetItemDescription(u8 itemIndex); bool8 GetItemAIFlag(u8 itemIndex, u32 r1); diff --git a/src/dungeon_action.c b/src/dungeon_action.c index 912e8b434..469837755 100644 --- a/src/dungeon_action.c +++ b/src/dungeon_action.c @@ -3,7 +3,104 @@ #include "constants/dungeon_action.h" #include "dungeon_entity.h" +#include "dungeon_global_data.h" +#include "dungeon_leader.h" #include "pokemon.h" +#include "item.h" + +extern u8 *gUnknown_80F91EC[]; +extern u8 *gUnknown_80F7C50[]; +extern u8 gUnknown_80F697C[]; + +struct ItemText +{ + u8 *desc; + u8 *useText; +}; +extern const struct ItemText gActions[]; + + +extern u8 sub_8043D10(void); +extern bool8 sub_8044B28(void); + +bool8 sub_8044B28(void) +{ + if (gDungeonGlobalData->unk4 == 0) { + if (GetLeaderEntity() == NULL) { + gDungeonGlobalData->unk654 = 1; + } + else if (gDungeonGlobalData->unk2 == 1) { + gDungeonGlobalData->unk654 = 2; + } + else if (gDungeonGlobalData->unk2 != 2) { + return FALSE; + } + else { + gDungeonGlobalData->unk654 = 2; + } + } + return TRUE; +} + +bool8 sub_8044B84(void) +{ + if(gDungeonGlobalData->unk10 != 0) + { + return TRUE; + } + else { + return sub_8044B28(); + } +} + +u8 *sub_8044BA8(u16 param_1, u8 itemIndex) +{ + u32 uVar3; + u32 uVar4; + + if ((param_1 == 0x26) && (sub_8043D10() == 2)) { + return *gUnknown_80F91EC; + } + else { + uVar3 = uVar4 = strcmp(gUnknown_80F7C50[param_1 << 1], gUnknown_80F697C); + if (uVar3 != 0) { + uVar4 = 1; + } + if ((u8)(uVar4) == 0) { + return gActions[GetItemCategory(itemIndex)].useText; + } + else + { + return gUnknown_80F7C50[param_1 << 1]; + } + } +} + +void sub_8044C10(u8 param_1) +{ + struct DungeonEntityData * entityData = GetLeaderEntityData(); + + entityData->action.action = DUNGEON_ACTION_NONE; + + if(param_1) + { + entityData->action.actionUseIndex = 0; + entityData->action.unkC = 0; + entityData->itemTargetPosition.x = -1; + entityData->itemTargetPosition.y = -1; + } +} + +void sub_8044C50(u16 action) +{ + struct DungeonEntityData * entityData = GetLeaderEntityData(); + + entityData->action.action = action; + entityData->action.actionUseIndex = 0; + entityData->action.unkC = 0; + entityData->itemTargetPosition.x = -1; + entityData->itemTargetPosition.y = -1; +} void ResetAction(struct DungeonActionContainer *actionPointer) { diff --git a/src/dungeon_leader.c b/src/dungeon_leader.c index 5bff54220..17a676aef 100644 --- a/src/dungeon_leader.c +++ b/src/dungeon_leader.c @@ -25,3 +25,8 @@ struct DungeonEntity* GetLeaderEntity() } return leader; } + +struct DungeonEntityData* GetLeaderEntityData(void) +{ + return GetLeaderEntity()->entityData; +} diff --git a/src/items.c b/src/items.c index a09c83ec5..a1ab3ba6e 100644 --- a/src/items.c +++ b/src/items.c @@ -281,7 +281,7 @@ u8 GetItemPalette(u8 itemIndex) return gItemParametersData[itemIndex].palette; } -u8 GetItemCategory(u8 itemIndex) +u32 GetItemCategory(u8 itemIndex) { return gItemParametersData[itemIndex].category; } From e9f8c788da576c8034313a36aecdac473e225484 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 2 Nov 2022 22:05:20 -0700 Subject: [PATCH 02/21] more decomp --- asm/code_801EE10.s | 316 ------------------ asm/code_803D110.s | 4 +- asm/code_80521D0.s | 8 +- asm/code_807049C.s | 408 ------------------------ asm/code_8077274.s | 585 ---------------------------------- asm/code_808333C.s | 218 +------------ asm/code_808417C.s | 76 ----- asm/code_8097318.s | 61 ---- asm/dungeon_2.s | 109 ------- asm/ground_map_1.s | 199 ------------ asm/ground_script.s | 238 -------------- asm/wonder_mail_3.s | 439 ------------------------- asm/wonder_mail_802C860.s | 95 ------ include/code_80958E8.h | 24 ++ include/dungeon.h | 3 + include/dungeon_entity.h | 6 +- include/dungeon_global_data.h | 4 +- include/ground_script.h | 46 +++ include/status.h | 5 + include/status_checker.h | 6 +- include/wonder_mail.h | 4 +- include/wonder_mail_3.h | 79 +++++ ld_script.txt | 2 + src/code_801EE10.c | 157 +++++++++ src/code_803C1B4.c | 7 +- src/code_8041AD0.c | 364 ++++++++++----------- src/code_8069E0C.c | 166 +++++----- src/code_80848F0.c | 32 ++ src/code_80958E8.c | 43 +-- src/code_80972F4.c | 139 ++++---- src/code_8098BDC.c | 6 +- src/code_80A26CC.c | 17 + src/code_80A7714.c | 2 +- src/dungeon_2_1.c | 58 ++++ src/dungeon_engine.c | 4 +- src/dungeon_movement_1.c | 46 +++ src/dungeon_range.c | 109 +++++++ src/ground_map.c | 11 +- src/ground_map_1.c | 107 ++++++- src/ground_script.c | 157 ++++++--- src/post_office_guide.c | 4 +- src/status.c | 271 +++++++++++++++- src/status_checker.c | 43 ++- src/status_checks_1.c | 128 ++++++++ src/wonder_mail_3.c | 100 +++--- src/wonder_mail_802DF88.c | 211 ++++++++++++ 46 files changed, 1854 insertions(+), 3263 deletions(-) create mode 100644 include/code_80958E8.h create mode 100644 include/ground_script.h create mode 100644 include/wonder_mail_3.h create mode 100644 src/code_801EE10.c create mode 100644 src/dungeon_2_1.c diff --git a/asm/code_801EE10.s b/asm/code_801EE10.s index d7ce879f3..92a682c62 100644 --- a/asm/code_801EE10.s +++ b/asm/code_801EE10.s @@ -10833,320 +10833,4 @@ _080243D6: _080243E4: .4byte gUnknown_3001B60 thumb_func_end sub_802437C - thumb_func_start sub_80243E8 -sub_80243E8: - push {r4,r5,lr} - sub sp, 0x3C - ldr r3, _08024448 - ldr r0, _0802444C - ldr r0, [r0] - ldr r2, _08024450 - adds r1, r0, r2 - movs r4, 0 - ldrsh r2, [r1, r4] - movs r4, 0xDD - lsls r4, 2 - adds r1, r0, r4 - movs r4, 0 - ldrsh r1, [r1, r4] - muls r1, r2 - movs r4, 0xDC - lsls r4, 2 - adds r2, r0, r4 - movs r4, 0 - ldrsh r2, [r2, r4] - adds r1, r2 - lsls r1, 1 - adds r0, 0x1A - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0x58 - muls r0, r1 - ldr r4, [r3] - adds r4, r0 - add r5, sp, 0x28 - adds r1, r4, 0 - adds r1, 0x4C - adds r0, r5, 0 - movs r2, 0xA - bl sub_80922B4 - ldr r1, _08024454 - mov r0, sp - adds r2, r5, 0 - bl sprintf_2 - adds r0, r4, 0 - add sp, 0x3C - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08024448: .4byte gRecruitedPokemonRef -_0802444C: .4byte gUnknown_3001B60 -_08024450: .4byte 0x00000376 -_08024454: .4byte gUnknown_80DC9A4 - thumb_func_end sub_80243E8 - - thumb_func_start sub_8024458 -sub_8024458: - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - asrs r4, 16 - ldr r6, _080244DC - movs r0, 0xA6 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r6] - adds r1, r0, 0 - adds r1, 0x48 - strh r4, [r1] - adds r1, 0x98 - str r5, [r1] - adds r2, r0, 0 - adds r2, 0xE4 - lsls r1, r5, 1 - adds r1, r5 - lsls r1, 3 - adds r1, 0xE8 - adds r1, r0, r1 - str r1, [r2] - adds r0, 0xE8 - bl sub_8006518 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0xE0 - ldr r2, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0xE8 - ldr r0, _080244E0 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0xE4 - ldr r1, [r0] - movs r3, 0xA4 - lsls r3, 1 - adds r0, r2, r3 - str r0, [r1, 0x14] - movs r4, 0xA5 - lsls r4, 1 - adds r1, r2, r4 - movs r0, 0xA - strb r0, [r1] - bl sub_8024604 - bl sub_802452C - ldr r0, [r6] - bl sub_8013984 - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080244DC: .4byte gUnknown_203B2AC -_080244E0: .4byte gUnknown_80DC9C8 - thumb_func_end sub_8024458 - - thumb_func_start sub_80244E4 -sub_80244E4: - push {r4,lr} - ldr r4, _08024500 - ldr r0, [r4] - bl GetKeyPress - cmp r0, 0x1 - beq _08024504 - cmp r0, 0x2 - bne _0802450E - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _08024524 - .align 2, 0 -_08024500: .4byte gUnknown_203B2AC -_08024504: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _08024524 -_0802450E: - ldr r0, [r4] - bl sub_8013938 - lsls r0, 24 - cmp r0, 0 - bne _0802451E - movs r0, 0 - b _08024524 -_0802451E: - bl sub_802452C - movs r0, 0x1 -_08024524: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80244E4 - - thumb_func_start sub_802452C -sub_802452C: - push {lr} - bl sub_8024588 - bl sub_80245D0 - pop {r0} - bx r0 - thumb_func_end sub_802452C - - thumb_func_start sub_802453C -sub_802453C: - push {r4,r5,lr} - ldr r4, _08024580 - ldr r2, [r4] - cmp r2, 0 - beq _0802457A - adds r0, r2, 0 - adds r0, 0xE0 - ldr r0, [r0] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0xE8 - ldr r0, _08024584 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0xE8 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802457A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08024580: .4byte gUnknown_203B2AC -_08024584: .4byte gUnknown_80DC9B0 - thumb_func_end sub_802453C - - thumb_func_start sub_8024588 -sub_8024588: - push {r4,lr} - ldr r4, _080245C4 - ldr r0, [r4] - ldrh r1, [r0, 0x20] - movs r2, 0xA4 - lsls r2, 1 - adds r0, r2 - movs r2, 0 - strb r1, [r0] - ldr r0, [r4] - ldrh r1, [r0, 0x1E] - ldr r3, _080245C8 - adds r0, r3 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _080245CC - adds r0, r1 - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0xE8 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080245C4: .4byte gUnknown_203B2AC -_080245C8: .4byte 0x00000149 -_080245CC: .4byte 0x0000014b - thumb_func_end sub_8024588 - - thumb_func_start sub_80245D0 -sub_80245D0: - push {r4,lr} - sub sp, 0x4 - ldr r0, _08024600 - ldr r4, [r0] - movs r0, 0x1E - ldrsh r1, [r4, r0] - lsls r2, r1, 2 - adds r0, r4, 0 - adds r0, 0x34 - adds r0, r2 - ldr r0, [r0] - adds r2, r4, 0 - adds r2, 0x4C - adds r3, r4, 0 - adds r3, 0xB0 - adds r4, 0xE0 - ldr r4, [r4] - str r4, [sp] - bl CreatePokemonInfoTabScreen - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08024600: .4byte gUnknown_203B2AC - thumb_func_end sub_80245D0 - - thumb_func_start sub_8024604 -sub_8024604: - push {r4,r5,lr} - ldr r4, _08024654 - ldr r0, [r4] - movs r1, 0x2 - str r1, [r0, 0x34] - movs r1, 0x3 - str r1, [r0, 0x38] - movs r1, 0x5 - str r1, [r0, 0x3C] - adds r1, r0, 0 - adds r1, 0xE0 - ldr r3, [r1] - movs r1, 0x3 - movs r2, 0x1 - bl sub_8013818 - ldr r0, [r4] - adds r5, r0, 0 - adds r5, 0x4C - ldr r2, _08024658 - adds r0, 0x48 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r0, 0x58 - muls r0, r1 - ldr r4, [r2] - adds r4, r0 - movs r0, 0x7 - bl sub_80023E4 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_808FF20 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08024654: .4byte gUnknown_203B2AC -_08024658: .4byte gRecruitedPokemonRef - thumb_func_end sub_8024604 - .align 2,0 diff --git a/asm/code_803D110.s b/asm/code_803D110.s index d0d51f2d4..313939df8 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -391,7 +391,7 @@ _0803D3C0: bl xxx_init_struct_8094924_restore_809485C adds r0, r4, 0 mov r1, r9 - bl sub_80971EC + bl RestoreWonderMail adds r0, r4, 0 bl nullsub_102 movs r0, 0x1 @@ -440,7 +440,7 @@ _0803D436: bl xxx_init_struct_8094924_save_809486C adds r0, r4, 0 adds r1, r6, 0 - bl sub_8097270 + bl SaveWonderMail adds r0, r4, 0 bl nullsub_102 movs r2, 0x1 diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 15060f7ab..621130b37 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -4609,7 +4609,7 @@ _08054C88: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805BD70 + bl ScannerOrbAction bl _080554BA _08054C98: adds r0, r7, 0 @@ -4793,7 +4793,7 @@ _08054DFE: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805B5F4 + bl LeechSeedMoveAction b _080554BA _08054E0C: adds r0, r7, 0 @@ -4821,7 +4821,7 @@ _08054E36: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805BD7C + bl RadarOrbAction b _080554BA _08054E44: adds r0, r7, 0 @@ -4982,7 +4982,7 @@ _08054F78: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805C474 + bl StairsOrbAction b _080554BA _08054F86: adds r0, r7, 0 diff --git a/asm/code_807049C.s b/asm/code_807049C.s index a0d6d70a4..4c6a55892 100644 --- a/asm/code_807049C.s +++ b/asm/code_807049C.s @@ -4,113 +4,6 @@ .syntax unified .text - - thumb_func_start sub_807049C -sub_807049C: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r7, [r6, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807055A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807055A - cmp r0, 0x37 - bgt _0807055A - cmp r1, 0x1F - bgt _0807055A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807055A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _080704E2 - bl GetEntityType - cmp r0, 0x1 - bne _0807055A -_080704E2: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070504 - adds r0, r7, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070552 - adds r0, r6, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070552 -_08070504: - movs r1, 0x2 - ldrsh r0, [r7, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r6, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070526 - movs r4, 0x2 -_08070526: - adds r0, r6, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070536 - movs r4, 0x3 -_08070536: - cmp r4, 0x1 - beq _0807054A - cmp r4, 0x1 - bgt _08070544 - cmp r4, 0 - beq _0807054E - b _08070552 -_08070544: - cmp r4, 0x2 - beq _08070556 - b _08070552 -_0807054A: - cmp r5, 0x2 - beq _08070552 -_0807054E: - cmp r5, 0x1 - bne _0807055A -_08070552: - movs r0, 0 - b _0807055C -_08070556: - cmp r5, 0 - bne _08070552 -_0807055A: - movs r0, 0x1 -_0807055C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_807049C thumb_func_start sub_8070564 sub_8070564: @@ -189,305 +82,4 @@ _080705E8: bx r1 thumb_func_end sub_8070564 - thumb_func_start sub_80705F0 -sub_80705F0: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r7, [r6, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807069A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807069A - cmp r0, 0x37 - bgt _0807069A - cmp r1, 0x1F - bgt _0807069A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807069A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _08070636 - bl GetEntityType - cmp r0, 0x1 - bne _0807069A -_08070636: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070658 - adds r0, r7, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070696 - adds r0, r6, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070696 -_08070658: - movs r1, 0x2 - ldrsh r0, [r7, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r6, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _0807067A - movs r4, 0x2 -_0807067A: - adds r0, r6, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _0807068A - movs r4, 0x3 -_0807068A: - cmp r4, 0 - blt _08070696 - cmp r4, 0x2 - bgt _08070696 - cmp r5, 0 - beq _0807069A -_08070696: - movs r0, 0 - b _0807069C -_0807069A: - movs r0, 0x1 -_0807069C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80705F0 - - thumb_func_start sub_80706A4 -sub_80706A4: - push {r4-r7,lr} - adds r7, r0, 0 - adds r4, r1, 0 - ldr r6, [r7, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807076A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807076A - cmp r0, 0x37 - bgt _0807076A - cmp r1, 0x1F - bgt _0807076A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807076A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _080706F2 - bl GetEntityType - cmp r0, 0x1 - bne _0807076A - ldr r0, [r5, 0x10] - ldr r0, [r0, 0x70] - cmp r0, r6 - bne _0807076A -_080706F2: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070714 - adds r0, r6, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070762 - adds r0, r7, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070762 -_08070714: - movs r1, 0x2 - ldrsh r0, [r6, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r7, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070736 - movs r4, 0x2 -_08070736: - adds r0, r7, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070746 - movs r4, 0x3 -_08070746: - cmp r4, 0x1 - beq _0807075A - cmp r4, 0x1 - bgt _08070754 - cmp r4, 0 - beq _0807075E - b _08070762 -_08070754: - cmp r4, 0x2 - beq _08070766 - b _08070762 -_0807075A: - cmp r5, 0x2 - beq _08070762 -_0807075E: - cmp r5, 0x1 - bne _0807076A -_08070762: - movs r0, 0 - b _0807076C -_08070766: - cmp r5, 0 - bne _08070762 -_0807076A: - movs r0, 0x1 -_0807076C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80706A4 - - thumb_func_start GetMovementSpeed -GetMovementSpeed: - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, [r6, 0x70] - movs r4, 0 - movs r0, 0x84 - lsls r0, 1 - adds r1, r5, r0 - movs r2, 0x4 -_08070784: - ldrb r0, [r1, 0x5] - cmp r0, 0 - beq _0807078C - subs r4, 0x1 -_0807078C: - ldrb r0, [r1] - cmp r0, 0 - beq _08070794 - adds r4, 0x1 -_08070794: - adds r1, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _08070784 - adds r0, r5, 0 - adds r0, 0xAC - ldrb r0, [r0] - cmp r0, 0x4 - bne _080707A8 - subs r4, 0x1 -_080707A8: - movs r1, 0x2 - ldrsh r0, [r5, r1] - bl GetMoveSpeed - adds r4, r0 - adds r0, r6, 0 - movs r1, 0x6 - bl HasType - lsls r0, 24 - cmp r0, 0 - beq _080707D0 - adds r0, r6, 0 - bl GetWeather - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x7 - bne _080707D0 - adds r4, 0x1 -_080707D0: - movs r0, 0x4 - ldrsh r1, [r5, r0] - ldr r0, _0807081C - cmp r1, r0 - bne _080707DC - adds r4, 0x1 -_080707DC: - movs r0, 0x2 - ldrsh r1, [r5, r0] - movs r0, 0xBE - lsls r0, 1 - cmp r1, r0 - bne _080707FE - ldrb r0, [r5, 0x6] - cmp r0, 0 - beq _080707FE - ldr r0, _08070820 - ldr r0, [r0] - ldr r1, _08070824 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080707FE - adds r4, 0x1 -_080707FE: - cmp r4, 0 - bge _08070804 - movs r4, 0 -_08070804: - cmp r4, 0x4 - ble _0807080A - movs r4, 0x4 -_0807080A: - movs r1, 0x82 - lsls r1, 1 - adds r0, r5, r1 - str r4, [r0] - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0807081C: .4byte 0x000001a3 -_08070820: .4byte gDungeonGlobalData -_08070824: .4byte 0x0000066e - thumb_func_end GetMovementSpeed - .align 2, 0 diff --git a/asm/code_8077274.s b/asm/code_8077274.s index 25e795ec8..9f782c811 100644 --- a/asm/code_8077274.s +++ b/asm/code_8077274.s @@ -5,591 +5,6 @@ .text - thumb_func_start HealTargetHP -HealTargetHP: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r9, r0 - adds r5, r1, 0 - mov r10, r2 - mov r8, r3 - ldr r0, [sp, 0x24] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08077C6E - b _08077DC8 -_08077C6E: - ldr r4, [r5, 0x70] - movs r0, 0x10 - ldrsh r7, [r4, r0] - movs r1, 0xE - ldrsh r6, [r4, r1] - ldrh r2, [r4, 0xE] - adds r0, r6, 0 - ldrh r1, [r4, 0x10] - mov r12, r1 - adds r1, r7, 0 - cmp r0, r1 - bne _08077C8C - mov r0, r8 - cmp r0, 0 - bgt _08077C92 -_08077C8C: - mov r3, r10 - cmp r3, 0 - bne _08077CD0 -_08077C92: - ldrh r1, [r4, 0x10] - add r1, r8 - strh r1, [r4, 0x10] - ldrh r0, [r4, 0xE] - add r0, r8 - strh r0, [r4, 0xE] - lsls r1, 16 - asrs r1, 16 - ldr r0, _08077CCC - cmp r1, r0 - ble _08077CAA - strh r0, [r4, 0x10] -_08077CAA: - movs r1, 0xE - ldrsh r0, [r4, r1] - movs r3, 0x10 - ldrsh r2, [r4, r3] - ldrh r1, [r4, 0x10] - cmp r0, r2 - ble _08077CBA - strh r1, [r4, 0xE] -_08077CBA: - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, r2 - bne _08077CC4 - adds r6, r0, 0 -_08077CC4: - adds r0, r5, 0 - bl sub_8041C94 - b _08077CE8 - .align 2, 0 -_08077CCC: .4byte 0x000003e7 -_08077CD0: - mov r3, r10 - adds r0, r2, r3 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, r1 - ble _08077CE2 - mov r0, r12 - strh r0, [r4, 0xE] -_08077CE2: - adds r0, r5, 0 - bl sub_8041CA8 -_08077CE8: - movs r1, 0x10 - ldrsh r0, [r4, r1] - subs r7, r0, r7 - movs r2, 0xE - ldrsh r0, [r4, r2] - subs r6, r0, r6 - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites - ldr r0, _08077D1C - str r6, [r0] - str r7, [r0, 0x4] - ldr r0, _08077D20 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - cmp r6, 0 - bne _08077D28 - cmp r7, 0 - bne _08077D28 - ldr r3, [sp] - cmp r3, 0 - beq _08077DC8 - ldr r0, _08077D24 - b _08077D3A - .align 2, 0 -_08077D1C: .4byte gUnknown_202DE30 -_08077D20: .4byte gAvailablePokemonNames -_08077D24: .4byte gUnknown_80FB204 -_08077D28: - mov r0, r8 - cmp r0, 0 - bne _08077D4C - cmp r6, 0 - bne _08077D4C - ldr r1, [sp] - cmp r1, 0 - beq _08077DC8 - ldr r0, _08077D48 -_08077D3A: - ldr r2, [r0] - mov r0, r9 - adds r1, r5, 0 - bl sub_80522F4 - b _08077DC8 - .align 2, 0 -_08077D48: .4byte gUnknown_80FB21C -_08077D4C: - movs r2, 0 - mov r8, r2 - cmp r7, 0 - beq _08077D6E - adds r0, r5, 0 - bl sub_8045888 - lsls r0, 24 - cmp r0, 0 - beq _08077D62 - mov r8, r7 -_08077D62: - ldr r0, _08077DA0 - ldr r2, [r0] - mov r0, r9 - adds r1, r5, 0 - bl sub_80522F4 -_08077D6E: - cmp r6, 0 - beq _08077DB4 - adds r0, r5, 0 - bl sub_8045888 - lsls r0, 24 - cmp r0, 0 - beq _08077D80 - mov r8, r6 -_08077D80: - mov r3, r10 - cmp r3, 0 - beq _08077DB4 - movs r0, 0x10 - ldrsh r1, [r4, r0] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08077DA8 - ldr r0, _08077DA4 - ldr r2, [r0] - mov r0, r9 - adds r1, r5, 0 - bl sub_80522F4 - b _08077DB4 - .align 2, 0 -_08077DA0: .4byte gUnknown_80FB240 -_08077DA4: .4byte gUnknown_80FB1E0 -_08077DA8: - ldr r0, _08077DD8 - ldr r2, [r0] - mov r0, r9 - adds r1, r5, 0 - bl sub_80522F4 -_08077DB4: - mov r3, r8 - cmp r3, 0 - beq _08077DC8 - movs r3, 0x1 - negs r3, r3 - mov r0, r8 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_803ED30 -_08077DC8: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08077DD8: .4byte gUnknown_80FB1C4 - thumb_func_end HealTargetHP - - thumb_func_start sub_8077DDC -sub_8077DDC: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08077E3C - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0xF1 - ldrb r0, [r1] - cmp r0, 0 - beq _08077E0C - ldr r0, _08077E08 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08077E3C - .align 2, 0 -_08077E08: .4byte gUnknown_80FAEF0 -_08077E0C: - movs r0, 0x1 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_75 - ldr r0, _08077E44 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08077E48 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0 - bl sub_803F580 - bl sub_8040A84 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08077E3C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08077E44: .4byte gAvailablePokemonNames -_08077E48: .4byte gUnknown_80FAEA0 - thumb_func_end sub_8077DDC - - thumb_func_start sub_8077E4C -sub_8077E4C: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08077EC0 - bl sub_8043D10 - lsls r0, 24 - cmp r0, 0 - beq _08077E70 - ldr r0, _08077E6C - b _08077E7E - .align 2, 0 -_08077E6C: .4byte gUnknown_80FAF3C -_08077E70: - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0xF2 - ldrb r0, [r1] - cmp r0, 0 - beq _08077E90 - ldr r0, _08077E8C -_08077E7E: - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08077EC0 - .align 2, 0 -_08077E8C: .4byte gUnknown_80FAF1C -_08077E90: - movs r0, 0x1 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_76 - ldr r0, _08077EC8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08077ECC - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0 - bl sub_803F580 - bl sub_8040A84 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08077EC0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08077EC8: .4byte gAvailablePokemonNames -_08077ECC: .4byte gUnknown_80FAEC8 - thumb_func_end sub_8077E4C - - thumb_func_start sub_8077ED0 -sub_8077ED0: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08077F30 - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0xF0 - ldrb r0, [r1] - cmp r0, 0 - beq _08077F00 - ldr r0, _08077EFC - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08077F30 - .align 2, 0 -_08077EFC: .4byte gUnknown_80FAFD0 -_08077F00: - movs r0, 0x1 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_77 - ldr r0, _08077F38 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08077F3C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0 - bl sub_803F580 - bl sub_8040A84 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08077F30: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08077F38: .4byte gAvailablePokemonNames -_08077F3C: .4byte gUnknown_80FAFAC - thumb_func_end sub_8077ED0 - - thumb_func_start sub_8077F40 -sub_8077F40: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r0, 0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r6, r2, 24 - mov r9, r6 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08077F62 - b _08078068 -_08077F62: - adds r0, r5, 0 - bl GetEntityType - mov r10, r0 - cmp r0, 0x1 - beq _08077F70 - b _08078068 -_08077F70: - ldr r7, [r4, 0x70] - cmp r5, r4 - bne _08077F88 - cmp r6, 0 - beq _08078068 - ldr r0, _08077F84 - ldr r2, [r0] - adds r0, r4, 0 - b _08078022 - .align 2, 0 -_08077F84: .4byte gPtrCantLeechSeedSelfMessage -_08077F88: - adds r0, r5, 0 - adds r1, r4, 0 - mov r2, r9 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08078068 - ldr r0, _08077FC0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r4, 0 - movs r1, 0x4 - bl HasType - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0 - beq _08077FC8 - mov r0, r9 - cmp r0, 0 - beq _08078068 - ldr r0, _08077FC4 - b _0807801E - .align 2, 0 -_08077FC0: .4byte gAvailablePokemonNames -_08077FC4: .4byte gPtrCantLeechSeedMonMessage -_08077FC8: - adds r6, r7, 0 - adds r6, 0xD0 - ldrb r0, [r6] - cmp r0, 0x1 - beq _0807801C - cmp r0, 0x2 - bne _08077FE2 - ldr r0, _08078014 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08077FE2: - mov r1, r10 - strb r1, [r6] - ldr r1, _08078018 - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xD9 - strb r0, [r1] - adds r0, r7, 0 - adds r0, 0xDA - mov r6, r8 - strb r6, [r0] - adds r0, r4, 0 - bl nullsub_78 - adds r1, r7, 0 - adds r1, 0xD8 - movs r0, 0xFF - strb r0, [r1] - movs r2, 0 - adds r3, r1, 0 - b _08078030 - .align 2, 0 -_08078014: .4byte gUnknown_80FAA8C -_08078018: .4byte gUnknown_80F4EB0 -_0807801C: - ldr r0, _0807802C -_0807801E: - ldr r2, [r0] - adds r0, r5, 0 -_08078022: - adds r1, r4, 0 - bl sub_80522F4 - b _08078068 - .align 2, 0 -_0807802C: .4byte gUnknown_80FAE7C -_08078030: - ldr r0, _08078078 - ldr r0, [r0] - lsls r1, r2, 2 - ldr r6, _0807807C - adds r0, r6 - adds r0, r1 - ldr r0, [r0] - cmp r5, r0 - bne _08078050 - strb r2, [r3] - ldr r0, [r5, 0x70] - adds r1, r7, 0 - adds r1, 0xD4 - adds r0, 0x98 - ldr r0, [r0] - str r0, [r1] -_08078050: - adds r2, 0x1 - cmp r2, 0x13 - ble _08078030 - ldr r0, _08078080 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08078068: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078078: .4byte gDungeonGlobalData -_0807807C: .4byte 0x000135cc -_08078080: .4byte gUnknown_80FAE58 - thumb_func_end sub_8077F40 - - thumb_func_start sub_8078084 -sub_8078084: - push {r4-r6,lr} - ldr r6, [r0, 0x70] - movs r5, 0 -_0807808A: - ldr r0, _080780DC - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _080780E0 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080780D0 - ldr r1, [r4, 0x70] - adds r3, r1, 0 - adds r3, 0xD0 - ldrb r0, [r3] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080780D0 - adds r0, r1, 0 - adds r0, 0xD4 - adds r1, r6, 0 - adds r1, 0x98 - ldr r2, [r0] - ldr r0, [r1] - cmp r2, r0 - bne _080780D0 - movs r0, 0 - strb r0, [r3] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080780D0: - adds r5, 0x1 - cmp r5, 0x13 - ble _0807808A - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080780DC: .4byte gDungeonGlobalData -_080780E0: .4byte 0x000135cc - thumb_func_end sub_8078084 - thumb_func_start DestinyBondStatusTarget DestinyBondStatusTarget: push {r4-r7,lr} diff --git a/asm/code_808333C.s b/asm/code_808333C.s index 809043ef0..1be445a95 100644 --- a/asm/code_808333C.s +++ b/asm/code_808333C.s @@ -5,222 +5,6 @@ .text - thumb_func_start sub_80833E8 -sub_80833E8: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - movs r1, 0 - ldrsh r0, [r5, r1] - movs r2, 0x2 - ldrsh r1, [r5, r2] - bl GetMapTile_1 - adds r1, r0, 0 - ldr r0, _08083438 - ldr r3, [r0] - ldr r2, _0808343C - adds r0, r3, r2 - ldrb r2, [r0] - cmp r2, 0 - bne _0808340C - movs r2, 0x2 -_0808340C: - ldrb r0, [r1, 0x9] - cmp r0, 0xFF - bne _08083440 - movs r1, 0 - ldrsh r0, [r5, r1] - subs r0, r2 - str r0, [r4] - movs r1, 0 - ldrsh r0, [r5, r1] - adds r0, r2 - adds r0, 0x1 - str r0, [r4, 0x8] - movs r1, 0x2 - ldrsh r0, [r5, r1] - subs r0, r2 - str r0, [r4, 0x4] - movs r1, 0x2 - ldrsh r0, [r5, r1] - adds r0, r2 - adds r0, 0x1 - b _0808346A - .align 2, 0 -_08083438: .4byte gDungeonGlobalData -_0808343C: .4byte 0x00018209 -_08083440: - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r2, _08083474 - adds r1, r2 - adds r1, r3, r1 - movs r2, 0x2 - ldrsh r0, [r1, r2] - subs r0, 0x1 - str r0, [r4] - movs r2, 0x6 - ldrsh r0, [r1, r2] - adds r0, 0x2 - str r0, [r4, 0x8] - movs r2, 0x4 - ldrsh r0, [r1, r2] - subs r0, 0x1 - str r0, [r4, 0x4] - movs r2, 0x8 - ldrsh r0, [r1, r2] - adds r0, 0x2 -_0808346A: - str r0, [r4, 0xC] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083474: .4byte 0x000104c4 - thumb_func_end sub_80833E8 - - thumb_func_start IsTargetTwoTilesAway -IsTargetTwoTilesAway: - push {r4-r7,lr} - sub sp, 0x4 - adds r3, r0, 0 - adds r6, r1, 0 - movs r0, 0 - ldrsh r1, [r3, r0] - movs r2, 0 - ldrsh r0, [r6, r2] - subs r1, r0 - cmp r1, 0 - bge _08083490 - negs r1, r1 -_08083490: - cmp r1, 0x1 - bgt _080834A8 - movs r5, 0x2 - ldrsh r1, [r3, r5] - movs r2, 0x2 - ldrsh r0, [r6, r2] - subs r1, r0 - cmp r1, 0 - bge _080834A4 - negs r1, r1 -_080834A4: - cmp r1, 0x1 - ble _0808355A -_080834A8: - movs r5, 0 - ldrsh r4, [r3, r5] - movs r1, 0 - ldrsh r0, [r6, r1] - subs r2, r4, r0 - cmp r2, 0 - bge _080834B8 - negs r2, r2 -_080834B8: - movs r5, 0x2 - ldrsh r1, [r3, r5] - movs r5, 0x2 - ldrsh r0, [r6, r5] - subs r0, r1, r0 - cmp r0, 0 - bge _080834C8 - negs r0, r0 -_080834C8: - cmp r0, r2 - bge _080834CE - adds r0, r2, 0 -_080834CE: - cmp r0, 0x2 - bne _0808355E - adds r5, r4, 0 - adds r4, r1, 0 - movs r7, 0 -_080834D8: - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r5, r0 - bge _080834E2 - adds r5, 0x1 -_080834E2: - cmp r5, r0 - ble _080834E8 - subs r5, 0x1 -_080834E8: - movs r2, 0x2 - ldrsh r0, [r6, r2] - cmp r4, r0 - bge _080834F2 - adds r4, 0x1 -_080834F2: - cmp r4, r0 - ble _080834F8 - subs r4, 0x1 -_080834F8: - adds r0, r5, 0 - adds r1, r4, 0 - str r3, [sp] - bl GetMapTile_1 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - ldr r3, [sp] - cmp r0, 0 - beq _0808355E - adds r7, 0x1 - cmp r7, 0x1 - ble _080834D8 - movs r0, 0 - ldrsh r5, [r6, r0] - movs r1, 0x2 - ldrsh r4, [r6, r1] - movs r7, 0 -_0808351E: - movs r2, 0 - ldrsh r0, [r3, r2] - cmp r5, r0 - bge _08083528 - adds r5, 0x1 -_08083528: - cmp r5, r0 - ble _0808352E - subs r5, 0x1 -_0808352E: - movs r1, 0x2 - ldrsh r0, [r3, r1] - cmp r4, r0 - bge _08083538 - adds r4, 0x1 -_08083538: - cmp r4, r0 - ble _0808353E - subs r4, 0x1 -_0808353E: - adds r0, r5, 0 - adds r1, r4, 0 - str r3, [sp] - bl GetMapTile_1 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - ldr r3, [sp] - cmp r0, 0 - beq _0808355E - adds r7, 0x1 - cmp r7, 0x1 - ble _0808351E -_0808355A: - movs r0, 0x1 - b _08083560 -_0808355E: - movs r0, 0 -_08083560: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end IsTargetTwoTilesAway - thumb_func_start sub_8083568 sub_8083568: push {r4,r5,lr} @@ -296,4 +80,4 @@ _080835FA: bx r1 thumb_func_end sub_8083568 - .align 2, 0 \ No newline at end of file + .align 2, 0 diff --git a/asm/code_808417C.s b/asm/code_808417C.s index d6ef204cb..59f7acf09 100644 --- a/asm/code_808417C.s +++ b/asm/code_808417C.s @@ -804,80 +804,4 @@ _08084846: _08084850: .4byte 0x000003e6 thumb_func_end sub_80847D4 - thumb_func_start sub_8084854 -sub_8084854: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _08084874 - ldr r2, [r5] - movs r1, 0xCF - lsls r1, 3 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0808487C - ldrb r1, [r4, 0x5] - ldr r3, _08084878 - adds r0, r2, r3 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_08084874: .4byte gDungeonGlobalData -_08084878: .4byte 0x00003a0d -_0808487C: - ldrb r0, [r4, 0x4] - bl sub_8098100 - lsls r0, 24 - cmp r0, 0 - beq _08084898 - ldr r0, [r5] - ldrb r1, [r4, 0x5] - ldr r2, _08084894 - adds r0, r2 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_08084894: .4byte 0x00003a0d -_08084898: - ldrb r0, [r4, 0x2] - bl sub_8098100 - lsls r0, 24 - cmp r0, 0 - beq _080848B4 - ldr r0, [r5] - ldrb r1, [r4, 0x3] - ldr r3, _080848B0 - adds r0, r3 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_080848B0: .4byte 0x00003a0d -_080848B4: - ldr r0, [r5] - ldrb r1, [r4, 0x1] - ldr r2, _080848E0 - adds r0, r2 - strb r1, [r0] - ldrb r0, [r4, 0x2] - cmp r0, 0x40 - beq _080848C8 - bl sub_8097FA8 -_080848C8: - ldr r0, _080848E4 - ldr r0, [r0] - ldr r3, _080848E8 - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - movs r0, 0 - bl sub_807E5E4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080848E0: .4byte 0x00003a0d -_080848E4: .4byte gDungeonGlobalData -_080848E8: .4byte 0x00000675 - thumb_func_end sub_8084854 - .align 2,0 diff --git a/asm/code_8097318.s b/asm/code_8097318.s index 865ccfd24..cd9e11dbc 100644 --- a/asm/code_8097318.s +++ b/asm/code_8097318.s @@ -5,67 +5,6 @@ .text - thumb_func_start sub_809733C -sub_809733C: - push {r4-r6,lr} - lsls r0, 16 - asrs r4, r0, 16 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r4, 0xD - beq _0809737C - lsls r0, r4, 16 - lsrs r5, r0, 16 - movs r0, 0 - movs r1, 0x2C - adds r2, r5, 0 - bl sub_8001784 - cmp r0, 0 - bne _0809737C - movs r0, 0 - movs r1, 0x2B - adds r2, r5, 0 - adds r3, r6, 0 - bl sub_800199C - cmp r6, 0 - beq _0809737C - cmp r4, 0xE - blt _0809737C - cmp r4, 0xF - ble _08097378 - cmp r4, 0x1C - bne _0809737C -_08097378: - bl sub_809674C -_0809737C: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_809733C - - thumb_func_start sub_8097384 -sub_8097384: - push {lr} - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _08097392 - movs r0, 0 - b _080973A4 -_08097392: - lsls r2, r0, 16 - lsrs r2, 16 - movs r0, 0 - movs r1, 0x2C - bl sub_8001784 - cmp r0, 0 - beq _080973A4 - movs r0, 0x1 -_080973A4: - pop {r1} - bx r1 - thumb_func_end sub_8097384 - thumb_func_start sub_80973A8 sub_80973A8: push {r4-r6,lr} diff --git a/asm/dungeon_2.s b/asm/dungeon_2.s index 2090f6d0c..83dbd901d 100644 --- a/asm/dungeon_2.s +++ b/asm/dungeon_2.s @@ -706,113 +706,4 @@ _080908CE: bx r0 thumb_func_end sub_8090888 - thumb_func_start sub_80908D8 -sub_80908D8: - push {lr} - adds r2, r0, 0 - ldrb r0, [r2] - cmp r0, 0x3E - bhi _08090908 - ldr r0, _08090900 - ldrb r3, [r2] - adds r0, r3, r0 - ldrb r1, [r2, 0x1] - ldrb r0, [r0] - cmp r1, r0 - bcs _08090908 - ldr r1, _08090904 - lsls r0, r3, 2 - adds r0, r1 - ldrb r1, [r2, 0x1] - ldr r0, [r0] - adds r0, r1 - ldrb r0, [r0] - b _0809090A - .align 2, 0 -_08090900: .4byte gDungeonFloorCount -_08090904: .4byte gUnknown_8108084 -_08090908: - movs r0, 0x1 -_0809090A: - pop {r1} - bx r1 - thumb_func_end sub_80908D8 - - thumb_func_start sub_8090910 -sub_8090910: - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - ldr r4, _0809094C - adds r0, r4, 0 - bl RandomCapped - adds r6, r0, 0 - adds r0, r4, 0 - bl RandomCapped - adds r2, r0, 0 - ldrb r0, [r5] - cmp r0, 0x3E - bhi _08090954 - ldr r0, _08090950 - ldrb r1, [r5] - adds r1, r0 - ldrb r0, [r5, 0x1] - ldrb r1, [r1] - cmp r0, r1 - bcs _08090954 - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_8091E94 - lsls r0, 24 - lsrs r0, 24 - b _08090956 - .align 2, 0 -_0809094C: .4byte 0x0000270f -_08090950: .4byte gDungeonFloorCount -_08090954: - movs r0, 0x46 -_08090956: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8090910 - - thumb_func_start sub_809095C -sub_809095C: - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3E - bls _0809096A -_08090966: - movs r0, 0x1 - b _0809098C -_0809096A: - movs r2, 0 - ldr r0, _08090994 - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0x3F - beq _0809098A - adds r1, r4, 0 -_08090978: - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, r3 - beq _08090966 - adds r2, 0x1 - adds r0, r2, r4 - ldrb r0, [r0] - cmp r0, 0x3F - bne _08090978 -_0809098A: - movs r0, 0 -_0809098C: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08090994: .4byte gUnknown_810A350 - thumb_func_end sub_809095C - .align 2,0 diff --git a/asm/ground_map_1.s b/asm/ground_map_1.s index 70580dfb4..89de79db2 100644 --- a/asm/ground_map_1.s +++ b/asm/ground_map_1.s @@ -4,205 +4,6 @@ .syntax unified .text - - thumb_func_start GroundMap_ExecuteEvent -GroundMap_ExecuteEvent: - push {r4,r5,lr} - sub sp, 0xC - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - asrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - ldr r1, _080A4C44 - movs r0, 0 - adds r2, r4, 0 - adds r3, r5, 0 - bl Log - movs r0, 0 - mov r1, sp - adds r2, r4, 0 - bl sub_809D710 - cmp r5, 0 - beq _080A4C2C - mov r1, sp - movs r0, 0x5 - strh r0, [r1, 0x4] -_080A4C2C: - ldr r0, _080A4C48 - ldr r0, [r0] - ldr r3, _080A4C4C - movs r1, 0 - mov r2, sp - bl GroundScript_ExecutePP - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080A4C44: .4byte gUnknown_8117594 -_080A4C48: .4byte gUnknown_3001B6C -_080A4C4C: .4byte gUnknown_81175E0 - thumb_func_end GroundMap_ExecuteEvent - - thumb_func_start GroundMap_ExecuteStation -GroundMap_ExecuteStation: - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x14 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - mov r8, r3 - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - lsls r6, 24 - asrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _080A4CB8 - str r6, [sp] - str r0, [sp, 0x4] - movs r0, 0 - adds r2, r4, 0 - adds r3, r5, 0 - bl Log - add r0, sp, 0x8 - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl GroundMap_GetStationScript - mov r0, r8 - cmp r0, 0 - beq _080A4C9C - add r1, sp, 0x8 - movs r0, 0x5 - strh r0, [r1, 0x4] -_080A4C9C: - ldr r0, _080A4CBC - ldr r0, [r0] - ldr r3, _080A4CC0 - movs r1, 0 - add r2, sp, 0x8 - bl GroundScript_ExecutePP - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080A4CB8: .4byte gUnknown_81175EC -_080A4CBC: .4byte gUnknown_3001B6C -_080A4CC0: .4byte gUnknown_8117644 - thumb_func_end GroundMap_ExecuteStation - - thumb_func_start GroundMap_ExecuteEnter -GroundMap_ExecuteEnter: - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 16 - asrs r4, 16 - ldr r1, _080A4D08 - movs r0, 0 - adds r2, r4, 0 - bl Log - mov r0, sp - adds r1, r4, 0 - bl sub_80A4BE8 - mov r1, sp - movs r3, 0 - movs r2, 0 - movs r0, 0x2 - strh r0, [r1, 0x4] - mov r0, sp - strh r2, [r0, 0x6] - strb r3, [r0, 0x8] - ldr r0, _080A4D0C - ldr r0, [r0] - ldr r3, _080A4D10 - movs r1, 0 - mov r2, sp - bl GroundScript_ExecutePP - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A4D08: .4byte gUnknown_8117650 -_080A4D0C: .4byte gUnknown_3001B6C -_080A4D10: .4byte gUnknown_8117698 - thumb_func_end GroundMap_ExecuteEnter - - thumb_func_start sub_80A4D14 -sub_80A4D14: - push {lr} - ldr r0, _080A4D28 - ldr r0, [r0] - bl sub_809D678 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080A4D28: .4byte gUnknown_3001B6C - thumb_func_end sub_80A4D14 - - thumb_func_start sub_80A4D2C -sub_80A4D2C: - push {lr} - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - ldr r0, _080A4D44 - ldr r0, [r0] - bl sub_809D968 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080A4D44: .4byte gUnknown_3001B6C - thumb_func_end sub_80A4D2C - - thumb_func_start sub_80A4D48 -sub_80A4D48: - push {lr} - lsls r0, 16 - asrs r2, r0, 16 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _080A4D74 - ldr r1, _080A4D70 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x5 - beq _080A4D6C - cmp r0, 0x8 - bne _080A4D74 -_080A4D6C: - movs r0, 0 - b _080A4D76 - .align 2, 0 -_080A4D70: .4byte gUnknown_811BAF4 -_080A4D74: - movs r0, 0x1 -_080A4D76: - pop {r1} - bx r1 - thumb_func_end sub_80A4D48 thumb_func_start sub_80A4D7C sub_80A4D7C: diff --git a/asm/ground_script.s b/asm/ground_script.s index 3f880be4c..4643f6c5b 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -5,220 +5,6 @@ .text - thumb_func_start sub_809D8EC -sub_809D8EC: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 16 - asrs r5, r1, 16 - cmp r5, 0 - bne _0809D910 - bl sub_809A750 - lsls r0, 24 - cmp r0, 0 - bne _0809D910 - adds r0, r4, 0 - movs r1, 0 - bl sub_80A2460 - str r0, [r4, 0x28] - movs r0, 0 - b _0809D922 -_0809D910: - adds r0, r4, 0 - adds r0, 0x46 - strh r5, [r0] - movs r0, 0x2 - strh r0, [r4, 0x26] - ldr r1, _0809D928 - movs r0, 0x1 - strb r0, [r1] - movs r0, 0x1 -_0809D922: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0809D928: .4byte gUnknown_2039A36 - thumb_func_end sub_809D8EC - - thumb_func_start sub_809D92C -sub_809D92C: - push {lr} - ldr r1, _0809D93C - bl sub_809D770 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_0809D93C: .4byte gUnknown_81165C8 - thumb_func_end sub_809D92C - - thumb_func_start sub_809D940 -sub_809D940: - push {r4,lr} - bl sub_80A8B74 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80AC378 - orrs r4, r0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80AD290 - orrs r4, r0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_809D940 - - thumb_func_start sub_809D968 -sub_809D968: - push {r4-r6,lr} - adds r5, r0, 0 - lsls r1, 16 - asrs r6, r1, 16 - movs r4, 0 - adds r2, r5, 0 - adds r2, 0x46 - ldrh r1, [r2] - movs r0, 0 - ldrsh r3, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r3, r0 - beq _0809D98E - cmp r3, r6 - bne _0809D98E - ldr r0, _0809D9B4 - strh r0, [r2] - movs r4, 0x1 -_0809D98E: - adds r2, r5, 0 - adds r2, 0xA6 - ldrh r1, [r2] - movs r0, 0 - ldrsh r3, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r3, r0 - beq _0809D9AA - cmp r3, r6 - bne _0809D9AA - ldr r0, _0809D9B4 - strh r0, [r2] - movs r4, 0x1 -_0809D9AA: - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0809D9B4: .4byte 0x0000ffff - thumb_func_end sub_809D968 - - thumb_func_start sub_809D9B8 -sub_809D9B8: - lsls r0, 16 - asrs r0, 16 - ldr r1, _0809D9D4 - adds r1, r0, r1 - movs r3, 0 - movs r2, 0x1 - strb r2, [r1] - ldr r1, _0809D9D8 - lsls r0, 2 - adds r0, r1 - str r3, [r0] - ldr r0, _0809D9DC - strb r2, [r0] - bx lr - .align 2, 0 -_0809D9D4: .4byte gUnknown_2039A38 -_0809D9D8: .4byte gUnknown_2039B48 -_0809D9DC: .4byte gUnknown_2039A36 - thumb_func_end sub_809D9B8 - - thumb_func_start sub_809D9E0 -sub_809D9E0: - lsls r0, 16 - asrs r0, 16 - ldr r2, _0809D9FC - adds r2, r0, r2 - movs r3, 0x1 - strb r3, [r2] - ldr r2, _0809DA00 - lsls r0, 2 - adds r0, r2 - str r1, [r0] - ldr r0, _0809DA04 - strb r3, [r0] - bx lr - .align 2, 0 -_0809D9FC: .4byte gUnknown_2039A38 -_0809DA00: .4byte gUnknown_2039B48 -_0809DA04: .4byte gUnknown_2039A36 - thumb_func_end sub_809D9E0 - - thumb_func_start sub_809DA08 -sub_809DA08: - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 16 - asrs r4, r1, 16 - ldr r1, _0809DA2C - lsls r0, r4, 2 - adds r0, r1 - str r2, [r0] - cmp r4, 0 - bne _0809DA38 - bl sub_809A750 - lsls r0, 24 - cmp r0, 0 - bne _0809DA30 - movs r0, 0 - b _0809DA5E - .align 2, 0 -_0809DA2C: .4byte gUnknown_2039B48 -_0809DA30: - adds r0, r5, 0 - adds r0, 0x46 - strh r4, [r0] - b _0809DA52 -_0809DA38: - movs r1, 0x80 - adds r2, r5, 0 - adds r2, 0x46 - adds r0, r4, 0 - orrs r0, r1 - strh r0, [r2] - ldr r0, _0809DA64 - adds r0, r4, r0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _0809DA68 - adds r0, r4, r0 - strb r1, [r0] -_0809DA52: - movs r0, 0x2 - strh r0, [r5, 0x26] - ldr r1, _0809DA6C - movs r0, 0x1 - strb r0, [r1] - movs r0, 0x1 -_0809DA5E: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0809DA64: .4byte gUnknown_2039A38 -_0809DA68: .4byte gUnknown_2039AC0 -_0809DA6C: .4byte gUnknown_2039A36 - thumb_func_end sub_809DA08 - thumb_func_start HandleAction HandleAction: push {r4-r7,lr} @@ -8928,28 +8714,4 @@ _080A257C: bx r0 thumb_func_end sub_80A2558 - thumb_func_start sub_80A2584 -sub_80A2584: - push {lr} - lsls r1, 16 - asrs r1, 16 - lsls r0, 16 - asrs r0, 16 - bl sub_809ABB4 - pop {r0} - bx r0 - thumb_func_end sub_80A2584 - - thumb_func_start sub_80A2598 -sub_80A2598: - push {lr} - lsls r1, 16 - asrs r1, 16 - lsls r0, 16 - asrs r0, 16 - bl sub_809AC18 - pop {r0} - bx r0 - thumb_func_end sub_80A2598 - .align 2,0 diff --git a/asm/wonder_mail_3.s b/asm/wonder_mail_3.s index 0f14aa976..59c7c8fe9 100644 --- a/asm/wonder_mail_3.s +++ b/asm/wonder_mail_3.s @@ -294,443 +294,4 @@ _0802D7C8: .4byte gUnknown_80D4928 _0802D7CC: .4byte gUnknown_80E014C thumb_func_end sub_802D73C - thumb_func_start sub_802D7D0 -sub_802D7D0: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0802D826 - ldr r1, [sp] - cmp r1, 0x1 - beq _0802D7EA - ldr r0, _0802D800 - ldr r0, [r0] - str r1, [r0, 0x70] -_0802D7EA: - ldr r0, [sp] - cmp r0, 0x3 - beq _0802D804 - cmp r0, 0x3 - ble _0802D820 - cmp r0, 0x4 - beq _0802D820 - cmp r0, 0x6 - beq _0802D80C - b _0802D820 - .align 2, 0 -_0802D800: .4byte gUnknown_203B2F8 -_0802D804: - movs r0, 0x2 - bl sub_802D1A0 - b _0802D826 -_0802D80C: - ldr r0, _0802D81C - ldr r1, [r0] - movs r0, 0x1 - str r0, [r1, 0x4] - movs r0, 0x10 - bl sub_802D1A0 - b _0802D826 - .align 2, 0 -_0802D81C: .4byte gUnknown_203B2F8 -_0802D820: - movs r0, 0 - bl sub_802D1A0 -_0802D826: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_802D7D0 - - thumb_func_start sub_802D82C -sub_802D82C: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0802D8C6 - ldr r1, [sp] - cmp r1, 0x1 - beq _0802D846 - ldr r0, _0802D858 - ldr r0, [r0] - str r1, [r0, 0x74] -_0802D846: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0x6 - bhi _0802D8C0 - lsls r0, 2 - ldr r1, _0802D85C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802D858: .4byte gUnknown_203B2F8 -_0802D85C: .4byte _0802D860 - .align 2, 0 -_0802D860: - .4byte _0802D8C0 - .4byte _0802D8C0 - .4byte _0802D87C - .4byte _0802D8C0 - .4byte _0802D8C0 - .4byte _0802D898 - .4byte _0802D8AC -_0802D87C: - ldr r0, _0802D894 - ldr r0, [r0] - ldrb r0, [r0, 0x10] - bl sub_8096C3C - bl sub_8096C80 - movs r0, 0x8 - bl sub_802D1A0 - b _0802D8C6 - .align 2, 0 -_0802D894: .4byte gUnknown_203B2F8 -_0802D898: - ldr r0, _0802D8A8 - ldr r1, [r0] - movs r0, 0x9 - str r0, [r1, 0x4] - movs r0, 0x10 - bl sub_802D1A0 - b _0802D8C6 - .align 2, 0 -_0802D8A8: .4byte gUnknown_203B2F8 -_0802D8AC: - ldr r0, _0802D8BC - ldr r1, [r0] - movs r0, 0x9 - str r0, [r1, 0x4] - movs r0, 0xF - bl sub_802D1A0 - b _0802D8C6 - .align 2, 0 -_0802D8BC: .4byte gUnknown_203B2F8 -_0802D8C0: - movs r0, 0x1 - bl sub_802D1A0 -_0802D8C6: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_802D82C - - thumb_func_start sub_802D8CC -sub_802D8CC: - push {lr} - movs r0, 0x1 - bl sub_802C598 - cmp r0, 0x4 - bhi _0802D93A - lsls r0, 2 - ldr r1, _0802D8E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802D8E4: .4byte _0802D8E8 - .align 2, 0 -_0802D8E8: - .4byte _0802D93A - .4byte _0802D93A - .4byte _0802D930 - .4byte _0802D8FC - .4byte _0802D914 -_0802D8FC: - bl sub_802C620 - ldr r1, _0802D910 - ldr r1, [r1] - strb r0, [r1, 0x10] - movs r0, 0xD - bl sub_802D1A0 - b _0802D93A - .align 2, 0 -_0802D910: .4byte gUnknown_203B2F8 -_0802D914: - bl sub_802C620 - ldr r2, _0802D92C - ldr r1, [r2] - strb r0, [r1, 0x10] - ldr r1, [r2] - movs r0, 0xC - str r0, [r1, 0x4] - movs r0, 0xF - bl sub_802D1A0 - b _0802D93A - .align 2, 0 -_0802D92C: .4byte gUnknown_203B2F8 -_0802D930: - bl sub_802C688 - movs r0, 0x1 - bl sub_802D1A0 -_0802D93A: - pop {r0} - bx r0 - thumb_func_end sub_802D8CC - - thumb_func_start sub_802D940 -sub_802D940: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_802C598 - ldr r4, _0802D980 - ldr r0, [r4] - adds r0, 0x78 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0802D970 - ldr r0, [r4] - adds r0, 0x78 - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _0802D970 - ldr r0, [r4] - str r1, [r0, 0x6C] -_0802D970: - ldr r0, [sp] - cmp r0, 0x2 - beq _0802D98A - cmp r0, 0x2 - bgt _0802D984 - cmp r0, 0x1 - beq _0802D9E0 - b _0802D9E6 - .align 2, 0 -_0802D980: .4byte gUnknown_203B2F8 -_0802D984: - cmp r0, 0x5 - beq _0802D9CC - b _0802D9E6 -_0802D98A: - ldr r0, _0802D9BC - ldr r3, [r0] - ldrb r0, [r3, 0x9] - cmp r0, 0 - beq _0802D9C4 - ldr r2, _0802D9C0 - ldrb r1, [r3, 0x10] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, 0xF0 - ldr r1, [r2] - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x5 - bls _0802D9C4 - ldrb r0, [r3, 0xA] - ldrb r1, [r1, 0x4] - cmp r0, r1 - bne _0802D9C4 - movs r0, 0x7 - bl sub_802D1A0 - b _0802D9E6 - .align 2, 0 -_0802D9BC: .4byte gUnknown_203B2F8 -_0802D9C0: .4byte gUnknown_203B490 -_0802D9C4: - movs r0, 0xE - bl sub_802D1A0 - b _0802D9E6 -_0802D9CC: - ldr r0, _0802D9DC - ldr r1, [r0] - movs r0, 0xC - str r0, [r1, 0x4] - movs r0, 0xF - bl sub_802D1A0 - b _0802D9E6 - .align 2, 0 -_0802D9DC: .4byte gUnknown_203B2F8 -_0802D9E0: - movs r0, 0xC - bl sub_802D1A0 -_0802D9E6: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802D940 - - thumb_func_start sub_802D9F0 -sub_802D9F0: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_802C598 - ldr r4, _0802DA30 - ldr r0, [r4] - adds r0, 0x78 - bl sub_8012FD8 - ldr r0, [r4] - adds r0, 0xC8 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0802DA1E - ldr r0, [r4] - adds r0, 0xC8 - mov r1, sp - bl sub_8013114 -_0802DA1E: - ldr r0, [sp] - cmp r0, 0x3 - beq _0802DA40 - cmp r0, 0x3 - bgt _0802DA34 - cmp r0, 0x1 - beq _0802DA38 - b _0802DA56 - .align 2, 0 -_0802DA30: .4byte gUnknown_203B2F8 -_0802DA34: - cmp r0, 0x4 - bne _0802DA56 -_0802DA38: - movs r0, 0xC - bl sub_802D1A0 - b _0802DA56 -_0802DA40: - bl sub_802C688 - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl sub_8096C3C - bl sub_8096C80 - movs r0, 0x8 - bl sub_802D1A0 -_0802DA56: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802D9F0 - - thumb_func_start sub_802DA60 -sub_802DA60: - push {lr} - bl sub_802DEE0 - cmp r0, 0x1 - bls _0802DA7C - cmp r0, 0x3 - bhi _0802DA7C - bl sub_802DF24 - ldr r0, _0802DA80 - ldr r0, [r0] - ldr r0, [r0, 0x4] - bl sub_802D1A0 -_0802DA7C: - pop {r0} - bx r0 - .align 2, 0 -_0802DA80: .4byte gUnknown_203B2F8 - thumb_func_end sub_802DA60 - - thumb_func_start sub_802DA84 -sub_802DA84: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0802DA9C - ldr r0, _0802DAA4 - ldr r0, [r0] - ldr r0, [r0, 0x4] - bl sub_802D1A0 -_0802DA9C: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0802DAA4: .4byte gUnknown_203B2F8 - thumb_func_end sub_802DA84 - - thumb_func_start sub_802DAA8 -sub_802DAA8: - push {r4,lr} - ldr r4, _0802DAD0 - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl GetJobSlotInfo - adds r1, r0, 0 - ldr r4, [r4] - ldrb r0, [r4, 0x9] - cmp r0, 0 - beq _0802DAD4 - ldrb r0, [r1] - cmp r0, 0x5 - beq _0802DAD4 - ldrb r0, [r4, 0xA] - ldrb r1, [r1, 0x4] - cmp r0, r1 - bne _0802DAD4 - movs r0, 0 - b _0802DAD6 - .align 2, 0 -_0802DAD0: .4byte gUnknown_203B2F8 -_0802DAD4: - movs r0, 0x1 -_0802DAD6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802DAA8 - - thumb_func_start sub_802DADC -sub_802DADC: - push {r4,lr} - ldr r3, _0802DAEC - ldr r0, [r3] - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _0802DAF0 -_0802DAE8: - movs r0, 0x1 - b _0802DB1C - .align 2, 0 -_0802DAEC: .4byte gUnknown_203B2F8 -_0802DAF0: - ldr r0, _0802DB24 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0xF0 - movs r2, 0 -_0802DAFA: - ldrb r0, [r1] - cmp r0, 0 - beq _0802DAE8 - cmp r0, 0x5 - beq _0802DAE8 - cmp r0, 0x5 - bls _0802DB12 - ldr r0, [r3] - ldrb r0, [r0, 0xA] - ldrb r4, [r1, 0x4] - cmp r0, r4 - bne _0802DAE8 -_0802DB12: - adds r1, 0x14 - adds r2, 0x1 - cmp r2, 0x7 - ble _0802DAFA - movs r0, 0 -_0802DB1C: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0802DB24: .4byte gUnknown_203B490 - thumb_func_end sub_802DADC - .align 2,0 diff --git a/asm/wonder_mail_802C860.s b/asm/wonder_mail_802C860.s index 036c51a78..f2988a283 100644 --- a/asm/wonder_mail_802C860.s +++ b/asm/wonder_mail_802C860.s @@ -661,99 +661,4 @@ sub_802CF5C: _0802CFCC: .4byte gUnknown_203B2F4 thumb_func_end sub_802CF5C - thumb_func_start sub_802CFD0 -sub_802CFD0: - push {r4-r6,lr} - sub sp, 0x60 - ldr r6, _0802D02C - ldr r0, [r6] - ldr r0, [r0, 0x34] - bl sub_8008C54 - ldr r0, [r6] - ldr r0, [r0, 0x34] - bl sub_80073B8 - ldr r0, [r6] - movs r1, 0x1E - ldrsh r4, [r0, r1] - lsls r4, 3 - adds r5, r4, 0 - adds r5, 0xA - ldr r2, _0802D030 - ldr r3, [r0, 0x34] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl xxx_call_draw_string - adds r4, 0x4 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0x9E - ldrb r0, [r0] - lsls r0, 3 - adds r5, r4, r0 - movs r0, 0x1E - ldrsh r2, [r1, r0] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r1, 0x34] - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0 - movs r3, 0x2 - bl sub_8012BC4 - movs r5, 0 - b _0802D076 - .align 2, 0 -_0802D02C: .4byte gUnknown_203B2F4 -_0802D030: .4byte gUnknown_80DFDBC -_0802D034: - ldr r0, [r6] - movs r2, 0x1E - ldrsh r1, [r0, r2] - movs r2, 0x1C - ldrsh r0, [r0, r2] - muls r0, r1 - adds r0, r5 - lsls r0, 24 - lsrs r0, 24 - bl sub_803B344 - adds r4, r0, 0 - ldr r0, [r6] - ldr r1, [r0, 0x34] - str r1, [sp, 0x8] - adds r1, r5, 0 - bl sub_8013800 - str r0, [sp, 0x50] - adds r0, r4, 0 - add r1, sp, 0x8 - bl sub_803B35C - mov r1, sp - adds r1, 0x4B - movs r0, 0x1 - strb r0, [r1] - ldr r0, [r4, 0x14] - str r0, [sp, 0x54] - add r0, sp, 0x8 - bl CreateRescueTitle - adds r5, 0x1 -_0802D076: - ldr r0, [r6] - movs r1, 0x1A - ldrsh r0, [r0, r1] - cmp r5, r0 - blt _0802D034 - ldr r0, _0802D094 - ldr r0, [r0] - ldr r0, [r0, 0x34] - bl sub_80073E0 - add sp, 0x60 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802D094: .4byte gUnknown_203B2F4 - thumb_func_end sub_802CFD0 - .align 2,0 diff --git a/include/code_80958E8.h b/include/code_80958E8.h new file mode 100644 index 000000000..d44d9bc7e --- /dev/null +++ b/include/code_80958E8.h @@ -0,0 +1,24 @@ +struct subStruct_203B490 +{ + // size: 0xC + u8 dungeon; + u8 unk1; + u32 unk4; + u32 unk8; +}; + + +struct unkStruct_203B490 +{ + // size: 0x330? + struct WonderMail unk0[4]; + struct WonderMail unk50[8]; + struct WonderMail unkF0[8]; + u8 unk190[0x28]; + u8 unk1B8[0x78]; + struct subStruct_203B490 unk230[16]; + u8 unk2F0[0x38]; + u8 unk328; +}; + +extern struct unkStruct_203B490 *gUnknown_203B490; diff --git a/include/dungeon.h b/include/dungeon.h index faf58e512..31c06af57 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -28,5 +28,8 @@ struct Dungeon extern struct Dungeon gDungeons[]; extern struct DungeonName gDungeonNames[]; const u8 *GetDungeonName1(u8 dungeon); +u32 sub_80908D8(struct DungeonLocation *dungeon); +u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2); +bool8 sub_809095C(u8 dungeon); #endif //GUARD_DUNGEON_H diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index a232a691a..03db139e5 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -99,7 +99,8 @@ struct DungeonEntityData /* 0x8C */ u8 IQSkillsSelected[4]; // IQ skills selected in the IQ skills menu. /* 0x90 */ u8 IQSkillsEnabled[4]; /* 0x94 */ u8 tactic; - u8 fill95[0x9C - 0x95]; + u8 fill95[0x98 - 0x95]; + /* 0x98 */ u32 unk98; /* 0x9C */ u32 unk9C; /* 0xA0 */ u32 unkA0; /* 0xA4 */ u8 clientType; @@ -135,7 +136,8 @@ struct DungeonEntityData /* 0xCC */ u8 cursedDamageTimer; u8 fillCD[0xD0 - 0xCD]; /* 0xD0 */ u8 linkedStatus; - u8 fillD1[0xD8 - 0xD1]; + u8 fillD1[0xD4 - 0xD1]; + /* 0xD4 */ u32 unkD4; /* 0xD8 */ u8 unkD8; /* 0xD9 */ u8 linkedStatusTurnsLeft; /* 0xDA */ u8 linkedStatusDamageTimer; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index c75fa3288..79c7b651a 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -66,7 +66,9 @@ struct DungeonGlobalData u8 unk674; u8 unk675; /* 0x676 */ bool8 itemHoldersIdentified; - u8 unk677[0x68A - 0x677]; + u8 unk677; + u8 unk678; + u8 unk679[0x68A - 0x679]; /* 0x68A */ u8 unk68A; u8 fill68B[0x363C - 0x68B]; /* 0x363C */ u8 expYieldRankings[NUM_SPECIES]; diff --git a/include/ground_script.h b/include/ground_script.h new file mode 100644 index 000000000..fa162b7aa --- /dev/null +++ b/include/ground_script.h @@ -0,0 +1,46 @@ +struct GroundScript_ExecutePP_3 +{ + // size: 0xC + u32 unk0; + s16 scriptType; + s16 unk6; + u8 unk8; +}; + +struct GroundScript_ExecutePP_1_sub +{ + // size: 0x60 + /* 0x0 */ s16 scriptType; + /* 0x2 */ s16 unk2; + /* 0x4 */ u32 unk4; + /* 0x8 */ u32 unk8; + /* 0xC */ u16 unkC; + /* 0xE */ u8 unkE; + /* 0xF */ u8 fillF; + /* 0x10 */ u32 unk10; + /* 0x14 */ u32 unk14; + /* 0x18 */ u8 fill18[0x22 - 0x18]; + /* 0x22 */ u16 unk22; + /* 0x24 */ u16 unk24; + /* 0x26 */ u32 unk26; + u8 fill50[0x60 - 0x2A]; +} __attribute__((packed)); + +typedef void (*Callback)(u32, void *); +struct GroundScript_ExecutePP_1_sub2 +{ + Callback callbacks[10]; // IDK the size.. +}; + +struct GroundScript_ExecutePP_1 +{ + struct GroundScript_ExecutePP_1_sub2 *unk0; + u32 unk4; + u32 fill8; + u32 unkC; + u32 fill10; + u8 fill18[0x24 - 0x14]; + struct GroundScript_ExecutePP_1_sub unk24; + struct GroundScript_ExecutePP_1_sub unk84; + u16 unkE4; +}; diff --git a/include/status.h b/include/status.h index e052ec4bc..8017623e6 100644 --- a/include/status.h +++ b/include/status.h @@ -19,5 +19,10 @@ void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, 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 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); #endif diff --git a/include/status_checker.h b/include/status_checker.h index 65c1e96f5..2bd1be767 100644 --- a/include/status_checker.h +++ b/include/status_checker.h @@ -23,8 +23,8 @@ bool8 CleanseOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *targe bool8 sub_805BC70(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805BC98(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); bool8 SilenceOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target); -bool8 sub_805BD70(struct DungeonEntity *pokemon, struct DungeonEntity *target); -bool8 sub_805BD7C(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 ScannerOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 RadarOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 TransferOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target); bool8 sub_805BE90(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 LuminousOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target); @@ -49,7 +49,7 @@ bool8 sub_805C3DC(struct DungeonEntity *pokemon, struct DungeonEntity *target); 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 sub_805C474(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 CanUseOnSelfWithStatusChecker(struct DungeonEntity *pokemon, struct PokemonMove *move); diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 155c780e0..13980253d 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -2,6 +2,7 @@ #define GUARD_WONDER_MAIL_H #include "file_system.h" +#include "global.h" #include "text.h" #include "item.h" #include "pokemon.h" @@ -29,8 +30,7 @@ struct WonderMail /* 0x1 */ u8 missionType; // mission type /* 0x2 */ u8 unk2; /* 0x3 */ u8 unk3; - /* 0x4 */ u8 dungeon; // dungeon - /* 0x5 */ u8 floor; // floor + /* 0x4 */ struct DungeonLocation dungeon; /* 0x8 */ u32 unk8; /* 0xC */ s16 clientSpecies; // client pokemon /* 0xE */ s16 targetSpecies; // target diff --git a/include/wonder_mail_3.h b/include/wonder_mail_3.h new file mode 100644 index 000000000..7618bf84d --- /dev/null +++ b/include/wonder_mail_3.h @@ -0,0 +1,79 @@ +struct unkStruct_203B2F4 +{ + u8 fill0[0x1A]; + s16 unk1A; + s16 unk1C; + s16 unk1E; + u8 fill20[0x34 - 0x20]; + u32 unk34; + u32 unk38; + struct UnkTextStruct2 unk3C[4]; + u8 unk9C[4]; +}; +extern struct unkStruct_203B2F4 *gUnknown_203B2F4; + +struct unkStruct_802C39C +{ + /* 0x0 */ u32 unk0[2]; + /* 0x8 */ struct DungeonLocation *unk8; + /* 0xC */ u8 *unkC; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 fill15[0x1B]; + /* 0x34 */ u8 fill34[2]; + /* 0x36 */ u8 fill36[0x3C - 0x36]; + /* 0x3C */ u8 unk3C[0xC]; + /* 0x48 */ u8 fill48[4]; + /* 0x4C */ u32 unk4C; + /* 0x50 */ u8 *unk50[3]; +}; + +struct unkStruct_803B344 +{ + // size: 0xB4 + struct WonderMail unk0; + u8* unk14; + u8* unk18; + u8 fill1C[0x3C - 0x1C]; + u8 unk3C[0x78]; +}; + +struct unkSubStruct_203B2F8 +{ + struct WonderMail wonderMail; + u8 *unk14; + u8 *unk18; +}; + +struct unkStruct_203B2F8 +{ + // size: 0x208 + s32 state; // state + s32 fallbackState; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + struct unkSubStruct_203B2F8 *unkC; + u8 unk10; + u8 fill11[0x14 - 0x11]; + u32 unk14; + u8 fill18[0x58 - 0x18]; + u8 unk58; + u8 fill59[0x64 - 0x59]; + u8 *unk64; + u32 unk68; + u32 unk6C; + u32 unk70; + u32 unk74; + u8 unk78[0xC8 - 0x78]; + u8 unkC8[4]; + u8 fillCC[0x118 - 0xCC]; + struct MenuItem unk118[8]; + struct MenuItem unk158[8]; + u16 unk198[8]; + struct UnkTextStruct2 unk1A8[4]; + u32 unk1E4; +}; +extern struct unkStruct_203B2F8 *gUnknown_203B2F8; diff --git a/ld_script.txt b/ld_script.txt index e097fca23..18fd480f5 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -116,6 +116,7 @@ SECTIONS { asm/gulpin_shop.o(.text); src/gulpin_shop_1.o(.text); asm/code_801EE10.o(.text); + src/code_801EE10.o(.text); src/luminous_cave.o(.text); src/friend_list_menu_1.o(.text); asm/friend_list_menu.o(.text); @@ -292,6 +293,7 @@ SECTIONS { asm/dungeon.o(.text); src/dungeon_2.o(.text); asm/dungeon_2.o(.text); + src/dungeon_2_1.o(.text); src/items.o(.text); src/rescue_team_info.o(.text); src/text_util.o(.text); diff --git a/src/code_801EE10.c b/src/code_801EE10.c new file mode 100644 index 000000000..668d95256 --- /dev/null +++ b/src/code_801EE10.c @@ -0,0 +1,157 @@ +#include "global.h" +#include "code_800D090.h" +#include "pokemon.h" +#include "input.h" +#include "memory.h" +#include "text.h" + +struct unkStruct_203B2AC +{ + u8 unk0[0x1E]; + s16 unk1E; + s16 unk20; + u8 unk22[0x34 - 0x22]; + u32 unk34[3]; + u8 unk40[0x48 - 0x40]; + s16 unk48; + u32 unk4C; + u8 unk50[0xB0 - 0x50]; + u32 unkB0; + u8 fillB4[0xE0 - 0xB4]; + u32 unkE0; + struct UnkTextStruct2 *unkE4; + struct UnkTextStruct2 unkE8[4]; + u8 unk148[4]; +}; +extern struct unkStruct_203B2AC *gUnknown_203B2AC; + +struct unkStruct_3001B60 +{ + u8 fill0[0x1A]; + s16 unk1A[2]; + u8 fill1C[0x370 - 0x1E]; + s16 unk370; + s16 unk372; + s16 unk374; + s16 unk376; +}; + +extern struct unkStruct_3001B60 *gUnknown_3001B60; + +extern struct UnkTextStruct2 gUnknown_80DC9B0; +extern struct UnkTextStruct2 gUnknown_80DC9C8; + +extern void sub_8013818(void *, u32, u32, u32); +extern u8 sub_80023E4(u32); +extern void sub_808FF20(u32 *, struct PokemonStruct *, u8); +extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); +extern s32 GetKeyPress(void *); +extern bool8 sub_8013938(void *); +extern void sub_802452C(void); +extern void PlayMenuSoundEffect(u32); +extern void sub_8013984(void *); +void sub_80922B4(u8 *buffer, u8 *string, s32 size); + +void sub_8024588(void); +void sub_80245D0(void); +void sub_8024604(void); + +extern u8 gUnknown_80DC9A4[]; + +struct PokemonStruct *sub_80243E8(void) +{ + u8 buffer [40]; + u8 nameBuffer [20]; + struct PokemonStruct *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[gUnknown_3001B60->unk376 * gUnknown_3001B60->unk374 + gUnknown_3001B60->unk370]]; + + sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH); + sprintf_2(buffer, gUnknown_80DC9A4,nameBuffer); // %s + return pokeStruct; +} + +bool8 sub_8024458(s16 param_1, s32 param_2) +{ + s32 param_1_s32 = param_1; + gUnknown_203B2AC = MemoryAlloc(sizeof(struct unkStruct_203B2AC), 8); + gUnknown_203B2AC->unk48 = param_1_s32; + gUnknown_203B2AC->unkE0 = param_2; + gUnknown_203B2AC->unkE4 = &gUnknown_203B2AC->unkE8[param_2]; + sub_8006518(gUnknown_203B2AC->unkE8); + gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9C8; + gUnknown_203B2AC->unkE4->unk14 = gUnknown_203B2AC->unk148; + gUnknown_203B2AC->unk148[2] = 10; + sub_8024604(); + sub_802452C(); + sub_8013984(gUnknown_203B2AC); + return TRUE; +} + +u8 sub_80244E4(void) +{ + switch(GetKeyPress(gUnknown_203B2AC)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + if (sub_8013938(gUnknown_203B2AC) != 0) { + sub_802452C(); + return 1; + } + else { + return 0; + } + } +} + +void sub_802452C(void) +{ + sub_8024588(); + sub_80245D0(); +} + +void sub_802453C(void) +{ + if(gUnknown_203B2AC) + { + gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9B0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2AC->unkE8, 1, 1); + MemoryFree(gUnknown_203B2AC); + gUnknown_203B2AC = NULL; + } +} + +void sub_8024588(void) +{ + gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20; + gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E; + gUnknown_203B2AC->unk148[3] = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2AC->unkE8,1,1); +} + +void sub_80245D0(void) +{ + CreatePokemonInfoTabScreen + (gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E], + gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C, + &gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0); +} + +void sub_8024604(void) +{ + struct PokemonStruct *pokeStruct; + u32 *iVar3; + + gUnknown_203B2AC->unk34[0] = 2; + gUnknown_203B2AC->unk34[1] = 3; + gUnknown_203B2AC->unk34[2] = 5; + sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0); + iVar3 = &gUnknown_203B2AC->unk4C; + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->unk48]; + sub_808FF20(iVar3,pokeStruct,sub_80023E4(7)); +} diff --git a/src/code_803C1B4.c b/src/code_803C1B4.c index 5f37e6153..0d84866a8 100644 --- a/src/code_803C1B4.c +++ b/src/code_803C1B4.c @@ -1,11 +1,10 @@ #include "global.h" +#include "dungeon.h" -extern s32 sub_80908D8(u32); - -s32 sub_803C1B4(s32 r0, u8 r1) +u32 sub_803C1B4(struct DungeonLocation *dungeon, u8 r1) { s32 temp; - temp = sub_80908D8(r0); + temp = sub_80908D8(dungeon); if(r1 == 2) { temp += 2; diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index e1d3a1ad5..c873c9852 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -13,43 +13,43 @@ struct unkStruct_80420E8 }; -extern void sub_803ED30(u8, struct DungeonEntity *r0, u8, u8); -extern void sub_804151C(struct DungeonEntity *r0, u32 r1, u8 r2); -extern void sub_80416E0(struct DungeonEntity *r0, u32, u32); -extern u8 sub_8042768(struct DungeonEntity *r0); -extern void sub_806CDD4(struct DungeonEntity *r0, u8, u32); +extern void sub_803ED30(u8, struct DungeonEntity *pokemon, u8, u8); +extern void sub_804151C(struct DungeonEntity *pokemon, u32 r1, u8 r2); +extern void sub_80416E0(struct DungeonEntity *pokemon, u32, u32); +extern u8 sub_8042768(struct DungeonEntity *pokemon); +extern void sub_806CDD4(struct DungeonEntity *pokemon, u8, u32); extern u32 sub_806F62C(u32); extern void PlaySoundEffect(u32); -extern u8 sub_803F428(struct DungeonEntity *r0); -extern void sub_8041550(struct DungeonEntity *r0, u32, u32, u32, u32, u32); +extern u8 sub_803F428(struct DungeonEntity *pokemon); +extern void sub_8041550(struct DungeonEntity *pokemon, u32, u32, u32, u32, u32); -void sub_80421C0(struct DungeonEntity *r0, u16 r1); +void sub_80421C0(struct DungeonEntity *pokemon, u16 r1); -void sub_8041AD0(struct DungeonEntity *r0) +void sub_8041AD0(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xA2 << 1, 1); + sub_804151C(pokemon, 0xA2 << 1, 1); } -void sub_8041AE0(struct DungeonEntity *r0) +void sub_8041AE0(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x143, 1); + sub_804151C(pokemon, 0x143, 1); } -void sub_8041AF4(struct DungeonEntity *r0) +void sub_8041AF4(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x25, 1); - sub_80421C0(r0, 0x197); + sub_804151C(pokemon, 0x25, 1); + sub_80421C0(pokemon, 0x197); } void nullsub_57(void) { } -void sub_8041B18(struct DungeonEntity *r0) +void sub_8041B18(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x141, 1); + sub_804151C(pokemon, 0x141, 1); } void nullsub_58(void) @@ -60,36 +60,36 @@ void nullsub_59(void) { } -void sub_8041B34(struct DungeonEntity *r0) +void sub_8041B34(struct DungeonEntity *pokemon) { - sub_804151C(r0, 7, 1); + sub_804151C(pokemon, 7, 1); } void nullsub_60(void) { } -void sub_8041B48(struct DungeonEntity *r0) +void sub_8041B48(struct DungeonEntity *pokemon) { - sub_804151C(r0, 4, 0); + sub_804151C(pokemon, 4, 0); } void nullsub_61(void) { } -void sub_8041B5C(struct DungeonEntity *r0) +void sub_8041B5C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x171, 1); + sub_804151C(pokemon, 0x171, 1); } -void nullsub_62(struct DungeonEntity *r0) +void nullsub_62(struct DungeonEntity *pokemon) { } -void sub_8041B74(struct DungeonEntity *r0) +void sub_8041B74(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x171, 0); + sub_804151C(pokemon, 0x171, 0); } void nullsub_63(void) @@ -100,9 +100,9 @@ void nullsub_64(void) { } -void sub_8041B90(struct DungeonEntity *r0) +void sub_8041B90(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xD6 << 1, 0); + sub_804151C(pokemon, 0xD6 << 1, 0); } void nullsub_65(void) @@ -113,60 +113,60 @@ void nullsub_66(void) { } -void sub_8041BA8(struct DungeonEntity *r0) +void sub_8041BA8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 4, 1); + sub_804151C(pokemon, 4, 1); } void nullsub_67(void) { } -void sub_8041BBC(struct DungeonEntity *r0) +void sub_8041BBC(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xD4 << 1, 1); + sub_804151C(pokemon, 0xD4 << 1, 1); } void nullsub_68(void) { } -void sub_8041BD0(struct DungeonEntity *r0, u8 r1) +void sub_8041BD0(struct DungeonEntity *pokemon, u8 r1) { if(r1 == 0) { return; } - sub_80421C0(r0, 0x1a5); + sub_80421C0(pokemon, 0x1a5); } -void sub_8041BE8(struct DungeonEntity *r0) +void sub_8041BE8(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0xCB << 1); + sub_80421C0(pokemon, 0xCB << 1); } -void sub_8041BF8(struct DungeonEntity *r0) +void sub_8041BF8(struct DungeonEntity *pokemon) { - sub_806CDD4(r0, 0xA, NUM_DIRECTIONS); + sub_806CDD4(pokemon, 0xA, NUM_DIRECTIONS); } -void sub_8041C08(struct DungeonEntity *r0) +void sub_8041C08(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1a7, 1); + sub_804151C(pokemon, 0x1a7, 1); } -void sub_8041C1C(struct DungeonEntity *r0) +void sub_8041C1C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1a7, 1); + sub_804151C(pokemon, 0x1a7, 1); } void nullsub_69(void) { } -void sub_8041C34(struct DungeonEntity *r0) +void sub_8041C34(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x4C, 1); + sub_804151C(pokemon, 0x4C, 1); } void nullsub_70(void) @@ -177,24 +177,24 @@ void nullsub_71(void) { } -void sub_8041C4C(struct DungeonEntity *r0, u32 r1) +void sub_8041C4C(struct DungeonEntity *pokemon, u32 r1) { - sub_804151C(r0, r1, 1); + sub_804151C(pokemon, r1, 1); } -void sub_8041C58(struct DungeonEntity *r0) +void sub_8041C58(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1a9, 1); + sub_804151C(pokemon, 0x1a9, 1); } -void sub_8041C6C(struct DungeonEntity *r0) +void sub_8041C6C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x9D << 1, 1); + sub_804151C(pokemon, 0x9D << 1, 1); } -void sub_8041C7C(struct DungeonEntity *r0) +void sub_8041C7C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x9D << 1, 1); + sub_804151C(pokemon, 0x9D << 1, 1); } void nullsub_72(void) @@ -205,96 +205,96 @@ void nullsub_73(void) { } -void sub_8041C94(struct DungeonEntity *r0) +void sub_8041C94(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x171, 1); + sub_804151C(pokemon, 0x171, 1); } -void sub_8041CA8(struct DungeonEntity *r0) +void sub_8041CA8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 7, 1); + sub_804151C(pokemon, 7, 1); } -void sub_8041CB8(struct DungeonEntity *r0) +void sub_8041CB8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x18b, 1); + sub_804151C(pokemon, 0x18b, 1); } -void sub_8041CCC(struct DungeonEntity *r0) +void sub_8041CCC(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xC5 << 1, 1); + sub_804151C(pokemon, 0xC5 << 1, 1); } -void sub_8041CDC(struct DungeonEntity *r0) +void sub_8041CDC(struct DungeonEntity *pokemon) { - sub_804151C(r0, 5, 1); + sub_804151C(pokemon, 5, 1); } -void sub_8041CEC(struct DungeonEntity *r0) +void sub_8041CEC(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x19d); + sub_80421C0(pokemon, 0x19d); } void nullsub_74(void) { } -void sub_8041D00(struct DungeonEntity *r0, struct DungeonEntity *r1) +void sub_8041D00(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_804151C(r1, 0x2F, 1); - sub_804151C(r0, 0x30, 1); + sub_804151C(target, 0x2F, 1); + sub_804151C(pokemon, 0x30, 1); } -void nullsub_75(void) +void nullsub_75(struct DungeonEntity *pokemon) { } -void nullsub_76(void) +void nullsub_76(struct DungeonEntity *pokemon) { } -void nullsub_77(void) +void nullsub_77(struct DungeonEntity *pokemon) { } -void nullsub_78(void) +void nullsub_78(struct DungeonEntity *pokemon) { } -void nullsub_79(void) +void nullsub_79(struct DungeonEntity *pokemon) { } -void nullsub_80(void) +void nullsub_80(struct DungeonEntity *pokemon) { } -void sub_8041D38(struct DungeonEntity * r0) +void sub_8041D38(struct DungeonEntity * pokemon) { - sub_804151C(r0, 0x21, 1); + sub_804151C(pokemon, 0x21, 1); } -void sub_8041D48(struct DungeonEntity * r0) +void sub_8041D48(struct DungeonEntity * pokemon) { - sub_80421C0(r0, 0x191); + sub_80421C0(pokemon, 0x191); } void nullsub_81(void) { } -void sub_8041D5C(struct DungeonEntity *r0) +void sub_8041D5C(struct DungeonEntity *pokemon) { - if(sub_8042768(r0) == 0) + if(sub_8042768(pokemon) == 0) { return; } - sub_803ED30(r0->entityData->stockpileCount, r0, 1, 0xB); + sub_803ED30(pokemon->entityData->stockpileCount, pokemon, 1, 0xB); } -void sub_8041D84(struct DungeonEntity * r0) +void sub_8041D84(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x19f); + sub_80421C0(pokemon, 0x19f); } void nullsub_82(void) @@ -305,14 +305,14 @@ void nullsub_83(void) { } -void sub_8041D9C(struct DungeonEntity * r0) +void sub_8041D9C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x131, 1); + sub_804151C(pokemon, 0x131, 1); } -void sub_8041DB0(struct DungeonEntity * r0) +void sub_8041DB0(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x30, 1); + sub_804151C(pokemon, 0x30, 1); } void nullsub_84(void) @@ -339,257 +339,257 @@ void nullsub_88(void) { } -void sub_8041DD8(struct DungeonEntity *r0, s16 r1) +void sub_8041DD8(struct DungeonEntity *pokemon, s16 r1) { u32 temp; temp = r1; - if(HasType(r0, TYPE_GHOST) != 0) - sub_804151C(r0, temp, 1); + if(HasType(pokemon, TYPE_GHOST) != 0) + sub_804151C(pokemon, temp, 1); else - sub_804151C(r0, TYPE_GHOST, 1); + sub_804151C(pokemon, TYPE_GHOST, 1); } void nullsub_89(void) { } -void sub_8041E0C(struct DungeonEntity *r0) +void sub_8041E0C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x41, 1); + sub_804151C(pokemon, 0x41, 1); } -void sub_8041E1C(struct DungeonEntity *r0) +void sub_8041E1C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x8F << 1, 1); - sub_80421C0(r0, 0xCE << 1); + sub_804151C(pokemon, 0x8F << 1, 1); + sub_80421C0(pokemon, 0xCE << 1); } -void sub_8041E3C(struct DungeonEntity *r0) +void sub_8041E3C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xD7 << 1, 1); + sub_804151C(pokemon, 0xD7 << 1, 1); } -void sub_8041E4C(struct DungeonEntity *r0) +void sub_8041E4C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1b1, 1); + sub_804151C(pokemon, 0x1b1, 1); } -void sub_8041E60(struct DungeonEntity *r0) +void sub_8041E60(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1a9, 1); + sub_804151C(pokemon, 0x1a9, 1); } -void sub_8041E74(struct DungeonEntity *r0) +void sub_8041E74(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xC9 << 1, 1); + sub_804151C(pokemon, 0xC9 << 1, 1); } -void sub_8041E84(struct DungeonEntity *r0) +void sub_8041E84(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xC7 << 1, 1); + sub_804151C(pokemon, 0xC7 << 1, 1); } -void sub_8041E94(struct DungeonEntity *r0) +void sub_8041E94(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xC8 << 1, 1); + sub_804151C(pokemon, 0xC8 << 1, 1); } -void sub_8041EA4(struct DungeonEntity *r0) +void sub_8041EA4(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x15, 1); + sub_804151C(pokemon, 0x15, 1); } -void sub_8041EB4(struct DungeonEntity *r0) +void sub_8041EB4(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x171, 1); + sub_804151C(pokemon, 0x171, 1); } -void sub_8041EC8(struct DungeonEntity *r0) +void sub_8041EC8(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x197); + sub_80421C0(pokemon, 0x197); } -void sub_8041ED8(struct DungeonEntity *r0) +void sub_8041ED8(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x197); + sub_80421C0(pokemon, 0x197); } -void sub_8041EE8(struct DungeonEntity *r0) +void sub_8041EE8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x15, 1); + sub_804151C(pokemon, 0x15, 1); } -void sub_8041EF8(struct DungeonEntity *r0) +void sub_8041EF8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xF, 1); + sub_804151C(pokemon, 0xF, 1); } -void sub_8041F08(struct DungeonEntity *r0) +void sub_8041F08(struct DungeonEntity *pokemon) { - sub_8041550(r0, 0x15, 1, 3, 2, 0); + sub_8041550(pokemon, 0x15, 1, 3, 2, 0); } void nullsub_90(void) { } -void sub_8041F28(struct DungeonEntity *r0, u32 r1) +void sub_8041F28(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xCA << 1, 1); + sub_804151C(pokemon, 0xCA << 1, 1); } else { - sub_804151C(r0, 0x193, 1); + sub_804151C(pokemon, 0x193, 1); } } -void sub_8041F4C(struct DungeonEntity *r0, u32 r1) +void sub_8041F4C(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x18f, 1); + sub_804151C(pokemon, 0x18f, 1); } else { - sub_804151C(r0, 0x191, 1); + sub_804151C(pokemon, 0x191, 1); } } -void sub_8041F70(struct DungeonEntity *r0, u32 r1) +void sub_8041F70(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x1a9, 1); + sub_804151C(pokemon, 0x1a9, 1); } else { - sub_804151C(r0, 0xC9 << 1, 1); + sub_804151C(pokemon, 0xC9 << 1, 1); } } -void sub_8041F94(struct DungeonEntity *r0, u32 r1) +void sub_8041F94(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xC7 << 1, 1); + sub_804151C(pokemon, 0xC7 << 1, 1); } else { - sub_804151C(r0, 0xC8 << 1, 1); + sub_804151C(pokemon, 0xC8 << 1, 1); } } -void sub_8041FB4(struct DungeonEntity *r0, u32 r1) +void sub_8041FB4(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x1a9, 1); + sub_804151C(pokemon, 0x1a9, 1); } else { - sub_804151C(r0, 0xC9 << 1, 1); + sub_804151C(pokemon, 0xC9 << 1, 1); } } -void sub_8041FD8(struct DungeonEntity *r0, u32 r1) +void sub_8041FD8(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xCA << 1, 1); + sub_804151C(pokemon, 0xCA << 1, 1); } else { - sub_804151C(r0, 0x193, 1); + sub_804151C(pokemon, 0x193, 1); } } -void sub_8041FFC(struct DungeonEntity *r0, u32 r1) +void sub_8041FFC(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xC7 << 1, 1); + sub_804151C(pokemon, 0xC7 << 1, 1); } else { - sub_804151C(r0, 0xC8 << 1, 1); + sub_804151C(pokemon, 0xC8 << 1, 1); } } -void sub_804201C(struct DungeonEntity *r0, u32 r1) +void sub_804201C(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x18f, 1); + sub_804151C(pokemon, 0x18f, 1); } else { - sub_804151C(r0, 0x191, 1); + sub_804151C(pokemon, 0x191, 1); } } -void sub_8042040(struct DungeonEntity *r0, u32 r1) +void sub_8042040(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xC6 << 1, 1); + sub_804151C(pokemon, 0xC6 << 1, 1); } else { - sub_804151C(r0, 0xD, 1); + sub_804151C(pokemon, 0xD, 1); } } -void sub_8042060(struct DungeonEntity *r0, u32 r1) +void sub_8042060(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x18d, 1); + sub_804151C(pokemon, 0x18d, 1); } else { - sub_804151C(r0, 0xE, 1); + sub_804151C(pokemon, 0xE, 1); } } -void sub_8042080(struct DungeonEntity *r0, u32 r1) +void sub_8042080(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xC6 << 1, 1); + sub_804151C(pokemon, 0xC6 << 1, 1); } else { - sub_804151C(r0, 0xD, 1); + sub_804151C(pokemon, 0xD, 1); } } -void sub_80420A0(struct DungeonEntity *r0, u32 r1) +void sub_80420A0(struct DungeonEntity *pokemon, u32 r1) { - sub_804151C(r0, 0x143, 1); + sub_804151C(pokemon, 0x143, 1); } void nullsub_91(void) { } -void sub_80420B8(struct DungeonEntity *r0, u32 r1) +void sub_80420B8(struct DungeonEntity *pokemon, u32 r1) { - sub_804151C(r0, 0x19, 1); + sub_804151C(pokemon, 0x19, 1); } -void sub_80420C8(struct DungeonEntity *r0) +void sub_80420C8(struct DungeonEntity *pokemon) { - sub_8041550(r0, 0x15, 1, 3, 2, 0); + sub_8041550(pokemon, 0x15, 1, 3, 2, 0); } void nullsub_92(void) { } -void sub_80420E8(struct DungeonEntity *r0, struct unkStruct_80420E8 *r1) +void sub_80420E8(struct DungeonEntity *pokemon, struct unkStruct_80420E8 *r1) { u32 temp; u32 arg; @@ -612,58 +612,58 @@ void sub_80420E8(struct DungeonEntity *r0, struct unkStruct_80420E8 *r1) arg = 11; break; } - sub_8041550(r0, arg, 1, 3, 0, 1); + sub_8041550(pokemon, arg, 1, 3, 0, 1); } -void sub_8042148(struct DungeonEntity *r0) +void sub_8042148(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x1a7); - sub_804151C(r0, 0x9F << 1, 1); + sub_80421C0(pokemon, 0x1a7); + sub_804151C(pokemon, 0x9F << 1, 1); } void nullsub_93() { } -void sub_804216C(u32 r0, struct DungeonEntity *r1, u32 r2) +void sub_804216C(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 r2) { if(r2 == 1) - sub_804151C(r1, 0xF8, 1); + sub_804151C(target, 0xF8, 1); else - sub_804151C(r1, 0xF9, 1); + sub_804151C(target, 0xF9, 1); } -void sub_804218C(u32 r0, struct DungeonEntity *r1) +void sub_804218C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_804151C(r1, 0x2A, 1); + sub_804151C(target, 0x2A, 1); } -void sub_804219C(struct DungeonEntity *r0) +void sub_804219C(struct DungeonEntity *pokemon) { - sub_80416E0(r0, 0x90, 1); + sub_80416E0(pokemon, 0x90, 1); } -void sub_80421AC(u32 r0, struct DungeonEntity * r1) +void sub_80421AC(struct DungeonEntity *pokemon, struct DungeonEntity * target) { - sub_804151C(r1, 0x167, 1); + sub_804151C(target, 0x167, 1); } -void sub_80421C0(struct DungeonEntity *r0, u16 r1) +void sub_80421C0(struct DungeonEntity *pokemon, u16 r1) { - if(r0 == NULL) + if(pokemon == NULL) PlaySoundEffect(r1); else - if(sub_8042768(r0) != 0) + if(sub_8042768(pokemon) != 0) PlaySoundEffect(r1); } -void sub_80421EC(struct DungeonEntity *r0, u16 r1) +void sub_80421EC(struct DungeonEntity *pokemon, u16 r1) { - if(sub_803F428(r0) != 0) + if(sub_803F428(pokemon) != 0) PlaySoundEffect(r1); } -void sub_8042208(struct DungeonEntity *r0, u8 r1) +void sub_8042208(struct DungeonEntity *pokemon, u8 r1) { if(r1 == 0) PlaySoundEffect(0x152); @@ -673,9 +673,9 @@ void sub_8042208(struct DungeonEntity *r0, u8 r1) PlaySoundEffect(0x150); } -void sub_8042238(u32 r0, struct DungeonEntity *r1) +void sub_8042238(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - if(r1->entityData->isEnemy) + if(target->entityData->isEnemy) PlaySoundEffect(0x157); else PlaySoundEffect(0x156); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index 7c893a1a6..48b31cc89 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -47,28 +47,28 @@ extern u8 sub_8092364(u8); extern void sub_803E46C(u32); extern void sub_803E708(u32 r0, u32 r1); -void sub_8069E0C(struct DungeonEntity *param_1) +void sub_8069E0C(struct DungeonEntity *pokemon) { s32 index; - struct DungeonEntityData *iVar4; + struct DungeonEntityData *entityData; - iVar4 = param_1->entityData; - if (HasAbility(param_1, ABILITY_FORECAST)) { - iVar4->types[0] = gUnknown_80F520C[GetWeather(param_1)].unk0; - iVar4->types[1] = TYPE_NONE; + entityData = pokemon->entityData; + if (HasAbility(pokemon, ABILITY_FORECAST)) { + entityData->types[0] = gUnknown_80F520C[GetWeather(pokemon)].unk0; + entityData->types[1] = TYPE_NONE; } else { for(index = 0; index < 2; index++) - iVar4->types[index] = GetPokemonType(iVar4->entityID, index); + entityData->types[index] = GetPokemonType(entityData->entityID, index); } for(index = 0; index < 2; index++) - iVar4->abilities[index] = GetPokemonAbility(iVar4->entityID, index); + entityData->abilities[index] = GetPokemonAbility(entityData->entityID, index); gDungeonGlobalData->unkC = 1; } void TriggerWeatherAbilities(void) { - struct DungeonEntity *uVar4; + struct DungeonEntity *entity; s32 iVar5; if (gDungeonGlobalData->unkC != 0) { @@ -77,18 +77,18 @@ void TriggerWeatherAbilities(void) for(iVar5 = 0; iVar5 < DUNGEON_MAX_POKEMON; iVar5++) { - uVar4 = gDungeonGlobalData->allPokemon[iVar5]; - if (EntityExists(uVar4)) { - if (HasAbility(uVar4, ABILITY_DRIZZLE)) { + entity = gDungeonGlobalData->allPokemon[iVar5]; + if (EntityExists(entity)) { + if (HasAbility(entity, ABILITY_DRIZZLE)) { gDungeonGlobalData->startingWeather[WEATHER_RAIN] = 1; } - else if (HasAbility(uVar4, ABILITY_SAND_STREAM)) { + else if (HasAbility(entity, ABILITY_SAND_STREAM)) { gDungeonGlobalData->startingWeather[WEATHER_SANDSTORM] = 1; } - else if (HasAbility(uVar4, ABILITY_DROUGHT)) { + else if (HasAbility(entity, ABILITY_DROUGHT)) { gDungeonGlobalData->startingWeather[WEATHER_SUNNY] = 1; } - if ((HasAbility(uVar4, ABILITY_AIR_LOCK)) || (HasAbility(uVar4, ABILITY_CLOUD_NINE))) { + if ((HasAbility(entity, ABILITY_AIR_LOCK)) || (HasAbility(entity, ABILITY_CLOUD_NINE))) { gDungeonGlobalData->negateWeatherEffects = TRUE; } } @@ -96,11 +96,11 @@ void TriggerWeatherAbilities(void) } } -s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2) +s32 sub_8069F54(struct DungeonEntity *pokemon, s16 param_2) { if ((((param_2 * 0x10000) + 0xfe880000U) >> 0x10) < 4) { - if (HasAbility(param_1, ABILITY_FORECAST)) { - return gUnknown_80F520C[GetWeather(param_1)].unk2; + if (HasAbility(pokemon, ABILITY_FORECAST)) { + return gUnknown_80F520C[GetWeather(pokemon)].unk2; } else { return 0x178; @@ -109,14 +109,14 @@ s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2) return param_2; } -static inline u8 sub_8069F9C_sub(struct DungeonEntity *param_1) +static inline u8 sub_8069F9C_sub(struct DungeonEntity *pokemon) { - u32 uVar3; - uVar3 = GetWeather(param_1); - return gUnknown_80F51E4[uVar3]; + u32 weather; + weather = GetWeather(pokemon); + return gUnknown_80F51E4[weather]; } -void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,struct PokemonMove *param_3) +void sub_8069F9C(struct DungeonEntity *pokemon,struct DungeonEntity * target,struct PokemonMove *move) { u8 type; u8 ability; @@ -129,19 +129,19 @@ void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,st struct DungeonEntityData *iVar8; u8 local_20 [4]; - if (!EntityExists(param_1)) { + if (!EntityExists(pokemon)) { return; } - if (!EntityExists(param_2)) { + if (!EntityExists(target)) { return; } - if (param_1 == param_2) { + if (pokemon == target) { return; } - iVar7 = param_1->entityData; + iVar7 = pokemon->entityData; iVar8 = iVar7; - iVar6 = param_2->entityData; + iVar6 = target->entityData; abilityIndex = -1; if (iVar6->abilities[0] == ABILITY_TRACE) { abilityIndex = 0; @@ -171,112 +171,112 @@ void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,st } iVar6->abilities[abilityIndex] = local_20[randomIndex]; gDungeonGlobalData->unkC = 1; - SetMessageArgument(gAvailablePokemonNames,param_2,0); - sub_80522F4(param_1,param_2,*gUnknown_80FCC7C); - sub_8042900(param_2); - sub_806ABAC(param_1,param_2); + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FCC7C); + sub_8042900(target); + sub_806ABAC(pokemon,target); } } _0806A068: if (iVar6->unk15A != 0) { iVar6->unk15A = 0; - if (HasAbility(param_2, ABILITY_COLOR_CHANGE)) { - type = GetMoveTypeForPokemon(param_1,param_3); - if (param_3->moveID == MOVE_WEATHER_BALL) { - type = sub_8069F9C_sub(param_1); + if (HasAbility(target, ABILITY_COLOR_CHANGE)) { + type = GetMoveTypeForPokemon(pokemon,move); + if (move->moveID == MOVE_WEATHER_BALL) { + type = sub_8069F9C_sub(pokemon); } - if ((type != TYPE_NONE) && (!HasType(param_2,type))) { + if ((type != TYPE_NONE) && (!HasType(target,type))) { iVar6->types[0] = type; iVar6->types[1] = TYPE_NONE; iVar6->isColorChanged = TRUE; - SetMessageArgument(gAvailablePokemonNames,param_2,0); + SetMessageArgument(gAvailablePokemonNames,target,0); __src = GetUnformattedTypeString(iVar6->types[0]); strcpy(gUnknown_202DE58,__src); - sub_80522F4(param_1,param_2,*gUnknown_80FCCAC); - sub_8042968(param_2); + sub_80522F4(pokemon,target,*gUnknown_80FCCAC); + sub_8042968(target); } } } } -void sub_806A120(struct DungeonEntity * param_1, struct DungeonEntity * param_2, struct PokemonMove* move) +void sub_806A120(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove* move) { u32 uVar2_u32; - u8 uVar2; - const char *__src; - struct DungeonEntityData *iVar3; + u8 moveType; + const char *typeString; + struct DungeonEntityData *entityData; - if ((((EntityExists(param_1)) && (EntityExists(param_2))) && (param_1 != param_2)) - && (iVar3 = param_2->entityData, iVar3->protectionStatus == 0xC)) { - uVar2 = GetMoveTypeForPokemon(param_1, move); - uVar2_u32 = sub_8092364(uVar2); + if ((((EntityExists(pokemon)) && (EntityExists(target))) && (pokemon != target)) + && (entityData = target->entityData, entityData->protectionStatus == 0xC)) { + moveType = GetMoveTypeForPokemon(pokemon, move); + uVar2_u32 = sub_8092364(moveType); if (uVar2_u32 != TYPE_NONE) { - iVar3->types[0] = uVar2_u32; - iVar3->types[1] = 0; - sub_8041BBC(param_2); - SetMessageArgument(gAvailablePokemonNames,param_2,0); - __src = GetUnformattedTypeString(uVar2_u32); - strcpy(gUnknown_202DE58,__src); - sub_80522F4(param_1,param_2,*gUnknown_80FDCC8); + entityData->types[0] = uVar2_u32; + entityData->types[1] = 0; + sub_8041BBC(target); + SetMessageArgument(gAvailablePokemonNames,target,0); + typeString = GetUnformattedTypeString(uVar2_u32); + strcpy(gUnknown_202DE58,typeString); + sub_80522F4(pokemon,target,*gUnknown_80FDCC8); } } } -void sub_806A1B0(struct DungeonEntity *param_1) +void sub_806A1B0(struct DungeonEntity *pokemon) { - if ((EntityExists(param_1)) && (HasAbility(param_1,0x2a))) { - sub_8076090(param_1,param_1,0,1,0); + if ((EntityExists(pokemon)) && (HasAbility(pokemon, ABILITY_TRUANT))) { + sub_8076090(pokemon,pokemon,0,1,0); } } -void sub_806A1E8(struct DungeonEntity *param_1) +void sub_806A1E8(struct DungeonEntity *pokemon) { bool8 bVar3; struct DungeonEntityData *iVar1; bVar3 = FALSE; - if (EntityExists(param_1)) { - if (GetEntityType(param_1) == ENTITY_POKEMON) { - iVar1 = param_1->entityData; + if (EntityExists(pokemon)) { + if (GetEntityType(pokemon) == ENTITY_POKEMON) { + iVar1 = pokemon->entityData; bVar3 = (!iVar1->isEnemy); } if (gUnknown_203B46C->unk1 == '\0') { bVar3 = FALSE; } - if (bVar3 && (sub_8045888(param_1) == '\0')) { - sub_806A2BC(param_1,1); + if (bVar3 && (sub_8045888(pokemon) == '\0')) { + sub_806A2BC(pokemon,1); } } } -void sub_806A240(struct DungeonEntity *param_1, struct DungeonEntity *param_2) +void sub_806A240(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - bool8 bVar3; - struct DungeonEntityData *iVar1; + bool8 isEnemy; + struct DungeonEntityData *entityData; - bVar3 = FALSE; - if (EntityExists(param_1)){ - if (GetEntityType(param_1) == ENTITY_POKEMON) { - iVar1 = param_1->entityData; - bVar3 = (!iVar1->isEnemy); + isEnemy = FALSE; + if (EntityExists(pokemon)){ + if (GetEntityType(pokemon) == ENTITY_POKEMON) { + entityData = pokemon->entityData; + isEnemy = (!entityData->isEnemy); } - if (bVar3 && (sub_8045888(param_1) == '\0')) { - sub_806A2BC(param_1,1); + if (isEnemy && (sub_8045888(pokemon) == '\0')) { + sub_806A2BC(pokemon,1); return; } - else if (GetEntityType(param_2) == ENTITY_POKEMON) { - iVar1 = param_2->entityData; - bVar3 = (!iVar1->isEnemy); + else if (GetEntityType(target) == ENTITY_POKEMON) { + entityData = target->entityData; + isEnemy = (!entityData->isEnemy); } - if (bVar3 && (sub_8045888(param_2) == '\0')) { - sub_806A2BC(param_2,1); + if (isEnemy && (sub_8045888(target) == '\0')) { + sub_806A2BC(target,1); } } } -void sub_806A2BC(struct DungeonEntity *param_1, u8 param_2) +void sub_806A2BC(struct DungeonEntity *pokemon, u8 param_2) { - if ((EntityExists(param_1)) && (GetEntityType(param_1) == ENTITY_POKEMON) && (gDungeonGlobalData->leader != param_1)) { + if ((EntityExists(pokemon)) && (GetEntityType(pokemon) == ENTITY_POKEMON) && (gDungeonGlobalData->leader != pokemon)) { if (param_2 != '\0') { sub_804178C(1); while (gDungeonGlobalData->unk12 < 0x3c) { @@ -284,8 +284,8 @@ void sub_806A2BC(struct DungeonEntity *param_1, u8 param_2) } } sub_803E708(4,0x44); - sub_803F508(param_1); - sub_804AC20(¶m_1->posWorld); + sub_803F508(pokemon); + sub_804AC20(&pokemon->posWorld); gDungeonGlobalData->unk12 = 0; } } diff --git a/src/code_80848F0.c b/src/code_80848F0.c index 43c23efe8..319c427b5 100644 --- a/src/code_80848F0.c +++ b/src/code_80848F0.c @@ -145,6 +145,38 @@ extern void sub_808CBB0(void); extern void sub_808CD44(void); extern void sub_8097FF8(void); +extern u8 sub_8098100(u8); +extern void sub_8097FA8(void); +extern void sub_807E5E4(u32); + +void sub_8084854(u8 *param_1) +{ + if (gDungeonGlobalData->unk678 != 0) { + gDungeonGlobalData->unk3A0D = param_1[5]; + } + else + { + if (sub_8098100(param_1[4]) != 0) { + gDungeonGlobalData->unk3A0D = param_1[5]; + } + else + { + if (sub_8098100(param_1[2]) != 0) { + gDungeonGlobalData->unk3A0D = param_1[3]; + } + else + { + gDungeonGlobalData->unk3A0D = param_1[1]; + if (param_1[2] != 0x40) { + sub_8097FA8(); + } + } + } + } + gDungeonGlobalData->unk675 = 1; + sub_807E5E4(0); +} + u32 sub_80848EC(void) { return 1; diff --git a/src/code_80958E8.c b/src/code_80958E8.c index bfe24308b..2a640351b 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -6,36 +6,15 @@ #include "sub_8095228.h" #include "wonder_mail.h" #include "constants/wonder_mail.h" - -struct subStruct_203B490 -{ - // size: 0xC - u8 unk0; - u8 unk1; - u32 unk4; - u32 unk8; -}; - - -struct unkStruct_203B490 -{ - // size: 0x330? - - u8 fill0[0x190]; - u8 unk190[0x28]; - u8 unk1B8[0x78]; - struct subStruct_203B490 unk230[16]; - u8 unk2F0[0x38]; - u8 unk328; -}; +#include "dungeon.h" +#include "code_80958E8.h" -extern bool8 sub_809095C(u8); extern s32 GetDungeonFloorCount(u8); -extern bool8 sub_809017C(u8 *); +extern bool8 sub_809017C(struct DungeonLocation *); extern s16 GetBaseSpecies(s16); extern bool8 IsInvalidItemReward(u8); -extern u8 sub_803C1D0(u8 *, u8); +extern u8 sub_803C1D0(struct DungeonLocation *, u8); extern bool8 IsNotMoneyOrUsedTMItem(u8); extern u8 xxx_bit_lut_lookup_8091E50(u8 ,u8 ); extern u32 GetMaxItemCount(u8); @@ -82,7 +61,7 @@ void sub_8095900(void) MemoryClear8(gUnknown_203B490->unk1B8, sizeof(gUnknown_203B490->unk1B8)); for(iVar2 = 0; iVar2 < 16; iVar2++) { - gUnknown_203B490->unk230[iVar2].unk0 = 99; + gUnknown_203B490->unk230[iVar2].dungeon = 99; gUnknown_203B490->unk230[iVar2].unk1 = 1; gUnknown_203B490->unk230[iVar2].unk4 = 0; gUnknown_203B490->unk230[iVar2].unk8 = 0; @@ -111,17 +90,17 @@ bool8 ValidateWonderMail(struct WonderMail *data) return FALSE; else { - if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemCount(data->dungeon) == 0) + if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemCount(data->dungeon.dungeonIndex) == 0) return FALSE; if(data->unk2 > 9) return FALSE; - if(sub_809095C(data->dungeon)) + if(sub_809095C(data->dungeon.dungeonIndex)) return FALSE; - if(data->floor >= GetDungeonFloorCount(data->dungeon)) + if(data->dungeon.dungeonFloor >= GetDungeonFloorCount(data->dungeon.dungeonIndex)) return FALSE; - if(sub_809017C(&(data->dungeon))) + if(sub_809017C(&data->dungeon)) return FALSE; if(data->clientSpecies == SPECIES_NONE) @@ -153,7 +132,7 @@ bool8 ValidateWonderMail(struct WonderMail *data) return FALSE; // Item finding - if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon, data->targetItem) == 0) + if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon.dungeonIndex, data->targetItem) == 0) return FALSE; if(data->rewardType == BLANK_4 || data->rewardType == END_REWARDS || data->rewardType > END_REWARDS) @@ -170,7 +149,7 @@ bool8 ValidateWonderMail(struct WonderMail *data) { if(GetFriendAreaUnlockCondition(data->friendAreaReward) != UNLOCK_WONDER_MAIL) return FALSE; - if(sub_803C1D0(&(data->dungeon), data->missionType) == 0) + if(sub_803C1D0(&data->dungeon, data->missionType) == 0) return FALSE; } return TRUE; diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 61554f0aa..f36a09fd2 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -2,42 +2,21 @@ #include "pokemon.h" #include "wonder_mail.h" -extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); -extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); -extern void sub_80015C0(u32, u32); -extern u32 sub_8001784(u32, u32, u16); - -struct unkStruct_8097270 -{ - u8 unk0; - u8 unk1; - u8 unk2; - struct DungeonLocation unk4; - u32 unk8; - u16 unkC; - u16 unkE; - u8 unk10; - u8 unk11; - u8 unk12; - u8 unk13; -}; - struct subStruct_203B490 { // size: 0xC - struct DungeonLocation unk0; + struct DungeonLocation dungeon; u32 unk4; u32 unk8; }; - struct unkStruct_203B490 { // size: 0x330? - struct unkStruct_8097270 unk0[4]; - struct unkStruct_8097270 unk50[8]; - struct unkStruct_8097270 unkF0[8]; + struct WonderMail unk0[4]; + struct WonderMail unk50[8]; + struct WonderMail unkF0[8]; u8 unk190[0x28]; u8 unk1B8[0x78]; struct subStruct_203B490 unk230[16]; @@ -46,9 +25,15 @@ struct unkStruct_203B490 }; extern struct unkStruct_203B490 *gUnknown_203B490; -void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b); -void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b); +void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); +void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); extern s32 sub_8096EB0(void); +extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); +extern void sub_80015C0(u32, u32); +extern u32 sub_8001784(u32, u32, u16); +extern void sub_809674C(); +extern void sub_800199C(u32, s32, u32, s32); bool8 sub_8096F50(struct WonderMail *r0) { @@ -62,8 +47,8 @@ bool8 sub_8096F50(struct WonderMail *r0) for(index = 0; index < 0x10; index++) { temp = &gUnknown_203B490->unk230[index]; - if(temp->unk0.dungeonIndex == r0->dungeon) - if(temp->unk0.dungeonFloor == r0->floor) + if(temp->dungeon.dungeonIndex == r0->dungeon.dungeonIndex) + if(temp->dungeon.dungeonFloor == r0->dungeon.dungeonFloor) if(temp->unk4 == r0->unk8) if(temp->unk8 == temp2) return TRUE; @@ -80,15 +65,15 @@ u32 sub_8096FA0(u8 *r0, u32 size) xxx_init_struct_8094924_restore_809485C(&backup, r0, size); for(index = 0; index < 4; index++) { - sub_80971EC(&backup, &gUnknown_203B490->unk0[index]); + RestoreWonderMail(&backup, &gUnknown_203B490->unk0[index]); } for(index = 0; index < 8; index++) { - sub_80971EC(&backup, &gUnknown_203B490->unk50[index]); + RestoreWonderMail(&backup, &gUnknown_203B490->unk50[index]); } for(index = 0; index < 8; index++) { - sub_80971EC(&backup, &gUnknown_203B490->unkF0[index]); + RestoreWonderMail(&backup, &gUnknown_203B490->unkF0[index]); } for(index = 0; index < 0x38; index++) { @@ -110,7 +95,7 @@ u32 sub_8096FA0(u8 *r0, u32 size) { RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); - RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0); + RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon); } nullsub_102(&backup); return backup.unk8; @@ -125,15 +110,15 @@ u32 sub_80970D8(u8 *r0, u32 size) xxx_init_struct_8094924_save_809486C(&backup, r0, size); for(index = 0; index < 4; index++) { - sub_8097270(&backup, &gUnknown_203B490->unk0[index]); + SaveWonderMail(&backup, &gUnknown_203B490->unk0[index]); } for(index = 0; index < 8; index++) { - sub_8097270(&backup, &gUnknown_203B490->unk50[index]); + SaveWonderMail(&backup, &gUnknown_203B490->unk50[index]); } for(index = 0; index < 8; index++) { - sub_8097270(&backup, &gUnknown_203B490->unkF0[index]); + SaveWonderMail(&backup, &gUnknown_203B490->unkF0[index]); } for(index = 0; index < 0x38; index++) { @@ -154,40 +139,40 @@ u32 sub_80970D8(u8 *r0, u32 size) { SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); - SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0); + SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon); } nullsub_102(&backup); return backup.unk8; } -void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) +void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b) { - RestoreIntegerBits(a, &b->unk0, 4); - RestoreIntegerBits(a, &b->unk1, 3); + RestoreIntegerBits(a, &b->mailType, 4); + RestoreIntegerBits(a, &b->missionType, 3); RestoreIntegerBits(a, &b->unk2, 4); - RestoreIntegerBits(a, &b->unkC, 9); - RestoreIntegerBits(a, &b->unkE, 9); - RestoreIntegerBits(a, &b->unk10, 8); - RestoreIntegerBits(a, &b->unk11, 4); - RestoreIntegerBits(a, &b->unk12, 8); - RestoreIntegerBits(a, &b->unk13, 6); + RestoreIntegerBits(a, &b->clientSpecies, 9); + RestoreIntegerBits(a, &b->targetSpecies, 9); + RestoreIntegerBits(a, &b->targetItem, 8); + RestoreIntegerBits(a, &b->rewardType, 4); + RestoreIntegerBits(a, &b->itemReward, 8); + RestoreIntegerBits(a, &b->friendAreaReward, 6); RestoreIntegerBits(a, &b->unk8, 0x18); - RestoreDungeonLocation(a, &b->unk4); + RestoreDungeonLocation(a, &b->dungeon); } -void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) +void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b) { - SaveIntegerBits(a, &b->unk0, 4); - SaveIntegerBits(a, &b->unk1, 3); + SaveIntegerBits(a, &b->mailType, 4); + SaveIntegerBits(a, &b->missionType, 3); SaveIntegerBits(a, &b->unk2, 4); - SaveIntegerBits(a, &b->unkC, 9); - SaveIntegerBits(a, &b->unkE, 9); - SaveIntegerBits(a, &b->unk10, 8); - SaveIntegerBits(a, &b->unk11, 4); - SaveIntegerBits(a, &b->unk12, 8); - SaveIntegerBits(a, &b->unk13, 6); + SaveIntegerBits(a, &b->clientSpecies, 9); + SaveIntegerBits(a, &b->targetSpecies, 9); + SaveIntegerBits(a, &b->targetItem, 8); + SaveIntegerBits(a, &b->rewardType, 4); + SaveIntegerBits(a, &b->itemReward, 8); + SaveIntegerBits(a, &b->friendAreaReward, 6); SaveIntegerBits(a, &b->unk8, 0x18); - SaveDungeonLocation(a, &b->unk4); + SaveDungeonLocation(a, &b->dungeon); } void sub_80972F4(void) @@ -218,3 +203,43 @@ s32 sub_8097318(s16 param_1) } return iVar1; } + +void sub_809733C(short param_1,u32 param_2) +{ + s32 uVar2; + u8 param_2_u8; + u16 uVar2_u16; + + uVar2 = param_1; + param_2_u8 = param_2; + + if (uVar2 != 0xd) { + uVar2_u16 = uVar2; + if ((((sub_8001784(0,0x2c,uVar2_u16) == 0) && (sub_800199C(0,0x2b,uVar2_u16,param_2_u8), param_2_u8 != '\0')))){ + switch(uVar2) + { + case 0xE: + case 0xF: + case 0x1C: + sub_809674C(); + break; + } + } + } +} + +bool32 sub_8097384(s16 param_1) +{ + bool32 iVar1; + + if (param_1 == 0xd) { + iVar1 = FALSE; + } + else { + iVar1 = sub_8001784(0,0x2c,param_1 & 0xffff); + if (iVar1 != 0) { + iVar1 = TRUE; + } + } + return iVar1; +} diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index d8d2c597d..3918ab349 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -24,9 +24,11 @@ extern const char gUnknown_8115FE8; struct unkStruct_811BAF4 { - u16 unk0; + s16 unk0; s16 unk2; - u8 fill4[8]; + s16 unk4; + s16 unk6; + u8 *text; }; extern struct unkStruct_811BAF4 gUnknown_811BAF4[10]; diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index a15ddcfeb..a5f51c722 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -13,6 +13,23 @@ extern s16 gUnknown_8116F9A[]; extern s16 gUnknown_8116F24[]; extern const u8 *gUnknown_8117000[]; +extern void sub_809AC18(s32, s32); +extern void sub_809ABB4(s32, s32); + +void sub_80A2584(s16 r0, s16 r1) +{ + s32 iVar2 = r1; + s32 iVar1 = r0; + sub_809ABB4(iVar1, iVar2); +} + +void sub_80A2598(s16 r0, s16 r1) +{ + s32 iVar2 = r1; + s32 iVar1 = r0; + sub_809AC18(iVar1, iVar2); +} + u32 sub_80A25AC(u16 param_1) { if (sub_8098F88() != 0) { diff --git a/src/code_80A7714.c b/src/code_80A7714.c index 7944091df..a6b912658 100644 --- a/src/code_80A7714.c +++ b/src/code_80A7714.c @@ -48,7 +48,7 @@ void sub_80A7784(void) } } -u8 sub_80A77A0(s16 r0, u32 r1) +u8 sub_80A77A0(s16 r0) { s32 temp; s32 temp2; diff --git a/src/dungeon_2_1.c b/src/dungeon_2_1.c new file mode 100644 index 000000000..899447068 --- /dev/null +++ b/src/dungeon_2_1.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "dungeon.h" +#include "constants/dungeon.h" +#include "code_800D090.h" +#include "pokemon.h" +#include "random.h" +#include "code_8092334.h" + +extern u8 gUnknown_810A350[]; +extern u8 gDungeonFloorCount[]; +extern u8 *gUnknown_8108084[]; + +s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c + +u32 sub_80908D8(struct DungeonLocation *dungeon) +{ + if ((dungeon->dungeonIndex < DUNGEON_OUT_ON_RESCUE) && (dungeon->dungeonFloor < gDungeonFloorCount[dungeon->dungeonIndex])) { + return gUnknown_8108084[dungeon->dungeonIndex][dungeon->dungeonFloor]; + } + else { + return 1; + } +} + +u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2) +{ + u32 rand1; + u32 rand2; + + rand1 = RandomCapped(9999); + rand2 = RandomCapped(9999); + if ((dungeon->dungeonIndex < DUNGEON_OUT_ON_RESCUE) && (dungeon->dungeonFloor < gDungeonFloorCount[dungeon->dungeonIndex])) { + return sub_8091E94(param_2, rand1, rand2); + } + else { + return 0x46; + } +} + +bool8 sub_809095C(u8 dungeon) +{ + s32 counter; + + if (dungeon >= DUNGEON_OUT_ON_RESCUE) { + return TRUE; + } + else + { + counter = 0; + if (gUnknown_810A350[0] != DUNGEON_OUT_ON_RESCUE) { + for(; gUnknown_810A350[counter] != DUNGEON_OUT_ON_RESCUE; counter++) + { + if (gUnknown_810A350[counter] == dungeon) return TRUE; + } + } + return FALSE; + } +} diff --git a/src/dungeon_engine.c b/src/dungeon_engine.c index 61f5a9d8d..08a1aef80 100644 --- a/src/dungeon_engine.c +++ b/src/dungeon_engine.c @@ -46,7 +46,7 @@ void RunDungeon(u8 param_1) if (!sub_8044B28()) { cVar2 = xxx_dungeon_80442D0(param_1); if (!sub_8044B28()) { - if (cVar2 != '\0') { + if (cVar2 != 0) { sub_807E378(); if (sub_8044B28()) { return; @@ -59,7 +59,7 @@ void RunDungeon(u8 param_1) if (!sub_8044B28()) { sub_8044AB4(); gDungeonGlobalData->speedTurnCounter++; - if ( (s16)gDungeonGlobalData->speedTurnCounter == 0x18) { + if (gDungeonGlobalData->speedTurnCounter == 24) { gDungeonGlobalData->speedTurnCounter = 0; } } diff --git a/src/dungeon_movement_1.c b/src/dungeon_movement_1.c index 4d2635d32..b1a57f06a 100644 --- a/src/dungeon_movement_1.c +++ b/src/dungeon_movement_1.c @@ -2,9 +2,15 @@ #include "dungeon_movement_1.h" #include "constants/item.h" +#include "constants/iq_skill.h" #include "constants/status.h" +#include "dungeon_engine.h" #include "dungeon_items.h" +#include "dungeon_global_data.h" #include "dungeon_movement.h" +#include "dungeon_map_access.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_util.h" #include "map.h" bool8 CanCrossWalls(struct DungeonEntity *pokemon) @@ -25,3 +31,43 @@ bool8 CanCrossWalls(struct DungeonEntity *pokemon) } return FALSE; } + +bool8 sub_807049C(struct DungeonEntity *pokemon, struct Position *pos) +{ + s32 crossableTerrain; + struct MapTile *tile; + u16 tileFlags; + struct DungeonEntityData *entityData; + + entityData = pokemon->entityData; + tile = GetMapTile_1(pos->x, pos->y); + if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) && + (DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) && + (tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON))) { + if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) { + crossableTerrain = GetCrossableTerrain(entityData->entityID); + tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); + if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) { + crossableTerrain = CROSSABLE_TERRAIN_CREVICE; + } + if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) { + crossableTerrain = CROSSABLE_TERRAIN_WALL; + } + switch(crossableTerrain) + { + case CROSSABLE_TERRAIN_LIQUID: + if(tileFlags == TILE_TYPE_LIQUID) return FALSE; + case CROSSABLE_TERRAIN_REGULAR: + if(tileFlags == TILE_TYPE_FLOOR) return FALSE; + break; + case CROSSABLE_TERRAIN_WALL: + default: + return FALSE; + case CROSSABLE_TERRAIN_CREVICE: + if(tileFlags != 0) return FALSE; + } + } + else return FALSE; + } + return TRUE; +} diff --git a/src/dungeon_range.c b/src/dungeon_range.c index e504a609f..d242d17fa 100644 --- a/src/dungeon_range.c +++ b/src/dungeon_range.c @@ -98,3 +98,112 @@ returnFalse: } return TRUE; } + +void sub_80833E8(struct Position *param_1, s32 *param_2) +{ + struct MapTile *tile; + struct MapRoom *room; + u32 visibility; + u32 roomIndex; + + tile = GetMapTile_1(param_1->x, param_1->y); + visibility = gDungeonGlobalData->visibility; + if (visibility == 0) { + visibility = 2; + } + roomIndex = tile->roomIndex; + if (roomIndex == CORRIDOR_ROOM_INDEX) { + param_2[0] = param_1->x - visibility; + param_2[2] = param_1->x + visibility + 1; + param_2[1] = param_1->y - visibility; + param_2[3] = param_1->y + visibility + 1; + } + else { + room = &gDungeonGlobalData->roomData[roomIndex]; + param_2[0] = room->startX - 1; + param_2[2] = room->endX + 2; + param_2[1] = room->startY - 1; + param_2[3] = room->endY + 2; + } +} + +bool8 IsTargetTwoTilesAway(struct Position *pos1, struct Position *pos2) +{ + s32 counter; + struct MapTile *tile; + s32 diff; + s32 yCoord; + s32 xCoord; + s32 xDiff; + s32 yDiff; + s32 yCoord_1; + s32 xCoord_1; + + diff = pos1->x - pos2->x; + if (diff < 0) { + diff = -diff; + } + if (diff < 2) { + diff = pos1->y - pos2->y; + if (diff < 0) { + diff = -diff; + } + if (1 >= diff) return TRUE; + } + xDiff = pos1->x - pos2->x; + if (xDiff < 0) { + xDiff = -xDiff; + } + yDiff = pos1->y - pos2->y; + if (yDiff < 0) { + yDiff = -yDiff; + } + if (yDiff < xDiff) { + yDiff = xDiff; + } + if (yDiff == 2) { + + xCoord = pos1->x; + yCoord = pos1->y; + + for(counter = 0; counter < 2; counter++){ + if (xCoord < pos2->x) { + xCoord = xCoord + 1; + } + if (xCoord > pos2->x) { + xCoord = xCoord - 1; + } + if (yCoord < pos2->y) { + yCoord = yCoord + 1; + } + if (yCoord > pos2->y) { + yCoord = yCoord -1; + } + tile = GetMapTile_1(xCoord,yCoord); + if ((tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) == 0) return FALSE; + } + + xCoord_1 = pos2->x; + yCoord_1 = pos2->y; + + for(counter = 0; counter < 2; counter++) + { + if (xCoord_1 < pos1->x) { + xCoord_1 = xCoord_1 + 1; + } + if (xCoord_1 > pos1->x) { + xCoord_1 = xCoord_1 - 1; + } + if (yCoord_1 < pos1->y) { + yCoord_1 = yCoord_1 + 1; + } + if (yCoord_1 > pos1->y) { + yCoord_1 = yCoord_1 - 1; + } + tile = GetMapTile_1(xCoord_1, yCoord_1); + if ((tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) == 0) return FALSE; + } + return TRUE; + } + return FALSE; +} diff --git a/src/ground_map.c b/src/ground_map.c index 967589da7..0f882332a 100644 --- a/src/ground_map.c +++ b/src/ground_map.c @@ -1,18 +1,13 @@ #include "global.h" #include "memory.h" #include "debug.h" +#include "ground_script.h" -struct unkStruct_3001B6C -{ - // size: 0x110 - u8 fill0[0xE4]; - u16 unkE4; -}; +extern struct GroundScript_ExecutePP_1 *gUnknown_3001B6C; -extern struct unkStruct_3001B6C *gUnknown_3001B6C; -extern u8 gUnknown_811736C[]; extern struct DebugLocation gUnknown_8117538[]; +extern u8 gUnknown_811736C[]; extern u8 *gUnknown_3001B70; extern void sub_809D600(void *, u8 *, u32, u32, u32); diff --git a/src/ground_map_1.c b/src/ground_map_1.c index 4490ab54a..6e1f47614 100644 --- a/src/ground_map_1.c +++ b/src/ground_map_1.c @@ -1,8 +1,107 @@ #include "global.h" +#include "debug.h" +#include "ground_script.h" -extern void GroundMap_GetStationScript(u32, s16, u32, u32); +extern struct GroundScript_ExecutePP_1 *gUnknown_3001B6C; -void sub_80A4BE8(u32 r0, s16 r1) +struct unkStruct_811BAF4 { - GroundMap_GetStationScript(r0, r1, 0, 0); -} \ No newline at end of file + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + u8 *text; +}; + +extern struct unkStruct_811BAF4 gUnknown_811BAF4[10]; + +extern struct DebugLocation gUnknown_8117698; +extern struct DebugLocation gUnknown_8117644; +extern struct DebugLocation gUnknown_81175E0; +extern u8 gUnknown_8117594[]; +extern u8 gUnknown_81175EC[]; +extern u8 gUnknown_8117650[]; + +extern void GroundMap_GetStationScript(struct GroundScript_ExecutePP_3 *, s16, u32, u32); + +bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused); +extern u8 sub_809D678(void *); +extern void sub_809D710(u32,struct GroundScript_ExecutePP_3 *, s32); +extern u8 sub_809D968(void *, s32); + +void sub_80A4BE8(struct GroundScript_ExecutePP_3 *script, s16 r1) +{ + GroundMap_GetStationScript(script, r1, 0, 0); +} + +void GroundMap_ExecuteEvent(s16 param_1, u32 param_2) +{ + struct GroundScript_ExecutePP_3 script; + s32 iVar1; + u8 iVar2; + + iVar1 = param_1; + iVar2 = param_2; + + Log(0,gUnknown_8117594,iVar1,iVar2); // "GroundMap ExecuteEvent %3d %d + sub_809D710(0,&script,iVar1); + if (iVar2 != 0) { + script.scriptType = 5; + } + GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_81175E0); +} + +void GroundMap_ExecuteStation(s16 param_1, s16 param_2, s8 param_3, u32 param_4) +{ + struct GroundScript_ExecutePP_3 script; + s32 iVar1; + s32 iVar2; + s32 iVar3; + u8 iVar4; + + iVar1 = param_1; + iVar2 = param_2; + iVar3 = param_3; + iVar4 = param_4; + + Log(0,gUnknown_81175EC,iVar1,iVar2,iVar3,iVar4); // GroundMap ExecuteStation %3d %3d %3d %d + GroundMap_GetStationScript(&script,iVar1,iVar2,iVar3); + if (iVar4 != 0) { + script.scriptType = 5; + } + GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_8117644); +} + +void GroundMap_ExecuteEnter(s16 param_1) +{ + struct GroundScript_ExecutePP_3 script; + s32 iVar1; + + iVar1 = param_1; + + Log(0,gUnknown_8117650,iVar1); // GroundMap ExecuteEnter %3d + sub_80A4BE8(&script, iVar1); + script.scriptType = 2; + script.unk6 = 0; + script.unk8 = 0; + GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_8117698); +} + +u8 sub_80A4D14(void) +{ + return sub_809D678(gUnknown_3001B6C); +} + +u8 sub_80A4D2C(s16 param_1) +{ + s32 iVar1 = param_1; + return sub_809D968(gUnknown_3001B6C,iVar1); +} + +bool8 sub_80A4D48(s16 index) +{ + if (index == -1) return TRUE; + else if(gUnknown_811BAF4[index].unk0 == 5) return FALSE; + else if(gUnknown_811BAF4[index].unk0 != 8) return TRUE; + else return FALSE; +} diff --git a/src/ground_script.c b/src/ground_script.c index 2a6c09d1f..ea06a1e27 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -1,63 +1,30 @@ #include "global.h" #include "debug.h" +#include "ground_script.h" +extern u8 gUnknown_2039A36; +extern u8 gUnknown_2039A38[]; +extern u32 gUnknown_2039B48[]; +extern u8 gUnknown_2039AC0[]; extern u32 gUnknown_8116588; extern u32 gUnknown_8116538; extern u32 gUnknown_8116560; - extern u8 gUnknown_8116594[]; extern u8 gUnknown_8116544[]; extern u8 gUnknown_811656C[]; +extern struct DebugLocation gUnknown_81165C8; -struct GroundScript_ExecutePP_3 -{ - // size: 0xC - u32 unk0; - s16 scriptType; - s16 unk6; - u8 unk8; -}; - -struct GroundScript_ExecutePP_1_sub -{ - // size: 0x60 - /* 0x0 */ s16 scriptType; - /* 0x2 */ s16 unk2; - /* 0x4 */ u32 unk4; - /* 0x8 */ u32 unk8; - /* 0xC */ u16 unkC; - /* 0xE */ u8 unkE; - /* 0xF */ u8 fillF; - /* 0x10 */ u32 unk10; - /* 0x14 */ u32 unk14; - /* 0x18 */ u8 fill3C[0x26 - 0x18]; - /* 0x26 */ u32 unk26; - u8 fill50[0x60 - 0x2A]; -} __attribute__((packed)); - -typedef void (*Callback)(u32, void *); -struct GroundScript_ExecutePP_1_sub2 -{ - Callback callbacks[10]; // IDK the size.. -}; - -struct GroundScript_ExecutePP_1 -{ - struct GroundScript_ExecutePP_1_sub2 *unk0; - u32 unk4; - u32 fill8; - u32 unkC; - u32 fill10; - u8 fill18[0x24 - 0x14]; - struct GroundScript_ExecutePP_1_sub unk24; - struct GroundScript_ExecutePP_1_sub unk84; -}; - +extern u8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *); extern void sub_809D520(void *); extern void sub_809D568(void *); +extern u8 sub_80AC378(void); +extern u8 sub_80AD290(void); +extern u8 sub_80A8B74(void); extern void sub_809D6E4(struct GroundScript_ExecutePP_1 *, struct GroundScript_ExecutePP_3 *, s32); +extern u8 sub_809A750(void); +extern u32 sub_80A2460(struct GroundScript_ExecutePP_1 *param_1, u32); void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused) @@ -69,7 +36,7 @@ bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *para case 2: case 3: if (param_1->unk24.scriptType == 1) { - memcpy(¶m_1->unk84, ¶m_1->unk24, 0x60); + memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); break; } if (param_1->unk24.scriptType == 5) { @@ -85,11 +52,11 @@ bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *para // "execute script type error C" FatalError(&gUnknown_8116560, gUnknown_811656C); } - memcpy(¶m_1->unk84, ¶m_1->unk24, 0x60); + memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); break; case 0: if (param_1->unk24.scriptType != 1) goto _0809D84A; - memcpy(¶m_1->unk84, ¶m_1->unk24, 0x60); + memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); break; case 1: _0809D84A: @@ -128,3 +95,97 @@ bool8 sub_809D8C0(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, s16 pa sub_809D6E4(param_1,&auStack28,param_3); return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug); } + +u8 sub_809D8EC(struct GroundScript_ExecutePP_1 *param_1, s16 param_2) +{ + s32 param_2_s32; + + param_2_s32 = param_2; + + if ((param_2 == 0) && (sub_809A750() == 0)) { + param_1->unk24.unk4 = sub_80A2460(param_1,0); + return 0; + } + else { + param_1->unk24.unk22 = param_2_s32; + param_1->unk24.unk2 = 2; + gUnknown_2039A36 = 1; + return 1; + } +} + + +u8 sub_809D92C(struct GroundScript_ExecutePP_1 *r0) +{ + return sub_809D770(r0, &gUnknown_81165C8); +} + +u8 sub_809D940(void) +{ + u8 ret; + + ret = sub_80A8B74(); + ret |= sub_80AC378(); + ret |= sub_80AD290(); + return ret; +} + +bool8 sub_809D968(struct GroundScript_ExecutePP_1 * param_1, s16 param_2) +{ + s16 sVar1; + s16 sVar2; + bool8 ret; + + s32 param_2_s16 = param_2; + + ret = FALSE; + sVar1 = param_1->unk24.unk22; + if ((sVar1 != -1) && (sVar1 == param_2_s16)) { + param_1->unk24.unk22 = -1; + ret = TRUE; + } + sVar2 = param_1->unk84.unk22; + if ((sVar2 != -1) && (sVar2 == param_2_s16)) { + param_1->unk84.unk22 = -1; + ret = TRUE; + } + return ret; +} + +void sub_809D9B8(s16 index) +{ + s32 index_s16 = index; + gUnknown_2039A38[index_s16] = 1; + gUnknown_2039B48[index_s16] = 0; + gUnknown_2039A36 = 1; +} + +void sub_809D9E0(s16 index, s32 r1) +{ + s32 index_s16 = index; + gUnknown_2039A38[index_s16] = 1; + gUnknown_2039B48[index_s16] = r1; + gUnknown_2039A36 = 1; +} + +bool8 sub_809DA08(struct GroundScript_ExecutePP_1 *param_1, s16 index, u32 param_3) +{ + s32 index_s32; + + index_s32 = index; + gUnknown_2039B48[index_s32] = param_3; + if (index_s32 == 0) { + if (sub_809A750() == 0) { + return FALSE; + } + param_1->unk24.unk22 = index_s32; + } + else { + param_1->unk24.unk22 = index_s32 | 0x80; + gUnknown_2039A38[index_s32] = 1; + gUnknown_2039AC0[index_s32] = 1; + } + param_1->unk24.unk2 = 2; + gUnknown_2039A36 = 1; + return TRUE; +} diff --git a/src/post_office_guide.c b/src/post_office_guide.c index a40b8a767..43b0d7a72 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -635,11 +635,11 @@ void DisplayMissionObjectives(void) for(jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++) { jobInfo = GetJobSlotInfo(jobSlotIdx); - if ((((jobInfo->dungeon == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) + if ((((jobInfo->dungeon.dungeonIndex == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) ) && (jobInfo->mailType != 5)) && (jobInfo->mailType != 7)) { sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10); if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) { - sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->floor); + sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->dungeon.dungeonFloor); xxx_call_draw_string(21,yCoord,auStack144,gUnknown_203B330->unk10,0); } switch(jobInfo->missionType) diff --git a/src/status.c b/src/status.c index e02a40326..a95c10d78 100644 --- a/src/status.c +++ b/src/status.c @@ -1,9 +1,11 @@ #include "global.h" #include "status.h" -#include "constants/status.h" #include "constants/ability.h" +#include "constants/status.h" +#include "constants/type.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_ai_targeting.h" +#include "dungeon_global_data.h" #include "dungeon_map_access.h" #include "dungeon_util.h" #include "dungeon_items.h" @@ -56,24 +58,52 @@ extern u8 *gUnknown_80FD500[]; extern s16 gUnknown_80F4ECC[]; extern u8 *gUnknown_80FB960[]; extern u8 *gUnknown_80FB940[]; +extern u8 *gUnknown_80FB204[]; +extern u8 *gUnknown_80FB240[]; +extern u8 *gUnknown_80FB1E0[]; +extern u8 *gUnknown_80FB1C4[]; +extern u8 *gUnknown_80FB21C[]; +extern u8 *gUnknown_80FAEA0[]; +extern u8 *gUnknown_80FAEF0[]; +extern u8 *gUnknown_80FAF3C[]; +extern u8 *gUnknown_80FAEC8[]; +extern u8 *gUnknown_80FAF1C[]; +extern u8 *gUnknown_80FAFAC[]; +extern u8 *gUnknown_80FAFD0[]; +extern u8 *gPtrCantLeechSeedSelfMessage[]; +extern u8 *gPtrCantLeechSeedMonMessage[]; +extern u8 *gUnknown_80FAA8C[]; +extern u8 *gUnknown_80FAE58[]; +extern u8 *gUnknown_80FAE7C[]; +extern s16 gUnknown_80F4EB0[]; +extern s32 gUnknown_202DE30[10]; + +extern u8 sub_8043D10(void); +extern void nullsub_75(struct DungeonEntity *); +extern void nullsub_76(struct DungeonEntity *); +extern void nullsub_77(struct DungeonEntity *); +extern void nullsub_78(struct DungeonEntity *); +extern void sub_803F580(u32); +extern void sub_8040A84(void); +extern void sub_8041CA8(struct DungeonEntity *); +extern void sub_8041C94(struct DungeonEntity *); +extern u8 sub_8045888(struct DungeonEntity *r0); +extern void sub_803ED30(s32, struct DungeonEntity *r0, u8, s32); extern void sub_8041BF8(struct DungeonEntity *); extern void sub_8041BE8(struct DungeonEntity *); extern void sub_8041CCC(struct DungeonEntity *); extern void sub_8041CB8(struct DungeonEntity *r0); extern void sub_8041C1C(struct DungeonEntity *r0); extern s32 GetMovementSpeed(struct DungeonEntity *); - extern void sub_8042060(struct DungeonEntity *, s32); extern bool8 sub_8071728(struct DungeonEntity * param_1, struct DungeonEntity * param_2, u8 param_3); extern void sub_8041FB4(struct DungeonEntity *r0, u32 r1); extern void sub_8041FD8(struct DungeonEntity *r0, u32 r1); extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, u8 *); extern s32 sub_8009DA4(s32, s32); - extern void sub_804201C(struct DungeonEntity *r0, u32 r1); extern void sub_8041FFC(struct DungeonEntity *r0, u32 r1); - extern void SetMessageArgument(char[], struct DungeonEntity*, u32); extern void SetMessageArgument_2(char[], struct DungeonEntityData*, u32); extern void sub_8041C58(struct DungeonEntity *r0); @@ -523,14 +553,14 @@ void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) { - struct DungeonEntityData *iVar3; + struct DungeonEntityData *entityData; if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,displayMessage))) { - iVar3 = target->entityData; + entityData = target->entityData; SetMessageArgument(gAvailablePokemonNames,target,0); - if (iVar3->volatileStatus != VOLATILE_STATUS_COWERING) { - iVar3->volatileStatus = VOLATILE_STATUS_COWERING; - iVar3->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,1) + 1; + if (entityData->volatileStatus != VOLATILE_STATUS_COWERING) { + entityData->volatileStatus = VOLATILE_STATUS_COWERING; + entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,1) + 1; sub_8041BF8(target); sub_80522F4(pokemon,target,*gUnknown_80FB940); } @@ -540,3 +570,226 @@ void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, DungeonEntityUpdateStatusSprites(target); } } + +void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, u32 displayMessage) +{ + struct DungeonEntityData *entityData; + s32 HP; + s32 maxHP; + s32 r8; + u8 displayMessage_u8; + + displayMessage_u8 = displayMessage; + + if (!EntityExists(target)) { + return; + } + + entityData = target->entityData; + maxHP = entityData->maxHP; + HP = entityData->HP; + if (((entityData->HP == entityData->maxHP) && (0 < param_4)) || (param_3 == 0)) { + entityData->maxHP += param_4; + entityData->HP += param_4; + if (entityData->maxHP > 999) { + entityData->maxHP = 999; + } + if (entityData->HP > entityData->maxHP) { + entityData->HP = entityData->maxHP; + } + if (entityData->HP == entityData->maxHP) { + HP = entityData->HP; + } + sub_8041C94(target); + } + else { + entityData->HP += param_3; + if (entityData->HP > entityData->maxHP) { + entityData->HP = entityData->maxHP; + } + sub_8041CA8(target); + } + maxHP = entityData->maxHP - maxHP; + HP = entityData->HP - HP; + DungeonEntityUpdateStatusSprites(target); + gUnknown_202DE30[0] = HP; + gUnknown_202DE30[1] = maxHP; + SetMessageArgument(gAvailablePokemonNames,target,0); + if ((HP == 0) && (maxHP == 0)) { + if (displayMessage_u8) + sub_80522F4(pokemon,target,*gUnknown_80FB204); // $m0's HP remained unchanged + } + else if ((param_4 == 0) && (HP == 0)) + { + if (displayMessage_u8) + sub_80522F4(pokemon,target,*gUnknown_80FB21C); // $m0 has full HP + } + else + { + r8 = 0; + if (maxHP != 0) { + if (sub_8045888(target) != 0) { + r8 = maxHP; + } + sub_80522F4(pokemon,target,*gUnknown_80FB240); // m0$'s max HP rose by $d1 + } + if (HP != 0) { + if (sub_8045888(target) != 0) { + r8 = HP; + } + if (param_3 != 0) { + if (entityData->maxHP == entityData->HP) { + sub_80522F4(pokemon,target,*gUnknown_80FB1E0); // $m0 was fully healed + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB1C4); // $m0 recovered $d0 HP + } + } + } + if (r8) + sub_803ED30(r8,target,1,-1); + } +} + +void HandleScannerOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target) +{ + if (EntityExists(target)) { + if (target->entityData->scanningStatus) { + sub_80522F4(pokemon,target,*gUnknown_80FAEF0); // Item locations are already known + } + else + { + target->entityData->scanningStatus = TRUE; + nullsub_75(target); + SetMessageArgument(gAvailablePokemonNames, target, 0); + sub_80522F4(pokemon,target,*gUnknown_80FAEA0); // Item locations became evident + sub_803F580(0); + sub_8040A84(); + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void HandleStairsOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target) +{ + if (EntityExists(target)) { + if(sub_8043D10()) + { + sub_80522F4(pokemon,target,*gUnknown_80FAF3C); + } + else + { + if (target->entityData->stairSpotterStatus) { + sub_80522F4(pokemon,target,*gUnknown_80FAF1C); + } + else + { + target->entityData->stairSpotterStatus = TRUE; + nullsub_76(target); + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FAEC8); + sub_803F580(0); + sub_8040A84(); + DungeonEntityUpdateStatusSprites(target); + } + } + } +} + +void HandleRadarOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target) +{ + if (EntityExists(target)) { + if (target->entityData->radarStatus != 0) { + sub_80522F4(pokemon,target,*gUnknown_80FAFD0); + } + else + { + target->entityData->radarStatus = TRUE; + nullsub_77(target); + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FAFAC); + sub_803F580(0); + sub_8040A84(); + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void HandleLeechSeed(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +{ + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData2; + s32 index; + + if ((EntityExists(target)) && (GetEntityType(pokemon) == ENTITY_POKEMON)) { + entityData = target->entityData; + if (pokemon == target) { + pokemon = target; + if (displayMessage) + sub_80522F4(pokemon,target,*gPtrCantLeechSeedSelfMessage); + } + else { + if (HasSafeguardStatus(pokemon,target,displayMessage)) { + return; + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (HasType(target, TYPE_GRASS)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gPtrCantLeechSeedMonMessage); + } + else + { + switch(entityData->linkedStatus) + { + case LINKED_STATUS_DESTINY_BOND: + sub_80522F4(pokemon,target,*gUnknown_80FAA8C); + default: + entityData->linkedStatus = LINKED_STATUS_LEECH_SEED; + entityData->linkedStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4EB0, TRUE) + 1; + entityData->linkedStatusDamageTimer = 0; + nullsub_78(target); + entityData->unkD8 = 0xff; + break; + case LINKED_STATUS_LEECH_SEED: + sub_80522F4(pokemon,target,*gUnknown_80FAE7C); + return; + } + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + if (pokemon == gDungeonGlobalData->allPokemon[index]) { + entityData->unkD8 = index; + entityData2 = pokemon->entityData; + entityData->unkD4 = entityData2->unk98; + } + } + sub_80522F4(pokemon,target,*gUnknown_80FAE58); + DungeonEntityUpdateStatusSprites(target); + } + } + } + } + +void sub_8078084(struct DungeonEntity * pokemon) +{ + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData2; + struct DungeonEntity *target; + s32 index; + + entityData = pokemon->entityData; + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + target = gDungeonGlobalData->allPokemon[index]; + if (EntityExists(target)) { + entityData2 = target->entityData; + if((u8)(entityData2->linkedStatus - 1) <= 1) + { + if(entityData2->unkD4 == entityData->unk98) + { + entityData2->linkedStatus = LINKED_STATUS_NONE; + DungeonEntityUpdateStatusSprites(target); + } + } + } + } + } diff --git a/src/status_checker.c b/src/status_checker.c index cb396c146..9710d0247 100644 --- a/src/status_checker.c +++ b/src/status_checker.c @@ -32,7 +32,6 @@ extern void sub_807F43C(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8078F50(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8077E4C(struct DungeonEntity *, struct DungeonEntity *); extern void sub_807DC68(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8077BB4(struct DungeonEntity *, struct DungeonEntity *, u8); extern void sub_8078A58(struct DungeonEntity *, struct DungeonEntity *, s16, u32); @@ -64,8 +63,6 @@ extern void sub_807DA14(struct DungeonEntity *, struct DungeonEntity *, s32); extern s16 sub_803D970(u32); extern u8 sub_806AA0C(s32, u32); extern void sub_806BB6C(struct DungeonEntity *, s32); -extern void sub_8077DDC(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8077ED0(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8075C58(struct DungeonEntity *, struct DungeonEntity *, s32, s32); extern void sub_807E254(struct DungeonEntity *, struct DungeonEntity *, u32); extern bool8 sub_805727C(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 chance); @@ -78,9 +75,7 @@ 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 sub_8078678(struct DungeonEntity *, struct DungeonEntity *); -extern void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *r1, s32, s16, u32); extern void sub_806F324(struct DungeonEntity *, s32, u32, u32); -extern void sub_8077F40(struct DungeonEntity *, struct DungeonEntity *, u32); extern void sub_8077160(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern bool8 sub_805755C(struct DungeonEntity* pokemon,u16 moveID); extern void sub_807614C(struct DungeonEntity *, struct DungeonEntity *, u32); @@ -349,25 +344,25 @@ bool8 sub_805B214(struct DungeonEntity * pokemon,struct DungeonEntity * target,s return TRUE; } -bool8 TrapperOrbAction(struct DungeonEntity * param_1,struct DungeonEntity * param_2) +bool8 TrapperOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { bool8 trapLaid; u8 uVar2; bool8 isEnemy; trapLaid = FALSE; - isEnemy = param_1->entityData->isEnemy; + isEnemy = pokemon->entityData->isEnemy; uVar2 = 1; if (isEnemy) { uVar2 = 2; } - if (sub_807FCD4(¶m_1->posWorld,0x13,uVar2) != 0) { + if (sub_807FCD4(&pokemon->posWorld,0x13,uVar2) != 0) { trapLaid = TRUE; } else { - sub_80522F4(param_1,param_2,*gUnknown_80FC5A8); // A trap can't be laid here! + sub_80522F4(pokemon,target,*gUnknown_80FC5A8); // A trap can't be laid here! } sub_8049ED4(); return trapLaid; @@ -558,9 +553,9 @@ _0805B598: return local_24; } -bool8 sub_805B5F4(struct DungeonEntity * pokemon, struct DungeonEntity * target) +bool8 LeechSeedMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8077F40(pokemon, target, 1); + HandleLeechSeed(pokemon, target, TRUE); if (pokemon->entityData->unkFB == 0) { pokemon->entityData->unkFB = 1; } @@ -975,15 +970,15 @@ bool8 SilenceOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * ta return TRUE; } -bool8 sub_805BD70(struct DungeonEntity * pokemon, struct DungeonEntity * target) +bool8 ScannerOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8077DDC(pokemon, target); + HandleScannerOrb(pokemon, target); return TRUE; } -bool8 sub_805BD7C(struct DungeonEntity * pokemon, struct DungeonEntity * target) +bool8 RadarOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8077ED0(pokemon, target); + HandleRadarOrb(pokemon, target); return TRUE; } @@ -1136,11 +1131,11 @@ bool8 TrapbustOrbAction(struct DungeonEntity * pokemon,struct DungeonEntity * ta return foundTrap; } -bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *param_2) +bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *target) { struct DungeonEntity **possibleTargets; s32 numPossibleTargets; - struct DungeonEntity *target; + struct DungeonEntity *targetEntity; bool8 foundTarget; s32 index; @@ -1154,15 +1149,15 @@ bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *param_2) numPossibleTargets = MAX_TEAM_MEMBERS; } for(index = 0; index < numPossibleTargets; index++){ - target = possibleTargets[index]; - if (((EntityExists(target)) && (pokemon != target)) && - (CanTarget(pokemon,target,1,FALSE) == 0)) { - sub_807D148(pokemon,target,2,&pokemon->posWorld); + targetEntity = possibleTargets[index]; + if (((EntityExists(targetEntity)) && (pokemon != targetEntity)) && + (CanTarget(pokemon,targetEntity,1,FALSE) == 0)) { + sub_807D148(pokemon,targetEntity,2,&pokemon->posWorld); foundTarget = TRUE; } } if (!foundTarget) { - sub_80522F4(pokemon,param_2,*gUnknown_81004F0); + sub_80522F4(pokemon,target,*gUnknown_81004F0); } return foundTarget; } @@ -1329,9 +1324,9 @@ bool8 sub_805C468(struct DungeonEntity *pokemon, struct DungeonEntity *target) return TRUE; } -bool8 sub_805C474(struct DungeonEntity *pokemon, struct DungeonEntity *target) +bool8 StairsOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8077E4C(pokemon, target); + HandleStairsOrb(pokemon, target); return TRUE; } diff --git a/src/status_checks_1.c b/src/status_checks_1.c index f920ec4e3..0bfe50f3c 100644 --- a/src/status_checks_1.c +++ b/src/status_checks_1.c @@ -2,10 +2,16 @@ #include "status_checks_1.h" #include "constants/ability.h" +#include "constants/iq_skill.h" #include "constants/status.h" +#include "constants/type.h" #include "constants/weather.h" +#include "dungeon_engine.h" #include "dungeon_global_data.h" +#include "dungeon_items.h" +#include "dungeon_movement.h" #include "dungeon_pokemon_attributes.h" +#include "dungeon_map_access.h" #include "dungeon_util.h" #include "code_800D090.h" #include "code_80521D0.h" @@ -21,6 +27,128 @@ extern u8 *gUnknown_80F8968[]; extern u8 *gUnknown_80F8988[]; extern u8 gUnknown_8106FA4[]; +bool8 sub_80705F0(struct DungeonEntity *pokemon, struct Position *pos) +{ + s32 crossableTerrain; + struct MapTile *tile; + u16 tileFlags; + struct DungeonEntityData *entityData; + + entityData = pokemon->entityData; + tile = GetMapTile_1(pos->x, pos->y); + if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) && + (DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) && + ((tile->pokemon == NULL) || ((GetEntityType(tile->pokemon) == ENTITY_POKEMON)))) { + if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) { + crossableTerrain = GetCrossableTerrain(entityData->entityID); + tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); + if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) { + crossableTerrain = CROSSABLE_TERRAIN_CREVICE; + } + if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) { + crossableTerrain = CROSSABLE_TERRAIN_WALL; + } + + switch(crossableTerrain) + { + case CROSSABLE_TERRAIN_WALL: + default: + return FALSE; + case CROSSABLE_TERRAIN_REGULAR: + case CROSSABLE_TERRAIN_LIQUID: + case CROSSABLE_TERRAIN_CREVICE: + if(tileFlags != 0) return FALSE; + } + } + else return FALSE; + } + return TRUE; +} + +bool8 sub_80706A4(struct DungeonEntity *pokemon, struct Position *pos) +{ + s32 crossableTerrain; + struct MapTile *tile; + u16 tileFlags; + struct DungeonEntityData *entityData; + + entityData = pokemon->entityData; + tile = GetMapTile_1(pos->x, pos->y); + if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) && + (DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) && + ((tile->pokemon == NULL) || ((GetEntityType(tile->pokemon) == ENTITY_POKEMON) && (tile->pokemon->entityData == entityData)))) { + if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) { + crossableTerrain = GetCrossableTerrain(entityData->entityID); + tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); + if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) { + crossableTerrain = CROSSABLE_TERRAIN_CREVICE; + } + if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) { + crossableTerrain = CROSSABLE_TERRAIN_WALL; + } + switch(crossableTerrain) + { + case CROSSABLE_TERRAIN_LIQUID: + if(tileFlags == TILE_TYPE_LIQUID) return FALSE; + case CROSSABLE_TERRAIN_REGULAR: + if(tileFlags == TILE_TYPE_FLOOR) return FALSE; + break; + case CROSSABLE_TERRAIN_WALL: + default: + return FALSE; + case CROSSABLE_TERRAIN_CREVICE: + if(tileFlags != 0) return FALSE; + } + } + else return FALSE; + } + return TRUE; +} + +u32 GetMovementSpeed(struct DungeonEntity *pokemon) +{ + s32 index; + s32 speed; + struct DungeonEntityData * entityData; + + entityData = pokemon->entityData; + speed = 0; + + for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++) + { + if (entityData->speedUpTurnsLeft[index + NUM_SPEED_TURN_COUNTERS] != 0) { + speed--; + } + if (entityData->speedUpTurnsLeft[index] != 0) { + speed++; + } + } + + if (entityData->nonVolatileStatus == NON_VOLATILE_STATUS_PARALYZED) { + speed--; + } + + speed += GetMoveSpeed(entityData->entityID); + if ((HasType(pokemon, TYPE_ICE)) && (GetWeather(pokemon) == WEATHER_SNOW)) { + speed++; + } + if (entityData->transformSpecies == SPECIES_DEOXYS_SPEED) { + speed++; + } + if ((entityData->entityID == SPECIES_KECLEON) && entityData->isEnemy && + gDungeonGlobalData->unk66E) { + speed++; + } + if (speed < 0) { + speed = 0; + } + if (MAX_MOVEMENT_SPEED < speed) { + speed = MAX_MOVEMENT_SPEED; + } + entityData->movementSpeed = speed; + return speed; +} + u8 sub_8070828(struct DungeonEntity *pokemon, bool8 displayMessage) { bool8 flag; diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index d85b2cbc8..d399964d5 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -6,45 +6,7 @@ #include "menu.h" #include "constants/dungeon.h" #include "wonder_mail.h" - -struct unkSubStruct_203B2F8 -{ - struct WonderMail wonderMail; - u8 *unk14; - u8 *unk18; -}; - -struct unkStruct_203B2F8 -{ - // size: 0x208 - s32 state; // state - u32 unk4; - u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - struct unkSubStruct_203B2F8 *unkC; - u8 unk10; - u8 fill11[0x14 - 0x11]; - u32 unk14; - u8 fill18[0x58 - 0x18]; - u8 unk58; - u8 fill59[0x64 - 0x59]; - u8 *unk64; - u32 unk68; - u32 unk6C; - u32 unk70; - u32 unk74; - u8 unk78[0xC8 - 0x78]; - u8 unkC8[4]; - u8 fillCC[0x118 - 0xCC]; - struct MenuItem unk118[8]; - struct MenuItem unk158[8]; - u16 unk198[8]; - struct UnkTextStruct2 unk1A8[4]; - u32 unk1E4; -}; -extern struct unkStruct_203B2F8 *gUnknown_203B2F8; +#include "wonder_mail_3.h" const struct UnkTextStruct2 gUnknown_80DFDD4 = { @@ -141,7 +103,6 @@ ALIGNED(4) const u8 gUnknown_80E014C[] = "New Mail"; ALIGNED(4) const u8 gUnknown_80E0158[] = "Old Mail"; static const u8 wonder_mail_3_fill[] = "pksdir0"; - extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_802D63C(void); extern void sub_802D5A4(void); @@ -185,8 +146,51 @@ extern void sub_8012D60(u8 *, struct MenuItem *, u32, u16 *, u32, u32); extern u8 *sub_8096DE8(void); extern void sub_8096A78(struct unkSubStruct_203B2F8 *); extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32); +struct unkStruct_803B344 *sub_803B344(u8); +extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); +extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void CreateRescueTitle(void *); +extern s32 sub_8013800(void *, u32); +extern void sub_803B35C(void *, u32*); +extern u8 gUnknown_80DFDBC[]; +void sub_802CFD0(void) +{ + struct unkStruct_802C39C local; + struct unkStruct_803B344 *iVar1; + s32 r5; + s32 r4; + + sub_8008C54(gUnknown_203B2F4->unk34); + sub_80073B8(gUnknown_203B2F4->unk34); + r5 = r4 = gUnknown_203B2F4->unk1E * 8 + 10; + xxx_call_draw_string(r5,0,gUnknown_80DFDBC,gUnknown_203B2F4->unk34,0); // RESCUE EVENT + r4 -= 6; + r5 = r4 + (gUnknown_203B2F4->unk9C[2] * 8); + sub_8012BC4(r5,0,gUnknown_203B2F4->unk1E + 1,2,7,gUnknown_203B2F4->unk34); + + r5 = 0; + + if(r5 < gUnknown_203B2F4->unk1A) + { + while(r5 < gUnknown_203B2F4->unk1A) { + iVar1 = sub_803B344(gUnknown_203B2F4->unk1E * gUnknown_203B2F4->unk1C + r5); + local.unk0[0] = gUnknown_203B2F4->unk34; + local.unk4C = sub_8013800(gUnknown_203B2F4,r5); + sub_803B35C(iVar1,local.unk0); + local.unk3C[11] = 1; + local.unk50[0] = iVar1->unk14; + CreateRescueTitle(&local); + r5++; + } + } + sub_80073E0(gUnknown_203B2F4->unk34); +} + u32 sub_802D098(struct unkSubStruct_203B2F8 *param_1) { gUnknown_203B2F8 = MemoryAlloc(0x208,8); @@ -324,23 +328,23 @@ void sub_802D2A8(void) sub_8014248(gUnknown_80DFE4C,0,gUnknown_203B2F8->unk70,gUnknown_203B2F8->unk158,0,4,0,0,0); break; case 3: - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80DFE9C,0,0,0x101); break; case 4: - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80DFED0,0,0,0x101); break; case 5: - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80DFF2C,0,0,0x101); break; case 6: - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80DFFA4,0,0,0x101); break; case 7: - gUnknown_203B2F8->unk4 = 0xc; + gUnknown_203B2F8->fallbackState = 0xc; sub_80141B4(gUnknown_80E0010,0,0,0x101); break; case 8: @@ -352,7 +356,7 @@ void sub_802D2A8(void) MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->unkC->unk14,0x28); MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->unkC->unk18,0x78); } - switch(gUnknown_203B2F8->unkC->wonderMail.dungeon) + switch(gUnknown_203B2F8->unkC->wonderMail.dungeon.dungeonIndex) { // NOTE: subtract 1 from each of the case as the input?? case DUNGEON_ODDITY_CAVE: // 0x2B @@ -368,7 +372,7 @@ void sub_802D2A8(void) sub_8097418(0x2D, 1); break; } - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80E0074,0,0,0x101); break; case 9: @@ -376,7 +380,7 @@ void sub_802D2A8(void) sub_8014248(gUnknown_80E0094,0,gUnknown_203B2F8->unk74,gUnknown_203B2F8->unk158,0,4,0,0,0); break; case 10: - gUnknown_203B2F8->unk4 = 0xb; + gUnknown_203B2F8->fallbackState = 0xb; sub_80141B4(gUnknown_80E0108,0,0,0x101); break; case 0xb: diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index b8f2f06a2..b940c886a 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -3,8 +3,11 @@ #include "input.h" #include "item.h" #include "memory.h" +#include "menu.h" #include "text.h" #include "wonder_mail.h" +#include "wonder_mail_3.h" +#include "code_80958E8.h" struct unkStruct_203B2FC { @@ -119,6 +122,13 @@ struct WonderMail *GetJobSlotInfo(u8); extern void sub_8096AF8(u8 *, u32, u32); extern void sub_8096EEC(void); extern void sub_803C21C(struct WonderMail *, u32 *); +extern u8 sub_8012FD8(u8 *); +extern void sub_8013114(u8 *r0, s32 *r1); +extern u32 sub_802C598(s32); +extern void sub_802C688(void); +extern void sub_8096C80(void); +extern void sub_8096C3C(u8); +extern u8 sub_802C620(void); void sub_802DE44(void); void sub_802DE60(void); @@ -126,6 +136,207 @@ void sub_802DF6C(void); void sub_802DF88(void); void sub_802DF14(void); void sub_801317C(void); +void sub_802D1A0(u32); +u32 sub_802DEE0(void); +void sub_802DF24(void); + +void sub_802D7D0(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + if (menuAction != 1) { + gUnknown_203B2F8->unk70 = menuAction; + } + switch(menuAction) { + case 3: + sub_802D1A0(2); + break; + case 6: + gUnknown_203B2F8->fallbackState = 1; + sub_802D1A0(0x10); + break; + case 4: + case 2: + default: + sub_802D1A0(0); + break; + } + } +} + +void sub_802D82C(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + if (menuAction != 1) { + gUnknown_203B2F8->unk74 = menuAction; + } + switch(menuAction) { + case 3: + sub_8096C3C(gUnknown_203B2F8->unk10); + sub_8096C80(); + sub_802D1A0(8); + break; + case 6: + gUnknown_203B2F8->fallbackState = 9; + sub_802D1A0(0x10); + break; + case 7: + gUnknown_203B2F8->fallbackState = 9; + sub_802D1A0(0xf); + break; + default: + case 1: + case 2: + case 4: + sub_802D1A0(1); + break; + } + } +} + +void sub_802D8CC(void) +{ + switch(sub_802C598(1)) { + case 0: + case 1: + break; + case 3: + gUnknown_203B2F8->unk10 = sub_802C620(); + sub_802D1A0(0xd); + break; + case 4: + gUnknown_203B2F8->unk10 = sub_802C620(); + gUnknown_203B2F8->fallbackState = 0xc; + sub_802D1A0(0xf); + break; + case 2: + sub_802C688(); + sub_802D1A0(1); + break; + } +} + +void sub_802D940(void) +{ + struct WonderMail *mail; + s32 menuAction; + + menuAction = 0; + sub_802C598(0); + if ((sub_8012FD8(gUnknown_203B2F8->unk78) == 0) && (sub_8013114(gUnknown_203B2F8->unk78,&menuAction), menuAction != 1)) { + gUnknown_203B2F8->unk6C = menuAction; + } + + switch(menuAction) + { + case 2: + if ((gUnknown_203B2F8->unk9 != 0) && (((mail = &gUnknown_203B490->unkF0[gUnknown_203B2F8->unk10]), mail->mailType > 5) && (gUnknown_203B2F8->unkA == mail->dungeon.dungeonIndex))) + { + sub_802D1A0(0x7); + } + else { + sub_802D1A0(0xE); + } + break; + case 5: + gUnknown_203B2F8->fallbackState = 0xc; + sub_802D1A0(0xf); + break; + case 1: + sub_802D1A0(0xc); + break; + } +} + +void sub_802D9F0(void) +{ + s32 menuAction; + + menuAction = 0; + sub_802C598(0); + sub_8012FD8(gUnknown_203B2F8->unk78); + if (sub_8012FD8(gUnknown_203B2F8->unkC8) == 0) { + sub_8013114(gUnknown_203B2F8->unkC8,&menuAction); + } + + switch(menuAction) + { + case 1: + case 4: + sub_802D1A0(0xc); + break; + case 3: + sub_802C688(); + sub_8096C3C(gUnknown_203B2F8->unk10); + sub_8096C80(); + sub_802D1A0(8); + break; + } +} + +void sub_802DA60(void) +{ + switch(sub_802DEE0()) + { + case 2: + case 3: + sub_802DF24(); + sub_802D1A0(gUnknown_203B2F8->fallbackState); + break; + case 0: + case 1: + break; + } +} + +void sub_802DA84(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_802D1A0(gUnknown_203B2F8->fallbackState); + } +} + +bool8 sub_802DAA8(void) +{ + struct WonderMail *mail; + + mail = GetJobSlotInfo(gUnknown_203B2F8->unk10); + if (gUnknown_203B2F8->unk9 == 0) { + return 1; + } + else { + if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->unkA == mail->dungeon.dungeonIndex)) return 0; + return 1; + } +} + +bool8 sub_802DADC(void) +{ + u8 mailType; + struct WonderMail *mail; + s32 counter; + + if (gUnknown_203B2F8->unk9 == 0) { +_0802DAE8: + return 1; + } + else { + for( mail = &gUnknown_203B490->unkF0[0], counter = 0; counter < 8; mail++, counter++) + { + mailType = mail->mailType; + if (((mailType == 0) || (mailType == WONDER_MAIL_TYPE_THANK_YOU)) || + ((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->unkA != mail->dungeon.dungeonIndex)))) goto _0802DAE8; + } + return 0; + } +} + +// TODO: merge above with wonder_mail_3.c bool8 sub_802DB28(u8 jobSlot, u8 param_2) { From 4c760a92cb1935748515231452c0798e515bf17c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 11 Nov 2022 16:49:48 -0800 Subject: [PATCH 03/21] more decomp --- asm/code_8044210.s | 199 ------ asm/code_80521D0.s | 4 +- asm/code_8057824.s | 90 +-- asm/code_8075BA4.s | 6 +- asm/code_8077274.s | 1035 ------------------------------ asm/debug_menu.s | 85 --- include/dungeon_entity.h | 7 +- include/dungeon_global_data.h | 14 +- include/save.h | 1 + ld_script.txt | 1 - src/code_8048480.c | 20 +- src/code_8077274_1.c | 2 +- src/debug_menu.c | 48 ++ src/debug_menu_mid.c | 12 +- src/dungeon_action.c | 224 ++++++- src/dungeon_ai_items.c | 4 +- src/dungeon_engine.c | 4 +- src/dungeon_pokemon_attributes.c | 4 +- src/save.c | 2 +- src/status.c | 404 +++++++++++- src/status_checker.c | 60 +- 21 files changed, 769 insertions(+), 1457 deletions(-) delete mode 100644 asm/debug_menu.s diff --git a/asm/code_8044210.s b/asm/code_8044210.s index 72ac45fbf..453c5dddb 100644 --- a/asm/code_8044210.s +++ b/asm/code_8044210.s @@ -834,203 +834,4 @@ _0804498C: .4byte gDungeonGlobalData _08044990: .4byte 0x0001358c thumb_func_end sub_8044820 - thumb_func_start sub_8044994 -sub_8044994: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r1, _08044A94 - ldr r4, _08044A98 - ldr r0, [r4] - movs r2, 0xCC - lsls r2, 3 - adds r0, r2 - movs r3, 0 - ldrsh r0, [r0, r3] - lsls r0, 1 - adds r1, 0x32 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08044A8A - bl sub_8071B48 - ldr r0, [r4] - ldr r2, _08044A9C - adds r0, r2 - movs r2, 0 - strb r2, [r0] - ldr r0, [r4] - ldr r3, _08044AA0 - adds r0, r3 - strb r2, [r0] - ldr r0, [r4] - ldr r1, _08044AA4 - adds r0, r1 - strb r2, [r0] - ldr r0, [r4] - adds r3, 0x2 - adds r0, r3 - strb r2, [r0] - ldr r0, [r4] - ldr r3, _08044AA8 - adds r1, r0, r3 - str r2, [r1] - ldr r1, _08044AAC - adds r0, r1 - movs r1, 0x2 - str r1, [r0] - mov r8, r2 - adds r7, r4, 0 -_080449F2: - ldr r0, [r7] - mov r2, r8 - lsls r1, r2, 2 - ldr r3, _08044AB0 - adds r0, r3 - adds r0, r1 - ldr r5, [r0] - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08044A7A - ldr r0, [r5, 0x70] - adds r4, r0, 0 - movs r0, 0xA4 - lsls r0, 1 - adds r1, r4, r0 - movs r0, 0 - strb r0, [r1] - ldrb r0, [r4, 0x6] - movs r6, 0x1 - cmp r0, 0 - beq _08044A24 - movs r6, 0 -_08044A24: - adds r0, r5, 0 - movs r1, 0x32 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08044A46 - ldr r1, [r7] - ldr r2, _08044AA8 - adds r0, r1, r2 - str r5, [r0] - ldr r3, _08044AAC - adds r1, r3 - adds r0, r4, 0 - adds r0, 0x98 - ldr r0, [r0] - str r0, [r1] -_08044A46: - adds r0, r5, 0 - movs r1, 0x3F - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08044A60 - ldr r0, [r7] - ldr r1, _08044AA4 - adds r0, r1 - adds r0, r6 - movs r1, 0x1 - strb r1, [r0] -_08044A60: - adds r0, r5, 0 - movs r1, 0x38 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _08044A7A - ldr r0, [r7] - ldr r2, _08044A9C - adds r0, r2 - adds r0, r6 - movs r1, 0x1 - strb r1, [r0] -_08044A7A: - movs r3, 0x1 - add r8, r3 - mov r0, r8 - cmp r0, 0x13 - ble _080449F2 - movs r0, 0 - bl sub_8043ED0 -_08044A8A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08044A94: .4byte gSpeedTurns -_08044A98: .4byte gDungeonGlobalData -_08044A9C: .4byte 0x000037f8 -_08044AA0: .4byte 0x000037f9 -_08044AA4: .4byte 0x000037fa -_08044AA8: .4byte 0x00017b2c -_08044AAC: .4byte 0x00017b38 -_08044AB0: .4byte 0x000135cc - thumb_func_end sub_8044994 - - thumb_func_start sub_8044AB4 -sub_8044AB4: - push {r4,lr} - ldr r1, _08044ADC - ldr r0, _08044AE0 - ldr r0, [r0] - movs r2, 0xCC - lsls r2, 3 - adds r0, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - adds r0, 0x1 - lsls r0, 1 - adds r1, 0x32 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08044B1A - movs r4, 0 - b _08044AE6 - .align 2, 0 -_08044ADC: .4byte gSpeedTurns -_08044AE0: .4byte gDungeonGlobalData -_08044AE4: - adds r4, 0x1 -_08044AE6: - cmp r4, 0x13 - bgt _08044B08 - ldr r0, _08044B20 - ldr r0, [r0] - lsls r1, r4, 2 - ldr r2, _08044B24 - adds r0, r2 - adds r0, r1 - ldr r0, [r0] - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08044AE4 - movs r0, 0 - bl UseAttack -_08044B08: - movs r0, 0x1 - movs r1, 0 - bl sub_807EAA0 - bl sub_8086AC0 - movs r0, 0 - bl sub_8043ED0 -_08044B1A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08044B20: .4byte gDungeonGlobalData -_08044B24: .4byte 0x000135cc - thumb_func_end sub_8044AB4 - .align 2, 0 diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 621130b37..60cd90689 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -3832,7 +3832,7 @@ _0805459E: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8057E1C + bl FocusEnergyMoveAction bl _080554BA _080545AE: movs r3, 0x80 @@ -5278,7 +5278,7 @@ _080551C8: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805B208 + bl PerishSongMoveAction b _080554BA _080551D6: adds r0, r7, 0 diff --git a/asm/code_8057824.s b/asm/code_8057824.s index 1deb3aee9..f09171f35 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -73,14 +73,14 @@ _08057E0C: _08057E18: .4byte gUnknown_80FD370 thumb_func_end sub_8057D9C - thumb_func_start sub_8057E1C -sub_8057E1C: + thumb_func_start FocusEnergyMoveAction +FocusEnergyMoveAction: push {lr} - bl sub_8078348 + bl FocusEnergyStatusTarget movs r0, 0x1 pop {r1} bx r1 - thumb_func_end sub_8057E1C + thumb_func_end FocusEnergyMoveAction thumb_func_start sub_8057E28 sub_8057E28: @@ -94,7 +94,7 @@ sub_8057E28: adds r2, r0, 0 adds r0, r5, 0 adds r1, r4, 0 - bl sub_807824C + bl WhifferStatusTarget movs r0, 0x1 pop {r4,r5} pop {r1} @@ -1731,7 +1731,7 @@ sub_8058A54: adds r2, r0, 0 adds r0, r5, 0 adds r1, r4, 0 - bl sub_80781DC + bl SureShotStatusTarget movs r0, 0x1 pop {r4,r5} pop {r1} @@ -3908,7 +3908,7 @@ sub_8059AA8: thumb_func_start sub_8059AB8 sub_8059AB8: push {lr} - bl sub_8078758 + bl TauntStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -5338,7 +5338,7 @@ _0805A558: .4byte gUnknown_80FC770 thumb_func_start sub_805A55C sub_805A55C: push {lr} - bl sub_8078594 + bl CurseStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -6029,7 +6029,7 @@ _0805AACC: .4byte 0x00003a08 sub_805AAD0: push {lr} adds r1, r0, 0 - bl sub_80782CC + bl FixedDamageStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -6664,76 +6664,4 @@ _0805AF9C: bx r1 thumb_func_end sub_805AF30 - thumb_func_start sub_805AFA4 -sub_805AFA4: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - mov r8, r2 - adds r6, r3, 0 - bl SendThawedMessage - ldr r3, [r4, 0x70] - movs r0, 0x10 - ldrsh r2, [r3, r0] - adds r0, r2, 0 - cmp r2, 0 - bge _0805AFC6 - adds r0, r2, 0x3 -_0805AFC6: - movs r7, 0xE - ldrsh r1, [r3, r7] - asrs r0, 2 - cmp r1, r0 - bgt _0805AFD4 - movs r2, 0 - b _0805AFFA -_0805AFD4: - movs r0, 0xE - ldrsh r1, [r3, r0] - lsrs r0, r2, 31 - adds r0, r2, r0 - asrs r0, 1 - cmp r1, r0 - bgt _0805AFE6 - movs r2, 0x1 - b _0805AFFA -_0805AFE6: - lsls r0, r2, 1 - adds r0, r2 - cmp r0, 0 - bge _0805AFF0 - adds r0, 0x3 -_0805AFF0: - asrs r0, 2 - movs r2, 0x3 - cmp r1, r0 - bgt _0805AFFA - movs r2, 0x2 -_0805AFFA: - ldr r1, _0805B024 - lsls r0, r2, 2 - adds r0, r1 - ldr r3, [r0] - str r6, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - mov r2, r8 - bl sub_8055640 - adds r1, r0, 0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805B024: .4byte gUnknown_80F51C4 - thumb_func_end sub_805AFA4 - .align 2, 0 diff --git a/asm/code_8075BA4.s b/asm/code_8075BA4.s index 28f1714db..0cc2a9738 100644 --- a/asm/code_8075BA4.s +++ b/asm/code_8075BA4.s @@ -1777,8 +1777,8 @@ _08076B3A: _08076B44: .4byte gUnknown_80FB6C0 thumb_func_end sub_8076AA4 - thumb_func_start sub_8076B48 -sub_8076B48: + thumb_func_start WrapTarget +WrapTarget: push {r4-r7,lr} mov r7, r8 push {r7} @@ -1946,7 +1946,7 @@ _08076C9E: _08076CA8: .4byte gAvailablePokemonNames _08076CAC: .4byte gUnknown_80FB6FC _08076CB0: .4byte gUnknown_80FB718 - thumb_func_end sub_8076B48 + thumb_func_end WrapTarget thumb_func_start sub_8076CB4 sub_8076CB4: diff --git a/asm/code_8077274.s b/asm/code_8077274.s index 9f782c811..e78f1d0fc 100644 --- a/asm/code_8077274.s +++ b/asm/code_8077274.s @@ -5,1041 +5,6 @@ .text - thumb_func_start DestinyBondStatusTarget -DestinyBondStatusTarget: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080781C4 - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x1 - bne _080781C4 - adds r0, r5, 0 - bl GetEntityType - cmp r0, 0x1 - bne _080781C4 - ldr r6, [r4, 0x70] - ldr r0, _0807816C - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r7, r6, 0 - adds r7, 0xD0 - ldrb r0, [r7] - cmp r0, 0x2 - beq _08078178 - cmp r0, 0x1 - bne _08078134 - ldr r0, _08078170 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08078134: - movs r0, 0 - mov r8, r0 - movs r0, 0x2 - strb r0, [r7] - ldr r1, _08078174 - adds r0, r5, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r6, 0 - adds r1, 0xD9 - strb r0, [r1] - adds r0, r6, 0 - adds r0, 0xDA - mov r1, r8 - strb r1, [r0] - adds r0, r5, 0 - bl nullsub_74 - adds r1, r6, 0 - adds r1, 0xD8 - movs r0, 0xFF - strb r0, [r1] - movs r2, 0 - adds r3, r1, 0 - b _0807818C - .align 2, 0 -_0807816C: .4byte gAvailablePokemonNames -_08078170: .4byte gUnknown_80FA79C -_08078174: .4byte gUnknown_80F4EF0 -_08078178: - ldr r0, _08078188 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _080781C4 - .align 2, 0 -_08078188: .4byte gUnknown_80FBB78 -_0807818C: - ldr r0, _080781D0 - ldr r0, [r0] - lsls r1, r2, 2 - ldr r7, _080781D4 - adds r0, r7 - adds r0, r1 - ldr r0, [r0] - cmp r5, r0 - bne _080781AC - strb r2, [r3] - ldr r0, [r5, 0x70] - adds r1, r6, 0 - adds r1, 0xD4 - adds r0, 0x98 - ldr r0, [r0] - str r0, [r1] -_080781AC: - adds r2, 0x1 - cmp r2, 0x13 - ble _0807818C - ldr r0, _080781D8 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80522F4 - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_080781C4: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080781D0: .4byte gDungeonGlobalData -_080781D4: .4byte 0x000135cc -_080781D8: .4byte gUnknown_80FBB4C - thumb_func_end DestinyBondStatusTarget - - thumb_func_start sub_80781DC -sub_80781DC: - push {r4-r7,lr} - adds r7, r0, 0 - adds r4, r1, 0 - adds r6, r2, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08078242 - ldr r5, [r4, 0x70] - ldr r0, _08078228 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xDC - ldrb r0, [r1] - cmp r0, 0x1 - beq _08078230 - movs r0, 0x1 - strb r0, [r1] - adds r1, r6, 0x1 - adds r0, r5, 0 - adds r0, 0xDD - strb r1, [r0] - adds r0, r4, 0 - bl sub_8041CDC - ldr r0, _0807822C - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _0807823C - .align 2, 0 -_08078228: .4byte gAvailablePokemonNames -_0807822C: .4byte gUnknown_80FB73C -_08078230: - ldr r0, _08078248 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r4, 0 - bl sub_80522F4 -_0807823C: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08078242: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078248: .4byte gUnknown_80FB764 - thumb_func_end sub_80781DC - - thumb_func_start sub_807824C -sub_807824C: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r7, r2, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080782C2 - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _080782C2 - ldr r5, [r4, 0x70] - ldr r0, _080782A8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xDC - ldrb r0, [r1] - cmp r0, 0x2 - beq _080782B0 - movs r0, 0x2 - strb r0, [r1] - adds r1, r7, 0x1 - adds r0, r5, 0 - adds r0, 0xDD - strb r1, [r0] - adds r0, r4, 0 - bl sub_8041CEC - ldr r0, _080782AC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _080782BC - .align 2, 0 -_080782A8: .4byte gAvailablePokemonNames -_080782AC: .4byte gUnknown_80FB780 -_080782B0: - ldr r0, _080782C8 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080782BC: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080782C2: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080782C8: .4byte gUnknown_80FB7A0 - thumb_func_end sub_807824C - - thumb_func_start sub_80782CC -sub_80782CC: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807833E - ldr r5, [r4, 0x70] - ldr r0, _08078320 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xDC - ldrb r0, [r1] - cmp r0, 0x3 - beq _0807832C - movs r0, 0x3 - strb r0, [r1] - ldr r1, _08078324 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xDD - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_79 - ldr r0, _08078328 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08078338 - .align 2, 0 -_08078320: .4byte gAvailablePokemonNames -_08078324: .4byte gUnknown_80F4EC4 -_08078328: .4byte gUnknown_80FB8BC -_0807832C: - ldr r0, _08078344 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08078338: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_0807833E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08078344: .4byte gUnknown_80FB8E4 - thumb_func_end sub_80782CC - - thumb_func_start sub_8078348 -sub_8078348: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080783BA - ldr r5, [r4, 0x70] - ldr r0, _0807839C - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xDC - ldrb r0, [r1] - cmp r0, 0x4 - beq _080783A8 - movs r0, 0x4 - strb r0, [r1] - ldr r1, _080783A0 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xDD - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_80 - ldr r0, _080783A4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _080783B4 - .align 2, 0 -_0807839C: .4byte gAvailablePokemonNames -_080783A0: .4byte gUnknown_80F4EC8 -_080783A4: .4byte gUnknown_80FB900 -_080783A8: - ldr r0, _080783C0 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080783B4: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080783BA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080783C0: .4byte gUnknown_80FB924 - thumb_func_end sub_8078348 - - thumb_func_start sub_80783C4 -sub_80783C4: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - adds r5, r0, 0 - adds r7, r1, 0 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x18] - adds r0, r7, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _080783E8 - b _0807856A -_080783E8: - adds r0, r5, 0 - adds r1, r7, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - beq _080783FA - b _0807856A -_080783FA: - ldr r4, [r7, 0x70] - ldr r0, _08078420 - adds r1, r7, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r4, 0 - adds r1, 0xC8 - ldrb r0, [r1] - cmp r0, 0x2 - bne _08078428 - ldr r0, _08078424 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r7, 0 - bl sub_80522F4 - b _0807856A - .align 2, 0 -_08078420: .4byte gAvailablePokemonNames -_08078424: .4byte gUnknown_80FB994 -_08078428: - movs r6, 0 - mov r8, r1 - movs r0, 0xC9 - adds r0, r4 - mov r9, r0 - movs r1, 0xCA - adds r1, r4 - mov r10, r1 - adds r2, r4, 0 - adds r2, 0xCB - str r2, [sp, 0x1C] - adds r4, 0xCC - str r4, [sp, 0x20] -_08078442: - ldr r0, _0807857C - ldr r0, [r0] - lsls r1, r6, 2 - ldr r3, _08078580 - adds r0, r3 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08078480 - cmp r7, r4 - beq _08078480 - ldr r0, [r4, 0x70] - adds r0, 0xC8 - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08078480 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl SendWaitingEndMessage - movs r0, 0x2A - bl sub_803E46C -_08078480: - adds r6, 0x1 - cmp r6, 0x13 - ble _08078442 - adds r0, r7, 0 - bl sub_8041D38 - ldr r0, _08078584 - adds r1, r7, 0 - movs r2, 0 - bl SetMessageArgument - mov r4, r8 - ldrb r0, [r4] - cmp r0, 0 - beq _080784A8 - adds r0, r5, 0 - adds r1, r7, 0 - movs r2, 0x2 - bl SendWaitingEndMessage -_080784A8: - movs r4, 0 - movs r0, 0x2 - mov r1, r8 - strb r0, [r1] - ldr r0, [r5, 0x70] - ldrb r0, [r0, 0x6] - mov r2, r9 - strb r0, [r2] - mov r3, sp - ldrb r0, [r3, 0x18] - mov r3, r10 - strb r0, [r3] - ldr r1, _08078588 - adds r0, r7, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - ldr r1, [sp, 0x1C] - strb r0, [r1] - ldr r2, [sp, 0x20] - strb r4, [r2] - adds r0, r7, 0 - bl sub_806CEBC - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r7, 0 - bl sub_806CCB4 - ldr r0, _0807857C - ldr r0, [r0] - ldr r3, _0807858C - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _08078590 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r7, 0 - bl sub_80522F4 - movs r6, 0 - mov r8, r6 -_08078502: - ldr r0, _0807857C - ldr r0, [r0] - lsls r1, r6, 2 - ldr r4, _08078580 - adds r0, r4 - adds r0, r1 - ldr r0, [r0] - mov r9, r0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807855E - mov r5, r9 - ldr r4, [r5, 0x70] - adds r1, r4, 0 - adds r1, 0x78 - movs r0, 0x6 - strb r0, [r1] - adds r0, r4, 0 - adds r0, 0x80 - mov r1, r8 - str r1, [r0] - subs r0, 0x4 - strh r1, [r0] - ldrb r0, [r4, 0x7] - cmp r0, 0 - bne _0807855E - mov r1, sp - adds r0, r4, 0 - adds r0, 0x44 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - mov r0, r9 - movs r1, 0x1 - bl MoveIfPossible - adds r1, r4, 0 - adds r1, 0x44 - mov r0, sp - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} -_0807855E: - adds r6, 0x1 - cmp r6, 0x13 - ble _08078502 - adds r0, r7, 0 - bl DungeonEntityUpdateStatusSprites -_0807856A: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807857C: .4byte gDungeonGlobalData -_08078580: .4byte 0x000135cc -_08078584: .4byte gAvailablePokemonNames -_08078588: .4byte gUnknown_80F4ED0 -_0807858C: .4byte 0x000037fc -_08078590: .4byte gUnknown_80FB978 - thumb_func_end sub_80783C4 - - thumb_func_start sub_8078594 -sub_8078594: - push {r4-r7,lr} - adds r5, r0, 0 - adds r6, r1, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807866E - adds r0, r6, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807866E - ldr r4, [r5, 0x70] - ldr r7, [r6, 0x70] - adds r0, r5, 0 - movs r1, 0xE - bl HasType - lsls r0, 24 - cmp r0, 0 - beq _08078640 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _0807866E - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x1 - bl SendWaitingEndMessage - adds r0, r6, 0 - bl sub_8041D48 - movs r1, 0xE - ldrsh r0, [r4, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r4, 0xE] - cmp r0, 0 - bne _080785F6 - movs r0, 0x1 - strh r0, [r4, 0xE] -_080785F6: - adds r1, r7, 0 - adds r1, 0xC8 - ldrb r0, [r1] - cmp r0, 0x1 - beq _0807861C - movs r0, 0x1 - strb r0, [r1] - ldr r1, _08078634 - adds r0, r6, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xCB - strb r0, [r1] - adds r1, 0x1 - movs r0, 0 - strb r0, [r1] -_0807861C: - ldr r0, _08078638 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _0807863C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_80522F4 - b _08078668 - .align 2, 0 -_08078634: .4byte gUnknown_80F4EA4 -_08078638: .4byte gAvailablePokemonNames -_0807863C: .4byte gUnknown_80FB004 -_08078640: - ldr r0, _08078674 - ldr r4, [r0] - adds r0, r5, 0 - adds r1, r5, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl sub_8077084 - adds r0, r5, 0 - adds r1, r5, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl sub_8077160 - adds r0, r5, 0 - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x1 - bl sub_80779F0 -_08078668: - adds r0, r6, 0 - bl DungeonEntityUpdateStatusSprites -_0807866E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078674: .4byte gUnknown_8106A4C - thumb_func_end sub_8078594 - - thumb_func_start sub_8078678 -sub_8078678: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r6, r1, 0 - adds r0, r6, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08078732 - adds r0, r7, 0 - adds r1, r6, 0 - movs r2, 0x3 - bl SendWaitingEndMessage - movs r5, 0 -_0807869A: - ldr r0, _0807873C - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08078740 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080786C8 - ldr r0, [r4, 0x70] - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x3 - bne _080786C8 - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0 - bl SendWaitingEndMessage -_080786C8: - adds r5, 0x1 - cmp r5, 0x13 - ble _0807869A - adds r0, r6, 0 - bl nullsub_81 - ldr r5, [r6, 0x70] - mov r8, r5 - adds r1, r5, 0 - adds r1, 0xC8 - ldrb r0, [r1] - cmp r0, 0x3 - beq _08078700 - movs r4, 0 - movs r0, 0x3 - strb r0, [r1] - ldr r1, _08078744 - adds r0, r6, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0xCB - strb r0, [r1] - adds r0, r5, 0 - adds r0, 0xCC - strb r4, [r0] -_08078700: - ldr r0, _0807873C - ldr r1, [r0] - ldr r2, _08078748 - adds r0, r1, r2 - str r6, [r0] - ldr r0, _0807874C - adds r1, r0 - mov r0, r8 - adds r0, 0x98 - ldr r0, [r0] - str r0, [r1] - ldr r0, _08078750 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08078754 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_80522F4 - adds r0, r6, 0 - bl DungeonEntityUpdateStatusSprites -_08078732: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807873C: .4byte gDungeonGlobalData -_08078740: .4byte 0x000135cc -_08078744: .4byte gUnknown_80F4EA8 -_08078748: .4byte 0x00017b30 -_0807874C: .4byte 0x00017b3c -_08078750: .4byte gAvailablePokemonNames -_08078754: .4byte gUnknown_80FB01C - thumb_func_end sub_8078678 - - thumb_func_start sub_8078758 -sub_8078758: - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080787DA - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _080787DA - ldr r6, [r4, 0x70] - ldr r0, _080787BC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r6, 0 - adds r1, 0xBC - ldrb r0, [r1] - cmp r0, 0x5 - beq _080787C8 - movs r0, 0x5 - strb r0, [r1] - ldr r1, _080787C0 - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r6, 0 - adds r1, 0xBD - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_73 - ldr r0, _080787C4 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _080787D4 - .align 2, 0 -_080787BC: .4byte gAvailablePokemonNames -_080787C0: .4byte gUnknown_80F4ED8 -_080787C4: .4byte gUnknown_80FB9F0 -_080787C8: - ldr r0, _080787E0 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080787D4: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080787DA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080787E0: .4byte gUnknown_80FBA14 - thumb_func_end sub_8078758 - - thumb_func_start sub_80787E4 -sub_80787E4: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08078852 - ldr r4, [r5, 0x70] - ldr r0, _08078834 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - movs r0, 0x89 - lsls r0, 1 - adds r4, r0 - ldrb r0, [r4] - cmp r0, 0x2 - bhi _08078840 - adds r0, 0x1 - strb r0, [r4] - movs r0, 0x1 - bl sub_804178C - adds r0, r5, 0 - bl sub_8041D5C - ldr r1, _08078838 - ldrb r0, [r4] - str r0, [r1] - ldr r0, _0807883C - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _0807884C - .align 2, 0 -_08078834: .4byte gAvailablePokemonNames -_08078838: .4byte gUnknown_202DE30 -_0807883C: .4byte gUnknown_80FBA38 -_08078840: - ldr r0, _08078858 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 -_0807884C: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_08078852: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08078858: .4byte gUnknown_80FBA60 - thumb_func_end sub_80787E4 - - thumb_func_start sub_807885C -sub_807885C: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080788DE - ldr r0, [r4, 0x70] - adds r7, r0, 0 - adds r5, r7, 0 - adds r5, 0xE4 - ldrb r0, [r5] - cmp r0, 0x2 - bne _08078884 - adds r0, r6, 0 - adds r1, r4, 0 - bl SendTransformEndMessage -_08078884: - ldr r0, _080788C0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldrb r0, [r5] - cmp r0, 0x1 - beq _080788CC - movs r0, 0x1 - strb r0, [r5] - ldr r1, _080788C4 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xE5 - strb r0, [r1] - adds r0, r4, 0 - bl sub_8041D84 - ldr r0, _080788C8 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _080788D8 - .align 2, 0 -_080788C0: .4byte gAvailablePokemonNames -_080788C4: .4byte gUnknown_80F4EE4 -_080788C8: .4byte gUnknown_80FBA80 -_080788CC: - ldr r0, _080788E4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_080788D8: - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080788DE: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080788E4: .4byte gUnknown_80FBAA0 - thumb_func_end sub_807885C - - thumb_func_start sub_80788E8 -sub_80788E8: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807895E - adds r0, r6, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _0807895E - adds r0, r5, 0 - bl nullsub_82 - ldr r4, [r5, 0x70] - ldr r0, _08078940 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r4, 0xFD - ldrb r0, [r4] - cmp r0, 0 - bne _0807894C - ldr r1, _08078944 - adds r0, r5, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r0, 0x1 - strb r0, [r4] - ldr r0, _08078948 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _08078958 - .align 2, 0 -_08078940: .4byte gAvailablePokemonNames -_08078944: .4byte gUnknown_80F4EEC -_08078948: .4byte gUnknown_80FBB04 -_0807894C: - ldr r0, _08078964 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 -_08078958: - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites -_0807895E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08078964: .4byte gUnknown_80FBB28 - thumb_func_end sub_80788E8 - thumb_func_start sub_8078968 sub_8078968: push {r4-r7,lr} diff --git a/asm/debug_menu.s b/asm/debug_menu.s deleted file mode 100644 index 794249fee..000000000 --- a/asm/debug_menu.s +++ /dev/null @@ -1,85 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_803A3BC -sub_803A3BC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x84 - movs r5, 0x1 - add r4, sp, 0x60 - add r6, sp, 0x68 - add r0, sp, 0x7C - mov r8, r0 - add r0, sp, 0x80 - mov r10, r0 -_0803A3D6: - lsls r0, r5, 24 - lsrs r0, 24 - bl UnlockFriendArea - adds r5, 0x1 - cmp r5, 0x39 - ble _0803A3D6 - movs r5, 0 - adds r7, r4, 0 -_0803A3E8: - movs r0, 0 - mov r9, r0 - ldr r0, _0803A454 - str r0, [sp, 0x7C] - adds r5, 0x1 - lsls r4, r5, 16 - asrs r4, 16 - adds r0, r7, 0 - movs r1, 0 - movs r2, 0x8 - bl memset - movs r0, 0x27 - strh r0, [r7] - adds r0, r6, 0 - adds r1, r4, 0 - bl CopySpeciesNametoBuffer - adds r0, r6, 0 - adds r1, r6, 0 - bl CopyStringtoBuffer - movs r0, 0x40 - strb r0, [r6] - mov r0, r8 - str r0, [sp] - str r7, [sp, 0x4] - add r0, sp, 0x8 - adds r1, r4, 0 - adds r2, r6, 0 - movs r3, 0x43 - bl sub_808CFD0 - add r0, sp, 0x8 - bl sub_808D1DC - ldr r0, _0803A458 - cmp r5, r0 - ble _0803A3E8 - mov r0, r9 - str r0, [sp, 0x80] - mov r0, r10 - movs r1, 0x1 - bl WriteSavetoPak - add sp, 0x84 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803A454: .4byte 0x00001006 -_0803A458: .4byte 0x0000012b - thumb_func_end sub_803A3BC - - .align 2,0 diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 03db139e5..e149d9747 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -32,6 +32,10 @@ struct DungeonActionContainer // Position of the Pokémon the last time it threw an item. /* 0x8 */ struct Position lastItemThrowPosition; u8 unkC; + u8 fillD[3]; + u8 fill10[4]; + // Position of the target that the Pokémon wants throw an item at. + /* 0x14 */ struct Position itemTargetPosition; }; struct DungeonEntityData @@ -79,9 +83,6 @@ struct DungeonEntityData u8 fill3F; /* 0x40 */ u8 joinLocation; // Uses the dungeon index in dungeon.h. /* 0x44 */ struct DungeonActionContainer action; - u8 fill55[0x58 - 0x55]; - // Position of the target that the Pokémon wants throw an item at. - /* 0x58 */ struct Position itemTargetPosition; /* 0x5C */ u8 types[2]; /* 0x5E */ u8 abilities[2]; /* 0x60 */ struct ItemSlot heldItem; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 79c7b651a..9ccc26796 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -72,7 +72,9 @@ struct DungeonGlobalData /* 0x68A */ u8 unk68A; u8 fill68B[0x363C - 0x68B]; /* 0x363C */ u8 expYieldRankings[NUM_SPECIES]; - u8 fill37E3[0x37FC - 0x37D9]; + u8 fill37E3[0x37F8 - 0x37D9]; + /* 0x37F8 */ bool8 hasPlus[2]; // Index 0: Enemy , Index 1: Team + /* 0x37FA */ bool8 hasMinus[2]; // Index 0: Enemy , Index 1: Team /* 0x37FC */ bool8 decoyActive; u8 fill37FD[0x3A0D - 0x37FD]; /* 0x3A0D */ u8 unk3A0D; @@ -117,10 +119,12 @@ struct DungeonGlobalData /* 0x1358C */ struct DungeonEntity *wildPokemon[DUNGEON_MAX_WILD_POKEMON]; /* 0x135CC */ struct DungeonEntity *allPokemon[DUNGEON_MAX_POKEMON]; // Contains both team and wild Pokémon /* 0x1361C */ struct DungeonEntity *clientPokemon[2]; // Not sure how large this array is. - u8 fill13624[0x17B30 - 0x13624]; - /* 0x17B30 */ u32 unk17B30; - /* 0x17B34 */ u8 fillunk1734[0x17B3C - 0x17B34]; - /* 0x17B30 */ u32 unk17B3C; + u8 fill13624[0x17B2C - 0x13624]; + /* 0x17B2C */ struct DungeonEntity *lightningRodPokemon; + /* 0x17B30 */ struct DungeonEntity *snatchPokemon; + /* 0x17B34 */ u8 fillunk1734[0x17B38 - 0x17B34]; + /* 0x17B38 */ u32 unk17B38; + /* 0x17B3C */ u32 unk17B3C; u8 fill17B40[0x181E8 - 0x17B40]; /* 0x181E8 */ struct Position posScreenWorld; /* 0x181EC */ struct Position prevPosScreenWorld; diff --git a/include/save.h b/include/save.h index a0c7b661a..530748bf2 100644 --- a/include/save.h +++ b/include/save.h @@ -77,6 +77,7 @@ void sub_8011C40(s32 in); char *sub_8011C4C(void); void sub_8011CA8(u32 *out, s32 size); u32 ReadSaveFromPak(u32 *a); +u32 WriteSavetoPak(s32 *param_1, u32 param_2); u32 sub_8011F9C(s32 *r0, u8 *dest, s32 size); u32 sub_8011FA8(void); bool8 IsSaveCorrupted(void); diff --git a/ld_script.txt b/ld_script.txt index 18fd480f5..f1a26239b 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -175,7 +175,6 @@ SECTIONS { src/wonder_mail_main_menu.o(.text); src/ds_menus.o(.text); src/debug_menu.o(.text); - asm/debug_menu.o(.text); src/debug_menu_mid.o(.text); asm/debug_menu_1.o(.text); src/debug_menu_2.o(.text); diff --git a/src/code_8048480.c b/src/code_8048480.c index 331dc1037..6f2d2c044 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -201,27 +201,27 @@ void sub_80485B0(struct DungeonEntity *pokemon, struct DungeonEntity * target) { bool8 isMoveBoosted; s32 moveIndex; - struct DungeonEntityData *iVar5; + struct DungeonEntityData *entityData; register struct PokemonMove *movePtr1 asm("r4"); // r4 register struct PokemonMove *movePtr2 asm("r5"); // r5 - u8 cVar8; + u8 moveBoost; s32 movePowerBoost; s32 maxPowerBoost; isMoveBoosted = FALSE; - cVar8 = 1; - iVar5 = target->entityData; + moveBoost = 1; + entityData = target->entityData; if (DungeonRandomCapped(100) < gUnknown_80F4F46) - cVar8 = 3; - if (iVar5->isLeader) { - for(moveIndex = 0, movePtr1 = &iVar5->moves[0], movePtr2 = movePtr1; moveIndex < MAX_MON_MOVES; movePtr1++, movePtr2++, moveIndex++) + moveBoost = 3; + if (entityData->isLeader) { + for(moveIndex = 0, movePtr1 = &entityData->moves[0], movePtr2 = movePtr1; moveIndex < MAX_MON_MOVES; movePtr1++, movePtr2++, moveIndex++) { if((movePtr1->moveFlags & MOVE_FLAG_EXISTS) && (movePtr1->moveFlags & MOVE_FLAG_SET)) { if(GetMovePower(movePtr2) == 0) continue; movePowerBoost = movePtr1->powerBoost; maxPowerBoost = GetMoveMaxPowerBoost(movePtr2); - movePtr1->powerBoost += cVar8; + movePtr1->powerBoost += moveBoost; if(movePtr1->powerBoost >= maxPowerBoost) movePtr1->powerBoost = maxPowerBoost; if(movePowerBoost != movePtr1->powerBoost) @@ -231,7 +231,7 @@ void sub_80485B0(struct DungeonEntity *pokemon, struct DungeonEntity * target) if (isMoveBoosted) { sub_80522F4(pokemon,target,*gUnknown_80FE454); - if (cVar8 != 1) { + if (moveBoost != 1) { sub_803E708(10,0x40); sub_80522F4(pokemon,target,*gUnknown_80FE434); } @@ -251,7 +251,7 @@ void sub_804869C(struct DungeonEntity *pokemon, struct DungeonEntity * target, u struct DungeonEntity *entity; u8 auStack28 [4]; - if (param_3 != '\0') { + if (param_3 != 0) { entityData = target->entityData; entityData_1 = entityData; if (gDungeonGlobalData->unk675 != 0) { diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index 8e3d40511..7f7ee86be 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -1410,7 +1410,7 @@ void SendWaitingEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity if (waitingStatus != WAITING_STATUS_SNATCH) { SendMessage(target,*gUnknown_80FA7DC); } - gDungeonGlobalData->unk17B30 = 0; + gDungeonGlobalData->snatchPokemon = NULL; gDungeonGlobalData->unk17B3C = 0; break; case WAITING_STATUS_DECOY: diff --git a/src/debug_menu.c b/src/debug_menu.c index 376b267ff..980b56bd5 100644 --- a/src/debug_menu.c +++ b/src/debug_menu.c @@ -1,9 +1,14 @@ #include "global.h" +#include "constants/friend_area.h" #include "debug_menu.h" +#include "friend_area.h" #include "input.h" #include "main_menu.h" #include "menu.h" #include "memory.h" +#include "pokemon.h" +#include "save.h" +#include "text_util.h" extern struct DebugMenu *gUnknown_203B3EC; @@ -58,6 +63,8 @@ extern void sub_803A3A0(void); extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void sub_8035CF4(struct DebugMenu *, u32, u32); extern void sub_8035CC0(struct UnkTextStruct2 *, u32); +extern void sub_808D1DC(u8 *); +extern void sub_808CFD0(u8 *, s32, u8 *, u32, u32 *, u16 *); void CreateDebugMenu(void) { @@ -148,3 +155,44 @@ void sub_803A3A0(void) { sub_8035CC0(gUnknown_203B3EC->unk140, 0); } + +void sub_803A3BC(void) +{ + s32 speciesIndex; + u8 sp_0x8 [88]; + u16 r7 [4]; // r7 + u8 buffer [20]; // r6 + u32 sp_0x7C; + s32 sp_0x80; + +#ifndef NONMATCHING + register s32 index asm("r5"); + register u32 r9 asm("r9"); +#else + s32 index; + u32 r9; +#endif + + index = 1; + do { + UnlockFriendArea(index); + index++; + } while (index < NUM_FRIEND_AREAS); + + index = 0; + do { + r9 = 0; + sp_0x7C = 0x1006; + index = index + 1; + speciesIndex = index * 0x10000 >> 0x10; // dumb way to force s16 + memset(r7,0,8); + r7[0] = 0x27; + CopySpeciesNametoBuffer(buffer, speciesIndex); + CopyStringtoBuffer(buffer, buffer); + buffer[0] = 0x40; + sub_808CFD0(sp_0x8,speciesIndex,buffer,0x43,&sp_0x7C,r7); + sub_808D1DC(sp_0x8); + } while (index < 300); + sp_0x80 = r9; + WriteSavetoPak(&sp_0x80,1); +} diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c index 2d4907b79..8e47a1901 100644 --- a/src/debug_menu_mid.c +++ b/src/debug_menu_mid.c @@ -161,7 +161,7 @@ void sub_803A504(u32 newState) void sub_803A51C(void) { - s32 iVar4; + s32 index; sub_8006518(gUnknown_203B3F0->unkD8); switch(gUnknown_203B3F0->state) @@ -173,9 +173,9 @@ void sub_803A51C(void) gUnknown_203B3F0->unkD8[2] = gUnknown_80E7E4C; break; default: - for(iVar4 = 0; iVar4 < 4; iVar4++) + for(index = 0; index < 4; index++) { - gUnknown_203B3F0->unkD8[iVar4] = gUnknown_80E7E34; + gUnknown_203B3F0->unkD8[index] = gUnknown_80E7E34; } break; } @@ -185,7 +185,7 @@ void sub_803A51C(void) void sub_803A5A0(void) { - struct ItemSlot auStack8; + struct ItemSlot item; switch(gUnknown_203B3F0->state) { case 0: @@ -212,8 +212,8 @@ void sub_803A5A0(void) sub_803A690(); break; case 4: - xxx_init_itemslot_8090A8C(&auStack8,gUnknown_203B3F0->itemIndex,0); - sub_801B3C0(&auStack8); + xxx_init_itemslot_8090A8C(&item,gUnknown_203B3F0->itemIndex,0); + sub_801B3C0(&item); break; case 5: break; diff --git a/src/dungeon_action.c b/src/dungeon_action.c index 469837755..e487eefec 100644 --- a/src/dungeon_action.c +++ b/src/dungeon_action.c @@ -5,12 +5,15 @@ #include "dungeon_entity.h" #include "dungeon_global_data.h" #include "dungeon_leader.h" +#include "dungeon_util.h" +#include "dungeon_pokemon_attributes.h" #include "pokemon.h" #include "item.h" extern u8 *gUnknown_80F91EC[]; extern u8 *gUnknown_80F7C50[]; extern u8 gUnknown_80F697C[]; +extern s16 gSpeedTurns[2][0x19]; struct ItemText { @@ -19,9 +22,220 @@ struct ItemText }; extern const struct ItemText gActions[]; - +extern void sub_8071B48(void); +extern void sub_8043ED0(u32); extern u8 sub_8043D10(void); extern bool8 sub_8044B28(void); +extern void sub_8086AC0(void); +extern void sub_8043ED0(u32); +extern void sub_807EAA0(u32, u32); +extern void UseAttack(u32); + +#ifdef NONMATCHING +void CheckElectricAbilities(void) +{ + struct DungeonEntityData * entityData; + struct DungeonEntityData * entityData2; + struct DungeonEntity *entity; + u32 isNotEnemy; + s32 index; + + if (gSpeedTurns[1][gDungeonGlobalData->speedTurnCounter] != 0) { + sub_8071B48(); + gDungeonGlobalData->hasPlus[0] = FALSE; + gDungeonGlobalData->hasPlus[1] = FALSE; + gDungeonGlobalData->hasMinus[0] = FALSE; + gDungeonGlobalData->hasMinus[1] = FALSE; + gDungeonGlobalData->lightningRodPokemon = NULL; + gDungeonGlobalData->unk17B38 = 2; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeonGlobalData->allPokemon[index]; + if (EntityExists(entity)) { + entityData = entity->entityData; + entityData2 = entityData; + entityData->attacking = FALSE; + + // should be isNotEnemy = (entityData->isEnemy != '\0'); + // gets a neg/orr/lsr instead of cmp/beq + isNotEnemy = (entityData->isEnemy == 0); + + if (HasAbility(entity, 0x32)) { // ABILITY_LIGHTNINGROD + gDungeonGlobalData->lightningRodPokemon = entity; + gDungeonGlobalData->unk17B38 = entityData2->unk98; + } + if (HasAbility(entity, 0x3f)) { // ABILITY_MINUS + gDungeonGlobalData->hasMinus[isNotEnemy] = TRUE; + } + if (HasAbility(entity, 0x38)) { // ABILITY_PLUS + gDungeonGlobalData->hasPlus[isNotEnemy] = TRUE; + } + } + } + sub_8043ED0(0); + } +} +#else +NAKED +void CheckElectricAbilities(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tldr r1, _08044A94\n" + "\tldr r4, _08044A98\n" + "\tldr r0, [r4]\n" + "\tmovs r2, 0xCC\n" + "\tlsls r2, 3\n" + "\tadds r0, r2\n" + "\tmovs r3, 0\n" + "\tldrsh r0, [r0, r3]\n" + "\tlsls r0, 1\n" + "\tadds r1, 0x32\n" + "\tadds r0, r1\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tcmp r0, 0\n" + "\tbeq _08044A8A\n" + "\tbl sub_8071B48\n" + "\tldr r0, [r4]\n" + "\tldr r2, _08044A9C\n" + "\tadds r0, r2\n" + "\tmovs r2, 0\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r3, _08044AA0\n" + "\tadds r0, r3\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _08044AA4\n" + "\tadds r0, r1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r3, 0x2\n" + "\tadds r0, r3\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r3, _08044AA8\n" + "\tadds r1, r0, r3\n" + "\tstr r2, [r1]\n" + "\tldr r1, _08044AAC\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x2\n" + "\tstr r1, [r0]\n" + "\tmov r8, r2\n" + "\tadds r7, r4, 0\n" +"_080449F2:\n" + "\tldr r0, [r7]\n" + "\tmov r2, r8\n" + "\tlsls r1, r2, 2\n" + "\tldr r3, _08044AB0\n" + "\tadds r0, r3\n" + "\tadds r0, r1\n" + "\tldr r5, [r0]\n" + "\tadds r0, r5, 0\n" + "\tbl EntityExists\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08044A7A\n" + "\tldr r0, [r5, 0x70]\n" + "\tadds r4, r0, 0\n" + "\tmovs r0, 0xA4\n" + "\tlsls r0, 1\n" + "\tadds r1, r4, r0\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r1]\n" + "\tldrb r0, [r4, 0x6]\n" + "\tmovs r6, 0x1\n" + "\tcmp r0, 0\n" + "\tbeq _08044A24\n" + "\tmovs r6, 0\n" +"_08044A24:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x32\n" + "\tbl HasAbility\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08044A46\n" + "\tldr r1, [r7]\n" + "\tldr r2, _08044AA8\n" + "\tadds r0, r1, r2\n" + "\tstr r5, [r0]\n" + "\tldr r3, _08044AAC\n" + "\tadds r1, r3\n" + "\tadds r0, r4, 0\n" + "\tadds r0, 0x98\n" + "\tldr r0, [r0]\n" + "\tstr r0, [r1]\n" +"_08044A46:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x3F\n" + "\tbl HasAbility\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08044A60\n" + "\tldr r0, [r7]\n" + "\tldr r1, _08044AA4\n" + "\tadds r0, r1\n" + "\tadds r0, r6\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" +"_08044A60:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x38\n" + "\tbl HasAbility\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08044A7A\n" + "\tldr r0, [r7]\n" + "\tldr r2, _08044A9C\n" + "\tadds r0, r2\n" + "\tadds r0, r6\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" +"_08044A7A:\n" + "\tmovs r3, 0x1\n" + "\tadd r8, r3\n" + "\tmov r0, r8\n" + "\tcmp r0, 0x13\n" + "\tble _080449F2\n" + "\tmovs r0, 0\n" + "\tbl sub_8043ED0\n" +"_08044A8A:\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08044A94: .4byte gSpeedTurns\n" +"_08044A98: .4byte gDungeonGlobalData\n" +"_08044A9C: .4byte 0x000037f8\n" +"_08044AA0: .4byte 0x000037f9\n" +"_08044AA4: .4byte 0x000037fa\n" +"_08044AA8: .4byte 0x00017b2c\n" +"_08044AAC: .4byte 0x00017b38\n" +"_08044AB0: .4byte 0x000135cc"); +} +#endif + +void sub_8044AB4(void) +{ + s32 index; + + if (gSpeedTurns[1][gDungeonGlobalData->speedTurnCounter + 1] != 0) { + for (index = 0; index < DUNGEON_MAX_POKEMON; index++) { + if (EntityExists(gDungeonGlobalData->allPokemon[index])) { + UseAttack(0); + break; + } + } + sub_807EAA0(1,0); + sub_8086AC0(); + sub_8043ED0(0); + } +} bool8 sub_8044B28(void) { @@ -86,8 +300,8 @@ void sub_8044C10(u8 param_1) { entityData->action.actionUseIndex = 0; entityData->action.unkC = 0; - entityData->itemTargetPosition.x = -1; - entityData->itemTargetPosition.y = -1; + entityData->action.itemTargetPosition.x = -1; + entityData->action.itemTargetPosition.y = -1; } } @@ -98,8 +312,8 @@ void sub_8044C50(u16 action) entityData->action.action = action; entityData->action.actionUseIndex = 0; entityData->action.unkC = 0; - entityData->itemTargetPosition.x = -1; - entityData->itemTargetPosition.y = -1; + entityData->action.itemTargetPosition.x = -1; + entityData->action.itemTargetPosition.y = -1; } void ResetAction(struct DungeonActionContainer *actionPointer) diff --git a/src/dungeon_ai_items.c b/src/dungeon_ai_items.c index 4456ebc17..f0d6d30ac 100644 --- a/src/dungeon_ai_items.c +++ b/src/dungeon_ai_items.c @@ -123,7 +123,7 @@ void DecideUseItem(struct DungeonEntity *pokemon) pokemonData->action.lastItemThrowPosition.x = pokemon->posWorld.x; pokemonData->action.lastItemThrowPosition.y = pokemon->posWorld.y; pokemonData->action.facingDir = CalculateFacingDir(&pokemon->posWorld, &potentialTargetPositions[chosenTargetIndex]) & DIRECTION_MASK; - pokemonData->itemTargetPosition = potentialTargetPositions[chosenTargetIndex]; + pokemonData->action.itemTargetPosition = potentialTargetPositions[chosenTargetIndex]; } } else @@ -242,7 +242,7 @@ void DecideUseItem(struct DungeonEntity *pokemon) pokemonData->action.lastItemThrowPosition.x = pokemon->posWorld.x; pokemonData->action.lastItemThrowPosition.y = pokemon->posWorld.y; pokemonData->action.facingDir = CalculateFacingDir(&pokemon->posWorld, &potentialTargetPositions[chosenTargetIndex]) & DIRECTION_MASK; - pokemonData->itemTargetPosition = potentialTargetPositions[chosenTargetIndex]; + pokemonData->action.itemTargetPosition = potentialTargetPositions[chosenTargetIndex]; return; } } diff --git a/src/dungeon_engine.c b/src/dungeon_engine.c index 08a1aef80..8c18c3f06 100644 --- a/src/dungeon_engine.c +++ b/src/dungeon_engine.c @@ -5,7 +5,7 @@ extern bool8 sub_8044B28(void); extern bool8 xxx_dungeon_80442D0(u8); -extern void sub_8044994(void); +extern void CheckElectricAbilities(void); extern void sub_807E378(void); extern void sub_8044574(void); extern void sub_8044820(void); @@ -42,7 +42,7 @@ void RunDungeon(u8 param_1) bool8 cVar2; if (!sub_8044B28()) { - sub_8044994(); + CheckElectricAbilities(); if (!sub_8044B28()) { cVar2 = xxx_dungeon_80442D0(param_1); if (!sub_8044B28()) { diff --git a/src/dungeon_pokemon_attributes.c b/src/dungeon_pokemon_attributes.c index 79b14fabf..bb31bc003 100644 --- a/src/dungeon_pokemon_attributes.c +++ b/src/dungeon_pokemon_attributes.c @@ -77,8 +77,8 @@ bool8 sub_80717A4(struct DungeonEntity *pokemon, u16 moveID) for(iVar3 = 0, pokeMove = entityData->moves, pokeMove2 = pokeMove; iVar3 < MAX_MON_MOVES; pokeMove++, pokeMove2++, iVar3++) { - if (((pokeMove->moveFlags & MOVE_FLAG_EXISTS) != 0) && (entityData->isLeader || ((pokeMove->moveFlags & MOVE_FLAG_ENABLED) != 0))) - if((sub_805744C(pokemon, pokeMove2, 1) != '\0') && (pokeMove->PP != 0)) + if (((pokeMove->moveFlags & MOVE_FLAG_EXISTS)) && (entityData->isLeader || ((pokeMove->moveFlags & MOVE_FLAG_ENABLED)))) + if((sub_805744C(pokemon, pokeMove2, TRUE) != 0) && (pokeMove->PP != 0)) if(pokeMove->moveID == moveID) return TRUE; } diff --git a/src/save.c b/src/save.c index 72a64967c..964b77d87 100644 --- a/src/save.c +++ b/src/save.c @@ -451,7 +451,7 @@ bool8 IsSaveCorrupted(void) return isCorrupted; } -u32 WriteSavetoPak(s32 *param_1,u32 param_2) +u32 WriteSavetoPak(s32 *param_1, u32 param_2) { struct UnkStruct_sub_8011DAC *iVar1; char *__src; diff --git a/src/status.c b/src/status.c index a95c10d78..57e3630c7 100644 --- a/src/status.c +++ b/src/status.c @@ -5,11 +5,13 @@ #include "constants/type.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_ai_targeting.h" +#include "dungeon_ai_movement.h" #include "dungeon_global_data.h" #include "dungeon_map_access.h" #include "dungeon_util.h" #include "dungeon_items.h" #include "code_808417C.h" +#include "code_8077274_1.h" #include "map.h" extern u8 gAvailablePokemonNames[]; @@ -76,14 +78,65 @@ extern u8 *gUnknown_80FAA8C[]; extern u8 *gUnknown_80FAE58[]; extern u8 *gUnknown_80FAE7C[]; extern s16 gUnknown_80F4EB0[]; +extern u8 *gUnknown_80FBB4C[]; +extern u8 *gUnknown_80FBB78[]; +extern u8 *gUnknown_80FA79C[]; +extern s16 gUnknown_80F4EF0[]; +extern u8 *gUnknown_80FB73C[]; +extern u8 *gUnknown_80FB764[]; +extern u8 *gUnknown_80FB780[]; +extern u8 *gUnknown_80FB7A0[]; +extern s16 gUnknown_80F4EC4[]; +extern u8 *gUnknown_80FB8BC[]; +extern u8 *gUnknown_80FB8E4[]; +extern s16 gUnknown_80F4EC8[]; +extern u8 *gUnknown_80FB900[]; +extern u8 *gUnknown_80FB924[]; +extern u8 *gUnknown_80FB994[]; +extern s16 gUnknown_80F4ED0[]; +extern u8 *gUnknown_80FB978[]; +extern s16 gUnknown_80F4EA4[]; +extern u8 *gUnknown_80FB004[]; +extern u32 gUnknown_8106A4C; +extern s16 gUnknown_80F4EA8[]; +extern u8 *gUnknown_80FB01C[]; +extern s16 gUnknown_80F4ED8[]; +extern u8 *gUnknown_80FBA14[]; +extern u8 *gUnknown_80FB9F0[]; +extern u8 *gUnknown_80FBA38[]; +extern u8 *gUnknown_80FBA60[]; +extern u8 *gUnknown_80FBAA0[]; +extern u8 *gUnknown_80FBA80[]; +extern s16 gUnknown_80F4EE4[]; +extern s16 gUnknown_80F4EEC[]; +extern u8 *gUnknown_80FBB04[]; +extern u8 *gUnknown_80FBB28[]; 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 sub_8041D48(struct DungeonEntity *); +extern u8 sub_806CEBC(struct DungeonEntity *); +extern void sub_8041D38(struct DungeonEntity * pokemon); +extern void sub_803E46C(u32); +extern void sub_806CCB4(struct DungeonEntity *, u8); extern u8 sub_8043D10(void); +extern void sub_8041CDC(struct DungeonEntity *pokemon); +extern void sub_8041CEC(struct DungeonEntity *pokemon); +extern void nullsub_73(struct DungeonEntity *); +extern void nullsub_74(struct DungeonEntity *); extern void nullsub_75(struct DungeonEntity *); extern void nullsub_76(struct DungeonEntity *); extern void nullsub_77(struct DungeonEntity *); extern void nullsub_78(struct DungeonEntity *); +extern void nullsub_79(struct DungeonEntity *); +extern void nullsub_80(struct DungeonEntity *); +extern void nullsub_81(struct DungeonEntity *); +extern void nullsub_82(struct DungeonEntity *); extern void sub_803F580(u32); extern void sub_8040A84(void); extern void sub_8041CA8(struct DungeonEntity *); @@ -421,7 +474,7 @@ void sub_8077780(struct DungeonEntity * pokemon, struct DungeonEntity * target, } } -void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 diplayMessage) +void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 displayMessage) { s32 movSpeed; s32 index; @@ -437,8 +490,8 @@ void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, entityData = target->entityData; SetMessageArgument(gAvailablePokemonNames,target,0); movSpeed = GetMovementSpeed(target); - if (movSpeed == 4) { - if (diplayMessage) + if (movSpeed == MAX_MOVEMENT_SPEED) { + if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FC2B8); } else { @@ -468,7 +521,7 @@ void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 param_3, bool8 displayMessage) { s32 movSpeed; - s32 iVar4; + s32 counter; s32 index; s32 movSpeed_1; struct DungeonEntityData *entityData; @@ -487,7 +540,7 @@ void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, sub_80522F4(pokemon,target,*gUnknown_80FC2D8); } else { - for(iVar4 = 0; iVar4 < param_3; iVar4++) + for(counter = 0; counter < param_3; counter++) { for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++) { @@ -793,3 +846,344 @@ void sub_8078084(struct DungeonEntity * pokemon) } } } + +void DestinyBondStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData2; + s32 index; + u8 *linkedStatus; + s32 zero; + + if (((EntityExists(target)) && (GetEntityType(pokemon) == ENTITY_POKEMON)) && + (GetEntityType(target) == ENTITY_POKEMON)) { + entityData = pokemon->entityData; + SetMessageArgument(gAvailablePokemonNames,pokemon,0); + linkedStatus = &entityData->linkedStatus; + if (entityData->linkedStatus != LINKED_STATUS_DESTINY_BOND) + { + if (entityData->linkedStatus == LINKED_STATUS_LEECH_SEED) + sub_80522F4(pokemon,target,*gUnknown_80FA79C); + zero = 0; + *linkedStatus = LINKED_STATUS_DESTINY_BOND; + entityData->linkedStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4EF0,TRUE) + 1; + entityData->linkedStatusDamageTimer = zero; + nullsub_74(target); + entityData->unkD8 = 0xff; + } + else + { + sub_80522F4(pokemon,target,*gUnknown_80FBB78); + return; + } + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + if (target == gDungeonGlobalData->allPokemon[index]) { + entityData->unkD8 = index; + entityData2 = target->entityData; + entityData->unkD4 = entityData2->unk98; + } + } + sub_80522F4(pokemon,target,*gUnknown_80FBB4C); + DungeonEntityUpdateStatusSprites(target); + } +} + +void SureShotStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target, s32 turns) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->moveStatus != MOVE_STATUS_SURE_SHOT) { + entityData->moveStatus = MOVE_STATUS_SURE_SHOT; + entityData->moveStatusTurnsLeft = turns + 1; + sub_8041CDC(target); + sub_80522F4(pokemon,target,*gUnknown_80FB73C); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB764); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void WhifferStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target, s32 turns) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target) && !HasSafeguardStatus(pokemon, target, TRUE)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->moveStatus != MOVE_STATUS_WHIFFER) { + entityData->moveStatus = MOVE_STATUS_WHIFFER; + entityData->moveStatusTurnsLeft = turns + 1; + sub_8041CEC(target); + sub_80522F4(pokemon,target,*gUnknown_80FB780); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB7A0); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void FixedDamageStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->moveStatus != MOVE_STATUS_SET_DAMAGE) { + entityData->moveStatus = MOVE_STATUS_SET_DAMAGE; + entityData->moveStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4EC4, FALSE) + 1; + nullsub_79(target); + sub_80522F4(pokemon,target,*gUnknown_80FB8BC); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB8E4); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void FocusEnergyStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if (EntityExists(target)) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->moveStatus != MOVE_STATUS_FOCUS_ENERGY) { + entityData->moveStatus = MOVE_STATUS_FOCUS_ENERGY; + entityData->moveStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4EC8, FALSE) + 1; + nullsub_80(target); + sub_80522F4(pokemon,target,*gUnknown_80FB900); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB924); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_80783C4(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3) +{ + struct DungeonEntityData *targetEntityData; + struct DungeonEntityData *entityData; + struct DungeonEntity * entity; + struct DungeonEntity * entity2; + struct DungeonActionContainer action; + s32 index; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon, target, TRUE))) { + targetEntityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (targetEntityData->waitingStatus == WAITING_STATUS_DECOY) { + sub_80522F4(pokemon,target,*gUnknown_80FB994); + } + else { + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeonGlobalData->allPokemon[index]; + if ((((EntityExists(entity)) && (target != entity)) && + (u8)(entity->entityData->waitingStatus - 2U) < 2)) { + SendWaitingEndMessage(pokemon,entity,WAITING_STATUS_NONE); + sub_803E46C(0x2a); + } + } + sub_8041D38(target); + SetMessageArgument(gAvailablePokemonNames,target,0); + if (targetEntityData->waitingStatus != WAITING_STATUS_NONE) { + SendWaitingEndMessage(pokemon,target, WAITING_STATUS_DECOY); + } + targetEntityData->waitingStatus = WAITING_STATUS_DECOY; + targetEntityData->enemyDecoy = pokemon->entityData->isEnemy; + targetEntityData->fillCA = param_3; + targetEntityData->waitingStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ED0,TRUE) + 1; + targetEntityData->cursedDamageTimer = 0; + sub_806CCB4(target,sub_806CEBC(target)); + gDungeonGlobalData->decoyActive = TRUE; + sub_80522F4(pokemon,target,*gUnknown_80FB978); + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity2 = gDungeonGlobalData->allPokemon[index]; + if (EntityExists(entity2)) { + entityData = entity2->entityData; + entityData->movementAction = MOVEMENT_ACTION_FACE_RANDOM_DIRECTION; + entityData->targetPokemon = NULL; + entityData->targetPokemonSpawnIndex = 0; + if (!entityData->isLeader) { + action = entityData->action; + MoveIfPossible(entity2, TRUE); + entityData->action = action; + } + } + } + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void CurseStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target) +{ + u32 uVar1; + s32 HP; + struct DungeonEntityData * pokemonEntityData; + struct DungeonEntityData * targetEntityData; + + + if ((EntityExists(pokemon) ) && (EntityExists(target))) { + pokemonEntityData = pokemon->entityData; + targetEntityData = target->entityData; + if (HasType(pokemon, TYPE_GHOST)) { + if (HasSafeguardStatus(pokemon,target, TRUE)) { + return; + } + SendWaitingEndMessage(pokemon,target,WAITING_STATUS_CURSED); + sub_8041D48(target); + HP = pokemonEntityData->HP / 2; + pokemonEntityData->HP = HP; + if (HP == 0) { + pokemonEntityData->HP = 1; + } + if (targetEntityData->waitingStatus != WAITING_STATUS_CURSED) { + targetEntityData->waitingStatus = WAITING_STATUS_CURSED; + targetEntityData->waitingStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4EA4,TRUE) + 1; + targetEntityData->cursedDamageTimer = 0; + } + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FB004); + } + else { + uVar1 = gUnknown_8106A4C; + sub_8077084(pokemon,pokemon,uVar1,1); + sub_8077160(pokemon,pokemon,uVar1,1); + sub_80779F0(pokemon,pokemon,1,1); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void SnatchStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntity * entity; + s32 index; + struct DungeonEntityData * targetEntityData; + struct DungeonEntityData * targetEntityData2; + + if (EntityExists(target)) { + SendWaitingEndMessage(pokemon,target,WAITING_STATUS_SNATCH); + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeonGlobalData->allPokemon[index]; + if ((EntityExists(entity)) && (entity->entityData->waitingStatus == WAITING_STATUS_SNATCH)) { + SendWaitingEndMessage(pokemon, entity, WAITING_STATUS_NONE); + } + } + nullsub_81(target); + + targetEntityData = target->entityData; + targetEntityData2 = targetEntityData; + if (targetEntityData->waitingStatus != WAITING_STATUS_SNATCH) { + targetEntityData->waitingStatus = WAITING_STATUS_SNATCH; + targetEntityData->waitingStatusTurnsLeft= CalculateStatusTurns(target,gUnknown_80F4EA8,FALSE) + 1; + targetEntityData->cursedDamageTimer = 0; + } + + gDungeonGlobalData->snatchPokemon = target; + gDungeonGlobalData->unk17B3C = targetEntityData2->unk98; + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FB01C); + DungeonEntityUpdateStatusSprites(target); + } +} + +void TauntStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,TRUE))) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->volatileStatus != VOLATILE_STATUS_TAUNTED) { + entityData->volatileStatus = VOLATILE_STATUS_TAUNTED; + entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ED8,TRUE) + 1; + nullsub_73(target); + sub_80522F4(pokemon,target,*gUnknown_80FB9F0); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBA14); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_80787E4(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + + if ((EntityExists(target))) { + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->stockpileCount < 3) { + entityData->stockpileCount++; + sub_804178C(1); + sub_8041D5C(target); + gUnknown_202DE30[0] = entityData->stockpileCount; + sub_80522F4(pokemon,target,*gUnknown_80FBA38); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBA60); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void sub_807885C(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData * targetEntityData; + struct DungeonEntityData * targetEntityData_1; + + if (EntityExists(target)) { + targetEntityData = target->entityData; + targetEntityData_1 = targetEntityData; + if (targetEntityData_1->transformStatus == TRANSFORM_STATUS_TRANSFORMED) { + SendTransformEndMessage(pokemon,target); + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (targetEntityData_1->transformStatus != TRANSFORM_STATUS_INVISIBLE) { + targetEntityData_1->transformStatus = TRANSFORM_STATUS_INVISIBLE; + targetEntityData_1->transformStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4EE4,FALSE) + 1; + sub_8041D84(target); + sub_80522F4(pokemon,target,*gUnknown_80FBA80); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBAA0); + } + DungeonEntityUpdateStatusSprites(target); + } +} + +void PerishSongTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData * entityData; + + if (EntityExists(target) && !HasSafeguardStatus(pokemon, target, TRUE)) { + nullsub_82(target); + entityData = target->entityData; + SetMessageArgument(gAvailablePokemonNames,target,0); + if (entityData->perishSongTimer == 0) { + entityData->perishSongTimer = CalculateStatusTurns(target,gUnknown_80F4EEC,0) + 1; + sub_80522F4(pokemon,target,*gUnknown_80FBB04); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBB28); + } + DungeonEntityUpdateStatusSprites(target); + } +} diff --git a/src/status_checker.c b/src/status_checker.c index 9710d0247..fd7eddb20 100644 --- a/src/status_checker.c +++ b/src/status_checker.c @@ -74,7 +74,7 @@ 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 sub_8078678(struct DungeonEntity *, struct DungeonEntity *); +extern void SnatchStatusTarget(struct DungeonEntity *, struct DungeonEntity *); extern void sub_806F324(struct DungeonEntity *, s32, u32, u32); extern void sub_8077160(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern bool8 sub_805755C(struct DungeonEntity* pokemon,u16 moveID); @@ -83,8 +83,8 @@ extern void DestinyBondStatusTarget(struct DungeonEntity *, struct DungeonEntity extern void sub_8076E20(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 sub_80788E8(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8076B48(struct DungeonEntity *, struct DungeonEntity *); +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 sub_807CD9C(struct DungeonEntity *, struct DungeonEntity *, u8 facingDir); @@ -238,6 +238,48 @@ extern s16 gUnknown_80F4DC6; extern u8 *gUnknown_80FEFF4[]; extern void sub_80763F8(struct DungeonEntity *, struct DungeonEntity *, u32); +extern u32 gUnknown_80F51C4[]; + +bool8 sub_805AFA4(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, u32 param_4) +{ + s32 r0; + s32 r2; + s32 r1; + bool8 flag; + +#ifndef NONMATCHING + register struct DungeonEntityData *entityData asm("r3"); +#else + struct DungeonEntityData *entityData; +#endif + + SendThawedMessage(pokemon, target); + entityData = pokemon->entityData; + r2 = entityData->maxHP; + r0 = r2; + if (r2 < 0) { + r0 = r2 + 3; + } + if (entityData->HP <= r0 >> 2) { + r2 = 0; + } + else if (r1 = entityData->HP, r1 <= r2 / 2) { + r2 = 1; + } + else + { + r0 = r2 * 3; + if (r0 < 0) { + r0 = r0 + 3; + } + if (r0 >>= 2, r2 = 3, r1 <= r0) { + r2 = 2; + } + } + flag = sub_8055640(pokemon,target,move,gUnknown_80F51C4[r2],param_4) ? TRUE : FALSE; + return flag; +} + bool8 sub_805B028(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move) { sub_8077780(pokemon,target, 1); @@ -301,13 +343,13 @@ bool8 HandleColorChange(struct DungeonEntity * pokemon, struct DungeonEntity * t } } -bool8 sub_805B164(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move,s32 param_4) +bool8 sub_805B164(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) { sub_8077084(pokemon,target,gUnknown_8106A50, 2); return TRUE; } -bool8 sub_805B17C(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move,s32 param_4) +bool8 sub_805B17C(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) { s32 uVar4; bool8 uVar5; @@ -332,15 +374,15 @@ bool8 sub_805B17C(struct DungeonEntity * pokemon, struct DungeonEntity * target, return uVar5; } -bool8 sub_805B208(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) +bool8 PerishSongMoveAction(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) { - sub_80788E8(pokemon, target); + PerishSongTarget(pokemon, target); return TRUE; } bool8 sub_805B214(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) { - sub_8076B48(pokemon, target); + WrapTarget(pokemon, target); return TRUE; } @@ -643,7 +685,7 @@ bool8 sub_805B668(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 sub_805B734(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8078678(pokemon, target); + SnatchStatusTarget(pokemon, target); return TRUE; } From 44094d9fddcfaac3264c02860792c0fe73c7f026 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 11 Nov 2022 16:56:25 -0800 Subject: [PATCH 04/21] Match CheckElectricAbilities Thanks to wizard @jiangzhengwenjz --- src/dungeon_action.c | 161 +++---------------------------------------- 1 file changed, 11 insertions(+), 150 deletions(-) diff --git a/src/dungeon_action.c b/src/dungeon_action.c index e487eefec..70dc65ee0 100644 --- a/src/dungeon_action.c +++ b/src/dungeon_action.c @@ -1,6 +1,7 @@ #include "global.h" #include "dungeon_action.h" +#include "constants/ability.h" #include "constants/dungeon_action.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" @@ -31,7 +32,6 @@ extern void sub_8043ED0(u32); extern void sub_807EAA0(u32, u32); extern void UseAttack(u32); -#ifdef NONMATCHING void CheckElectricAbilities(void) { struct DungeonEntityData * entityData; @@ -57,18 +57,22 @@ void CheckElectricAbilities(void) entityData2 = entityData; entityData->attacking = FALSE; - // should be isNotEnemy = (entityData->isEnemy != '\0'); - // gets a neg/orr/lsr instead of cmp/beq - isNotEnemy = (entityData->isEnemy == 0); + if(entityData->isEnemy) + { + isNotEnemy = FALSE; + } + else { + isNotEnemy = TRUE; + } - if (HasAbility(entity, 0x32)) { // ABILITY_LIGHTNINGROD + if (HasAbility(entity, ABILITY_LIGHTNINGROD)) { // ABILITY_LIGHTNINGROD gDungeonGlobalData->lightningRodPokemon = entity; gDungeonGlobalData->unk17B38 = entityData2->unk98; } - if (HasAbility(entity, 0x3f)) { // ABILITY_MINUS + if (HasAbility(entity, ABILITY_MINUS)) { // ABILITY_MINUS gDungeonGlobalData->hasMinus[isNotEnemy] = TRUE; } - if (HasAbility(entity, 0x38)) { // ABILITY_PLUS + if (HasAbility(entity, ABILITY_PLUS)) { // ABILITY_PLUS gDungeonGlobalData->hasPlus[isNotEnemy] = TRUE; } } @@ -76,149 +80,6 @@ void CheckElectricAbilities(void) sub_8043ED0(0); } } -#else -NAKED -void CheckElectricAbilities(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tldr r1, _08044A94\n" - "\tldr r4, _08044A98\n" - "\tldr r0, [r4]\n" - "\tmovs r2, 0xCC\n" - "\tlsls r2, 3\n" - "\tadds r0, r2\n" - "\tmovs r3, 0\n" - "\tldrsh r0, [r0, r3]\n" - "\tlsls r0, 1\n" - "\tadds r1, 0x32\n" - "\tadds r0, r1\n" - "\tmovs r1, 0\n" - "\tldrsh r0, [r0, r1]\n" - "\tcmp r0, 0\n" - "\tbeq _08044A8A\n" - "\tbl sub_8071B48\n" - "\tldr r0, [r4]\n" - "\tldr r2, _08044A9C\n" - "\tadds r0, r2\n" - "\tmovs r2, 0\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tldr r3, _08044AA0\n" - "\tadds r0, r3\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tldr r1, _08044AA4\n" - "\tadds r0, r1\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r3, 0x2\n" - "\tadds r0, r3\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tldr r3, _08044AA8\n" - "\tadds r1, r0, r3\n" - "\tstr r2, [r1]\n" - "\tldr r1, _08044AAC\n" - "\tadds r0, r1\n" - "\tmovs r1, 0x2\n" - "\tstr r1, [r0]\n" - "\tmov r8, r2\n" - "\tadds r7, r4, 0\n" -"_080449F2:\n" - "\tldr r0, [r7]\n" - "\tmov r2, r8\n" - "\tlsls r1, r2, 2\n" - "\tldr r3, _08044AB0\n" - "\tadds r0, r3\n" - "\tadds r0, r1\n" - "\tldr r5, [r0]\n" - "\tadds r0, r5, 0\n" - "\tbl EntityExists\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08044A7A\n" - "\tldr r0, [r5, 0x70]\n" - "\tadds r4, r0, 0\n" - "\tmovs r0, 0xA4\n" - "\tlsls r0, 1\n" - "\tadds r1, r4, r0\n" - "\tmovs r0, 0\n" - "\tstrb r0, [r1]\n" - "\tldrb r0, [r4, 0x6]\n" - "\tmovs r6, 0x1\n" - "\tcmp r0, 0\n" - "\tbeq _08044A24\n" - "\tmovs r6, 0\n" -"_08044A24:\n" - "\tadds r0, r5, 0\n" - "\tmovs r1, 0x32\n" - "\tbl HasAbility\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08044A46\n" - "\tldr r1, [r7]\n" - "\tldr r2, _08044AA8\n" - "\tadds r0, r1, r2\n" - "\tstr r5, [r0]\n" - "\tldr r3, _08044AAC\n" - "\tadds r1, r3\n" - "\tadds r0, r4, 0\n" - "\tadds r0, 0x98\n" - "\tldr r0, [r0]\n" - "\tstr r0, [r1]\n" -"_08044A46:\n" - "\tadds r0, r5, 0\n" - "\tmovs r1, 0x3F\n" - "\tbl HasAbility\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08044A60\n" - "\tldr r0, [r7]\n" - "\tldr r1, _08044AA4\n" - "\tadds r0, r1\n" - "\tadds r0, r6\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r0]\n" -"_08044A60:\n" - "\tadds r0, r5, 0\n" - "\tmovs r1, 0x38\n" - "\tbl HasAbility\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08044A7A\n" - "\tldr r0, [r7]\n" - "\tldr r2, _08044A9C\n" - "\tadds r0, r2\n" - "\tadds r0, r6\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r0]\n" -"_08044A7A:\n" - "\tmovs r3, 0x1\n" - "\tadd r8, r3\n" - "\tmov r0, r8\n" - "\tcmp r0, 0x13\n" - "\tble _080449F2\n" - "\tmovs r0, 0\n" - "\tbl sub_8043ED0\n" -"_08044A8A:\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08044A94: .4byte gSpeedTurns\n" -"_08044A98: .4byte gDungeonGlobalData\n" -"_08044A9C: .4byte 0x000037f8\n" -"_08044AA0: .4byte 0x000037f9\n" -"_08044AA4: .4byte 0x000037fa\n" -"_08044AA8: .4byte 0x00017b2c\n" -"_08044AAC: .4byte 0x00017b38\n" -"_08044AB0: .4byte 0x000135cc"); -} -#endif void sub_8044AB4(void) { From 9befb0ef4e14f4c75518de439138056b76652c88 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 12 Nov 2022 15:44:26 -0800 Subject: [PATCH 05/21] more decomp work --- asm/code_8044210.s | 498 ---------------------------------- include/dungeon_ai.h | 2 +- include/dungeon_engine.h | 6 +- include/dungeon_entity.h | 3 +- include/dungeon_global_data.h | 15 +- include/status_checks_1.h | 1 + src/code_8045A00.c | 32 +-- src/code_8077274_1.c | 1 - src/code_807E5AC.c | 6 +- src/dungeon_action.c | 75 ++++- src/dungeon_ai.c | 2 +- src/dungeon_engine.c | 155 ++++++++++- src/status.c | 18 +- src/status_checks_1.c | 2 +- 14 files changed, 273 insertions(+), 543 deletions(-) diff --git a/asm/code_8044210.s b/asm/code_8044210.s index 453c5dddb..fd5b052b5 100644 --- a/asm/code_8044210.s +++ b/asm/code_8044210.s @@ -4,328 +4,6 @@ .syntax unified .text - - thumb_func_start xxx_dungeon_80442D0 -xxx_dungeon_80442D0: - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - bl GetLeaderEntity - adds r5, r0, 0 - cmp r5, 0 - beq _0804431A - bl TriggerWeatherAbilities - adds r0, r5, 0 - bl GetMovementSpeed - ldr r3, _08044320 - ldr r1, _08044324 - ldr r1, [r1] - movs r2, 0xCC - lsls r2, 3 - adds r1, r2 - movs r2, 0 - ldrsh r1, [r1, r2] - lsls r1, 1 - movs r2, 0x32 - muls r0, r2 - adds r1, r0 - adds r1, r3 - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _0804431A - ldr r0, [r5, 0x70] - movs r1, 0xA4 - lsls r1, 1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08044328 -_0804431A: - movs r0, 0 - b _0804444E - .align 2, 0 -_08044320: .4byte gSpeedTurns -_08044324: .4byte gDungeonGlobalData -_08044328: - bl GetLeaderEntity - adds r5, r0, 0 - cmp r5, 0 - beq _0804431A - movs r0, 0 - bl UseAttack - lsls r0, 24 - cmp r0, 0 - bne _0804435C - ldr r0, _08044388 - ldr r1, [r0] - ldr r2, _0804438C - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _08044356 - ldr r3, _08044390 - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - beq _0804435C -_08044356: - movs r0, 0xC - bl sub_803E46C -_0804435C: - ldr r0, [r5, 0x70] - adds r0, 0xF8 - movs r1, 0 - strb r1, [r0] - bl sub_8044B28 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _0804431A - ldr r0, _08044388 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0xB8 - str r5, [r0] - adds r1, 0xBC - str r2, [r1] - cmp r7, 0 - beq _08044394 - movs r7, 0 - b _0804439A - .align 2, 0 -_08044388: .4byte gDungeonGlobalData -_0804438C: .4byte 0x0000066c -_08044390: .4byte 0x00000673 -_08044394: - adds r0, r5, 0 - bl TickStatusHeal -_0804439A: - bl sub_8044B28 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _0804431A - adds r0, r5, 0 - bl sub_8071DA4 - ldr r6, _08044434 - ldr r1, [r6] - movs r0, 0x1 - strb r0, [r1, 0xF] - bl sub_805D8C8 - ldr r0, [r6] - strb r4, [r0, 0xF] - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _0804444C - adds r0, r5, 0 - bl sub_8072CF4 - bl sub_8086AC0 - movs r0, 0 - bl sub_8043ED0 - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _0804444C - ldr r2, [r5, 0x70] - ldrh r1, [r2] - movs r3, 0x80 - lsls r3, 8 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08044400 - subs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - movs r3, 0x80 - lsls r3, 7 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r2] -_08044400: - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _0804444C - bl sub_8044454 - bl sub_8044B28 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _0804444C - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0xBC - ldr r1, [r0] - cmp r1, 0 - beq _08044438 - bl sub_805F02C - ldr r0, [r6] - adds r0, 0xBC - str r4, [r0] - movs r7, 0x1 - b _08044328 - .align 2, 0 -_08044434: .4byte gDungeonGlobalData -_08044438: - ldr r0, [r5, 0x70] - adds r0, 0xF8 - ldrb r0, [r0] - cmp r0, 0 - beq _0804444C - movs r3, 0xCC - lsls r3, 3 - adds r0, r2, r3 - strh r1, [r0] - b _08044328 -_0804444C: - movs r0, 0x1 -_0804444E: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end xxx_dungeon_80442D0 - - thumb_func_start sub_8044454 -sub_8044454: - push {r4-r6,lr} - ldr r0, _080444E8 - ldr r1, [r0] - ldrb r0, [r1, 0xE] - cmp r0, 0 - beq _080444E2 - movs r0, 0 - strb r0, [r1, 0xE] - movs r6, 0 -_08044466: - ldr r0, _080444E8 - ldr r0, [r0] - lsls r1, r6, 2 - ldr r2, _080444EC - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080444DC - ldr r5, [r4, 0x70] - ldrh r0, [r5] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _080444DC - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _080444E2 - adds r0, r4, 0 - bl TickStatusHeal - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080444DC - adds r0, r4, 0 - bl sub_8071DA4 - adds r0, r4, 0 - movs r1, 0 - bl DecideAction - adds r0, r4, 0 - bl sub_8072CF4 - bl sub_8086AC0 - movs r0, 0 - bl sub_8043ED0 - ldrh r0, [r5] - ldr r2, _080444F0 - adds r1, r2, 0 - ands r0, r1 - movs r2, 0x80 - lsls r2, 7 - adds r1, r2, 0 - orrs r0, r1 - strh r0, [r5] -_080444DC: - adds r6, 0x1 - cmp r6, 0x13 - ble _08044466 -_080444E2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080444E8: .4byte gDungeonGlobalData -_080444EC: .4byte 0x000135cc -_080444F0: .4byte 0x00007fff - thumb_func_end sub_8044454 - - thumb_func_start sub_80444F4 -sub_80444F4: - push {r4-r6,lr} - adds r6, r0, 0 - bl GetLeaderEntity - cmp r6, r0 - bne _08044566 - ldr r0, _0804456C - ldr r1, [r0] - ldrb r0, [r1, 0xE] - cmp r0, 0 - beq _08044566 - movs r0, 0 - strb r0, [r1, 0xE] - movs r5, 0 -_08044510: - ldr r0, _0804456C - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08044570 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08044560 - cmp r6, r4 - beq _08044560 - ldr r0, [r4, 0x70] - ldrh r0, [r0] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _08044560 - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _08044566 - adds r0, r4, 0 - movs r1, 0 - bl DecideAction - adds r0, r4, 0 - bl sub_8072CF4 - bl sub_8086AC0 - movs r0, 0 - bl sub_8043ED0 -_08044560: - adds r5, 0x1 - cmp r5, 0x13 - ble _08044510 -_08044566: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804456C: .4byte gDungeonGlobalData -_08044570: .4byte 0x000135cc - thumb_func_end sub_80444F4 thumb_func_start sub_8044574 sub_8044574: @@ -658,180 +336,4 @@ _08044818: .4byte gDungeonGlobalData _0804481C: .4byte 0x0001357c thumb_func_end sub_8044574 - thumb_func_start sub_8044820 -sub_8044820: - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r7, 0 - ldr r0, _08044830 - mov r8, r0 - b _080448FC - .align 2, 0 -_08044830: .4byte gSpeedTurns -_08044834: - ldr r4, [r5, 0x70] - ldr r0, [r6] - adds r0, 0xB8 - str r5, [r0] - bl TriggerWeatherAbilities - ldrh r2, [r4] - movs r1, 0x80 - lsls r1, 8 - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - bne _080448FA - movs r1, 0x80 - lsls r1, 7 - adds r0, r1, 0 - ands r0, r2 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - beq _0804486C - ldr r1, _08044868 - adds r0, r1, 0 - ands r0, r2 - strh r0, [r4] - b _080448FA - .align 2, 0 -_08044868: .4byte 0x0000bfff -_0804486C: - movs r2, 0xA2 - lsls r2, 1 - adds r0, r4, r2 - strb r1, [r0] - adds r0, r5, 0 - bl GetMovementSpeed - ldr r1, [r6] - movs r2, 0xCC - lsls r2, 3 - adds r1, r2 - movs r2, 0 - ldrsh r1, [r1, r2] - lsls r1, 1 - movs r2, 0x32 - muls r0, r2 - adds r1, r0 - add r1, r8 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080448FA - movs r1, 0xA4 - lsls r1, 1 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080448FA - ldrh r1, [r4] - ldr r2, _08044984 - adds r0, r2, 0 - ands r1, r0 - movs r0, 0 - strh r1, [r4] - ldr r2, _08044988 - adds r1, r4, r2 - strb r0, [r1] - adds r0, r5, 0 - bl TickStatusHeal - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080448FA - adds r0, r5, 0 - bl sub_8071DA4 - adds r0, r5, 0 - movs r1, 0 - bl DecideAction - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _08044924 - adds r0, r5, 0 - bl sub_8072CF4 - bl sub_8086AC0 - movs r0, 0 - bl sub_8043ED0 - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _08044924 -_080448FA: - adds r7, 0x1 -_080448FC: - cmp r7, 0xF - bgt _08044924 - ldr r6, _0804498C - ldr r0, [r6] - lsls r1, r7, 2 - ldr r2, _08044990 - adds r0, r2 - adds r0, r1 - ldr r5, [r0] - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080448FA - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - beq _08044834 -_08044924: - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _0804497A - movs r7, 0 -_08044930: - ldr r0, _0804498C - ldr r0, [r0] - lsls r1, r7, 2 - ldr r2, _08044990 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08044974 - ldr r0, [r4, 0x70] - movs r1, 0xA2 - lsls r1, 1 - adds r5, r0, r1 - ldrb r0, [r5] - cmp r0, 0 - beq _08044974 - adds r0, r4, 0 - bl sub_8074094 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08044974 - adds r0, r4, 0 - bl sub_8071DA4 - movs r0, 0 - strb r0, [r5] -_08044974: - adds r7, 0x1 - cmp r7, 0xF - ble _08044930 -_0804497A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08044984: .4byte 0x00003fff -_08044988: .4byte 0x00000145 -_0804498C: .4byte gDungeonGlobalData -_08044990: .4byte 0x0001358c - thumb_func_end sub_8044820 - .align 2, 0 diff --git a/include/dungeon_ai.h b/include/dungeon_ai.h index 8da0e791f..d7ba85e54 100644 --- a/include/dungeon_ai.h +++ b/include/dungeon_ai.h @@ -3,7 +3,7 @@ #include "dungeon_entity.h" -void DecideAction(struct DungeonEntity *pokemon); +void DecideAction(struct DungeonEntity *pokemon, u32 unused); u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 param_2); #endif diff --git a/include/dungeon_engine.h b/include/dungeon_engine.h index e4fa7f4f9..aa0cdf7cf 100644 --- a/include/dungeon_engine.h +++ b/include/dungeon_engine.h @@ -1,7 +1,9 @@ #ifndef GUARD_DUNGEON_ENGINE_H #define GUARD_DUNGEON_ENGINE_H -bool8 IsBossBattle(); -bool8 IsFixedDungeon(); +bool8 IsBossBattle(void); +bool8 IsFixedDungeon(void); +bool8 sub_8044210(void); +void RunDungeon(bool8 param_1); #endif diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index e149d9747..3c2dd7501 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -166,7 +166,7 @@ struct DungeonEntityData /* 0xF5 */ bool8 exposedStatus; /* 0xF6 */ bool8 isColorChanged; /* 0xF7 */ bool8 isBoss; - /* 0xF8 */ u8 unkF8; + /* 0xF8 */ bool8 movementSpeedChanged; // Toggled when pokemon is movement speed is sped up /* 0xF9 */ u8 unkF9; /* 0xFA */ u8 terrifiedTurnsLeft; // Doubles as a bool for whether the Pokémon is terrified. u8 unkFB; @@ -301,6 +301,7 @@ enum MovementFlag { MOVEMENT_FLAG_SWAPPED_PLACES = 1 << 5, MOVEMENT_FLAG_MOVING = 1 << 9, + MOVEMENT_FLAG_UNK_14 = 1 << 14, MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED = 1 << 15 // Set if the Pokémon is petrified and the leader cures them by swapping places. }; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 9ccc26796..3b72ec24b 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -33,12 +33,16 @@ struct DungeonGlobalData u8 unk8; u8 fill9[0xC - 0x9]; u8 unkC; - u8 unkD[0xF - 0xD]; + u8 unkD; + u8 unkE; /* 0xF */ bool8 inputAllowed; // Whether the game is currently accepting input. Set to false while action animations play. u8 unk10; u8 unk11; s16 unk12; - u8 fill14[0x16D - 0x14]; + u8 fill14[0xB8 - 0x14]; + struct DungeonEntity *unkB8; + u32 unkBC; + u8 fillC0[0x16D - 0xC0]; u8 unk16D; u8 fill16E[0x179 - 0x16E]; /* 0x179 */ bool8 pokemonExposed; // True if a Pokémon on the floor has the Exposed status. @@ -57,12 +61,13 @@ struct DungeonGlobalData /* 0x666 */ u16 turnsLeft; // Turns remaining before getting swept out of the dungeon. u8 fill668[0x66A - 0x668]; u16 unk66A; - u8 fill66C[0x66E - 0x66C]; + u8 unk66C; + u8 unk66D; /* 0x66E */ u8 unk66E; u8 fill66F[0x671 - 0x66F]; /* 0x671 */ bool8 monsterHouseActive; /* 0x672 */ u8 unk672; - u8 fill673[0x674 - 0x673]; + u8 unk673; u8 unk674; u8 unk675; /* 0x676 */ bool8 itemHoldersIdentified; @@ -96,7 +101,7 @@ struct DungeonGlobalData /* 0xE26F */ u8 startingWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather. /* 0xE277 */ u8 mudSportTurnsLeft; /* 0xE278 */ u8 waterSportTurnsLeft; - /* 0xE279 */ u8 negateWeatherEffects; // Air Lock and Cloud Nine toggle this to disable weather effects + /* 0xE279 */ bool8 negateWeatherEffects; // Air Lock and Cloud Nine toggle this to disable weather effects u8 fillE27A[0xE8C0 - 0xE27A]; /* 0xE8C0 */ struct MapTile* mapTilePointers[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X]; u8 fill104C0[0x104C4 - 0x104C0]; diff --git a/include/status_checks_1.h b/include/status_checks_1.h index afe191804..d7baa400a 100644 --- a/include/status_checks_1.h +++ b/include/status_checks_1.h @@ -3,6 +3,7 @@ #include "dungeon_entity.h" +s32 GetMovementSpeed(struct DungeonEntity *pokemon); bool8 HasNegativeStatus(struct DungeonEntity *pokemon); bool8 IsSleeping(struct DungeonEntity *pokemon); bool8 HasQuarterHPOrLess(struct DungeonEntity *pokemon); diff --git a/src/code_8045A00.c b/src/code_8045A00.c index 68fcd8e30..9321e21d4 100644 --- a/src/code_8045A00.c +++ b/src/code_8045A00.c @@ -15,7 +15,7 @@ void sub_8045BF8(u8 *, struct ItemSlot *); void sub_8045ACC(void) { - struct DungeonEntity *uVar2; + struct DungeonEntity *entity; s32 index; s32 pokeCount; @@ -23,18 +23,18 @@ void sub_8045ACC(void) for(index = 0; index < MAX_TEAM_MEMBERS; index++) { - uVar2 = gDungeonGlobalData->teamPokemon[index]; - if (EntityExists(uVar2)) { - gDungeonGlobalData->allPokemon[pokeCount] = uVar2; + entity = gDungeonGlobalData->teamPokemon[index]; + if (EntityExists(entity)) { + gDungeonGlobalData->allPokemon[pokeCount] = entity; pokeCount++; } } for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++) { - uVar2 = gDungeonGlobalData->wildPokemon[index]; - if (EntityExists(uVar2)) { - gDungeonGlobalData->allPokemon[pokeCount] = uVar2; + entity = gDungeonGlobalData->wildPokemon[index]; + if (EntityExists(entity)) { + gDungeonGlobalData->allPokemon[pokeCount] = entity; pokeCount++; } } @@ -43,32 +43,32 @@ void sub_8045ACC(void) } } -s32 GetTeamMemberEntityIndex(struct DungeonEntity *entity) +s32 GetTeamMemberEntityIndex(struct DungeonEntity *pokemon) { - struct DungeonEntity *uVar2; + struct DungeonEntity *entity; s32 index; for(index = 0; index < MAX_TEAM_MEMBERS; index++) { - uVar2 = gDungeonGlobalData->teamPokemon[index]; - if (entity == uVar2) + entity = gDungeonGlobalData->teamPokemon[index]; + if (pokemon == entity) return index; } return -1; } -void SetMessageArgument(char *buffer, struct DungeonEntity *entity, u32 param_3) +void SetMessageArgument(char *buffer, struct DungeonEntity *pokemon, u32 param_3) { - switch(GetEntityType(entity)) + switch(GetEntityType(pokemon)) { case ENTITY_POKEMON: - SetMessageArgument_2(buffer, entity->entityData, param_3); + SetMessageArgument_2(buffer, pokemon->entityData, param_3); break; case ENTITY_ITEM: - sub_8045BF8(buffer, GetItemData_1(entity)); + sub_8045BF8(buffer, GetItemData_1(pokemon)); break; case ENTITY_TRAP: - GetTrapName(buffer, *((u8 *)GetTrapData_1(entity))); + GetTrapName(buffer, *((u8 *)GetTrapData_1(pokemon))); break; default: strcpy(buffer, *gUnknown_80FE6F4); diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index 7f7ee86be..e696dba4e 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -170,7 +170,6 @@ extern void sub_80522F4(struct DungeonEntity *pokemon, struct DungeonEntity *r1, extern void DungeonEntityUpdateStatusSprites(struct DungeonEntity *); extern void sub_8042A74(struct DungeonEntity *r0); extern void sub_8076CB4(u32); -extern s32 GetMovementSpeed(struct DungeonEntity *); extern void sub_807EC28(u32); extern s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2); extern u32 sub_80687D0(s16); diff --git a/src/code_807E5AC.c b/src/code_807E5AC.c index c244bc0c7..a183937b8 100644 --- a/src/code_807E5AC.c +++ b/src/code_807E5AC.c @@ -1,10 +1,10 @@ #include "global.h" #include "dungeon_global_data.h" -void sub_807FC3C(struct Position *param_1, u32 param_2, u32 param_3) +void sub_807FC3C(struct Position *pos, u32 param_2, u32 param_3) { - gDungeonGlobalData->unk13574 = param_1->x; - gDungeonGlobalData->unk13576 = param_1->y; + gDungeonGlobalData->unk13574 = pos->x; + gDungeonGlobalData->unk13576 = pos->y; gDungeonGlobalData->unk13578 = param_2; gDungeonGlobalData->unk13579 = param_3; gDungeonGlobalData->unk13570 = 1; diff --git a/src/dungeon_action.c b/src/dungeon_action.c index 70dc65ee0..03a99de13 100644 --- a/src/dungeon_action.c +++ b/src/dungeon_action.c @@ -3,6 +3,7 @@ #include "constants/ability.h" #include "constants/dungeon_action.h" +#include "dungeon_ai.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" #include "dungeon_leader.h" @@ -10,6 +11,7 @@ #include "dungeon_pokemon_attributes.h" #include "pokemon.h" #include "item.h" +#include "status_checks_1.h" extern u8 *gUnknown_80F91EC[]; extern u8 *gUnknown_80F7C50[]; @@ -32,6 +34,73 @@ extern void sub_8043ED0(u32); extern void sub_807EAA0(u32, u32); extern void UseAttack(u32); +extern void sub_8071B48(void); +extern void TriggerWeatherAbilities(void); +extern void sub_8074094(struct DungeonEntity *); +extern void sub_8071DA4(struct DungeonEntity *); +extern u8 sub_8072CF4(struct DungeonEntity *); +extern void TickStatusHeal(struct DungeonEntity *); + +void sub_8044820(void) +{ + s32 movSpeed; + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData2; + struct DungeonEntity * entity; + struct DungeonEntity * entity2; + s32 index; + + for (index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++) { + entity = gDungeonGlobalData->wildPokemon[index]; + if (EntityExists(entity)) { + if (sub_8044B28()) break; + entityData = entity->entityData; + gDungeonGlobalData->unkB8 = entity; + TriggerWeatherAbilities(); + if ((entityData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED) == 0) { + if ((u16)(entityData->flags & MOVEMENT_FLAG_UNK_14) != 0) { + entityData->flags &= ~(MOVEMENT_FLAG_UNK_14); + } + else + { + entityData->movingIntoTarget = FALSE; + movSpeed = GetMovementSpeed(entity); + if (gSpeedTurns[movSpeed][gDungeonGlobalData->speedTurnCounter] != 0) { + if (!entityData->attacking) { + entityData->flags &= ~(MOVEMENT_FLAG_UNK_14 | MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED); + entityData->recalculateFollow = FALSE; + TickStatusHeal(entity); + if (EntityExists(entity)) { + sub_8071DA4(entity); + DecideAction(entity, 0); + if (sub_8044B28()) break; + sub_8072CF4(entity); + sub_8086AC0(); + sub_8043ED0(0); + if (sub_8044B28()) break; + } + } + } + } + } + } + } + if (sub_8044B28() == 0) { + for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++) + { + entity2 = gDungeonGlobalData->wildPokemon[index]; + if ((EntityExists(entity2)) && (entityData2 = entity2->entityData, entityData2->movingIntoTarget)) + { + sub_8074094(entity2); + if (EntityExists(entity2)) { + sub_8071DA4(entity2); + entityData2->movingIntoTarget = FALSE; + } + } + } + } +} + void CheckElectricAbilities(void) { struct DungeonEntityData * entityData; @@ -65,14 +134,14 @@ void CheckElectricAbilities(void) isNotEnemy = TRUE; } - if (HasAbility(entity, ABILITY_LIGHTNINGROD)) { // ABILITY_LIGHTNINGROD + if (HasAbility(entity, ABILITY_LIGHTNINGROD)) { gDungeonGlobalData->lightningRodPokemon = entity; gDungeonGlobalData->unk17B38 = entityData2->unk98; } - if (HasAbility(entity, ABILITY_MINUS)) { // ABILITY_MINUS + if (HasAbility(entity, ABILITY_MINUS)) { gDungeonGlobalData->hasMinus[isNotEnemy] = TRUE; } - if (HasAbility(entity, ABILITY_PLUS)) { // ABILITY_PLUS + if (HasAbility(entity, ABILITY_PLUS)) { gDungeonGlobalData->hasPlus[isNotEnemy] = TRUE; } } diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index 82c17d1a1..92f6b7720 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -162,7 +162,7 @@ void sub_8075900(struct DungeonEntity *pokemon, u8 r1) } } -void DecideAction(struct DungeonEntity *pokemon) +void DecideAction(struct DungeonEntity *pokemon, u32 unused) { struct DungeonEntityData *pokemonData = pokemon->entityData; if (pokemonData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED) diff --git a/src/dungeon_engine.c b/src/dungeon_engine.c index 8c18c3f06..606ea4828 100644 --- a/src/dungeon_engine.c +++ b/src/dungeon_engine.c @@ -1,15 +1,35 @@ #include "global.h" +#include "dungeon_entity.h" #include "dungeon_engine.h" #include "constants/dungeon.h" #include "dungeon_global_data.h" +#include "dungeon_ai.h" +#include "dungeon_leader.h" +#include "dungeon_util.h" +#include "status_checks_1.h" + +extern s16 gSpeedTurns[2][25]; extern bool8 sub_8044B28(void); -extern bool8 xxx_dungeon_80442D0(u8); extern void CheckElectricAbilities(void); extern void sub_807E378(void); extern void sub_8044574(void); extern void sub_8044820(void); extern void sub_8044AB4(void); +extern u8 UseAttack(u32); +extern u8 sub_8072CF4(struct DungeonEntity *); +extern void TickStatusHeal(struct DungeonEntity *); +extern void sub_8086AC0(void); +extern void sub_8043ED0(u32); +extern void sub_8071DA4(struct DungeonEntity *); +extern void TriggerWeatherAbilities(void); +extern void sub_805D8C8(void); +extern void sub_805F02C(void); +extern void sub_803E46C(u32); + +static void sub_8044454(void); +static bool8 xxx_dungeon_80442D0(bool8); + bool8 IsBossBattle() { @@ -37,7 +57,7 @@ bool8 sub_8044210(void) return FALSE; } -void RunDungeon(u8 param_1) +void RunDungeon(bool8 param_1) { bool8 cVar2; @@ -69,3 +89,134 @@ void RunDungeon(u8 param_1) } } } + +static bool8 xxx_dungeon_80442D0(bool8 param_1) +{ + struct DungeonEntityData *entityData; + struct DungeonEntity *entity; + s32 movSpeed; + + entity = GetLeaderEntity(); + if (entity == NULL) { + return FALSE; + } + else + { + TriggerWeatherAbilities(); + movSpeed = GetMovementSpeed(entity); + if (gSpeedTurns[movSpeed][gDungeonGlobalData->speedTurnCounter] == 0) { + return FALSE; + } + else + { + if (entity->entityData->attacking) { + return FALSE; + } + else + { + while (1) { + if(entity = GetLeaderEntity(), entity == NULL) + { + return FALSE; + } + else + { + if ((UseAttack(0) == 0) && + ((gDungeonGlobalData->unk66C != 0 || + (gDungeonGlobalData->unk673 != 0)))) { + sub_803E46C(0xc); + } + entity->entityData->movementSpeedChanged = FALSE; + if (sub_8044B28()) return FALSE; + gDungeonGlobalData->unkB8 = entity; + gDungeonGlobalData->unkBC = 0; + if (param_1) { + param_1 = FALSE; + } + else { + TickStatusHeal(entity); + } + if (sub_8044B28()) return FALSE; + sub_8071DA4(entity); + gDungeonGlobalData->inputAllowed = TRUE; + sub_805D8C8(); + gDungeonGlobalData->inputAllowed = FALSE; + if (sub_8044B28()) break; + sub_8072CF4(entity); + sub_8086AC0(); + sub_8043ED0(0); + if (sub_8044B28()) break; + entityData = entity->entityData; + if ((entityData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED)) { + entity->entityData->flags = (entityData->flags & ~(MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED)) | MOVEMENT_FLAG_UNK_14; + } + if (sub_8044B28() ) break; + sub_8044454(); + if (sub_8044B28()) break; + if (gDungeonGlobalData->unkBC != 0) { + sub_805F02C(); + gDungeonGlobalData->unkBC = 0; + param_1 = TRUE; + } + else { + if (!entity->entityData->movementSpeedChanged) break; + gDungeonGlobalData->speedTurnCounter = 0; + } + } + } + } + } + } + return TRUE; +} + +static void sub_8044454(void) +{ + struct DungeonEntity *entity; + struct DungeonEntityData *entityData; + s32 index; + + if (gDungeonGlobalData->unkE) { + gDungeonGlobalData->unkE = 0; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeonGlobalData->allPokemon[index]; + if ((EntityExists(entity)) && (entityData = entity->entityData, (entityData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED))) { + if (sub_8044B28()) break; + TickStatusHeal(entity); + if (EntityExists(entity)) { + sub_8071DA4(entity); + DecideAction(entity, 0); + sub_8072CF4(entity); + sub_8086AC0(); + sub_8043ED0(0); + entityData->flags = (entityData->flags & ~(MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED)) | MOVEMENT_FLAG_UNK_14; + } + } + } + } +} + +void sub_80444F4(struct DungeonEntity *pokemon) +{ + struct DungeonEntity *entity; + struct DungeonEntityData *entityData; + s32 index; + + if (pokemon == GetLeaderEntity() && gDungeonGlobalData->unkE) { + gDungeonGlobalData->unkE = 0; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeonGlobalData->allPokemon[index]; + if ((EntityExists(entity)) && (pokemon != entity) && (entityData = entity->entityData, (entityData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED))) { + if (sub_8044B28()) break; + DecideAction(entity, 0); + sub_8072CF4(entity); + sub_8086AC0(); + sub_8043ED0(0); + } + } + } +} diff --git a/src/status.c b/src/status.c index 57e3630c7..22af89648 100644 --- a/src/status.c +++ b/src/status.c @@ -13,6 +13,7 @@ #include "code_808417C.h" #include "code_8077274_1.h" #include "map.h" +#include "status_checks_1.h" extern u8 gAvailablePokemonNames[]; extern u8 gUnknown_202DE58[]; @@ -148,7 +149,6 @@ extern void sub_8041BE8(struct DungeonEntity *); extern void sub_8041CCC(struct DungeonEntity *); extern void sub_8041CB8(struct DungeonEntity *r0); extern void sub_8041C1C(struct DungeonEntity *r0); -extern s32 GetMovementSpeed(struct DungeonEntity *); extern void sub_8042060(struct DungeonEntity *, s32); extern bool8 sub_8071728(struct DungeonEntity * param_1, struct DungeonEntity * param_2, u8 param_3); extern void sub_8041FB4(struct DungeonEntity *r0, u32 r1); @@ -439,7 +439,7 @@ void sub_8077780(struct DungeonEntity * pokemon, struct DungeonEntity * target, SetMessageArgument(gAvailablePokemonNames,target,0); if (entityData->nonVolatileStatus != NON_VOLATILE_STATUS_PARALYZED) { entityData->nonVolatileStatus = NON_VOLATILE_STATUS_PARALYZED; - entityData->nonVolatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E50,1) + 1; + entityData->nonVolatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E50,TRUE) + 1; entityData->nonVolatileStatusDamageTimer = 0; entityData->fillAF = 0; bVar6 = FALSE; @@ -485,7 +485,7 @@ void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, return; } if (turns == 0) { - turns = CalculateStatusTurns(target,gUnknown_80F4E40,0) + 1; + turns = CalculateStatusTurns(target,gUnknown_80F4E40,FALSE) + 1; } entityData = target->entityData; SetMessageArgument(gAvailablePokemonNames,target,0); @@ -511,7 +511,7 @@ void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, { sub_8041CB8(target); sub_80522F4(pokemon,target,gUnknown_80FA124[movSpeed_1]); - entityData->unkF8 = 1; + entityData->movementSpeedChanged = TRUE; entityData->attacking = FALSE; } } @@ -545,7 +545,7 @@ void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++) { if (entityData->slowTurnsLeft[index]== 0) { - entityData->slowTurnsLeft[index] = CalculateStatusTurns(target,gUnknown_80F4E48,1) + 1; + entityData->slowTurnsLeft[index] = CalculateStatusTurns(target,gUnknown_80F4E48,TRUE) + 1; break; } } @@ -593,7 +593,7 @@ void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, entityData = target->entityData; if (entityData->volatileStatus != VOLATILE_STATUS_CONFUSED) { entityData->volatileStatus = VOLATILE_STATUS_CONFUSED; - entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E4C,1) + 1; + entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E4C,TRUE) + 1; sub_80522F4(pokemon,target,*gUnknown_80FB25C); } else { @@ -613,7 +613,7 @@ void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, SetMessageArgument(gAvailablePokemonNames,target,0); if (entityData->volatileStatus != VOLATILE_STATUS_COWERING) { entityData->volatileStatus = VOLATILE_STATUS_COWERING; - entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,1) + 1; + entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,TRUE) + 1; sub_8041BF8(target); sub_80522F4(pokemon,target,*gUnknown_80FB940); } @@ -1130,7 +1130,7 @@ void sub_80787E4(struct DungeonEntity * pokemon, struct DungeonEntity * target) if ((EntityExists(target))) { entityData = target->entityData; SetMessageArgument(gAvailablePokemonNames,target,0); - if (entityData->stockpileCount < 3) { + if (entityData->stockpileCount < MAX_STOCKPILE_COUNT) { entityData->stockpileCount++; sub_804178C(1); sub_8041D5C(target); @@ -1178,7 +1178,7 @@ void PerishSongTarget(struct DungeonEntity * pokemon, struct DungeonEntity * tar entityData = target->entityData; SetMessageArgument(gAvailablePokemonNames,target,0); if (entityData->perishSongTimer == 0) { - entityData->perishSongTimer = CalculateStatusTurns(target,gUnknown_80F4EEC,0) + 1; + entityData->perishSongTimer = CalculateStatusTurns(target,gUnknown_80F4EEC,FALSE) + 1; sub_80522F4(pokemon,target,*gUnknown_80FBB04); } else { diff --git a/src/status_checks_1.c b/src/status_checks_1.c index 0bfe50f3c..38f5ab2c7 100644 --- a/src/status_checks_1.c +++ b/src/status_checks_1.c @@ -105,7 +105,7 @@ bool8 sub_80706A4(struct DungeonEntity *pokemon, struct Position *pos) return TRUE; } -u32 GetMovementSpeed(struct DungeonEntity *pokemon) +s32 GetMovementSpeed(struct DungeonEntity *pokemon) { s32 index; s32 speed; From 0d02904c9b230ef2fc2fdb1c1dee9e5e8ed7d164 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 17 Nov 2022 19:50:37 -0800 Subject: [PATCH 06/21] 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; From e12e1334580eab729e3fb67270c66dc3a7b0980c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 18 Nov 2022 10:00:22 -0800 Subject: [PATCH 07/21] document more functions and cleanup some code --- asm/code_8046CE4.s | 2 +- asm/code_80521D0.s | 16 +++++----- asm/code_8057824.s | 36 +++++++++++------------ asm/code_8073CF0.s | 2 +- asm/code_807FCD4.s | 2 +- include/dungeon_ai.h | 24 ++++++++++++++- include/status.h | 14 ++++----- include/status_checker.h | 2 +- src/code_8048480.c | 18 ++++++------ src/code_8048DB8.c | 17 +++++------ src/code_8057824.c | 37 ++++++++++------------- src/code_8077274_1.c | 63 ++++++++++++++++++++-------------------- src/dungeon_ai.c | 21 +++++++------- src/status.c | 26 ++++++++--------- src/status_checker.c | 54 ++++++++++++++++++---------------- 15 files changed, 175 insertions(+), 159 deletions(-) diff --git a/asm/code_8046CE4.s b/asm/code_8046CE4.s index 6cbade5fa..b3a03a0fa 100644 --- a/asm/code_8046CE4.s +++ b/asm/code_8046CE4.s @@ -1652,7 +1652,7 @@ _0804802E: _08048038: adds r0, r4, 0 adds r1, r5, 0 - bl sub_8048400 + bl XEyeSeedAction b _080482B4 _08048042: adds r0, r4, 0 diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index d34ae8130..84546aee5 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -4525,7 +4525,7 @@ _08054BC8: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805B7FC + bl ReflectMoveAction bl _080554BA _08054BD8: adds r0, r7, 0 @@ -4723,7 +4723,7 @@ _08054D72: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805B2E4 + bl MagicCoatMoveAction b _080554BA _08054D80: adds r0, r7, 0 @@ -5010,7 +5010,7 @@ _08054FB0: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805777C + bl VitalThrowMoveAction b _080554BA _08054FBE: adds r0, r7, 0 @@ -5271,7 +5271,7 @@ _080551BA: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805B3A8 + bl MirrorCoatMoveAction b _080554BA _080551C8: adds r0, r7, 0 @@ -5292,7 +5292,7 @@ _080551E4: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805B37C + bl DestinyBondMoveAction b _080554BA _080551F2: adds r0, r7, 0 @@ -6829,7 +6829,7 @@ _08055DEC: bl SendMessage adds r0, r4, 0 adds r1, r4, 0 - bl sub_80769CC + bl ImmobilizedStatusTarget _08055E10: ldrh r1, [r5] movs r0, 0x2 @@ -6842,7 +6842,7 @@ _08055E10: bl SendMessage adds r0, r4, 0 adds r1, r4, 0 - bl sub_80769CC + bl ImmobilizedStatusTarget _08055E2C: ldrh r1, [r5] movs r0, 0x4 @@ -6855,7 +6855,7 @@ _08055E2C: bl SendMessage adds r0, r4, 0 adds r1, r4, 0 - bl sub_80769CC + bl ImmobilizedStatusTarget _08055E48: ldrh r1, [r5] movs r0, 0x8 diff --git a/asm/code_8057824.s b/asm/code_8057824.s index f30144155..5a9059c2f 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -201,7 +201,7 @@ sub_8057ED0: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0x80 - bl sub_80772C0 + bl ChangeAttackMultiplierTarget _08057F12: adds r0, r7, 0 add sp, 0x4 @@ -232,14 +232,14 @@ sub_8057F24: str r4, [sp] adds r0, r6, 0 movs r3, 0x40 - bl sub_80772C0 + bl ChangeAttackMultiplierTarget ldr r0, _08057F78 ldr r2, [r0] str r4, [sp] adds r0, r6, 0 mov r1, r8 movs r3, 0x40 - bl sub_80772C0 + bl ChangeAttackMultiplierTarget movs r0, 0xAA lsls r0, 1 adds r5, r0 @@ -287,7 +287,7 @@ sub_8057F7C: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0 - bl sub_80775DC + bl LowerAccuracyStageTarget _08057FBA: adds r0, r7, 0 add sp, 0x4 @@ -645,7 +645,7 @@ sub_805825C: push {lr} ldr r2, _0805826C ldr r2, [r2] - bl sub_8077540 + bl RaiseAccuracyStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -1096,7 +1096,7 @@ sub_8058580: adds r1, r6, 0 movs r2, 0x1 movs r3, 0 - bl sub_80779F0 + bl LowerMovementSpeedTarget _080585BC: adds r0, r7, 0 add sp, 0x4 @@ -1190,7 +1190,7 @@ sub_8058638: adds r1, r6, 0 movs r2, 0x1 movs r3, 0 - bl sub_80779F0 + bl LowerMovementSpeedTarget _08058670: adds r0, r7, 0 add sp, 0x4 @@ -1491,7 +1491,7 @@ _08058898: .4byte gUnknown_8106A4C thumb_func_start sub_805889C sub_805889C: push {lr} - bl sub_80769CC + bl ImmobilizedStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -1603,7 +1603,7 @@ sub_8058930: adds r1, r7, 0 movs r2, 0 movs r3, 0x1 - bl sub_8077910 + bl RaiseMovementSpeedTarget ldr r0, _080589CC ldr r5, [r0] adds r0, r7, 0 @@ -1681,7 +1681,7 @@ sub_8058A08: push {lr} movs r2, 0 movs r3, 0x1 - bl sub_8077910 + bl RaiseMovementSpeedTarget movs r0, 0x1 pop {r1} bx r1 @@ -1936,7 +1936,7 @@ sub_8058BF0: push {lr} movs r2, 0x1 movs r3, 0x1 - bl sub_80779F0 + bl LowerMovementSpeedTarget movs r0, 0x1 pop {r1} bx r1 @@ -3175,7 +3175,7 @@ sub_8059528: ldr r2, _0805953C ldr r2, [r2] movs r3, 0x1 - bl sub_80775DC + bl LowerAccuracyStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -3672,7 +3672,7 @@ sub_80598CC: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0 - bl sub_80775DC + bl LowerAccuracyStageTarget _0805990A: adds r0, r7, 0 add sp, 0x4 @@ -3824,7 +3824,7 @@ sub_8059A18: push {lr} ldr r2, _08059A28 ldr r2, [r2] - bl sub_8077540 + bl RaiseAccuracyStageTarget movs r0, 0x1 pop {r1} bx r1 @@ -4300,7 +4300,7 @@ _08059D8E: thumb_func_start sub_8059D98 sub_8059D98: push {lr} - bl sub_80769CC + bl ImmobilizedStatusTarget movs r0, 0x1 pop {r1} bx r1 @@ -4944,7 +4944,7 @@ sub_805A258: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0 - bl sub_80775DC + bl LowerAccuracyStageTarget _0805A292: adds r0, r7, 0 add sp, 0x4 @@ -6180,7 +6180,7 @@ _0805AC08: adds r1, r6, 0 movs r2, 0x1 movs r3, 0 - bl sub_80779F0 + bl LowerMovementSpeedTarget b _0805AC86 _0805AC16: ldr r0, _0805AC30 @@ -6216,7 +6216,7 @@ _0805AC50: adds r0, r5, 0 adds r1, r6, 0 movs r3, 0 - bl sub_80775DC + bl LowerAccuracyStageTarget b _0805AC86 .align 2, 0 _0805AC60: .4byte gUnknown_8106A4C diff --git a/asm/code_8073CF0.s b/asm/code_8073CF0.s index acc2ada43..8792590ce 100644 --- a/asm/code_8073CF0.s +++ b/asm/code_8073CF0.s @@ -978,7 +978,7 @@ _080744D8: adds r1, r5, 0 movs r2, 0x7F movs r3, 0 - bl sub_8077910 + bl RaiseMovementSpeedTarget _0807450C: mov r0, r8 adds r0, 0xA8 diff --git a/asm/code_807FCD4.s b/asm/code_807FCD4.s index b1b7b238e..f84d53f4e 100644 --- a/asm/code_807FCD4.s +++ b/asm/code_807FCD4.s @@ -887,7 +887,7 @@ sub_80803B4: beq _080803C2 movs r2, 0x1 movs r3, 0x1 - bl sub_80779F0 + bl LowerMovementSpeedTarget _080803C2: pop {r0} bx r0 diff --git a/include/dungeon_ai.h b/include/dungeon_ai.h index d7ba85e54..6c9e60b43 100644 --- a/include/dungeon_ai.h +++ b/include/dungeon_ai.h @@ -4,6 +4,28 @@ #include "dungeon_entity.h" void DecideAction(struct DungeonEntity *pokemon, u32 unused); -u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 param_2); +u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 sleepTurns); +void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 displayMessage); +bool8 CannotSleep(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, bool8 displayMessage); +void NightmareStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); +void NappingStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); +void YawnedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); +void SleeplessStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void PausedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, s32 turns, bool8 displayMessage); +void InfatuateStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void BurnedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, bool8 displayMessage); +void PoisonedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void BadlyPoisonedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void FrozenStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void SqueezedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s16 param_3, bool32 displayMessage); +void ImmobilizedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void IngrainedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void WrapTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void sub_8076CB4(s32 param_1); +void PetrifiedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void LowerAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 decrement, u8 param_5, bool8 displayMessage); +void LowerDefenseStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 decrement, u8 param_5, bool8 displayMessage); +void RaiseAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 increment); +void RaiseDefenseStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 increment); #endif diff --git a/include/status.h b/include/status.h index d6a25cde0..18dc46366 100644 --- a/include/status.h +++ b/include/status.h @@ -9,17 +9,17 @@ u8 GetFlashFireStatus(struct DungeonEntity *pokemon); void UpdateFlashFireBoost(struct DungeonEntity * pokemon, struct DungeonEntity *target); -void sub_80772C0(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage); -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 ChangeAttackMultiplierTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage); +void ChangeDefenseMultiplierTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage); +void RaiseAccuracyStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage); +void LowerAccuracyStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage, 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 RaiseMovementSpeedTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 diplayMessage); +void LowerMovementSpeedTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 levels, 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 HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, bool32 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); diff --git a/include/status_checker.h b/include/status_checker.h index 8f9a2e07b..d3cc1f85f 100644 --- a/include/status_checker.h +++ b/include/status_checker.h @@ -7,7 +7,7 @@ bool8 sub_805B668(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); bool8 sub_805B734(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 RecycleMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); -bool8 sub_805B7FC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); +bool8 ReflectMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); bool8 sub_805B808(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); bool8 sub_805B884(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 SkullBashMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); diff --git a/src/code_8048480.c b/src/code_8048480.c index dbeb976d7..4faeffcb7 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -3,11 +3,13 @@ #include "constants/status.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" +#include "dungeon_ai.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "number_util.h" #include "moves.h" #include "code_8077274_1.h" +#include "position.h" #include "status.h" extern u8 *gUnknown_80F89F4[]; @@ -34,10 +36,8 @@ extern u8 *gPtrSelfHealPreventedHungerMessage[]; extern u8 *gUnknown_80F9740[]; extern u8 *gUnknown_80F9760[]; -extern void sub_807D148(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32 r2, u32 r3); -extern void SleeplessStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity *r1); +extern void sub_807D148(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32 r2, struct Position *r3); extern void sub_8072008(struct DungeonEntity *pokemon, struct DungeonEntity *r1, u32 r2, u8 r3, u32); -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); @@ -61,12 +61,12 @@ void sub_8048364(struct DungeonEntity *pokemon, struct DungeonEntity *target, u8 void sub_8048374(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - HealTargetHP(pokemon, target, gUnknown_80F4FB6, gUnknown_80F4FB8, 1); + HealTargetHP(pokemon, target, gUnknown_80F4FB6, gUnknown_80F4FB8, TRUE); } void sub_804839C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - HealTargetHP(pokemon, target, gUnknown_80F4FBA, gUnknown_80F4FBC, 1); + HealTargetHP(pokemon, target, gUnknown_80F4FBA, gUnknown_80F4FBC, TRUE); } void sub_80483C4(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -76,7 +76,7 @@ void sub_80483C4(struct DungeonEntity *pokemon, struct DungeonEntity *target) void sub_80483D4(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - HealTargetHP(pokemon, target, 0, gUnknown_80F4FBE, 1); + HealTargetHP(pokemon, target, 0, gUnknown_80F4FBE, TRUE); } void sub_80483F4(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -84,14 +84,14 @@ void sub_80483F4(struct DungeonEntity *pokemon, struct DungeonEntity *target) BlindTarget(pokemon, target); } -void sub_8048400(struct DungeonEntity *pokemon, struct DungeonEntity *target) +void XEyeSeedAction(struct DungeonEntity *pokemon, struct DungeonEntity *target) { CrossEyeVisionTarget(pokemon, target); } void sub_804840C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8077910(pokemon, target, 0, 1); + RaiseMovementSpeedTarget(pokemon, target, 0, TRUE); } void sub_804841C(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -119,7 +119,7 @@ void sub_8048450(struct DungeonEntity *pokemon, struct DungeonEntity *target) void sub_8048480(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_807D148(pokemon, target, 0, 0); + sub_807D148(pokemon, target, 0, NULL); } void sub_8048490(struct DungeonEntity *pokemon, struct DungeonEntity *target) diff --git a/src/code_8048DB8.c b/src/code_8048DB8.c index f5718337a..c60f8d3b9 100644 --- a/src/code_8048DB8.c +++ b/src/code_8048DB8.c @@ -1,6 +1,7 @@ #include "global.h" #include "constants/status.h" #include "code_80521D0.h" +#include "dungeon_ai.h" #include "dungeon_random.h" #include "item.h" #include "status.h" @@ -8,10 +9,6 @@ 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 PoisonedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, u32); -extern void sub_80769CC(struct DungeonEntity *, struct DungeonEntity *); -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[]; @@ -34,9 +31,9 @@ extern u8 *gUnknown_80FE3E8[]; bool8 sub_8048D50(struct DungeonEntity * pokemon, struct ItemSlot *item) { - struct DungeonEntityData *iVar2; + struct DungeonEntityData *entityData; - iVar2 = pokemon->entityData; + entityData = pokemon->entityData; if ((item->itemFlags & ITEM_FLAG_STICKY) != 0) { sub_8045BF8(gUnknown_202DE58, item); @@ -45,7 +42,7 @@ bool8 sub_8048D50(struct DungeonEntity * pokemon, struct ItemSlot *item) } else { - if ((iVar2->muzzledStatus == MUZZLED_STATUS_MUZZLED) && (IsEdibleItem(item->itemIndex))) { + if ((entityData->muzzledStatus == MUZZLED_STATUS_MUZZLED) && (IsEdibleItem(item->itemIndex))) { SetMessageArgument(gAvailablePokemonNames,pokemon,0); SendMessage(pokemon,*gUnknown_80FDCA4); return FALSE; @@ -72,7 +69,7 @@ void sub_8048E04(struct DungeonEntity *pokemon, struct DungeonEntity * target) PoisonedStatusTarget(pokemon, target, TRUE); break; case 1: - sub_80769CC(pokemon, target); + ImmobilizedStatusTarget(pokemon, target); break; case 2: BurnedStatusTarget(pokemon, target, 1, TRUE); @@ -81,8 +78,8 @@ void sub_8048E04(struct DungeonEntity *pokemon, struct DungeonEntity * target) ParalyzeStatusTarget(pokemon, target, TRUE); break; case 4: - LowerAttackStageTarget(pokemon, target, gUnknown_8106A4C, 3, 1, 1); - LowerAttackStageTarget(pokemon, target, gUnknown_8106A50, 3, 1, 1); + LowerAttackStageTarget(pokemon, target, gUnknown_8106A4C, 3, 1, TRUE); + LowerAttackStageTarget(pokemon, target, gUnknown_8106A50, 3, 1, TRUE); break; } } diff --git a/src/code_8057824.c b/src/code_8057824.c index 173cec575..1dbb513a1 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -3,6 +3,7 @@ #include "constants/weather.h" #include "charge_move.h" #include "dungeon_global_data.h" +#include "dungeon_ai.h" #include "dungeon_entity.h" #include "dungeon_util.h" #include "code_8077274_1.h" @@ -55,20 +56,14 @@ struct unkStruct_80928C0 void sub_80928C0(u8 *buffer, struct PokemonMove *move, struct unkStruct_80928C0 *param_3); -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 s32 sub_80556BC(struct DungeonEntity *, struct DungeonEntity *, u8, struct PokemonMove *, u32, u32); extern u8 sub_805727C(struct DungeonEntity *, struct DungeonEntity *, s16); extern void sub_8078968(struct DungeonEntity *r0, struct DungeonEntity *r1); -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 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); @@ -121,9 +116,9 @@ void sub_8057588(struct DungeonEntity * pokemon, u8 param_2) } } -s16 sub_8057600(struct PokemonMove *param_1, s32 param_2) +s16 sub_8057600(struct PokemonMove *move, s32 param_2) { - return sub_8094828(param_1->moveID, sub_8057620(param_2)); + return sub_8094828(move->moveID, sub_8057620(param_2)); } u8 sub_8057620(u32 param_1) @@ -142,7 +137,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) { - LowerDefenseStageTarget(pokemon, target, gUnknown_8106A4C, 1, 1, 0); + LowerDefenseStageTarget(pokemon, target, gUnknown_8106A4C, 1, 1, FALSE); } } return uVar3; @@ -170,7 +165,7 @@ bool8 sub_80576D0(struct DungeonEntity * pokemon, struct DungeonEntity *target) bool8 sub_80576F8(struct DungeonEntity * pokemon, struct DungeonEntity *target) { - sub_8075C58(pokemon, target, CalculateStatusTurns(target, gUnknown_80F4E74, TRUE), 1); + sub_8075C58(pokemon, target, CalculateStatusTurns(target, gUnknown_80F4E74, TRUE), TRUE); return TRUE; } @@ -182,11 +177,11 @@ bool8 sub_8057720(struct DungeonEntity * pokemon, struct DungeonEntity *target) bool8 sub_8057748(struct DungeonEntity * pokemon,struct DungeonEntity * target) { - HealTargetHP(pokemon, target, gUnknown_80F502A[GetWeather(pokemon)], 0, 1); + HealTargetHP(pokemon, target, gUnknown_80F502A[GetWeather(pokemon)], 0, TRUE); return TRUE; } -bool8 sub_805777C(struct DungeonEntity * pokemon, struct DungeonEntity * target) +bool8 VitalThrowMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { VitalThrowStatusTarget(pokemon, target); return TRUE; @@ -218,14 +213,14 @@ bool8 sub_8057788(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool32 sub_8057824(struct DungeonEntity *pokemon, struct DungeonEntity *target) { // Lower evasion? - sub_80775DC(pokemon,target,gUnknown_8106A50,1); + LowerAccuracyStageTarget(pokemon,target,gUnknown_8106A50,TRUE); return TRUE; } bool32 sub_805783C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { // Lower attack? - sub_80772C0(pokemon,target,gUnknown_8106A4C,0x80,1); + ChangeAttackMultiplierTarget(pokemon,target,gUnknown_8106A4C,0x80,TRUE); return TRUE; } @@ -263,7 +258,7 @@ bool32 sub_80578FC(struct DungeonEntity *pokemon, struct DungeonEntity *target, if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { uVar3 = TRUE; if (sub_805727C(pokemon,target, gUnknown_80F4DB6) != 0) { - sub_80779F0(pokemon, target, 1, 0); + LowerMovementSpeedTarget(pokemon, target, 1, FALSE); } } return uVar3; @@ -393,13 +388,13 @@ bool8 TormentMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *tar bool8 sub_8057BB4(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_80779F0(pokemon, target, 1, 1); + LowerMovementSpeedTarget(pokemon, target, 1, TRUE); return TRUE; } bool8 sub_8057BC4(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - ConfuseStatusTarget(pokemon, target, 1); + ConfuseStatusTarget(pokemon, target, TRUE); RaiseAttackStageTarget(pokemon, target, gUnknown_8106A4C, 2); return TRUE; } @@ -413,7 +408,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) { - CringeStatusTarget(pokemon,target,0); + CringeStatusTarget(pokemon,target,FALSE); } } } @@ -425,7 +420,7 @@ bool8 sub_8057BEC(struct DungeonEntity *pokemon, struct DungeonEntity *target, s bool8 sub_8057C68(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8077434(pokemon, target, gUnknown_8106A4C, 0x40, 1); + ChangeDefenseMultiplierTarget(pokemon, target, gUnknown_8106A4C, 0x40, 1); return TRUE; } @@ -437,7 +432,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) { - CringeStatusTarget(pokemon,target,0); + CringeStatusTarget(pokemon,target,FALSE); } } return uVar3; @@ -472,7 +467,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) { - SqueezedStatusTarget(pokemon,target,0x3b,0); + SqueezedStatusTarget(pokemon,target,0x3b,FALSE); } } return uVar4; diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index 60f1f09f2..185ac91fd 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -5,6 +5,7 @@ #include "constants/type.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" +#include "dungeon_ai.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_items.h" @@ -169,7 +170,6 @@ extern void SetMessageArgument(u8 *buffer, struct DungeonEntity *r1, u32); extern void sub_80522F4(struct DungeonEntity *pokemon, struct DungeonEntity *r1, const char[]); extern void DungeonEntityUpdateStatusSprites(struct DungeonEntity *); extern void sub_8042A74(struct DungeonEntity *r0); -extern void sub_8076CB4(u32); extern void sub_807EC28(u32); extern s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2); extern u32 sub_80687D0(s16); @@ -177,7 +177,6 @@ extern void sub_806A898(struct DungeonEntity *, u32, u32); extern void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *r1, s16, s16, u32); extern void sub_806CE68(struct DungeonEntity *, s32); extern void sub_806F324(struct DungeonEntity *, s16, u32, u32); -extern void sub_8075C58(struct DungeonEntity *, struct DungeonEntity *, s32, s32); extern void sub_806BFC0(struct DungeonEntityData *, u32); extern void sub_80420C8(struct DungeonEntity *r0); extern void nullsub_68(struct DungeonEntity *); @@ -1024,33 +1023,33 @@ void VitalThrowStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity void sub_8079E34(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 param_3) { bool8 statChanged; - struct DungeonEntityData *iVar3; + struct DungeonEntityData *entityData; s32 index; statChanged = FALSE; if (EntityExists(target)) { - iVar3 = target->entityData; + entityData = target->entityData; for(index = 0; index < 2; index++) { - if (iVar3->attackStages[index] != DEFAULT_STAT_STAGE) { - iVar3->attackStages[index] = DEFAULT_STAT_STAGE; + if (entityData->attackStages[index] != DEFAULT_STAT_STAGE) { + entityData->attackStages[index] = DEFAULT_STAT_STAGE; statChanged = TRUE; } - if (iVar3->defenseStages[index] != DEFAULT_STAT_STAGE) { - iVar3->defenseStages[index] = DEFAULT_STAT_STAGE; + if (entityData->defenseStages[index] != DEFAULT_STAT_STAGE) { + entityData->defenseStages[index] = DEFAULT_STAT_STAGE; statChanged = TRUE; } - if (iVar3->accuracyStages[index] != DEFAULT_STAT_STAGE) { - iVar3->accuracyStages[index] = DEFAULT_STAT_STAGE; + if (entityData->accuracyStages[index] != DEFAULT_STAT_STAGE) { + entityData->accuracyStages[index] = DEFAULT_STAT_STAGE; statChanged = TRUE; } - if (iVar3->attackMultipliers[index] != DEFAULT_STAT_MULTIPLIER) { - iVar3->attackMultipliers[index] = DEFAULT_STAT_MULTIPLIER; + if (entityData->attackMultipliers[index] != DEFAULT_STAT_MULTIPLIER) { + entityData->attackMultipliers[index] = DEFAULT_STAT_MULTIPLIER; statChanged = TRUE; } - if (iVar3->defenseMultipliers[index] != DEFAULT_STAT_MULTIPLIER) { - iVar3->defenseMultipliers[index] = DEFAULT_STAT_MULTIPLIER; + if (entityData->defenseMultipliers[index] != DEFAULT_STAT_MULTIPLIER) { + entityData->defenseMultipliers[index] = DEFAULT_STAT_MULTIPLIER; statChanged = TRUE; } } @@ -1170,9 +1169,9 @@ void sub_807A0CC(struct DungeonEntity * pokemon, struct DungeonEntity * target) void SendSleepEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 param_3, bool8 param_4) { struct DungeonEntityData *entityData; - bool8 bVar4; + bool8 isAsleep; - bVar4 = FALSE; + isAsleep = FALSE; if (!EntityExists(target)) { return; } @@ -1183,30 +1182,30 @@ void SendSleepEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * case 6: break; case SLEEP_STATUS_SLEEP: - bVar4 = TRUE; + isAsleep = TRUE; sub_80522F4(pokemon,target,*gUnknown_80FA6E8); break; case SLEEP_STATUS_SLEEPLESS: sub_80522F4(pokemon,target,*gUnknown_80FA708); break; case SLEEP_STATUS_NIGHTMARE: - bVar4 = TRUE; + isAsleep = TRUE; sub_80522F4(pokemon,target,*gUnknown_80FA70C); if (param_4) { sub_806F324(target,gUnknown_80F4F78,8,0x20f); } break; case SLEEP_STATUS_NAPPING: - bVar4 = TRUE; + isAsleep = TRUE; sub_80522F4(pokemon,target,*gUnknown_80FA710); - HealTargetHP(pokemon,target,gUnknown_80F4F7A,0,0); + HealTargetHP(pokemon,target,gUnknown_80F4F7A, 0, FALSE); entityData->sleepStatus = 0; sub_8079F20(pokemon,target,1,1); break; case SLEEP_STATUS_YAWNING: if (param_3) { entityData->sleepStatus = SLEEP_STATUS_NONE; - sub_8075C58(pokemon,target,CalculateStatusTurns(target, gUnknown_80F4F2C, TRUE) + 1, 1); + sub_8075C58(pokemon,target,CalculateStatusTurns(target, gUnknown_80F4F2C, TRUE) + 1, TRUE); return; } sub_80522F4(pokemon,target,*gUnknown_80FA734); @@ -1214,7 +1213,7 @@ void SendSleepEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity * } entityData->sleepStatus = SLEEP_STATUS_NONE; DungeonEntityUpdateStatusSprites(target); - if (bVar4) { + if (isAsleep) { sub_806CE68(target,8); } } @@ -1250,10 +1249,10 @@ void SendNonVolatileEndMessage(struct DungeonEntity * pokemon, struct DungeonEnt void SendImmobilizeEndMessage(struct DungeonEntity * pokemon, struct DungeonEntity *target) { - bool8 bVar1; + bool8 isFrozen; struct DungeonEntityData *entityData; - bVar1 = FALSE; + isFrozen = FALSE; if (!EntityExists(target)) { return; } @@ -1265,7 +1264,7 @@ void SendImmobilizeEndMessage(struct DungeonEntity * pokemon, struct DungeonEnti break; case IMMOBILIZE_STATUS_FROZEN: sub_80522F4(pokemon,target,*gUnknown_80FA8BC); - bVar1 = TRUE; + isFrozen = TRUE; break; case IMMOBILIZE_STATUS_SQUEEZED: sub_80522F4(pokemon,target,*gUnknown_80FA820); @@ -1285,7 +1284,7 @@ void SendImmobilizeEndMessage(struct DungeonEntity * pokemon, struct DungeonEnti } entityData->immobilizeStatus = IMMOBILIZE_STATUS_NONE; DungeonEntityUpdateStatusSprites(target); - if (bVar1) { + if (isFrozen) { sub_8042A74(target); } } @@ -1648,14 +1647,14 @@ void sub_807A9B0(struct DungeonEntity * pokemon) void SendThawedMessage(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - struct DungeonEntityData *iVar2; + struct DungeonEntityData *entityData; if (EntityExists(target)) { - iVar2 = target->entityData; - if (iVar2->immobilizeStatus == IMMOBILIZE_STATUS_FROZEN) { - iVar2->immobilizeStatus = IMMOBILIZE_STATUS_NONE; - iVar2->immobilizeStatusTurnsLeft = 0; - iVar2->immobilizeStatusDamageTimer = 0; + entityData = target->entityData; + if (entityData->immobilizeStatus == IMMOBILIZE_STATUS_FROZEN) { + entityData->immobilizeStatus = IMMOBILIZE_STATUS_NONE; + entityData->immobilizeStatusTurnsLeft = 0; + entityData->immobilizeStatusDamageTimer = 0; SetMessageArgument(gAvailablePokemonNames,target,0); sub_80522F4(pokemon,target,*gUnknown_80FA8BC); // $m0 thawed out! DungeonEntityUpdateStatusSprites(target); diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index c16daec4a..d81064ebd 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -123,6 +123,8 @@ extern u8 *gUnknown_80FC248[]; extern u8 *gUnknown_80FC09C[]; extern u8 *gUnknown_80FC13C[]; extern u8 *gUnknown_80FC270[]; +extern u8 *gUnknown_80FC138[]; +extern u8 *gUnknown_80FC21C[]; extern bool8 sub_8071728(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); extern void sub_8041F28(struct DungeonEntity *, s32); @@ -394,16 +396,16 @@ void DecideAction(struct DungeonEntity *pokemon, u32 unused) } } -void sub_8075BA4(struct DungeonEntity *param_1,char param_2) +void sub_8075BA4(struct DungeonEntity *param_1, u8 param_2) { - struct DungeonEntityData * iVar2 = param_1->entityData; + struct DungeonEntityData * entityData = param_1->entityData; - if ((param_2 != '\0') && (iVar2->volatileStatus == VOLATILE_STATUS_COWERING)) { - iVar2->action.facingDir = (iVar2->action.facingDir + 4) & DIRECTION_MASK; + if ((param_2 != 0) && (entityData->volatileStatus == VOLATILE_STATUS_COWERING)) { + entityData->action.facingDir = (entityData->action.facingDir + 4) & DIRECTION_MASK; TargetTileInFront(param_1); } - else if (iVar2->volatileStatus == VOLATILE_STATUS_CONFUSED) { - iVar2->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS); + else if (entityData->volatileStatus == VOLATILE_STATUS_CONFUSED) { + entityData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS); TargetTileInFront(param_1); } } @@ -1035,7 +1037,7 @@ void SqueezedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * SetMessageArgument(gAvailablePokemonNames,target,0); if (entityData->immobilizeStatus != IMMOBILIZE_STATUS_SQUEEZED) { entityData->immobilizeStatus = IMMOBILIZE_STATUS_SQUEEZED; - entityData->immobilizeStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E58,1) + 1; + entityData->immobilizeStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E58,TRUE) + 1; entityData->immobilizeStatusDamageTimer = 0; entityData->unkB4 = param_3_s32; nullsub_71(target); @@ -1049,7 +1051,7 @@ void SqueezedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * } } -void sub_80769CC(struct DungeonEntity * pokemon, struct DungeonEntity * target) +void ImmobilizedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target) { struct DungeonEntityData *entityData; @@ -1368,9 +1370,6 @@ void RaiseAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity 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; diff --git a/src/status.c b/src/status.c index 8f4334fd2..f50e98390 100644 --- a/src/status.c +++ b/src/status.c @@ -208,7 +208,7 @@ void UpdateFlashFireBoost(struct DungeonEntity * pokemon, struct DungeonEntity * } } -void sub_80772C0(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage) +void ChangeAttackMultiplierTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage) { struct DungeonEntityData *entityData; s32 oldMulti; @@ -273,7 +273,7 @@ void sub_80772C0(struct DungeonEntity *pokemon, struct DungeonEntity *target, u3 DungeonEntityUpdateStatusSprites(target); } -void sub_8077434(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage) +void ChangeDefenseMultiplierTarget(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage) { struct DungeonEntityData *entityData; s32 oldMulti; @@ -324,7 +324,7 @@ void sub_8077434(struct DungeonEntity *pokemon, struct DungeonEntity *target, u3 DungeonEntityUpdateStatusSprites(target); } -void sub_8077540(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage) +void RaiseAccuracyStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage) { struct DungeonEntityData *entityData; @@ -349,7 +349,7 @@ void sub_8077540(struct DungeonEntity * pokemon, struct DungeonEntity * target, } } -void sub_80775DC(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage, bool8 displayMessage) +void LowerAccuracyStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage, bool8 displayMessage) { struct DungeonEntityData *entityData; @@ -474,7 +474,7 @@ void ParalyzeStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * } } -void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 displayMessage) +void RaiseMovementSpeedTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 displayMessage) { s32 movSpeed; s32 index; @@ -518,7 +518,7 @@ void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, DungeonEntityUpdateStatusSprites(target); } -void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 param_3, bool8 displayMessage) +void LowerMovementSpeedTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 levels, bool8 displayMessage) { s32 movSpeed; s32 counter; @@ -540,7 +540,7 @@ void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, sub_80522F4(pokemon,target,*gUnknown_80FC2D8); } else { - for(counter = 0; counter < param_3; counter++) + for(counter = 0; counter < levels; counter++) { for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++) { @@ -624,7 +624,7 @@ void CowerStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * ta } } -void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, u32 displayMessage) +void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, bool32 displayMessage) { struct DungeonEntityData *entityData; s32 HP; @@ -1030,7 +1030,7 @@ void sub_80783C4(struct DungeonEntity * pokemon, struct DungeonEntity * target, void CurseStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * target) { - u32 uVar1; + u32 statStage; s32 HP; struct DungeonEntityData * pokemonEntityData; struct DungeonEntityData * targetEntityData; @@ -1059,10 +1059,10 @@ void CurseStatusTarget(struct DungeonEntity *pokemon, struct DungeonEntity * tar sub_80522F4(pokemon,target,*gUnknown_80FB004); } else { - uVar1 = gUnknown_8106A4C; - RaiseAttackStageTarget(pokemon,pokemon,uVar1,1); - RaiseDefenseStageTarget(pokemon,pokemon,uVar1,1); - sub_80779F0(pokemon,pokemon,1,1); + statStage = gUnknown_8106A4C; + RaiseAttackStageTarget(pokemon,pokemon,statStage,1); + RaiseDefenseStageTarget(pokemon,pokemon,statStage,1); + LowerMovementSpeedTarget(pokemon,pokemon,1,TRUE); } DungeonEntityUpdateStatusSprites(target); } diff --git a/src/status_checker.c b/src/status_checker.c index bfbc19013..c94b3229f 100644 --- a/src/status_checker.c +++ b/src/status_checker.c @@ -55,7 +55,6 @@ 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 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); @@ -70,17 +69,25 @@ 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 LowerDefenseStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); -extern void RaiseAttackStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32); + + +// TODO include dungeon_ai.h when SqueezedStatusTarget is figured out +extern void LowerDefenseStageTarget(struct DungeonEntity *, struct DungeonEntity *, s32, s32, u8, bool8); +extern void RaiseAttackStageTarget(struct DungeonEntity *, struct DungeonEntity *, s32, s32); +extern void PoisonedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, bool8); +extern void RaiseDefenseStageTarget(struct DungeonEntity *, struct DungeonEntity *, s32, s32); +extern void InfatuateStatusTarget(struct DungeonEntity *, struct DungeonEntity *, bool8); +extern void LowerAttackStageTarget(struct DungeonEntity *, struct DungeonEntity *, s32, s32, u8, bool8); +extern void PetrifiedStatusTarget(struct DungeonEntity *, struct DungeonEntity *); +extern void WrapTarget(struct DungeonEntity *, struct DungeonEntity *); + +// TODO having matching issues when this isn't s32.. +extern void SqueezedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, s32, bool32); + extern void sub_806F324(struct DungeonEntity *, s32, u32, u32); -extern void RaiseDefenseStageTarget(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern bool8 sub_805755C(struct DungeonEntity* pokemon,u16 moveID); -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 WrapTarget(struct DungeonEntity *, struct DungeonEntity *); -extern void SqueezedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, s32, s32); extern void sub_807CD9C(struct DungeonEntity *, struct DungeonEntity *, u8 facingDir); @@ -231,7 +238,6 @@ const u8 gDungeonCamouflageTypes[76] = { extern s16 gUnknown_80F4DC6; extern u8 *gUnknown_80FEFF4[]; -extern void PoisonedStatusTarget(struct DungeonEntity *, struct DungeonEntity *, u32); extern u32 gUnknown_80F51C4[]; @@ -405,30 +411,28 @@ bool8 TrapperOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * ta return trapLaid; } -s32 sub_805B264(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) +bool8 sub_805B264(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) { - u32 uVar2; s32 r3; - s32 r6; + bool8 r6; s32 iVar5; struct DungeonEntityData *entityData; entityData = target->entityData; r3 = gUnknown_202F224; - r6 = 0; + r6 = FALSE; gDungeonGlobalData->unk18200 = gUnknown_8106A8C[r3]; gDungeonGlobalData->unk18204 = 0; iVar5 = gUnknown_80F4F94[r3]; - if (entityData->chargingStatus == 0xA) { - iVar5 = iVar5 << 1; + if (entityData->chargingStatus == CHARGING_STATUS_DIG) { + iVar5 *= 2; } - uVar2 = sub_8055864(pokemon,target,move,iVar5,param_4); - r6 = -((int)(-uVar2 | uVar2) >> 0x1f); + r6 = sub_8055864(pokemon,target,move,iVar5,param_4) ? TRUE : FALSE; return r6; } -bool8 sub_805B2E4(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) +bool8 MagicCoatMoveAction(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) { MagicCoatStatusTarget(pokemon, target); return TRUE; @@ -466,7 +470,7 @@ bool8 sub_805B324(struct DungeonEntity * pokemon,struct DungeonEntity * target,s return uVar3; } -bool8 sub_805B37C(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) +bool8 DestinyBondMoveAction(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) { DestinyBondStatusTarget(pokemon, target); return TRUE; @@ -477,7 +481,7 @@ bool8 sub_805B388(struct DungeonEntity * pokemon,struct DungeonEntity * target,s return (sub_8055640(pokemon,target,move,0x100,param_4)) ? TRUE : FALSE; } -bool8 sub_805B3A8(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) +bool8 MirrorCoatMoveAction(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove *move, s32 param_4) { MirrorCoatStatusTarget(pokemon, target); return TRUE; @@ -666,7 +670,7 @@ bool8 sub_805B668(struct DungeonEntity * pokemon, struct DungeonEntity * target, sub_806F324(pokemon,iVar4,0xd,0x1fa); } else { - HealTargetHP(pokemon,pokemon,iVar4,0,1); + HealTargetHP(pokemon,pokemon,iVar4,0,TRUE); } } } @@ -724,7 +728,7 @@ bool8 RecycleMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * t return isTMRecycled; } -bool8 sub_805B7FC(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) +bool8 ReflectMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) { ReflectStatusTarget(pokemon, target); return TRUE; @@ -743,7 +747,7 @@ bool8 sub_805B808(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 sub_805B884( struct DungeonEntity * pokemon, struct DungeonEntity * target) { RaiseAttackStageTarget(pokemon, target, gUnknown_8106A4C, 1); - sub_8077910(pokemon, target, 0, TRUE); + RaiseMovementSpeedTarget(pokemon, target, 0, TRUE); return TRUE; } @@ -964,7 +968,7 @@ bool8 CleanseOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * ta bool8 sub_805BC70(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8075C58(pokemon,target,CalculateStatusTurns(target, gUnknown_80F4E74, TRUE), 1); + sub_8075C58(pokemon,target,CalculateStatusTurns(target, gUnknown_80F4E74, TRUE), TRUE); return TRUE; } @@ -1065,7 +1069,7 @@ bool8 TransferOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity * ta bool8 sub_805BE90(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_80779F0(pokemon, target, 1, TRUE); + LowerMovementSpeedTarget(pokemon, target, 1, TRUE); return TRUE; } From bfde61cee63d73a0f7558661a246b51f5104509c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 18 Nov 2022 15:14:06 -0800 Subject: [PATCH 08/21] some more decomp --- asm/code_803D110.s | 4 +- asm/code_80428A0.s | 2 +- asm/code_80495E4.s | 622 ---------------------------------- asm/code_8085B0C.s | 2 +- include/dungeon_global_data.h | 9 +- include/file_system.h | 1 + include/map.h | 1 + src/code_80428A0.c | 12 +- src/dungeon_map_access.c | 123 +++++++ src/status_checker.c | 10 +- src/tile_types.c | 135 ++++++++ sym_ewram.txt | 2 +- 12 files changed, 283 insertions(+), 640 deletions(-) diff --git a/asm/code_803D110.s b/asm/code_803D110.s index 313939df8..7d0b7f6bb 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -3128,7 +3128,7 @@ _0803E96A: pop {r0} bx r0 .align 2, 0 -_0803E9A4: .4byte gUnknown_202EE88 +_0803E9A4: .4byte gDungeonPaletteFile _0803E9A8: .4byte gUnknown_80F62AC _0803E9AC: .4byte gUnknown_202EDC8 _0803E9B0: .4byte gDungeonGlobalData @@ -3269,7 +3269,7 @@ _0803EA92: pop {r0} bx r0 .align 2, 0 -_0803EACC: .4byte gUnknown_202EE88 +_0803EACC: .4byte gDungeonPaletteFile _0803EAD0: .4byte gUnknown_80F62AC _0803EAD4: .4byte gUnknown_202EDC8 _0803EAD8: .4byte gDungeonGlobalData diff --git a/asm/code_80428A0.s b/asm/code_80428A0.s index c5a0a331e..7859fb808 100644 --- a/asm/code_80428A0.s +++ b/asm/code_80428A0.s @@ -1268,7 +1268,7 @@ _08043544: _08043594: bl sub_804AAD4 bl sub_8049B8C - bl sub_804966C + bl LoadDungeonTilesetAssets cmp r6, 0 bne _080435D0 bl sub_806B168 diff --git a/asm/code_80495E4.s b/asm/code_80495E4.s index 58b10871b..bbe2ca012 100644 --- a/asm/code_80495E4.s +++ b/asm/code_80495E4.s @@ -5,331 +5,6 @@ .text - thumb_func_start sub_80495E4 -sub_80495E4: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r2, 0 - ldr r0, _08049658 - mov r9, r0 - mov r12, r9 - ldr r7, _0804965C - ldr r1, _08049660 - mov r8, r1 -_080495FA: - lsls r1, r2, 3 - lsls r0, r2, 2 - adds r6, r2, 0x1 - subs r1, r2 - adds r0, r2 - lsls r0, 2 - adds r0, r2 - lsls r0, 6 - movs r4, 0 - lsls r2, r1, 5 - mov r3, r8 - adds r5, r0, r3 - movs r3, 0x37 -_08049614: - mov r1, r12 - ldr r0, [r1] - adds r1, r0, r7 - adds r1, r2 - adds r0, r5 - adds r0, r4 - str r0, [r1] - adds r4, 0x18 - adds r2, 0x4 - subs r3, 0x1 - cmp r3, 0 - bge _08049614 - adds r2, r6, 0 - cmp r2, 0x1F - ble _080495FA - movs r2, 0 - mov r3, r9 - ldr r1, [r3] - ldr r4, _08049664 - adds r0, r1, r4 - movs r3, 0 - strh r2, [r0] - adds r4, 0x2 - adds r0, r1, r4 - strh r2, [r0] - ldr r0, _08049668 - adds r1, r0 - strb r3, [r1] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08049658: .4byte gDungeonGlobalData -_0804965C: .4byte 0x0000e8c0 -_08049660: .4byte 0x00003a18 -_08049664: .4byte 0x00003a0e -_08049668: .4byte 0x00013570 - thumb_func_end sub_80495E4 - - thumb_func_start sub_804966C -sub_804966C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - ldr r1, _08049734 - ldr r0, _08049738 - mov r8, r0 - ldr r6, _0804973C - ldr r0, [r6] - ldr r5, _08049740 - adds r0, r5 - movs r2, 0 - ldrsh r0, [r0, r2] - add r0, r8 - ldrb r2, [r0] - mov r0, sp - bl sprintf - ldr r7, _08049744 - mov r0, sp - adds r1, r7, 0 - bl OpenFileAndGetFileDataPtr - adds r4, r0, 0 - ldr r0, _08049748 - movs r1, 0 - adds r2, r4, 0 - bl DecompressATGlobalFile - adds r0, r4, 0 - bl CloseFile - ldr r1, _0804974C - ldr r0, [r6] - adds r0, r5 - movs r3, 0 - ldrsh r2, [r0, r3] - mov r0, sp - bl sprintf - mov r0, sp - adds r1, r7, 0 - bl OpenFileAndGetFileDataPtr - ldr r1, _08049750 - str r0, [r1] - ldr r1, _08049754 - ldr r0, [r6] - adds r0, r5 - movs r4, 0 - ldrsh r0, [r0, r4] - add r0, r8 - ldrb r2, [r0] - mov r0, sp - bl sprintf - mov r0, sp - adds r1, r7, 0 - bl OpenFileAndGetFileDataPtr - adds r4, r0, 0 - ldr r0, [r6] - ldr r1, _08049758 - adds r0, r1 - ldr r1, _0804975C - adds r2, r4, 0 - bl DecompressATFile - adds r0, r4, 0 - bl CloseFile - ldr r0, [r6] - adds r2, r0, r5 - movs r3, 0 - ldrsh r0, [r2, r3] - cmp r0, 0x3F - bgt _08049768 - ldr r1, _08049760 - add r0, r8 - ldrb r2, [r0] - mov r0, sp - bl sprintf - mov r0, sp - adds r1, r7, 0 - bl OpenFileAndGetFileDataPtr - adds r4, r0, 0 - ldr r0, [r6] - ldr r1, _08049764 - adds r0, r1 - movs r1, 0x93 - lsls r1, 4 - adds r2, r4, 0 - bl DecompressATFile - adds r0, r4, 0 - bl CloseFile - b _08049794 - .align 2, 0 -_08049734: .4byte gUnknown_80F6A04 -_08049738: .4byte gUnknown_8108EC0 -_0804973C: .4byte gDungeonGlobalData -_08049740: .4byte 0x00003a0e -_08049744: .4byte gDungeonFileArchive -_08049748: .4byte 0x06008000 -_0804974C: .4byte gUnknown_80F6A10 -_08049750: .4byte gUnknown_202EE88 -_08049754: .4byte gUnknown_80F6A1C -_08049758: .4byte 0x00011884 -_0804975C: .4byte 0x00001194 -_08049760: .4byte gUnknown_80F6A28 -_08049764: .4byte 0x00012c24 -_08049768: - ldr r1, _080497E8 - movs r3, 0 - ldrsh r2, [r2, r3] - mov r0, sp - bl sprintf - mov r0, sp - adds r1, r7, 0 - bl OpenFileAndGetFileDataPtr - adds r4, r0, 0 - ldr r0, [r6] - ldr r1, _080497EC - adds r0, r1 - movs r1, 0x90 - lsls r1, 2 - adds r2, r4, 0 - bl DecompressATFile - adds r0, r4, 0 - bl CloseFile -_08049794: - ldr r1, _080497F0 - ldr r5, _080497F4 - ldr r0, [r5] - ldr r4, _080497F8 - adds r0, r4 - movs r3, 0 - ldrsh r2, [r0, r3] - mov r0, sp - bl sprintf - ldr r1, _080497FC - mov r0, sp - bl OpenFileAndGetFileDataPtr - adds r1, r0, 0 - ldr r0, _08049800 - str r1, [r0] - ldr r0, _08049804 - movs r2, 0x20 - bl sub_8004AA4 - ldr r2, _08049808 - movs r6, 0 - strb r6, [r2] - movs r3, 0x1 - strb r3, [r2, 0x1] - movs r0, 0x2 - strb r0, [r2, 0x2] - movs r0, 0x3 - strb r0, [r2, 0x3] - ldr r1, _0804980C - ldr r0, [r5] - adds r0, r4 - movs r4, 0 - ldrsh r0, [r0, r4] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08049810 - strb r3, [r2, 0x4] - strb r6, [r2, 0x5] - b _08049814 - .align 2, 0 -_080497E8: .4byte gUnknown_80F6A34 -_080497EC: .4byte 0x00012c24 -_080497F0: .4byte gUnknown_80F6A40 -_080497F4: .4byte gDungeonGlobalData -_080497F8: .4byte 0x00003a0e -_080497FC: .4byte gDungeonFileArchive -_08049800: .4byte gUnknown_202F18C -_08049804: .4byte gUnknown_202EE8C -_08049808: .4byte gWalkableTileToCrossableTerrain -_0804980C: .4byte gDungeonWaterType -_08049810: - strb r6, [r2, 0x4] - strb r3, [r2, 0x5] -_08049814: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804966C - - thumb_func_start sub_8049820 -sub_8049820: - push {lr} - ldr r0, _08049838 - ldr r0, [r0] - bl CloseFile - ldr r0, _0804983C - ldr r0, [r0] - bl CloseFile - pop {r0} - bx r0 - .align 2, 0 -_08049838: .4byte gUnknown_202F18C -_0804983C: .4byte gUnknown_202EE88 - thumb_func_end sub_8049820 - - thumb_func_start sub_8049840 -sub_8049840: - push {lr} - ldr r0, _08049860 - ldr r0, [r0] - ldr r1, _08049864 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - bl sub_8043CE4 - lsls r0, 24 - cmp r0, 0 - beq _08049870 - ldr r1, _08049868 - ldr r0, _0804986C - b _08049874 - .align 2, 0 -_08049860: .4byte gDungeonGlobalData -_08049864: .4byte 0x00003a0e -_08049868: .4byte gUnknown_203B430 -_0804986C: .4byte gUnknown_80F69EC -_08049870: - ldr r1, _0804987C - ldr r0, _08049880 -_08049874: - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0804987C: .4byte gUnknown_203B430 -_08049880: .4byte gUnknown_80F69D4 - thumb_func_end sub_8049840 - - thumb_func_start sub_8049884 -sub_8049884: - push {r4-r6,lr} - movs r5, 0 -_08049888: - movs r4, 0 - adds r6, r5, 0x1 -_0804988C: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80498A8 - adds r4, 0x1 - cmp r4, 0x37 - ble _0804988C - adds r5, r6, 0 - cmp r5, 0x1F - ble _08049888 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8049884 - thumb_func_start sub_80498A8 sub_80498A8: push {r4-r7,lr} @@ -3030,301 +2705,4 @@ _0804ACD4: _0804ACE0: .4byte 0x000104c4 thumb_func_end sub_804AC20 - thumb_func_start sub_804ACE4 -sub_804ACE4: - push {lr} - movs r1, 0 - ldrsh r2, [r0, r1] - movs r3, 0x2 - ldrsh r1, [r0, r3] - adds r0, r2, 0 - bl GetMapTile_1 - ldr r0, [r0, 0x14] - cmp r0, 0 - beq _0804AD06 - bl GetEntityType - cmp r0, 0x3 - bne _0804AD06 - movs r0, 0x1 - b _0804AD08 -_0804AD06: - movs r0, 0 -_0804AD08: - pop {r1} - bx r1 - thumb_func_end sub_804ACE4 - - thumb_func_start sub_804AD0C -sub_804AD0C: - push {lr} - movs r1, 0 - ldrsh r2, [r0, r1] - movs r3, 0x2 - ldrsh r1, [r0, r3] - adds r0, r2, 0 - bl GetMapTile_1 - ldr r1, [r0, 0x10] - cmp r1, 0 - beq _0804AD2C - ldr r0, [r1] - cmp r0, 0x1 - bne _0804AD2C - adds r0, r1, 0 - b _0804AD2E -_0804AD2C: - movs r0, 0 -_0804AD2E: - pop {r1} - bx r1 - thumb_func_end sub_804AD0C - - thumb_func_start sub_804AD34 -sub_804AD34: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - movs r0, 0 - mov r8, r0 - movs r1, 0 - ldrsh r0, [r6, r1] - movs r2, 0x2 - ldrsh r1, [r6, r2] - bl GetMapTile_2 - adds r2, r0, 0 - ldrh r1, [r2] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - bne _0804ADB6 - movs r0, 0x88 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - bne _0804ADB6 - movs r0, 0x1 - mov r8, r0 - ldr r0, _0804ADFC - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - movs r5, 0x1 - negs r5, r5 -_0804AD74: - movs r4, 0x1 - negs r4, r4 - adds r7, r5, 0x1 -_0804AD7A: - movs r1, 0 - ldrsh r0, [r6, r1] - adds r0, r4, r0 - movs r2, 0x2 - ldrsh r1, [r6, r2] - adds r1, r5, r1 - bl sub_80498A8 - movs r1, 0 - ldrsh r0, [r6, r1] - adds r0, r4, r0 - movs r2, 0x2 - ldrsh r1, [r6, r2] - adds r1, r5, r1 - bl sub_8049BB0 - movs r1, 0 - ldrsh r0, [r6, r1] - adds r0, r4, r0 - movs r2, 0x2 - ldrsh r1, [r6, r2] - adds r1, r5, r1 - bl sub_80402AC - adds r4, 0x1 - cmp r4, 0x1 - ble _0804AD7A - adds r5, r7, 0 - cmp r5, 0x1 - ble _0804AD74 -_0804ADB6: - mov r0, r8 - cmp r0, 0 - beq _0804ADEE - movs r5, 0 -_0804ADBE: - ldr r0, _0804AE00 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _0804AE04 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0804ADDE - adds r0, r4, 0 - bl sub_806CF98 -_0804ADDE: - adds r5, 0x1 - cmp r5, 0x13 - ble _0804ADBE - bl sub_8049ED4 - adds r0, r6, 0 - bl sub_8042A14 -_0804ADEE: - mov r0, r8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 .align 2, 0 -_0804ADFC: .4byte 0x0000fffc -_0804AE00: .4byte gDungeonGlobalData -_0804AE04: .4byte 0x000135cc - thumb_func_end sub_804AD34 - - thumb_func_start sub_804AE08 -sub_804AE08: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - movs r0, 0 - mov r8, r0 - movs r1, 0 - ldrsh r0, [r7, r1] - movs r2, 0x2 - ldrsh r1, [r7, r2] - bl GetMapTile_2 - adds r2, r0, 0 - ldrh r1, [r2] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - bne _0804AE72 - movs r0, 0x88 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - bne _0804AE72 - movs r0, 0x1 - mov r8, r0 - ldr r0, _0804AE80 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - ldrh r1, [r2, 0x4] - movs r0, 0x10 - orrs r0, r1 - strh r0, [r2, 0x4] - movs r5, 0x1 - negs r5, r5 -_0804AE50: - movs r4, 0x1 - negs r4, r4 - adds r6, r5, 0x1 -_0804AE56: - movs r1, 0 - ldrsh r0, [r7, r1] - adds r0, r4, r0 - movs r2, 0x2 - ldrsh r1, [r7, r2] - adds r1, r5, r1 - bl sub_8049BB0 - adds r4, 0x1 - cmp r4, 0x1 - ble _0804AE56 - adds r5, r6, 0 - cmp r5, 0x1 - ble _0804AE50 -_0804AE72: - mov r0, r8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0804AE80: .4byte 0x0000fffc - thumb_func_end sub_804AE08 - - thumb_func_start sub_804AE84 -sub_804AE84: - push {r4-r7,lr} - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r5, r1] - movs r2, 0x2 - ldrsh r1, [r5, r2] - bl GetMapTile_2 - adds r2, r0, 0 - ldrh r1, [r2, 0x4] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804AF0E - ldr r0, _0804AF14 - ands r0, r1 - strh r0, [r2, 0x4] - movs r6, 0x1 - negs r6, r6 -_0804AEAA: - movs r4, 0x1 - negs r4, r4 - adds r7, r6, 0x1 -_0804AEB0: - movs r1, 0 - ldrsh r0, [r5, r1] - adds r0, r4, r0 - movs r2, 0x2 - ldrsh r1, [r5, r2] - adds r1, r6, r1 - bl sub_80498A8 - movs r1, 0 - ldrsh r0, [r5, r1] - adds r0, r4, r0 - movs r2, 0x2 - ldrsh r1, [r5, r2] - adds r1, r6, r1 - bl sub_80402AC - adds r4, 0x1 - cmp r4, 0x1 - ble _0804AEB0 - adds r6, r7, 0 - cmp r6, 0x1 - ble _0804AEAA - movs r6, 0 -_0804AEDE: - ldr r0, _0804AF18 - ldr r0, [r0] - lsls r1, r6, 2 - ldr r2, _0804AF1C - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0804AEFE - adds r0, r4, 0 - bl sub_806CF98 -_0804AEFE: - adds r6, 0x1 - cmp r6, 0x13 - ble _0804AEDE - bl sub_8049ED4 - adds r0, r5, 0 - bl sub_8042A14 -_0804AF0E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804AF14: .4byte 0x0000ffef -_0804AF18: .4byte gDungeonGlobalData -_0804AF1C: .4byte 0x000135cc - thumb_func_end sub_804AE84 - - .align 2, 0 \ No newline at end of file diff --git a/asm/code_8085B0C.s b/asm/code_8085B0C.s index 4c96aaffc..85b3b9c43 100644 --- a/asm/code_8085B0C.s +++ b/asm/code_8085B0C.s @@ -438,7 +438,7 @@ _08085E5E: pop {r0} bx r0 .align 2, 0 -_08085E70: .4byte gUnknown_202EE88 +_08085E70: .4byte gDungeonPaletteFile _08085E74: .4byte 0xffffff00 _08085E78: .4byte 0xffff00ff _08085E7C: .4byte 0xff00ffff diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index c10fd0baa..fbd4d443f 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -85,7 +85,8 @@ struct DungeonGlobalData u8 fill37FD[0x3A0D - 0x37FD]; /* 0x3A0D */ u8 unk3A0D; /* 0x3A0E */ s16 tileset; - u8 fill3A10[0x3A14 - 0x3A10]; + /* 0x3A10 */ u16 unk3A10; + u8 fill3A10[0x3A14 - 0x3A12]; /* 0x3A14 */ s16 bossBattleIndex; /* 0x3A18 */ struct MapTile mapTiles[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X]; u8 fillE218[0xE23C - 0xE218]; @@ -111,7 +112,11 @@ struct DungeonGlobalData /* 0x10844 */ s16 numRoomExits[MAX_ROOM_COUNT]; u8 fill10874[0x10884 - 0x10874]; /* 0x10884 */ struct Position roomExits[MAX_ROOM_COUNT][32]; // Arrays of room exits for each room. - u8 fill11444[0x1356C - 0x11484]; + u8 fill11444[0x11884 - 0x11484]; + u8 unk11884[0x1194]; + u8 fill12A18[0x12C24 - 0x12A18]; + u8 unk12C24[0x930]; + u8 fill13554[0x1356C - 0x13554]; u8 unk1356C; u8 fill1356D[0x13570 - 0x1356D]; /* 0x13570 */ u8 unk13570; diff --git a/include/file_system.h b/include/file_system.h index 4219c4785..976c6ce98 100644 --- a/include/file_system.h +++ b/include/file_system.h @@ -38,5 +38,6 @@ struct OpenedFile *OpenFileAndGetFileDataPtr(const char *filename, const struct struct OpenedFile *Call_OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc); u32 DecompressATFile(char *result, s32 resultLength, struct OpenedFile *file); void CloseFile(struct OpenedFile *openedFile); +u32 DecompressATGlobalFile(u32 *result, s32 resultLength, struct OpenedFile *file); #endif //GUARD_FILE_SYSTEM_H diff --git a/include/map.h b/include/map.h index 3601a1428..4255ed9ef 100644 --- a/include/map.h +++ b/include/map.h @@ -16,6 +16,7 @@ enum TileType TILE_TYPE_MAP_EDGE = 1 << 4, TILE_TYPE_SHOP = 1 << 5, TILE_TYPE_MONSTER_HOUSE = 1 << 6, + TILE_TYPE_UNK_8 = 1 << 8, TILE_TYPE_STAIRS = 1 << 9 }; diff --git a/src/code_80428A0.c b/src/code_80428A0.c index 86a17fd5a..6f3c90a82 100644 --- a/src/code_80428A0.c +++ b/src/code_80428A0.c @@ -4,7 +4,7 @@ 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_80416A4(struct Position *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); @@ -109,13 +109,13 @@ void sub_80429E8(struct DungeonEntity *r0) sub_804151C(r0, 0x11d, 1); } -void sub_80429FC(struct DungeonEntity *r0) +void sub_80429FC(struct Position *r0) { sub_80416A4(r0, 0xCF << 1, 1); sub_80421C0(NULL, 0xD4); } -void sub_8042A14(struct DungeonEntity *r0) +void sub_8042A14(struct Position *r0) { sub_80416A4(r0, 0x36, 1); } @@ -125,7 +125,7 @@ void sub_8042A24(struct DungeonEntity *r0) sub_804151C(r0, 0x15, 1); } -void sub_8042A34(struct DungeonEntity *r0) +void sub_8042A34(struct Position *r0) { sub_80416A4(r0, 0x9F << 1, 0); } @@ -135,12 +135,12 @@ void sub_8042A44(struct DungeonEntity *r0) sub_804151C(r0, 0xDA << 1, 1); } -void sub_8042A54(struct DungeonEntity *r0) +void sub_8042A54(struct Position *r0) { sub_80416A4(r0, 0x37, 1); } -void sub_8042A64(struct DungeonEntity *r0) +void sub_8042A64(struct Position *r0) { sub_80416A4(r0, 0x29, 1); } diff --git a/src/dungeon_map_access.c b/src/dungeon_map_access.c index 9ffa63334..785009808 100644 --- a/src/dungeon_map_access.c +++ b/src/dungeon_map_access.c @@ -1,10 +1,34 @@ #include "global.h" +#include "constants/walkable_tile.h" #include "dungeon_map_access.h" #include "dungeon_global_data.h" +#include "file_system.h" +#include "tile_types.h" extern struct unkStruct_202F190 gUnknown_202F190; extern struct unkStruct_202F190 *gUnknown_203B430; +extern struct unkStruct_202F190 gUnknown_80F69D4; +extern struct unkStruct_202F190 gUnknown_80F69EC; + +extern u8 gUnknown_8108EC0[]; +extern u8 gUnknown_80F6A04[]; +extern u8 gUnknown_80F6A10[]; +extern u8 gUnknown_80F6A28[]; +extern u8 gUnknown_80F6A1C[]; +extern u8 gUnknown_80F6A34[]; +extern u8 gUnknown_80F6A40[]; +extern const struct FileArchive gDungeonFileArchive; + +extern struct OpenedFile *gUnknown_202F18C; +extern struct OpenedFile *gDungeonPaletteFile; +extern u8 gUnknown_202EE8C[]; +extern u8 gWalkableTileToCrossableTerrain[8]; +extern const u8 gDungeonWaterType[]; +extern u8 sub_8043CE4(u32); + +extern void sub_8004AA4(u8 *, struct OpenedFile *, u32); +extern int sprintf(char *, const char *, ...); struct MapTile* GetMapTile_1(s32 x, s32 y) { @@ -25,3 +49,102 @@ struct MapTile* GetMapTile_2(s32 x, s32 y) } return gDungeonGlobalData->mapTilePointers[y][x]; } + +void sub_80495E4(void) +{ + s32 YCoord; + s32 XCoord; + + for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++) + { + for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++) + { + gDungeonGlobalData->mapTilePointers[YCoord][XCoord] = &gDungeonGlobalData->mapTiles[YCoord][XCoord]; + } + } + gDungeonGlobalData->tileset = 0; + gDungeonGlobalData->unk3A10 = 0; + gDungeonGlobalData->unk13570 = 0; +} + +void LoadDungeonTilesetAssets(void) +{ + struct OpenedFile *file; + struct OpenedFile *file_1; + u8 fileName [12]; + + sprintf(fileName,gUnknown_80F6A04,gUnknown_8108EC0[gDungeonGlobalData->tileset]); // b%02dfon + file = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive); + DecompressATGlobalFile((u32 *)0x06008000,0,file); + CloseFile(file); + + sprintf(fileName,gUnknown_80F6A10,gDungeonGlobalData->tileset); // b%02dpal + gDungeonPaletteFile = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive); + + sprintf(fileName,gUnknown_80F6A1C,gUnknown_8108EC0[gDungeonGlobalData->tileset]); // b%02dcel + file_1 = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive); + DecompressATFile(gDungeonGlobalData->unk11884,0x1194,file_1); + CloseFile(file_1); + + if (gDungeonGlobalData->tileset < 0x40) { + sprintf(fileName,gUnknown_80F6A28,gUnknown_8108EC0[gDungeonGlobalData->tileset]); // b%02dcex + file = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive); + DecompressATFile(gDungeonGlobalData->unk12C24,0x930,file); + CloseFile(file); + } + else { + sprintf(fileName,gUnknown_80F6A34,gDungeonGlobalData->tileset); // b%02demap0 + file = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive); + DecompressATFile(gDungeonGlobalData->unk12C24,0x240,file); + CloseFile(file); + } + sprintf(fileName,gUnknown_80F6A40,gDungeonGlobalData->tileset); // b%02dcanm + gUnknown_202F18C = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive); + sub_8004AA4(gUnknown_202EE8C,gUnknown_202F18C,0x20); + gWalkableTileToCrossableTerrain[0] = CROSSABLE_TERRAIN_REGULAR; + gWalkableTileToCrossableTerrain[1] = CROSSABLE_TERRAIN_LIQUID; + gWalkableTileToCrossableTerrain[WALKABLE_TILE_CHASM] = CROSSABLE_TERRAIN_CREVICE; + gWalkableTileToCrossableTerrain[WALKABLE_TILE_WALL] = CROSSABLE_TERRAIN_WALL; + + if(gDungeonWaterType[gDungeonGlobalData->tileset] == DUNGEON_WATER_TYPE_LAVA) + { + gWalkableTileToCrossableTerrain[WALKABLE_TILE_LAVA] = CROSSABLE_TERRAIN_LIQUID; + gWalkableTileToCrossableTerrain[WALKABLE_TILE_WATER] = CROSSABLE_TERRAIN_REGULAR; + } + else + { + gWalkableTileToCrossableTerrain[WALKABLE_TILE_LAVA] = CROSSABLE_TERRAIN_REGULAR; + gWalkableTileToCrossableTerrain[WALKABLE_TILE_WATER] = CROSSABLE_TERRAIN_LIQUID; + } +} + +void sub_8049820(void) +{ + CloseFile(gUnknown_202F18C); + CloseFile(gDungeonPaletteFile); +} + +void sub_8049840(void) +{ + if (sub_8043CE4(gDungeonGlobalData->tileset) != 0) { + gUnknown_203B430 = &gUnknown_80F69EC; + } + else { + gUnknown_203B430 = &gUnknown_80F69D4; + } +} + +extern void sub_80498A8(s32, s32); + +void sub_8049884(void) +{ + s32 XCoord; + s32 YCoord; + + for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++) + { + for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++) { + sub_80498A8(XCoord,YCoord); + } + } +} diff --git a/src/status_checker.c b/src/status_checker.c index c94b3229f..4d1be30f1 100644 --- a/src/status_checker.c +++ b/src/status_checker.c @@ -66,8 +66,8 @@ extern bool8 sub_805727C(struct DungeonEntity * pokemon, struct DungeonEntity * extern u32 sub_8055640(struct DungeonEntity *, struct DungeonEntity *, struct PokemonMove *, u32, u32); extern void sub_806A6E8(struct DungeonEntity *); extern void sub_807D3CC(struct DungeonEntity *, struct DungeonEntity *); -extern u8 sub_8069D18(s32 *); -extern u8 sub_804AD34(s32 *); +extern u8 sub_8069D18(struct Position *); +extern u8 sub_804AD34(struct Position *); extern u8 sub_8057308(struct DungeonEntity *, u32); @@ -808,7 +808,7 @@ bool8 sub_805B968(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 RockSmashMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) { bool8 uVar3; - s32 auStack20; + struct Position pos; #ifdef NONMATCHING struct DungeonEntity *temp; @@ -822,10 +822,10 @@ bool8 RockSmashMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * temp1 = target; uVar3 = 0; - if (sub_8069D18(&auStack20) != 0) { + if (sub_8069D18(&pos) != 0) { sub_80522F4(temp,temp1,*gUnknown_80FD430); // Can't use that diagonally! } - else if (uVar3 = (sub_804AD34(&auStack20)), uVar3 != 0) { + else if (uVar3 = (sub_804AD34(&pos)), uVar3 != 0) { sub_80522F4(temp,temp1,*gUnknown_80FD3F0); // It dug the wall in front! } else { diff --git a/src/tile_types.c b/src/tile_types.c index cad63fa98..cfeafce55 100644 --- a/src/tile_types.c +++ b/src/tile_types.c @@ -2,6 +2,8 @@ #include "tile_types.h" #include "dungeon_global_data.h" +#include "dungeon_map_access.h" +#include "dungeon_util.h" const u8 gDungeonWaterType[] = { DUNGEON_WATER_TYPE_NONE, @@ -82,6 +84,139 @@ const u8 gDungeonWaterType[] = { DUNGEON_WATER_TYPE_NONE, }; +extern void sub_80498A8(s32, s32); +extern void sub_80402AC(s32, s32); +extern void sub_8049BB0(s32, s32); +extern u32 sub_806CF98(struct DungeonEntity *); +void sub_8042A14(struct Position *); +extern void sub_8049ED4(void); + +bool8 sub_804ACE4(struct Position *pos) +{ + struct MapTile *tile; + struct DungeonEntity *entity; + + tile = GetMapTile_1(pos->x,pos->y); + entity = tile->mapObject; + if ((entity != NULL) && (GetEntityType(entity) == ENTITY_ITEM)) { + return TRUE; + } + return FALSE; +} + +struct DungeonEntity *sub_804AD0C(struct Position *pos) +{ + struct MapTile *tile; + struct DungeonEntity *entity; + + tile = GetMapTile_1(pos->x,pos->y); + entity = tile->pokemon; + if ((entity != NULL) && (entity->entityType == ENTITY_POKEMON)) { + return entity; + } + return NULL; +} + +bool8 sub_804AD34(struct Position *pos) +{ + struct MapTile *tile; + s32 x; + struct DungeonEntity * entity; + s32 y; + bool8 iVar8; + s32 index; + + iVar8 = 0; + tile = GetMapTile_2(pos->x,pos->y); + if (!(tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID))) + if(!(tile->tileType & (TILE_TYPE_UNK_8 | TILE_TYPE_MAP_EDGE))){ + iVar8 = 1; + tile->tileType = (tile->tileType & ~(TILE_TYPE_LIQUID | TILE_TYPE_FLOOR)) | TILE_TYPE_FLOOR; + + for(y = -1; y < 2; y++) + { + for(x = -1; x < 2; x++) + { + sub_80498A8(x + pos->x, y + pos->y); + sub_8049BB0(x + pos->x, y + pos->y); + sub_80402AC(x + pos->x, y + pos->y); + } + } + } + if (iVar8 != 0) { + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeonGlobalData->allPokemon[index]; + if (EntityExists(entity)) { + sub_806CF98(entity); + } + } + sub_8049ED4(); + sub_8042A14(pos); + } + return iVar8; +} + +bool8 sub_804AE08(struct Position *pos) +{ + struct MapTile *tile; + s32 x; + s32 y; + bool8 uVar6; + + uVar6 = FALSE; + tile = GetMapTile_2(pos->x,pos->y); + + if (!(tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID))) + if(!(tile->tileType & (TILE_TYPE_UNK_8 | TILE_TYPE_MAP_EDGE))) { + uVar6 = TRUE; + tile->tileType = (tile->tileType & ~(TILE_TYPE_LIQUID | TILE_TYPE_FLOOR)) | TILE_TYPE_FLOOR; + tile->unk4 = tile->unk4 | 0x10; + + for(y = -1; y < 2; y++) + { + for(x = -1; x < 2; x++) + { + sub_8049BB0(x + pos->x, y + pos->y); + } + } + } + return uVar6; +} + +void sub_804AE84(struct Position *pos) +{ + struct MapTile *tile; + s32 x; + struct DungeonEntity * entity; + s32 index; + s32 y; + + tile = GetMapTile_2(pos->x,pos->y); + if ((tile->unk4 & 0x10) != 0) { + tile->unk4 = tile->unk4 & 0xffef; + + for(y = -1; y < 2; y++) + { + for(x = -1; x < 2; x++) + { + sub_80498A8(x + pos->x, y + pos->y); + sub_80402AC(x + pos->x, y + pos->y); + } + } + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeonGlobalData->allPokemon[index]; + if (EntityExists(entity)) { + sub_806CF98(entity); + } + } + sub_8049ED4(); + sub_8042A14(pos); + } +} + bool8 IsTileGround(struct MapTile* tile) { bool8 isGround = FALSE; diff --git a/sym_ewram.txt b/sym_ewram.txt index 0023ef932..656c158b3 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -657,7 +657,7 @@ gUnknown_202EE70 = .; /* 202EE70 */ gUnknown_202EE76 = .; /* 202EE76 */ . += 0x12; -gUnknown_202EE88 = .; /* 202EE88 */ +gDungeonPaletteFile = .; /* 202EE88 */ . += 0x4; gUnknown_202EE8C = .; /* 202EE8C */ From 29c9956bf6569a9dad91c0be9c0856ba0c8cbde2 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 18 Nov 2022 16:54:10 -0800 Subject: [PATCH 09/21] finish out ai_targeting and move data --- asm/code_8070E3C.s | 397 ------------------------------------ asm/code_8097DD0.s | 22 -- data/data_8106FB5.s | 21 -- include/exclusive_pokemon.h | 6 + ld_script.txt | 2 - src/code_8097DD0.c | 13 +- src/dungeon_ai_targeting.c | 157 ++++++++++++++ src/exclusive_pokemon_1.c | 10 +- 8 files changed, 178 insertions(+), 450 deletions(-) delete mode 100644 asm/code_8070E3C.s delete mode 100644 data/data_8106FB5.s diff --git a/asm/code_8070E3C.s b/asm/code_8070E3C.s deleted file mode 100644 index 5c8a0a76e..000000000 --- a/asm/code_8070E3C.s +++ /dev/null @@ -1,397 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8070E3C -sub_8070E3C: - push {r4-r7,lr} - adds r4, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - ldr r0, [r4, 0x70] - movs r1, 0x2 - ldrsh r0, [r0, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r5, r0, 24 - movs r2, 0 - ldrsh r0, [r6, r2] - ldr r1, _08070EB0 - lsls r2, r7, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x2 - ldrsh r1, [r6, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - adds r2, r0, 0 - ldrh r1, [r2] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08070F0C - ldr r0, [r2, 0x10] - cmp r0, 0 - beq _08070E8A - bl GetEntityType - cmp r0, 0x1 - bne _08070F0C -_08070E8A: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070EDC - ldr r0, [r4, 0x70] - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070EAC - adds r0, r4, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _08070EB4 -_08070EAC: - movs r5, 0x3 - b _08070EDC - .align 2, 0 -_08070EB0: .4byte gAdjacentTileOffsets -_08070EB4: - adds r0, r4, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - bne _08070EDA - adds r0, r4, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070EDC - movs r0, 0x1 - ands r0, r7 - movs r5, 0x3 - cmp r0, 0 - beq _08070EDC -_08070EDA: - movs r5, 0x2 -_08070EDC: - movs r1, 0 - ldrsh r0, [r6, r1] - movs r2, 0x2 - ldrsh r1, [r6, r2] - bl GetMapTile_1 - adds r2, r0, 0 - adds r1, r2, 0 - adds r1, 0xA - adds r1, r5 - ldr r2, _08070F08 - movs r0, 0x7 - ands r0, r7 - adds r0, r2 - ldrb r1, [r1] - ldrb r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _08070F0C - movs r0, 0x1 - b _08070F0E - .align 2, 0 -_08070F08: .4byte gUnknown_8106FB5 -_08070F0C: - movs r0, 0 -_08070F0E: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8070E3C - - thumb_func_start sub_8070F14 -sub_8070F14: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r1, 0x4 - ldrsh r0, [r4, r1] - ldr r1, _08070F70 - lsls r2, r5, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - adds r2, r0, 0 - ldrh r1, [r2] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08070F78 - ldr r0, [r2, 0x10] - cmp r0, 0 - bne _08070F78 - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r2, r0, 0 - ldr r1, _08070F74 - movs r0, 0x7 - ands r0, r5 - adds r0, r1 - ldrb r1, [r2, 0xA] - ldrb r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _08070F78 - movs r0, 0x1 - b _08070F7A - .align 2, 0 -_08070F70: .4byte gAdjacentTileOffsets -_08070F74: .4byte gUnknown_8106FBD -_08070F78: - movs r0, 0 -_08070F7A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8070F14 - - thumb_func_start sub_8070F80 -sub_8070F80: - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r1, 0 - ldr r0, [r4, 0x70] - movs r1, 0x2 - ldrsh r0, [r0, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r5, r0, 24 - movs r2, 0x4 - ldrsh r0, [r4, r2] - ldr r1, _08070FF4 - lsls r2, r6, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetMapTile_1 - adds r2, r0, 0 - ldrh r1, [r2] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08071050 - ldr r0, [r2, 0x10] - cmp r0, 0 - beq _08070FCC - bl GetEntityType - cmp r0, 0x1 - bne _08071050 -_08070FCC: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08071020 - ldr r0, [r4, 0x70] - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070FEE - adds r0, r4, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _08070FF8 -_08070FEE: - movs r5, 0x3 - b _08071020 - .align 2, 0 -_08070FF4: .4byte gAdjacentTileOffsets -_08070FF8: - adds r0, r4, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - bne _0807101E - adds r0, r4, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08071020 - movs r0, 0x1 - ands r0, r6 - movs r5, 0x3 - cmp r0, 0 - beq _08071020 -_0807101E: - movs r5, 0x2 -_08071020: - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r2, r0, 0 - adds r1, r2, 0 - adds r1, 0xA - adds r1, r5 - ldr r2, _0807104C - movs r0, 0x7 - ands r0, r6 - adds r0, r2 - ldrb r1, [r1] - ldrb r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _08071050 - movs r0, 0x1 - b _08071052 - .align 2, 0 -_0807104C: .4byte gUnknown_8106FC5 -_08071050: - movs r0, 0 -_08071052: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8070F80 - - thumb_func_start sub_8071058 -sub_8071058: - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - ldr r0, [r5, 0x70] - movs r1, 0x2 - ldrsh r0, [r0, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r6, r0, 24 - movs r2, 0x4 - ldrsh r0, [r5, r2] - ldr r1, _080710D4 - lsls r2, r7, 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 - adds r4, r0, 0 - ldrh r1, [r4] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08071130 - ldr r0, [r4, 0x10] - cmp r0, 0 - beq _080710AE - bl GetEntityType - cmp r0, 0x1 - beq _080710AE - ldr r0, [r4, 0x10] - ldr r0, [r0, 0x70] - ldrb r0, [r0, 0x6] - cmp r0, 0 - bne _08071130 -_080710AE: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08071100 - ldr r0, [r5, 0x70] - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _080710D0 - adds r0, r5, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - beq _080710D8 -_080710D0: - movs r6, 0x3 - b _08071100 - .align 2, 0 -_080710D4: .4byte gAdjacentTileOffsets -_080710D8: - adds r0, r5, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - bne _080710FE - adds r0, r5, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08071100 - movs r0, 0x1 - ands r0, r7 - movs r6, 0x3 - cmp r0, 0 - beq _08071100 -_080710FE: - movs r6, 0x2 -_08071100: - movs r1, 0x4 - ldrsh r0, [r5, r1] - movs r2, 0x6 - ldrsh r1, [r5, r2] - bl GetMapTile_1 - adds r4, r0, 0 - adds r1, r4, 0 - adds r1, 0xA - adds r1, r6 - ldr r2, _0807112C - movs r0, 0x7 - ands r0, r7 - adds r0, r2 - ldrb r1, [r1] - ldrb r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _08071130 - movs r0, 0x1 - b _08071132 - .align 2, 0 -_0807112C: .4byte gUnknown_8106FCD -_08071130: - movs r0, 0 -_08071132: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8071058 - - .align 2, 0 \ No newline at end of file diff --git a/asm/code_8097DD0.s b/asm/code_8097DD0.s index 36f15d983..127e07bf2 100644 --- a/asm/code_8097DD0.s +++ b/asm/code_8097DD0.s @@ -5,28 +5,6 @@ .text - thumb_func_start sub_8097DD0 -sub_8097DD0: - push {lr} - adds r2, r0, 0 - adds r3, r1, 0 - ldr r1, [r2] - ldr r0, [r3] - cmp r1, r0 - bne _08097DEA - ldr r1, [r2, 0x4] - ldr r0, [r3, 0x4] - cmp r1, r0 - bne _08097DEA - movs r0, 0x1 - b _08097DEC -_08097DEA: - movs r0, 0 -_08097DEC: - pop {r1} - bx r1 - thumb_func_end sub_8097DD0 - thumb_func_start sub_8097DF0 sub_8097DF0: push {r4-r7,lr} diff --git a/data/data_8106FB5.s b/data/data_8106FB5.s deleted file mode 100644 index e958b9f06..000000000 --- a/data/data_8106FB5.s +++ /dev/null @@ -1,21 +0,0 @@ - .section .rodata - - .global gUnknown_8106FB5 -gUnknown_8106FB5: @ 8106FB5 -@ replacing .incbin "baserom.gba", 0x00106fb5, 0x8 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 - - .global gUnknown_8106FBD -gUnknown_8106FBD: @ 8106FBD -@ replacing .incbin "baserom.gba", 0x00106fbd, 0x8 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 - - .global gUnknown_8106FC5 -gUnknown_8106FC5: @ 8106FC5 -@ replacing .incbin "baserom.gba", 0x00106fc5, 0x8 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 - - .global gUnknown_8106FCD -gUnknown_8106FCD: @ 8106FCD -@ replacing .incbin "baserom.gba", 0x00106fcd, 0x8 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 diff --git a/include/exclusive_pokemon.h b/include/exclusive_pokemon.h index 17bb8eff1..be105e700 100644 --- a/include/exclusive_pokemon.h +++ b/include/exclusive_pokemon.h @@ -1,6 +1,9 @@ #ifndef GUARD_EXCLUSIVE_POKEMON_H #define GUARD_EXCLUSIVE_POKEMON_H +#include "code_8092334.h" + + #define NUM_EXCLUSIVE_POKEMON 12 struct ExclusivePokemon @@ -36,6 +39,9 @@ extern struct ExclusivePokemonData *gUnknown_203B498; void LoadExclusivePokemon(void); struct ExclusivePokemonData *GetExclusivePokemon(void); void InitializeExclusivePokemon(void); +bool8 IsExclusivePokemonUnlocked(s16 pokeID); void UnlockExclusivePokemon(s16 pokeID); +void WriteExclusivePokemon(struct unkStruct_8094924 *r0); +void ReadExclusivePokemon(struct unkStruct_8094924 *r0); #endif // GUARD_EXCLUSIVE_POKEMON_H diff --git a/ld_script.txt b/ld_script.txt index 4f3221ff5..b5ff54a6e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -238,7 +238,6 @@ SECTIONS { src/dungeon_capabilities.o(.text); asm/code_8070BC0.o(.text); src/dungeon_capabilities_1.o(.text); - asm/code_8070E3C.o(.text); src/dungeon_ai_targeting.o(.text); src/dungeon_pokemon_attributes.o(.text); asm/code_80718D8.o(.text); @@ -465,7 +464,6 @@ SECTIONS { src/type_effectiveness.o(.data); data/data_8106F7C.o(.rodata); src/dungeon_capabilities_1.o(.rodata); - data/data_8106FB5.o(.rodata); src/dungeon_ai_targeting.o(.rodata); data/data_8107010.o(.rodata); src/friend_area.o(.rodata); diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c index abbb02e35..f8336901c 100644 --- a/src/code_8097DD0.c +++ b/src/code_8097DD0.c @@ -1,6 +1,7 @@ #include "global.h" #include "code_8092334.h" #include "pokemon.h" +#include "exclusive_pokemon.h" struct unkStruct_203B494 { @@ -23,10 +24,8 @@ extern struct unkStruct_203B494 *gUnknown_203B494; extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); -void ReadExclusivePokemon(struct unkStruct_8094924 *r0); void ReadGameOptions(struct unkStruct_8094924 *param_1); void ReadPlayTime(struct unkStruct_8094924 *r0); -void WriteExclusivePokemon(struct unkStruct_8094924 *r0); void WriteGameOptions(struct unkStruct_8094924 *param_1); void WritePlayTime(struct unkStruct_8094924 *r0); @@ -88,3 +87,13 @@ u32 sub_8097D98(u8 *r0, u32 size) nullsub_102(&backup); return backup.unk8; } + +bool8 sub_8097DD0(s32 *param_1, s32 *param_2) +{ + if ((param_1[0] == param_2[0]) && (param_1[1] == param_2[1])) { + return TRUE; + } + else { + return FALSE; + } +} diff --git a/src/dungeon_ai_targeting.c b/src/dungeon_ai_targeting.c index c5c16d709..2a24b7099 100644 --- a/src/dungeon_ai_targeting.c +++ b/src/dungeon_ai_targeting.c @@ -22,6 +22,10 @@ extern void ShowVisualFlags(struct DungeonEntity *r0); +const u8 gUnknown_8106FB5[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gUnknown_8106FBD[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gUnknown_8106FC5[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gUnknown_8106FCD[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; const u8 gDirectionBitMasks_2[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; const u8 gDirectionBitMasks_3[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; @@ -58,6 +62,159 @@ const u8 gTargetingData[3][2][2][2] = { } }; +bool8 sub_8070F3C(struct DungeonEntity * pokemon, struct Position *pos, s32 direction) +{ + u8 terrain; + struct MapTile *tile; + + terrain = GetCrossableTerrain(pokemon->entityData->entityID); + + tile = GetMapTile_1(pos->x + gAdjacentTileOffsets[direction].x, pos->y + gAdjacentTileOffsets[direction].y); + if ((!(tile->tileType & TILE_TYPE_MAP_EDGE)) && + (((tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON))))) { + if (!IsFixedDungeon()) + { + if (pokemon->entityData->transformStatus == TRANSFORM_STATUS_MOBILE || + HasItem(pokemon, ITEM_ID_MOBILE_SCARF)) + { + terrain = CROSSABLE_TERRAIN_WALL; + } + else if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) + { + // BUG: If the Pokémon is a Ghost type that can normally attack through walls, + // All-Terrain Hiker/Super Mobile may make the AI think it can't attack through walls. + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) + { + if ((direction & 1) != 0) + { + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else + { + terrain = CROSSABLE_TERRAIN_WALL; + } + } + } + + tile = GetMapTile_1(pos->x, pos->y); + + if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FB5[direction & DIRECTION_MASK]))) { + return TRUE; + } + } + return FALSE; +} + +bool8 sub_8070F14(struct DungeonEntity * pokemon, s32 direction) +{ + struct MapTile *tile; + + + tile = GetMapTile_1(pokemon->posWorld.x + gAdjacentTileOffsets[direction].x, pokemon->posWorld.y + gAdjacentTileOffsets[direction].y); + if ((!(tile->tileType & TILE_TYPE_MAP_EDGE)) && + (((tile->pokemon == NULL)))) { + + tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); + + if (((tile->canMoveAdjacent[0] & gUnknown_8106FBD[direction & DIRECTION_MASK]))) { + return TRUE; + } + } + return FALSE; +} + +bool8 sub_8070F80(struct DungeonEntity * pokemon, s32 direction) +{ + u8 terrain; + struct MapTile *tile; + + terrain = GetCrossableTerrain(pokemon->entityData->entityID); + + tile = GetMapTile_1(pokemon->posWorld.x + gAdjacentTileOffsets[direction].x, pokemon->posWorld.y + gAdjacentTileOffsets[direction].y); + if ((!(tile->tileType & TILE_TYPE_MAP_EDGE)) && + (((tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON))))) { + if (!IsFixedDungeon()) + { + if (pokemon->entityData->transformStatus == TRANSFORM_STATUS_MOBILE || + HasItem(pokemon, ITEM_ID_MOBILE_SCARF)) + { + terrain = CROSSABLE_TERRAIN_WALL; + } + else if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) + { + // BUG: If the Pokémon is a Ghost type that can normally attack through walls, + // All-Terrain Hiker/Super Mobile may make the AI think it can't attack through walls. + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) + { + if ((direction & 1) != 0) + { + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else + { + terrain = CROSSABLE_TERRAIN_WALL; + } + } + } + + tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); + + if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FC5[direction & DIRECTION_MASK]))) { + return TRUE; + } + } + return FALSE; +} + +bool8 sub_8071058(struct DungeonEntity * pokemon, s32 direction) +{ + u8 terrain; + struct MapTile *tile; + + terrain = GetCrossableTerrain(pokemon->entityData->entityID); + + tile = GetMapTile_1(pokemon->posWorld.x + gAdjacentTileOffsets[direction].x, pokemon->posWorld.y + gAdjacentTileOffsets[direction].y); + if ((!(tile->tileType & TILE_TYPE_MAP_EDGE)) && + (((tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON)) || + (!tile->pokemon->entityData->isEnemy)))) { + if (!IsFixedDungeon()) + { + if (pokemon->entityData->transformStatus == TRANSFORM_STATUS_MOBILE || + HasItem(pokemon, ITEM_ID_MOBILE_SCARF)) + { + terrain = CROSSABLE_TERRAIN_WALL; + } + else if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) + { + // BUG: If the Pokémon is a Ghost type that can normally attack through walls, + // All-Terrain Hiker/Super Mobile may make the AI think it can't attack through walls. + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) + { + if ((direction & 1) != 0) + { + terrain = CROSSABLE_TERRAIN_CREVICE; + } + else + { + terrain = CROSSABLE_TERRAIN_WALL; + } + } + } + tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); + + if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FCD[direction & DIRECTION_MASK]))) { + return TRUE; + } + } + return FALSE; +} + bool8 CanAttackInFront(struct DungeonEntity *pokemon, s32 direction) { u8 crossableTerrain = GetCrossableTerrain(pokemon->entityData->entityID); diff --git a/src/exclusive_pokemon_1.c b/src/exclusive_pokemon_1.c index 48b5ec50e..215002906 100644 --- a/src/exclusive_pokemon_1.c +++ b/src/exclusive_pokemon_1.c @@ -4,7 +4,6 @@ extern struct ExclusivePokemonData *gUnknown_203B498; extern struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON]; -void RestoreIntegerBits(u32 *, void *, u32); void sub_80980B4(s16); void sub_8097FA8(u8); void sub_8098170(s32); @@ -13,7 +12,6 @@ void sub_8097FF8(void); u8 sub_8098100(u8); u8 sub_8098134(s16); u8 sub_80981A0(s32); -void SaveIntegerBits(u32 *, void *, s32); bool8 IsExclusivePokemonUnlocked(s16 pokeID) { @@ -40,11 +38,11 @@ void UnlockExclusivePokemon(s16 pokeID) for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++) { if(gExclusivePokemon[iVar2].poke_id == pokeID_s32) - gUnknown_203B498->Exclusives[iVar2] = 1; + gUnknown_203B498->Exclusives[iVar2] = TRUE; } } -void WriteExclusivePokemon(u32 *r0) +void WriteExclusivePokemon(struct unkStruct_8094924 *r0) { s32 iVar2; u8 *puVar2; @@ -59,7 +57,7 @@ void WriteExclusivePokemon(u32 *r0) zero = 0; - SaveIntegerBits(r0, (u8 *)gUnknown_203B498, 1); + SaveIntegerBits(r0, gUnknown_203B498, 1); for(iVar2 = 0; iVar2 < 424; iVar2++) { stack_0 = sub_8098134(iVar2); @@ -85,7 +83,7 @@ void WriteExclusivePokemon(u32 *r0) } } -void ReadExclusivePokemon(u32 *r0) +void ReadExclusivePokemon(struct unkStruct_8094924 *r0) { s32 iVar2; u8 stack_0; From c9a338ee1a3819ca298d78cd5aceabe3f7cd7ce3 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 18 Nov 2022 16:58:14 -0800 Subject: [PATCH 10/21] label data --- src/dungeon_ai_targeting.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/dungeon_ai_targeting.c b/src/dungeon_ai_targeting.c index 2a24b7099..f08cf824d 100644 --- a/src/dungeon_ai_targeting.c +++ b/src/dungeon_ai_targeting.c @@ -22,12 +22,12 @@ extern void ShowVisualFlags(struct DungeonEntity *r0); -const u8 gUnknown_8106FB5[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; -const u8 gUnknown_8106FBD[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; -const u8 gUnknown_8106FC5[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; -const u8 gUnknown_8106FCD[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; const u8 gDirectionBitMasks_2[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; const u8 gDirectionBitMasks_3[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gDirectionBitMasks_4[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gDirectionBitMasks_5[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gDirectionBitMasks_6[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; +const u8 gDirectionBitMasks_7[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80}; const u8 gTargetingData[3][2][2][2] = { { @@ -100,7 +100,7 @@ bool8 sub_8070F3C(struct DungeonEntity * pokemon, struct Position *pos, s32 dire tile = GetMapTile_1(pos->x, pos->y); - if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FB5[direction & DIRECTION_MASK]))) { + if (((tile->canMoveAdjacent[terrain] & gDirectionBitMasks_2[direction & DIRECTION_MASK]))) { return TRUE; } } @@ -118,7 +118,7 @@ bool8 sub_8070F14(struct DungeonEntity * pokemon, s32 direction) tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); - if (((tile->canMoveAdjacent[0] & gUnknown_8106FBD[direction & DIRECTION_MASK]))) { + if (((tile->canMoveAdjacent[0] & gDirectionBitMasks_3[direction & DIRECTION_MASK]))) { return TRUE; } } @@ -163,7 +163,7 @@ bool8 sub_8070F80(struct DungeonEntity * pokemon, s32 direction) tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); - if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FC5[direction & DIRECTION_MASK]))) { + if (((tile->canMoveAdjacent[terrain] & gDirectionBitMasks_4[direction & DIRECTION_MASK]))) { return TRUE; } } @@ -208,7 +208,7 @@ bool8 sub_8071058(struct DungeonEntity * pokemon, s32 direction) } tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); - if (((tile->canMoveAdjacent[terrain] & gUnknown_8106FCD[direction & DIRECTION_MASK]))) { + if (((tile->canMoveAdjacent[terrain] & gDirectionBitMasks_5[direction & DIRECTION_MASK]))) { return TRUE; } } @@ -254,7 +254,7 @@ bool8 CanAttackInFront(struct DungeonEntity *pokemon, s32 direction) } } tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); - if (tile->canMoveAdjacent[crossableTerrain] & gDirectionBitMasks_2[direction & DIRECTION_MASK]) + if (tile->canMoveAdjacent[crossableTerrain] & gDirectionBitMasks_6[direction & DIRECTION_MASK]) { return TRUE; } @@ -318,7 +318,7 @@ bool8 CanMoveForward(struct DungeonEntity *pokemon, s32 direction, bool8 *pokemo } } currentTile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); - if (currentTile->canMoveAdjacent[crossableTerrain] & gDirectionBitMasks_3[direction & DIRECTION_MASK]) + if (currentTile->canMoveAdjacent[crossableTerrain] & gDirectionBitMasks_7[direction & DIRECTION_MASK]) { if (frontTile->pokemon == NULL) { From 8d7e774e81fe21c020c71e8d205519c063592327 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 2 Dec 2022 11:56:36 -0800 Subject: [PATCH 11/21] more labeling --- asm/code_803B050.s | 67 ------------ asm/code_8098468.s | 2 +- asm/code_8098BDC.s | 6 +- asm/ground_script.s | 12 +-- include/code_80A26CC.h | 2 +- include/constants/dungeon.h | 2 +- include/friend_area_action_menu.h | 4 +- include/ground_script.h | 11 +- include/pokemon.h | 44 ++++---- include/rescue_team_info.h | 4 +- ld_script.txt | 3 +- src/code_80118A4.c | 10 +- src/code_801EE10.c | 6 +- src/code_803B050.c | 42 ++++++++ src/code_8095824.c | 4 +- src/code_80958E8.c | 6 +- src/code_809747C.c | 42 ++++---- src/code_80A26CC.c | 120 +++++++++++----------- src/event_flag_1.c | 50 ++++----- src/friend_area_action_menu.c | 2 +- src/friend_area_action_menu_1.c | 140 +++++++++++++------------- src/friend_list_menu.c | 68 ++++++------- src/{code_8098BDC.c => ground_main.c} | 38 +++---- src/load_screen.c | 6 +- src/makuhita_dojo_1.c | 5 +- src/pokemon_3.c | 8 +- src/pokemon_mid.c | 4 +- src/rescue_team_info.c | 14 +-- src/wonder_mail.c | 4 +- src/wonder_mail_2.c | 4 +- 30 files changed, 354 insertions(+), 376 deletions(-) create mode 100644 src/code_803B050.c rename src/{code_8098BDC.c => ground_main.c} (91%) diff --git a/asm/code_803B050.s b/asm/code_803B050.s index 27ba3abb8..f68756f76 100644 --- a/asm/code_803B050.s +++ b/asm/code_803B050.s @@ -2089,71 +2089,4 @@ _0803C10C: bx r1 thumb_func_end sub_803C0DC - thumb_func_start sub_803C110 -sub_803C110: - push {r4,lr} - lsls r0, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - bl sub_8098134 - lsls r0, 24 - cmp r0, 0 - beq _0803C180 - adds r0, r4, 0 - bl GetBaseSpecies - lsls r0, 16 - asrs r0, 16 - cmp r4, r0 - bne _0803C180 - adds r0, r4, 0 - bl sub_803C0DC - lsls r0, 24 - cmp r0, 0 - beq _0803C180 - movs r0, 0x6 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - bne _0803C188 - ldr r1, _0803C184 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0803C168 - adds r2, r1, 0 -_0803C154: - movs r3, 0 - ldrsh r0, [r2, r3] - cmp r0, r4 - beq _0803C180 - adds r1, 0x2 - adds r2, 0x2 - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _0803C154 -_0803C168: - bl GetPlayerPokemonStruct - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, r4 - beq _0803C180 - bl sub_808D378 - movs r2, 0x8 - ldrsh r0, [r0, r2] - cmp r0, r4 - bne _0803C188 -_0803C180: - movs r0, 0 - b _0803C18A - .align 2, 0 -_0803C184: .4byte gUnknown_80E8126 -_0803C188: - movs r0, 0x1 -_0803C18A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_803C110 - .align 2,0 diff --git a/asm/code_8098468.s b/asm/code_8098468.s index 57a593c04..2f23b1b5b 100644 --- a/asm/code_8098468.s +++ b/asm/code_8098468.s @@ -488,7 +488,7 @@ _080988E4: movs r1, 0 bl GroundMap_ExecuteEvent movs r0, 0x1E - bl sub_8098F44 + bl GroundMainGameCancelRequest movs r0, 0x1E bl FadeOutAllMusic _080988F8: diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index 374577349..877f21eae 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -6485,7 +6485,7 @@ sub_809C39C: movs r2, 0x1 negs r2, r2 movs r1, 0 - bl sub_8098D1C + bl GroundMainGroundRequest _0809C3CC: bl sub_801D1E0 pop {r0} @@ -6515,7 +6515,7 @@ sub_809C3D8: movs r2, 0x1 negs r2, r2 movs r1, 0 - bl sub_8098D1C + bl GroundMainGroundRequest _0809C408: bl sub_801D1E0 pop {r0} @@ -6545,7 +6545,7 @@ sub_809C414: movs r2, 0x1 negs r2, r2 movs r1, 0 - bl sub_8098D1C + bl GroundMainGroundRequest b _0809C458 .align 2, 0 _0809C444: .4byte gUnknown_3001B64 diff --git a/asm/ground_script.s b/asm/ground_script.s index 4643f6c5b..5c288ba7b 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -937,7 +937,7 @@ _0809E390: movs r3, 0x2 ldrsh r2, [r1, r3] movs r1, 0 - bl sub_8098D1C + bl GroundMainGroundRequest _0809E3BA: ldr r1, [r4] adds r0, r7, 0 @@ -2175,7 +2175,7 @@ _0809EF26: ldrsh r2, [r0, r1] adds r0, r6, 0 adds r1, r5, 0 - bl sub_8098D1C + bl GroundMainGroundRequest b _0809EAE0 .align 2, 0 _0809EF38: .4byte gUnknown_81165D4 @@ -2210,7 +2210,7 @@ _0809EF70: movs r2, 0x2 ldrsh r1, [r0, r2] adds r0, r4, 0 - bl sub_8098E18 + bl GroundMainRescueRequest mov r0, r9 movs r1, 0x1 bl sub_80A2460 @@ -3072,7 +3072,7 @@ _0809F68E: _0809F6C6: adds r0, r4, 0 adds r1, r5, 0 - bl sub_8098E18 + bl GroundMainRescueRequest bl _0809EAE0 .align 2, 0 _0809F6D4: .4byte gUnknown_8116684 @@ -3083,7 +3083,7 @@ _0809F6DC: movs r1, 0x1 negs r1, r1 adds r0, r4, 0 - bl sub_8098E18 + bl GroundMainRescueRequest bl _0809EAE0 _0809F6EA: mov r1, r9 @@ -8339,7 +8339,7 @@ _080A2298: bl sub_8011C28 _080A229E: adds r0, r5, 0 - bl sub_8098F00 + bl GroundMainGameEndRequest lsls r0, r5, 16 lsrs r0, 16 bl FadeOutAllMusic diff --git a/include/code_80A26CC.h b/include/code_80A26CC.h index 2838f15a7..e7f07852b 100644 --- a/include/code_80A26CC.h +++ b/include/code_80A26CC.h @@ -6,7 +6,7 @@ struct unkStruct_80A2608 /* 0x6 */ u16 unk6; /* 0x8 */ u16 unk8; /* 0xA */ u16 unkA; - /* 0xC */ u8 unkC; + /* 0xC */ u8 dungeonIndex; /* 0xD */ u8 unkD; /* 0xE */ s16 unkE; /* 0x10 */ u8 unk10; diff --git a/include/constants/dungeon.h b/include/constants/dungeon.h index 6987c6130..a1a9a0ae4 100644 --- a/include/constants/dungeon.h +++ b/include/constants/dungeon.h @@ -3,7 +3,7 @@ #define NUM_DUNGEON_MAZE (NUM_DUNGEONS - DUNGEON_NORMAL_MAZE_2) -enum Dungeon +enum DungeonIndex { DUNGEON_TINY_WOODS = 0, DUNGEON_THUNDERWAVE_CAVE = 1, diff --git a/include/friend_area_action_menu.h b/include/friend_area_action_menu.h index 10806797c..cd470d540 100644 --- a/include/friend_area_action_menu.h +++ b/include/friend_area_action_menu.h @@ -10,11 +10,11 @@ struct unkStruct_203B2BC u16 unkA; u32 itemIndex; struct HeldItem itemToGive; - struct HeldItem unk14; + struct HeldItem item2; struct PokemonStruct *unk18; u8 unk1C; u32 unk20; - u16 unk24; + u16 moveID; struct PokemonMove unk28[8]; u32 unk68; u32 unk6C; diff --git a/include/ground_script.h b/include/ground_script.h index fa162b7aa..a2fa16dae 100644 --- a/include/ground_script.h +++ b/include/ground_script.h @@ -1,7 +1,7 @@ struct GroundScript_ExecutePP_3 { // size: 0xC - u32 unk0; + u8 *scriptPointer; s16 scriptType; s16 unk6; u8 unk8; @@ -12,8 +12,8 @@ struct GroundScript_ExecutePP_1_sub // size: 0x60 /* 0x0 */ s16 scriptType; /* 0x2 */ s16 unk2; - /* 0x4 */ u32 unk4; - /* 0x8 */ u32 unk8; + /* 0x4 */ u8 *scriptPointer1; + /* 0x8 */ u8 *scriptPointer2; /* 0xC */ u16 unkC; /* 0xE */ u8 unkE; /* 0xF */ u8 fillF; @@ -38,8 +38,9 @@ struct GroundScript_ExecutePP_1 u32 unk4; u32 fill8; u32 unkC; - u32 fill10; - u8 fill18[0x24 - 0x14]; + u16 unk10; + u8 unk12; + u8 fill18[0x24 - 0x13]; struct GroundScript_ExecutePP_1_sub unk24; struct GroundScript_ExecutePP_1_sub unk84; u16 unkE4; diff --git a/include/pokemon.h b/include/pokemon.h index 186e8bceb..81f1138fb 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -31,7 +31,7 @@ struct PokemonStruct /* 0x0 */ u16 unk0; // recruited?? /* 0x1 */ bool8 isLeader; /* 0x3 */ u8 unkHasNextStage; // set to a random value? - /* 0x4 */ struct DungeonLocation unk4; + /* 0x4 */ struct DungeonLocation dungeonLocation; /* 0x8 */ s16 speciesNum; // species # /* 0xC */ struct unkPokeSubStruct_C unkC[2]; /* 0x14 */ s16 IQ; @@ -69,27 +69,27 @@ struct unkStruct_8094184 struct PokemonStruct2 { // size 0x68 - u16 unk0; // corresponds to unk0 inPokemonStruct - bool8 isLeader; // unk2 - u8 unkHasNextStage; // unk3 - struct DungeonLocation unk4; // unk4 - u16 IQ; // IQ (other offset) - u16 unkA; - u16 unkC; - s16 speciesNum; // speciesNum (other offset) - u16 unk10; // pokeHP - u16 unk12; // pokeHP - struct Offense offense; // offense (other offset) - u32 unk18; // unk1C - struct unkStruct_8094184 moves; - /* 40 */ struct ItemSlot itemSlot; // heldItem - u32 unk44; // some struct - u32 unk48; // some struct (same type as 44) - u32 IQSkills; // unk20 - u8 unk50; // unk24 - u8 fill51[3]; - struct unkStruct_808E6F4 unk54; - u8 name[POKEMON_NAME_LENGTH]; // name (other offset) + /* 0x0 */ u16 unk0; // corresponds to unk0 inPokemonStruct + /* 0x2 */ bool8 isLeader; // unk2 + /* 0x3 */ u8 unkHasNextStage; // unk3 + /* 0x4 */ struct DungeonLocation dungeonLocation; // unk4 + /* 0x8 */ u16 IQ; // IQ (other offset) + /* 0xA */ u16 unkA; + /* 0xC */ u16 unkC; + /* 0xE */ s16 speciesNum; // speciesNum (other offset) + /* 0x10 */ u16 unk10; // pokeHP + /* 0x12 */ u16 unk12; // pokeHP + /* 0x14 */ struct Offense offense; // offense (other offset) + /* 0x18 */ u32 unk18; // unk1C + /* 0x1C */ struct unkStruct_8094184 moves; + /* 0x40 */ struct ItemSlot itemSlot; // heldItem + /* 0x44 */ u32 unk44; // some struct + /* 0x48 */ u32 unk48; // some struct (same type as 44) + /* 0x4C */ u32 IQSkills; // unk20 + /* 0x50 */ u8 unk50; // unk24 + /* 0x51 */ u8 fill51[3]; + /* 0x54 */ struct unkStruct_808E6F4 unk54; + /* 0x58 */ u8 name[POKEMON_NAME_LENGTH]; // name (other offset) }; struct unkStruct_203B45C diff --git a/include/rescue_team_info.h b/include/rescue_team_info.h index d0cc7c224..169a9184d 100644 --- a/include/rescue_team_info.h +++ b/include/rescue_team_info.h @@ -17,7 +17,7 @@ struct RescueTeamData { u8 teamName[TEAM_NAME_LENGTH]; s32 teamRankPts; - u8 unk10; + bool8 isTeamRenamed; }; extern struct RescueTeamData *gRescueTeamInfoRef; @@ -34,7 +34,7 @@ void SetTeamRankPoints(s32 newPts); void AddToTeamRankPts(s32 newPts); u8 GetRescueTeamRank(void); const u8 *GetTeamRankString(u8 index); -u8 sub_80921B8(void); +u8 GetIsTeamRenamed(void); u32 SaveRescueTeamInfo(u8 *param_1,u32 param_2); u32 ReadRescueTeamInfo(u8 *param_1, u32 param_2); diff --git a/ld_script.txt b/ld_script.txt index b5ff54a6e..3edca36a9 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -181,6 +181,7 @@ SECTIONS { asm/debug_menu_2.o(.text); src/debug_menu_1.o(.text); asm/code_803B050.o(.text); + src/code_803B050.o(.text); src/pokemon_mail.o(.text); src/code_803C1B4.o(.text); asm/code_803C1D0.o(.text); @@ -326,7 +327,7 @@ SECTIONS { src/exclusive_pokemon_1.o(.text); src/position_util.o(.text); asm/code_8098468.o(.text); - src/code_8098BDC.o(.text); + src/ground_main.o(.text); asm/code_8098BDC.o(.text); src/code_809D148.o(.text); asm/code_809D148.o(.text); diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 661440a7e..926a91026 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -11,7 +11,7 @@ void xxx_call_stop_bgm(void); -extern u8 sub_80023E4(u8); +extern bool8 sub_80023E4(u8); extern void xxx_call_stop_fanfare_se(u16 r0); struct UnkSaveStruct1 @@ -87,15 +87,15 @@ void sub_801169C(void) void sub_8011760(void) { - if(sub_80023E4(0xD) != 0) + if(sub_80023E4(0xD)) StartNewBGM(MUS_WORLD_CALAMITY); - else if(sub_80023E4(0xC) != 0) + else if(sub_80023E4(0xC)) StartNewBGM(MUS_POKEMON_SQUARE); } void sub_801178C(void) { - if(sub_80023E4(0xD) != 0) + if(sub_80023E4(0xD)) StartNewBGM(MUS_WORLD_CALAMITY); else StartNewBGM(MUS_POKEMON_SQUARE); @@ -103,7 +103,7 @@ void sub_801178C(void) void sub_80117AC(void) { - if(sub_80023E4(0xD) == 0) + if(!sub_80023E4(0xD)) FadeOutBGM(0x1E); } diff --git a/src/code_801EE10.c b/src/code_801EE10.c index 668d95256..e4ea87e91 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -42,8 +42,8 @@ extern struct UnkTextStruct2 gUnknown_80DC9B0; extern struct UnkTextStruct2 gUnknown_80DC9C8; extern void sub_8013818(void *, u32, u32, u32); -extern u8 sub_80023E4(u32); -extern void sub_808FF20(u32 *, struct PokemonStruct *, u8); +extern bool8 sub_80023E4(u32); +extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8); extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); extern s32 GetKeyPress(void *); extern bool8 sub_8013938(void *); @@ -153,5 +153,5 @@ void sub_8024604(void) sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0); iVar3 = &gUnknown_203B2AC->unk4C; pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->unk48]; - sub_808FF20(iVar3,pokeStruct,sub_80023E4(7)); + sub_808FF20(iVar3,pokeStruct, sub_80023E4(7)); } diff --git a/src/code_803B050.c b/src/code_803B050.c new file mode 100644 index 000000000..89d73028a --- /dev/null +++ b/src/code_803B050.c @@ -0,0 +1,42 @@ +#include "global.h" +#include "pokemon.h" + +extern s16 gUnknown_80E8126[]; + +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern struct PokemonStruct *sub_808D378(void); + +extern bool8 sub_803C0DC(s16); +extern bool8 sub_8098134(s16); +extern s16 GetBaseSpecies(s16); +extern bool8 sub_80023E4(u32); + +bool8 sub_803C110(s16 index) +{ + struct PokemonStruct *pokeStruct; + s16 *psVar5; + s16 *psVar6; + s32 species_s32; + + species_s32 = (s32)index; + if ((!sub_8098134(index)) || (index != GetBaseSpecies(index)) || (!sub_803C0DC(index))) { + return FALSE; + } + else { + if (!sub_80023E4(6)) { + psVar5 = &gUnknown_80E8126[0]; + if (*psVar5 != 0) { + psVar6 = &gUnknown_80E8126[0]; + do { + if (*psVar6 == species_s32) return FALSE; + psVar5++; + psVar6++; + } while (*psVar5 != SPECIES_NONE); + } + pokeStruct = GetPlayerPokemonStruct(); + if ((pokeStruct->speciesNum == species_s32) || + (pokeStruct = sub_808D378(), pokeStruct->speciesNum == species_s32)) return FALSE; + } + return TRUE; + } +} diff --git a/src/code_8095824.c b/src/code_8095824.c index 938b47f12..803e9ce8d 100644 --- a/src/code_8095824.c +++ b/src/code_8095824.c @@ -42,7 +42,7 @@ u32 sub_80954CC(u8 *a, u32 b) RestoreIntegerBits(&backup, &temp->unk0, 2); RestoreIntegerBits(&backup, &temp->isLeader, 1); RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7); - RestoreDungeonLocation(&backup, &temp->unk4); + RestoreDungeonLocation(&backup, &temp->dungeonLocation); RestoreIntegerBits(&backup, &temp->speciesNum, 9); xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]); xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[1]); @@ -84,7 +84,7 @@ u32 sub_8095624(u8 *a, u32 b) SaveIntegerBits(&backup, &temp->unk0, 2); SaveIntegerBits(&backup, &temp->isLeader, 1); SaveIntegerBits(&backup, &temp->unkHasNextStage, 7); - SaveDungeonLocation(&backup, &temp->unk4); + SaveDungeonLocation(&backup, &temp->dungeonLocation); SaveIntegerBits(&backup, &temp->speciesNum, 9); xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]); xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[1]); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 2a640351b..071e468cd 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -18,7 +18,7 @@ extern u8 sub_803C1D0(struct DungeonLocation *, u8); extern bool8 IsNotMoneyOrUsedTMItem(u8); extern u8 xxx_bit_lut_lookup_8091E50(u8 ,u8 ); extern u32 GetMaxItemCount(u8); -extern u8 sub_803C0DC(s16); +extern bool8 sub_803C0DC(s16); extern void sub_8096040(u8); extern void sub_80965B8(u8); extern void sub_8096C3C(u8); @@ -109,14 +109,14 @@ bool8 ValidateWonderMail(struct WonderMail *data) return FALSE; if(data->clientSpecies != GetBaseSpecies(data->clientSpecies)) return FALSE; - if(sub_803C0DC(data->clientSpecies) == 0) + if(!sub_803C0DC(data->clientSpecies)) return FALSE; if(data->targetSpecies > SPECIES_RAYQUAZA_CUTSCENE) return FALSE; if(data->targetSpecies != GetBaseSpecies(data->targetSpecies)) return FALSE; - if(sub_803C0DC(data->targetSpecies) == 0) + if(!sub_803C0DC(data->targetSpecies)) return FALSE; // Item Delivery/Finding diff --git a/src/code_809747C.c b/src/code_809747C.c index 3fbeecd76..85576a46a 100644 --- a/src/code_809747C.c +++ b/src/code_809747C.c @@ -21,40 +21,40 @@ extern const char gAvoidCaptureText[]; extern u8 sub_80A270C(); extern void sub_80015C0(u8, u8); extern u8 sub_80A2728(s16); -extern u8 sub_8001D08(u32, u32 ,s32); +extern bool8 sub_8001D08(u32, u32 ,s32); extern u32 sub_8001784(u32, u32, u16); extern void sub_800199C(u32, u32, u32, u32); -extern u8 sub_80023E4(u32); +extern bool8 sub_80023E4(u32); -const u8 *sub_809747C(s16 r0) +const u8 *sub_809747C(s16 index) { - if(r0 == 0xD) + if(index == 0xD) { return gDummyScenarioText; } else { - return GetDungeonName1(sub_80A270C(r0)); + return GetDungeonName1(sub_80A270C(index)); } } -const u8 *sub_80974A0(s16 r0) +const u8 *sub_80974A0(s16 index) { - if(r0 == 0xD) + if(index == 0xD) { return gDummyScenarioText; } else { - return GetDungeonName1(sub_80A270C(r0)); + return GetDungeonName1(sub_80A270C(index)); } } -const u8 *GetCurrentMissionText(s16 r0) +const u8 *GetCurrentMissionText(s16 index) { - if(r0 < 0x1F) + if(index < 0x1F) { - struct MissionText *mt = &gStoryMissionText[r0]; + struct MissionText *mt = &gStoryMissionText[index]; return mt->text; } else @@ -124,7 +124,7 @@ bool8 sub_8097504(s16 mazeIndex) uVar3 = 6; } - if (sub_80023E4(uVar3) == 0) { + if (!sub_80023E4(uVar3)) { return FALSE; } else { @@ -150,9 +150,9 @@ void sub_80975A8(s16 param_1,u8 param_2) sub_800199C(0,0x2e,param_1_u16,param_2); } -const u8 *sub_80975C4(s16 r0) +const u8 *sub_80975C4(s16 index) { - return GetDungeonName1(sub_80A2728(r0)); + return GetDungeonName1(sub_80A2728(index)); } const char *sub_80975DC(u32 r0) @@ -160,7 +160,7 @@ const char *sub_80975DC(u32 r0) // TODO: slight hack but matches r0 <<= 16; if((0xffe90000 + r0) >> 16 < 2) - if(sub_8001D08(0x3, 0xE, -1) != 0) + if(sub_8001D08(0x3, 0xE, -1)) return gMeetNinetalesText; else return gAvoidCaptureText; @@ -170,24 +170,24 @@ const char *sub_80975DC(u32 r0) bool8 HasCompletedAllMazes(void) { - s32 iVar2; - for(iVar2 = 0; iVar2 < 17; iVar2++) + s32 index; + for(index = 0; index < 17; index++) { - if(!(bool8)IsMazeCompleted(iVar2)) + if(!(bool8)IsMazeCompleted(index)) return FALSE; } return TRUE; } -u32 sub_8097640(void) +bool8 sub_8097640(void) { if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes()) { sub_800199C(0, 0x2E, 0x1F, 1); - return 1; + return TRUE; } else { - return 0; + return FALSE; } } diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index a5f51c722..592fca149 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -1,7 +1,7 @@ #include "global.h" #include "code_80A26CC.h" -extern u8 sub_80023E4(u32); +extern bool8 sub_80023E4(u32); extern u8 sub_80973F4(s16); extern u8 sub_8097384(s16); s16 sub_80A26B8(s16); @@ -40,10 +40,10 @@ u32 sub_80A25AC(u16 param_1) if (param_1 == 0x32) { return 0x32; } - else if (sub_80023E4(0xc) == 0) { + else if (!sub_80023E4(0xc)) { return 999; } - else if (sub_80023E4(0xd) != 0) { + else if (sub_80023E4(0xd)) { return 0x13; } else if (param_1 != 1) { @@ -57,27 +57,27 @@ u32 sub_80A25AC(u16 param_1) } } -struct unkStruct_80A2608 *sub_80A2608(s16 r0) +struct unkStruct_80A2608 *sub_80A2608(s16 index) { - return &gUnknown_81168A8[r0]; + return &gUnknown_81168A8[index]; } -struct unkStruct_80A2608 *sub_80A2620(s16 r0) +struct unkStruct_80A2608 *sub_80A2620(s16 index) { u32 temp; - temp = sub_80A26B8(r0); + temp = sub_80A26B8(index); return &gUnknown_81168A8[temp]; } -s16 sub_80A2644(u32 r0) +s16 sub_80A2644(u32 index) { - return gUnknown_8116F24[r0]; + return gUnknown_8116F24[index]; } -s16 sub_80A2654(s16 r0) +s16 sub_80A2654(s16 index) { struct unkStruct_80A2608 *temp; - temp = sub_80A2608(r0); + temp = sub_80A2608(index); return temp->unkE; } @@ -128,7 +128,7 @@ s16 sub_80A26CC(s16 r0) } -s32 sub_80A26D8(u8 r0) +s32 sub_80A26D8(u8 index) { s32 counter; s32 counter2; @@ -141,7 +141,7 @@ s32 sub_80A26D8(u8 r0) temp = sub_80A2608(counter2); if(temp->unk11 != 0) { - if(temp->unkC == r0) + if(temp->dungeonIndex == index) { return counter2; } @@ -150,29 +150,29 @@ s32 sub_80A26D8(u8 r0) return -1; } -u8 sub_80A270C(s16 r0) +u8 sub_80A270C(s16 index) { struct unkStruct_80A2608 *temp; - s32 temp_number; + s32 index_s32; - temp_number = r0; // forcing a shift before addressing - temp = sub_80A2608(gUnknown_8116F9A[temp_number]); - return temp->unkC; + index_s32 = index; // forcing a shift before addressing + temp = sub_80A2608(gUnknown_8116F9A[index_s32]); + return temp->dungeonIndex; } -u8 sub_80A2728(s16 r0) +u8 sub_80A2728(s16 index) { struct unkStruct_80A2608 *temp; - s16 temp_number = (0xDC >> 2) + r0; + s16 temp_number = (0xDC >> 2) + index; temp = sub_80A2608(temp_number); - return temp->unkC; + return temp->dungeonIndex; } -u8 sub_80A2740(s32 r0) +u8 sub_80A2740(s32 index) { struct unkStruct_80A2608 *temp; - temp = sub_80A2608(r0); - return temp->unkC; + temp = sub_80A2608(index); + return temp->dungeonIndex; } s16 sub_80A2750(s16 r0) @@ -199,16 +199,16 @@ s16 sub_80A2750(s16 r0) temp = sub_80A2608(temp_2); if(temp->unkE == -1) return 1; - if(sub_80023E4(5) != 0) + if(sub_80023E4(5)) return 1; if(sub_80973F4(temp->unkE) == 0) return 1; - if(sub_80023E4(1) == 0) + if(!sub_80023E4(1)) return 1; return 2; } -u8 sub_80A27CC(s16 r0) +bool8 sub_80A27CC(s16 r0) { s32 temp; s32 temp2; @@ -220,38 +220,38 @@ u8 sub_80A27CC(s16 r0) return_var = sub_80A2620(r0); if(return_var->unk0 == -1) - return 0; - if(sub_80023E4(5) != 0) - return 0; + return FALSE; + if(sub_80023E4(5)) + return FALSE; if(sub_8097384(r0) != 0) - return 1; - if(sub_80023E4(1) == 0) - return 0; + return TRUE; + if(!sub_80023E4(1)) + return FALSE; if(sub_80973F4(temp) == 0) - return 0; - return 1; + return FALSE; + return TRUE; } -u8 sub_80A2824(u8 r0) +bool8 sub_80A2824(u8 index) { s32 counter; struct unkStruct_80A2608 *temp; - if(sub_80023E4(5) != 0) - return 0; - if(sub_80023E4(1) != 0) + if(sub_80023E4(5)) + return FALSE; + if(sub_80023E4(1)) { for(counter = 0; counter <= 0x2D; counter++) { temp = sub_80A2620(counter); if(temp->unk11 != 0) { - if(temp->unkC == r0) + if(temp->dungeonIndex == index) { if(sub_8097384(counter) != 0) - return 1; + return TRUE; if(sub_80973F4(counter) != 0) - return 1; + return TRUE; } } } @@ -262,16 +262,16 @@ u8 sub_80A2824(u8 r0) { temp = sub_80A2620(counter); if(temp->unk11 != 0) - if(temp->unkC == r0) + if(temp->dungeonIndex == index) if(sub_8097384(counter) != 0) - return 1; + return TRUE; } } - return 0; + return FALSE; } -u32 sub_80A28B4(s16 r0) +bool8 sub_80A28B4(s16 r0) { struct unkStruct_80A2608 *temp; @@ -279,14 +279,14 @@ u32 sub_80A28B4(s16 r0) if(temp->unk0 != -1) { if(sub_8097384(r0) == 0 && sub_80973F4(r0) == 0) - return 0; + return FALSE; else - return 1; + return TRUE; } - return 0; + return FALSE; } -u32 sub_80A28F0(u8 r0) +bool8 sub_80A28F0(u8 index) { s32 counter; struct unkStruct_80A2608 *temp; @@ -296,16 +296,16 @@ u32 sub_80A28F0(u8 r0) temp = sub_80A2620(counter); if(temp->unk11 != 0) { - if(temp->unkC == r0) + if(temp->dungeonIndex == index) { if(sub_8097384(counter) != 0) - return 1; + return TRUE; if(sub_80973F4(counter) != 0) - return 1; + return TRUE; } } } - return 0; + return FALSE; } s32 sub_80A293C(u8 *param_1) @@ -332,7 +332,7 @@ s32 sub_80A293C(u8 *param_1) iVar3 = sub_80A2620(index); if ((iVar3->unk11 != 0) && (sub_8097384(index) != 0)) { - local_68[iVar3->unkC] = 1; + local_68[iVar3->dungeonIndex] = 1; } } @@ -373,13 +373,13 @@ s32 sub_80A29B0(u8 *param_1) } while ((int)pcVar2 >= (int)local_68); - if (sub_80023E4(1) != 0) { + if (sub_80023E4(1)) { for(index = 0; index < 0x2E; index++) { iVar3 = sub_80A2620(index); if ((iVar3->unk11 != 0) && (sub_80973F4(index) != 0)) { - local_68[iVar3->unkC] = 1; + local_68[iVar3->dungeonIndex] = 1; } } } @@ -416,13 +416,13 @@ s32 sub_80A2A5C(u8 *param_1) pcVar2--; } while ((s32)pcVar2 >= (s32)local_58); - if (sub_80023E4(1) != 0) { + if (sub_80023E4(1)) { for(index = 0; index < 0x2E; index++) { iVar3 = sub_80A2620(index); if ((iVar3->unk11 != 0) && ((sub_8097384(index) != 0) || (sub_80973F4(index) != 0))) { - local_58[iVar3->unkC] = 1; + local_58[iVar3->dungeonIndex] = 1; } } } @@ -432,7 +432,7 @@ s32 sub_80A2A5C(u8 *param_1) iVar3 = sub_80A2620(index); if ((iVar3->unk11 != 0) && (sub_8097384(index) != 0)) { - local_58[iVar3->unkC] = 1; + local_58[iVar3->dungeonIndex] = 1; } } } diff --git a/src/event_flag_1.c b/src/event_flag_1.c index 25d4b35bb..0cbdcd2da 100644 --- a/src/event_flag_1.c +++ b/src/event_flag_1.c @@ -254,7 +254,7 @@ void sub_8001D88(void) sub_80018D8(0,0x28,2); } else { - if ((sub_8001D08(4,0,0)) && (sub_8001D44(3,0xf,3) != 0)) { + if ((sub_8001D08(4,0,0)) && (sub_8001D44(3,0xf,3))) { ScenarioCalc(4,0x1d,1); } } @@ -299,7 +299,7 @@ void sub_8001D88(void) ScenarioCalc(9,0x2e,1); } } - if (sub_8001CC4(9,0x30,0) == 0) { + if (!sub_8001CC4(9,0x30,0)) { if ((sub_8001D08(5,0x22,0)) && HasRecruitedMon(SPECIES_ARTICUNO) && HasRecruitedMon(SPECIES_ZAPDOS) && HasRecruitedMon(SPECIES_MOLTRES)) { ScenarioCalc(5,0x22,1); } @@ -314,12 +314,12 @@ void sub_8001D88(void) sub_80973A8(0x29,1); } } - if (sub_8001CC4(5,0x22,0) == 0) { + if (!sub_8001CC4(5,0x22,0)) { if (sub_8001D08(10,0,0)) { ScenarioCalc(10,0x31,1); sub_809733C(0x1b,1); } - if ((sub_8001D08(0xc,0,0)) && (sub_8001CC4(0xb,0x34,0) == 0)) { + if ((sub_8001D08(0xc,0,0)) && (!sub_8001CC4(0xb,0x34,0))) { ScenarioCalc(0xc,0x35,1); } } @@ -333,9 +333,9 @@ void sub_8001D88(void) } } -u32 _FlagCalc(s32 param_1, s32 param_2, u32 param_3) +u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation) { - switch(param_3) { + switch(operation) { case 0: return param_2; case 1: @@ -361,13 +361,13 @@ u32 _FlagCalc(s32 param_1, s32 param_2, u32 param_3) case 0xb: return OtherRandomCapped(param_2); default: - FatalError(&gUnknown_80B7318,gUnknown_80B7324, param_3); // event flag expansion error %d + FatalError(&gUnknown_80B7318,gUnknown_80B7324, operation); // event flag expansion error %d } } -u8 _FlagJudge(u32 param_1, u32 param_2, u32 param_3) +u8 _FlagJudge(u32 param_1, u32 param_2, u32 operation) { - switch(param_3) { + switch(operation) { case 0: return 1; case 1: @@ -391,16 +391,16 @@ u8 _FlagJudge(u32 param_1, u32 param_2, u32 param_3) case 10: return (int)param_1 >> (param_2) & 1; default: - FatalError(&gUnknown_80B7350,gUnknown_80B735C, param_3); // event flag rule error %d + FatalError(&gUnknown_80B7350,gUnknown_80B735C, operation); // event flag rule error %d } } -u32 FlagCalc(u32 r0, u32 r1, u32 r2) +u32 FlagCalc(u32 r0, u32 r1, u32 operation) { - return _FlagCalc(r0, r1, r2); + return _FlagCalc(r0, r1, operation); } -void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 param_4) +void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation) { u32 uVar1; u32 uVar3; @@ -408,12 +408,12 @@ void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 param_4) s32 param_2_s32 = param_2; - uVar1 = sub_8001658(param_1,param_2_s32 ); - uVar3 = _FlagCalc(uVar1,param_3,param_4); + uVar1 = sub_8001658(param_1,param_2_s32); + uVar3 = _FlagCalc(uVar1,param_3,operation); sub_80018D8(param_1,param_2_s32,uVar3); } -void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 param_4) +void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation) { u32 uVar1; u32 uVar2; @@ -425,24 +425,24 @@ void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 param_4) uVar1 = sub_8001658(param_1,param_2_s32); uVar2 = sub_8001658(param_1,param_3_s32); - uVar3 = _FlagCalc(uVar1,uVar2,param_4); + uVar3 = _FlagCalc(uVar1,uVar2,operation); sub_80018D8(param_1,param_2_s32,uVar3); } -u8 FlagJudge(u32 r0, u32 r1, u32 r2) +u8 FlagJudge(u32 r0, u32 r1, u32 operation) { - return _FlagJudge(r0, r1, r2); + return _FlagJudge(r0, r1, operation); } -u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 param_4) +u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation) { u32 uVar1; uVar1 = sub_8001658(param_1, param_2); - return _FlagJudge(uVar1,param_3,param_4); + return _FlagJudge(uVar1,param_3,operation); } -u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 param_4) +u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation) { u32 uVar1; u32 uVar2; @@ -452,7 +452,7 @@ u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 param_4) uVar1 = sub_8001658(param_1,param_2_s32); uVar2 = sub_8001658(param_1,param_3_s32); - return _FlagJudge(uVar1,uVar2,param_4); + return _FlagJudge(uVar1,uVar2,operation); } s32 sub_8002354(u32 param_1) @@ -500,7 +500,7 @@ u8 *sub_80023C4(u32 param_1) } } -u8 sub_80023E4(u32 param_1) +bool8 sub_80023E4(u32 param_1) { switch(param_1) { case 0: @@ -564,6 +564,6 @@ u8 sub_80023E4(u32 param_1) case 0x1d: return HasCompletedAllMazes(); default: - return 0; + return FALSE; } } diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c index 7da7a59d9..4b35835bc 100644 --- a/src/friend_area_action_menu.c +++ b/src/friend_area_action_menu.c @@ -181,7 +181,7 @@ void sub_8027274(void) sub_8023B7C(1); break; case 3: - sub_8027D40(3,&gUnknown_203B2BC->unk14); + sub_8027D40(3,&gUnknown_203B2BC->item2); sub_8023DA4(); sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->unk70,2); break; diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index 38650d075..94902041a 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -28,7 +28,7 @@ extern u32 sub_801A6E8(u32); extern s32 sub_80144A4(s32 *); extern void sub_8027EB8(); extern void sub_808D31C(struct PokemonStruct *); -extern u8 sub_80023E4(u32); +extern bool8 sub_80023E4(u32); extern struct PokemonStruct *sub_808D3F8(void); extern struct PokemonStruct *sub_808D3BC(void); extern u32 sub_801F890(void); @@ -58,7 +58,7 @@ extern void sub_8023C60(void); void sub_80277FC(void) { - struct PokemonStruct *iVar4; + struct PokemonStruct *pokeStruct; switch(sub_8023A94(1)) { case 0: @@ -66,18 +66,18 @@ void sub_80277FC(void) break; case 3: gUnknown_203B2BC->targetPoke = sub_8023B44(); - iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; - gUnknown_203B2BC->unk18 = iVar4; - gUnknown_203B2BC->unk1C = iVar4->isLeader; - PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14); + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + gUnknown_203B2BC->unk18 = pokeStruct; + gUnknown_203B2BC->unk1C = pokeStruct->isLeader; + PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); SetFriendAreaActionMenuState(3); break; case 4: gUnknown_203B2BC->targetPoke = sub_8023B44(); - iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; - gUnknown_203B2BC->unk18 = iVar4; - gUnknown_203B2BC->unk1C = iVar4->isLeader; - PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14); + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + gUnknown_203B2BC->unk18 = pokeStruct; + gUnknown_203B2BC->unk1C = pokeStruct->isLeader; + PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); SetFriendAreaActionMenuState(4); break; case 2: @@ -90,27 +90,27 @@ void sub_80277FC(void) void sub_80278B4(void) { struct PokemonStruct *playerStruct; - struct PokemonStruct *puVar3; - struct PokemonStruct *iVar4; + struct PokemonStruct *pokeStruct1; + struct PokemonStruct *pokeStruct2; int local_c; local_c = 0; sub_8023A94(0); - if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == '\0') && (sub_8013114(&gUnknown_203B2BC->unk7C,&local_c), local_c != 1)) { + if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&local_c), local_c != 1)) { gUnknown_203B2BC->unk70 = local_c; } switch(local_c) { case 6: - if (sub_808D750(gUnknown_203B2BC->targetPoke) != '\0') { + if (sub_808D750(gUnknown_203B2BC->targetPoke)) { #ifdef NONMATCHING - puVar3 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + pokeStruct1 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; #else register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]); struct PokemonStruct* p = gRecruitedPokemonRef->pokemon; size_t addr = offset + (size_t)p; - puVar3 = (struct PokemonStruct*)addr; + pokeStruct1 = (struct PokemonStruct*)addr; #endif - puVar3->unk0 |= 2; + pokeStruct1->unk0 |= 2; nullsub_104(); } sub_808ED00(); @@ -123,11 +123,11 @@ void sub_80278B4(void) SetFriendAreaActionMenuState(2); break; case 8: - iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; playerStruct = GetPlayerPokemonStruct(); - if (!iVar4->isLeader) { + if (!pokeStruct2->isLeader) { playerStruct->isLeader = FALSE; - iVar4->isLeader = TRUE; + pokeStruct2->isLeader = TRUE; nullsub_104(); } sub_808ED00(); @@ -144,13 +144,13 @@ void sub_80278B4(void) break; case 0xb: PlaySound(0x14d); - if (gUnknown_203B2BC->unk14.itemIndex != ITEM_ID_NOTHING) { - AddHeldItemToInventory(&gUnknown_203B2BC->unk14); + if (gUnknown_203B2BC->item2.itemIndex != ITEM_ID_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2BC->item2); } FillInventoryGaps(); - gUnknown_203B2BC->unk14.itemIndex = 0; - gUnknown_203B2BC->unk14.numItems = 0; - GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14); + gUnknown_203B2BC->item2.itemIndex = ITEM_ID_NOTHING; + gUnknown_203B2BC->item2.numItems = 0; + GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); nullsub_104(); SetFriendAreaActionMenuState(2); break; @@ -197,7 +197,7 @@ void sub_8027A5C(void) } static inline bool8 sub_8027A78_sub(void) { - if (gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x45) + if (gUnknown_203B2BC->unk18->dungeonLocation.dungeonIndex == 0x44 || gUnknown_203B2BC->unk18->dungeonLocation.dungeonIndex == 0x45) return TRUE; else return FALSE; @@ -288,8 +288,8 @@ void sub_8027BD8(void) PlaySound(0x14d); ShiftItemsDownFrom(gUnknown_203B2BC->itemIndex); FillInventoryGaps(); - if (gUnknown_203B2BC->unk14.itemIndex != 0) { - AddHeldItemToInventory(&gUnknown_203B2BC->unk14); + if (gUnknown_203B2BC->item2.itemIndex != ITEM_ID_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2BC->item2); } GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive); sub_801A928(); @@ -327,7 +327,7 @@ void sub_8027CA0(void) case 3: case 4: gUnknown_203B2BC->unk20 = sub_801F194(); - gUnknown_203B2BC->unk24 = gUnknown_203B2BC->unk28[gUnknown_203B2BC->unk20].moveID; + gUnknown_203B2BC->moveID = gUnknown_203B2BC->unk28[gUnknown_203B2BC->unk20].moveID; SetFriendAreaActionMenuState(0x10); break; case 2: @@ -382,79 +382,79 @@ void sub_8027D40(u32 r0, struct HeldItem *heldItem) sub_80073E0(r0); } -u32 sub_8027D9C(struct PokemonStruct *r0) +bool8 sub_8027D9C(struct PokemonStruct *pokeStruct) { u32 var1; - if(r0->isLeader == 0) + if(!pokeStruct->isLeader) { var1 = 0; - if(r0->unk4.dungeonIndex == 0x41) + if(pokeStruct->dungeonLocation.dungeonIndex == 0x41) var1 = 1; - if(var1 != 0) - { - if(sub_80023E4(8) == 0) - return 0; - } + if(var1 != 0) + { + if(!sub_80023E4(8)) + return FALSE; + } } else - return 0; - return 1; + return FALSE; + return TRUE; } -u32 sub_8027DCC(struct PokemonStruct *r0) +bool8 sub_8027DCC(struct PokemonStruct *pokeStruct) { u32 var1; - if(sub_808D3BC() != r0) - if(sub_808D3F8() != r0) - if(r0->isLeader == 0) + if(sub_808D3BC() != pokeStruct) + if(sub_808D3F8() != pokeStruct) + if(!pokeStruct->isLeader) { var1 = 0; - if(r0->unk4.dungeonIndex == 0x41) + if(pokeStruct->dungeonLocation.dungeonIndex == 0x41) var1 = 1; if(var1 != 0) { - if(sub_80023E4(8) != 0) + if(sub_80023E4(8)) goto check; } else { check: - if(sub_8027E18(r0) != 3) - return 1; + if(sub_8027E18(pokeStruct) != 3) + return TRUE; } } - return 0; + return FALSE; } -u32 sub_8027E18(struct PokemonStruct *r0) +u32 sub_8027E18(struct PokemonStruct *pokeStruct) { - if(r0->heldItem.itemIndex == 0) + if(pokeStruct->heldItem.itemIndex == ITEM_ID_NOTHING) return 0; else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE) return 1; - else if(sub_8027E4C(r0)) + else if(sub_8027E4C(pokeStruct)) return 2; else return 3; } -u8 sub_8027E4C(struct PokemonStruct *r0) +bool8 sub_8027E4C(struct PokemonStruct *pokeStruct) { - if(!IsNotMoneyOrUsedTMItem(r0->heldItem.itemIndex)) - return 0; + if(!IsNotMoneyOrUsedTMItem(pokeStruct->heldItem.itemIndex)) + return FALSE; else { - if(IsThrowableItem(r0->heldItem.itemIndex)) + if(IsThrowableItem(pokeStruct->heldItem.itemIndex)) { - if(gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] + r0->heldItem.numItems > 0x3e7) - return 0; + if(gTeamInventory_203B460->teamStorage[pokeStruct->heldItem.itemIndex] + pokeStruct->heldItem.numItems > 0x3e7) + return FALSE; } - else if(gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] > 0x3e6) + else if(gTeamInventory_203B460->teamStorage[pokeStruct->heldItem.itemIndex] > 0x3e6) { - return 0; + return FALSE; } } - return 1; + return TRUE; } void sub_8027EB8(void) @@ -463,22 +463,22 @@ void sub_8027EB8(void) { case 1: PlaySound(0x14d); - AddHeldItemToInventory(&gUnknown_203B2BC->unk14); + AddHeldItemToInventory(&gUnknown_203B2BC->item2); FillInventoryGaps(); - gUnknown_203B2BC->unk14.itemIndex = 0; - gUnknown_203B2BC->unk14.numItems = 0; - GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->unk14); + gUnknown_203B2BC->item2.itemIndex = ITEM_ID_NOTHING; + gUnknown_203B2BC->item2.numItems = 0; + GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2); SetFriendAreaActionMenuState(6); break; case 2: PlaySound(0x14d); - if(IsThrowableItem(gUnknown_203B2BC->unk14.itemIndex)) - gTeamInventory_203B460->teamStorage[gUnknown_203B2BC->unk14.itemIndex] += gUnknown_203B2BC->unk14.numItems; + if(IsThrowableItem(gUnknown_203B2BC->item2.itemIndex)) + gTeamInventory_203B460->teamStorage[gUnknown_203B2BC->item2.itemIndex] += gUnknown_203B2BC->item2.numItems; else - gTeamInventory_203B460->teamStorage[gUnknown_203B2BC->unk14.itemIndex] += 1; - gUnknown_203B2BC->unk14.itemIndex = 0; - gUnknown_203B2BC->unk14.numItems = 0; - GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->unk14); + gTeamInventory_203B460->teamStorage[gUnknown_203B2BC->item2.itemIndex] += 1; + gUnknown_203B2BC->item2.itemIndex = ITEM_ID_NOTHING; + gUnknown_203B2BC->item2.numItems = 0; + GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2); SetFriendAreaActionMenuState(7); break; case 0: diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index ba5ff198a..f56e393b0 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -12,14 +12,14 @@ struct unkStruct_203B2B8 u32 state; u32 unk4; u8 unk8; - s16 pokeSpecies; + /* 0xA */ s16 pokeSpecies; u32 unkC; - struct HeldItem unk10; - struct HeldItem unk14; + /* 0x10 */ struct HeldItem item1; + /* 0x14 */ struct HeldItem item2; struct PokemonStruct *unk18; u8 fill1C[0x4]; u32 unk20; - u16 unk24; + /* 0x24 */ u16 moveID; struct PokemonMove unk28[4]; u8 fill48[0x70 - 0x48]; u32 unk70; @@ -41,7 +41,7 @@ extern u32 sub_8026F04(struct PokemonStruct *); extern void sub_8026074(u32); extern void PlaySound(u32); bool8 sub_8026F38(struct PokemonStruct *r0); -extern u8 sub_80023E4(u8); +extern bool8 sub_80023E4(u8); extern struct PokemonStruct *sub_808D3F8(void); extern struct PokemonStruct *sub_808D3BC(void); extern void sub_801F214(void); @@ -145,13 +145,13 @@ void sub_80268CC(void) break; case 0xc: PlaySound(0x14d); - if (gUnknown_203B2B8->unk14.itemIndex != ITEM_ID_NOTHING) { - AddHeldItemToInventory(&gUnknown_203B2B8->unk14); + if (gUnknown_203B2B8->item2.itemIndex != ITEM_ID_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2B8->item2); } FillInventoryGaps(); - gUnknown_203B2B8->unk14.itemIndex = ITEM_ID_NOTHING; - gUnknown_203B2B8->unk14.numItems = 0; - GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->unk14); + gUnknown_203B2B8->item2.itemIndex = ITEM_ID_NOTHING; + gUnknown_203B2B8->item2.numItems = 0; + GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->item2); nullsub_104(); sub_8026074(0x11); break; @@ -200,7 +200,7 @@ void sub_8026A94(void) static inline bool8 sub_8026AB0_sub(void) { - if (gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x45) + if (gUnknown_203B2B8->unk18->dungeonLocation.dungeonIndex == 0x44 || gUnknown_203B2B8->unk18->dungeonLocation.dungeonIndex == 0x45) return TRUE; else return FALSE; @@ -268,14 +268,14 @@ void sub_8026B64(void) { case 3: gUnknown_203B2B8->unkC = sub_801A8AC(); - gUnknown_203B2B8->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex; - gUnknown_203B2B8->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems; + gUnknown_203B2B8->item1.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex; + gUnknown_203B2B8->item1.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems; sub_8026074(0x14); break; case 4: gUnknown_203B2B8->unkC = sub_801A8AC(); - gUnknown_203B2B8->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex; - gUnknown_203B2B8->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems; + gUnknown_203B2B8->item1.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex; + gUnknown_203B2B8->item1.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems; sub_8099690(0); sub_8026074(0x15); break; @@ -308,17 +308,17 @@ void sub_8026C14(void) PlaySound(0x14d); ShiftItemsDownFrom(gUnknown_203B2B8->unkC); FillInventoryGaps(); - if (gUnknown_203B2B8->unk14.itemIndex != ITEM_ID_NOTHING) { - AddHeldItemToInventory(&gUnknown_203B2B8->unk14); + if (gUnknown_203B2B8->item2.itemIndex != ITEM_ID_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2B8->item2); nextState = 0x10; } - HeldItemToSlot(&slot,&gUnknown_203B2B8->unk10); + HeldItemToSlot(&slot,&gUnknown_203B2B8->item1); temp.unk0 = 0; temp.unk4 = 0; temp.unk8 = 1; slot.itemFlags = ITEM_FLAG_EXISTS; sub_8090E14(gUnknown_202DEA8,&slot,&temp); - GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->unk10); + GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->item1); sub_801A928(); nullsub_104(); sub_8026074(nextState); @@ -359,7 +359,7 @@ void sub_8026D0C(void) case 3: case 4: gUnknown_203B2B8->unk20 = sub_801F194(); - gUnknown_203B2B8->unk24 = gUnknown_203B2B8->unk28[gUnknown_203B2B8->unk20].moveID; + gUnknown_203B2B8->moveID = gUnknown_203B2B8->unk28[gUnknown_203B2B8->unk20].moveID; sub_8026074(0x18); break; case 2: @@ -431,9 +431,9 @@ u32 sub_8026E88(struct PokemonStruct *r0) u8 iVar3; if(r0->isLeader == 0) { - iVar3 = (r0->unk4.dungeonIndex == 0x41); + iVar3 = (r0->dungeonLocation.dungeonIndex == 0x41); if(iVar3 != 0) - if(sub_80023E4(0x8) == 0) + if(!sub_80023E4(0x8)) return 0; } else @@ -448,10 +448,10 @@ u32 sub_8026EB8(struct PokemonStruct *r0) if(sub_808D3F8() != r0) if(!r0->isLeader) { - iVar3 = (r0->unk4.dungeonIndex == 0x41); + iVar3 = (r0->dungeonLocation.dungeonIndex == 0x41); if(iVar3 != 0) { - if(sub_80023E4(0x8) != 0) + if(sub_80023E4(0x8)) goto check; } else @@ -501,27 +501,27 @@ void sub_8026FA4(void) { case 1: PlaySound(0x14d); - AddHeldItemToInventory(&gUnknown_203B2B8->unk14); + AddHeldItemToInventory(&gUnknown_203B2B8->item2); FillInventoryGaps(); - gUnknown_203B2B8->unk14.itemIndex = 0; - gUnknown_203B2B8->unk14.numItems = 0; - GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->unk14); + gUnknown_203B2B8->item2.itemIndex = 0; + gUnknown_203B2B8->item2.numItems = 0; + GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->item2); sub_8026074(0xA); break; case 2: PlaySound(0x14d); - if(IsThrowableItem(gUnknown_203B2B8->unk14.itemIndex)) + if(IsThrowableItem(gUnknown_203B2B8->item2.itemIndex)) { - gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->unk14.itemIndex] += gUnknown_203B2B8->unk14.numItems; + gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->item2.itemIndex] += gUnknown_203B2B8->item2.numItems; } else { - gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->unk14.itemIndex] += 1; + gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->item2.itemIndex] += 1; } - gUnknown_203B2B8->unk14.itemIndex = 0; - gUnknown_203B2B8->unk14.numItems = 0; - GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->unk14); + gUnknown_203B2B8->item2.itemIndex = 0; + gUnknown_203B2B8->item2.numItems = 0; + GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->item2); sub_8026074(0xB); break; case 0: diff --git a/src/code_8098BDC.c b/src/ground_main.c similarity index 91% rename from src/code_8098BDC.c rename to src/ground_main.c index 3918ab349..3e826ee52 100644 --- a/src/code_8098BDC.c +++ b/src/ground_main.c @@ -71,9 +71,9 @@ extern void sub_809674C(); extern void sub_80961B4(); extern void ClearAllItems_8091FB4(); extern const char *sub_80A2B18(s16); -extern u8 sub_8001CC4(u8, u8, u8); +extern bool8 sub_8001CC4(u8, u8, u8); extern void ChooseKecleonShopInventory(u32); -extern u8 sub_80023E4(u32); +extern bool8 sub_80023E4(u32); extern void FadeOutAllMusic(u16); extern u8 sub_809C730(); extern s16 sub_80A2750(s16); @@ -161,15 +161,15 @@ void sub_8098C58(void) void sub_8098CC8(void) { u32 temp; - if(sub_8001CC4(0x3, 0xB, 0) != 0) + if(sub_8001CC4(0x3, 0xB, 0)) { temp = 0; } - else if(sub_8001CC4(0x3, 0xF, 0) != 0) + else if(sub_8001CC4(0x3, 0xF, 0)) { temp = 1; } - else if(sub_8001CC4(0x3, 0x12, 0) != 0) + else if(sub_8001CC4(0x3, 0x12, 0)) { temp = 2; } @@ -183,7 +183,7 @@ void sub_8098CC8(void) ClearAllItems_8091FB4(); } -bool8 sub_8098D1C(s16 r0, u32 r1, u32 r2) +bool8 GroundMainGroundRequest(s16 r0, u32 r1, u32 r2) { s32 temp; temp = r0; // force a asr shift @@ -201,41 +201,41 @@ bool8 sub_8098D1C(s16 r0, u32 r1, u32 r2) return FALSE; } -bool8 sub_8098D80(u32 r0) +bool8 sub_8098D80(u32 speed) { if(gUnknown_20398A8 == 0) { gUnknown_20398A8 = 3; gUnknown_20398AC = 1; - gUnknown_20398B0 = r0; + gUnknown_20398B0 = speed; sub_809C730(); - if(sub_80023E4(0xD) == 0) + if(!sub_80023E4(0xD)) { - FadeOutAllMusic(r0); + FadeOutAllMusic(speed); } return TRUE; } return FALSE; } -bool8 sub_8098DCC(u32 r0) +bool8 sub_8098DCC(u32 speed) { if(gUnknown_20398A8 == 0) { gUnknown_20398A8 = 4; gUnknown_20398AC = 1; - gUnknown_20398B0 = r0; + gUnknown_20398B0 = speed; sub_809C730(); - if(sub_80023E4(0xD) == 0) + if(!sub_80023E4(0xD)) { - FadeOutAllMusic(r0); + FadeOutAllMusic(speed); } return TRUE; } return FALSE; } -bool8 sub_8098E18(s16 r0, u32 r1) +bool8 GroundMainRescueRequest(s16 r0, u32 r1) { s32 r2 = r0, r5 = r2; if(gUnknown_20398A8 == 0) @@ -267,7 +267,7 @@ bool8 sub_8098E18(s16 r0, u32 r1) } // Unused -u32 sub_8098EB0(u32 r0) +u32 GroundMainUserRescueRequest(u32 r0) { if(gUnknown_20398A8 == 0) { @@ -284,7 +284,7 @@ u32 sub_8098EB0(u32 r0) return 0; } -u32 sub_8098F00(u32 r0) +u32 GroundMainGameEndRequest(u32 r0) { if(gUnknown_20398A8 == 0) { @@ -298,7 +298,7 @@ u32 sub_8098F00(u32 r0) return 0; } -u32 sub_8098F44(u32 r0) +u32 GroundMainGameCancelRequest(u32 r0) { if(gUnknown_20398A8 == 0) { @@ -361,7 +361,7 @@ s32 sub_8098FCC(u32 unused) case 0x11: case 0x14: case 0x17: - if (sub_80023E4(5) == 0) return 0xC; + if (!sub_80023E4(5)) return 0xC; break; default: break; diff --git a/src/load_screen.c b/src/load_screen.c index 775e97463..c4895ba6d 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -51,7 +51,7 @@ extern void sub_8095240(u32); extern void sub_80920D8(u8 *); extern struct PokemonStruct *GetPlayerPokemonStruct(void); -extern u8 sub_80023E4(u32); +extern bool8 sub_80023E4(u32); extern u8 *sub_8098FB4(); extern u8 *GetDungeonLocationInfo(void); extern u32 GetNumAdventures(void); @@ -295,7 +295,7 @@ void DrawLoadScreenText(void) xxx_call_draw_string(8,60,gHelperHeadingText,0,0); // Helper: // Draw Team Name - if (sub_80023E4(0) != '\0') { + if (sub_80023E4(0)) { sub_80920D8(teamNameBuffer); r2 = teamNameBuffer; } @@ -406,7 +406,7 @@ void sub_80397B4(void) // Draw the 12 legendary icons for(iVar3 = 0; iVar3 < 12; iVar3++) { - if (sub_80023E4(gUnknown_203B3B8[iVar3]) != 0) { + if (sub_80023E4(gUnknown_203B3B8[iVar3])) { sub_8007E20(0,iVar4,other_arg,0x10,0x10,*(int *)(clmkFile->data) + iVar3 * 0x80, gUnknown_203B388[iVar3]); iVar4 += 16; diff --git a/src/makuhita_dojo_1.c b/src/makuhita_dojo_1.c index 5cc3008ca..62c2e95bd 100644 --- a/src/makuhita_dojo_1.c +++ b/src/makuhita_dojo_1.c @@ -1,5 +1,6 @@ #include "global.h" #include "constants/colors.h" +#include "constants/dungeon.h" #include "code_800D090.h" #include "dungeon.h" #include "text.h" @@ -7,7 +8,7 @@ struct unkStruct_203B31C { // Size: 0xD0 - s16 unk0[0x17]; + s16 unk0[NUM_DUNGEON_MAZE]; u32 unk30; u8 fill34[0x48 - 0x34]; s16 unk48; @@ -85,7 +86,7 @@ s32 sub_8030668(void) counter = 0; - for(index = 0; index < 0x17; index++) + for(index = 0; index < NUM_DUNGEON_MAZE; index++) { if (sub_8097504(index)) { gUnknown_203B31C->unk0[counter] = sub_80A26CC(index); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 554be9bdf..fb5155a33 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -755,7 +755,7 @@ void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokem { SaveIntegerBits(a1, &pokemon->unkHasNextStage, 7); SaveIntegerBits(a1, &pokemon->speciesNum, 9); - SaveDungeonLocation(a1, &pokemon->unk4); + SaveDungeonLocation(a1, &pokemon->dungeonLocation); xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[0]); xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[1]); SaveIntegerBits(a1, &pokemon->IQ, 10); @@ -782,7 +782,7 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po pokemon->unk0 |= 1; } RestoreIntegerBits(a1, &pokemon->speciesNum, 9); - RestoreDungeonLocation(a1, &pokemon->unk4); + RestoreDungeonLocation(a1, &pokemon->dungeonLocation); xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[0]); xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[1]); RestoreIntegerBits(a1, &pokemon->IQ, 10); @@ -817,7 +817,7 @@ s32 SavePokemonStruct2(u8* a1, s32 size) SaveIntegerBits(&backup, pokemon2->isLeader ? &data_u8_neg1 : &data_u8_zero, 1); SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); - SaveDungeonLocation(&backup, &pokemon2->unk4); + SaveDungeonLocation(&backup, &pokemon2->dungeonLocation); SaveIntegerBits(&backup, &pokemon2->IQ, 10); SaveIntegerBits(&backup, &pokemon2->unkA, 16); SaveIntegerBits(&backup, &pokemon2->unkC, 16); @@ -865,7 +865,7 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) } RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); - RestoreDungeonLocation(&backup, &pokemon2->unk4); + RestoreDungeonLocation(&backup, &pokemon2->dungeonLocation); RestoreIntegerBits(&backup, &pokemon2->IQ, 10); RestoreIntegerBits(&backup, &pokemon2->unkA, 16); RestoreIntegerBits(&backup, &pokemon2->unkC, 16); diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index d7dbe8f3b..155067f2c 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -528,7 +528,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po a1->IQ = pokemon->IQ; a1->IQSkills = pokemon->IQSkills; sub_808E6F4(&a1->unk54); - a1->unk4 = pokemon->unk4; + a1->dungeonLocation = pokemon->dungeonLocation; a1->isLeader = pokemon->isLeader; a1->unkA = a3; a1->speciesNum = pokemon->speciesNum; @@ -581,7 +581,7 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct pokemon->unkHasNextStage = a2->unkHasNextStage; pokemon->IQ = a2->IQ; pokemon->IQSkills = a2->IQSkills; - pokemon->unk4 = a2->unk4; + pokemon->dungeonLocation = a2->dungeonLocation; pokemon->isLeader = a2->isLeader; pokemon->speciesNum = a2->speciesNum; pokemon->unk24 = a2->unk50; diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c index e14bc97e2..a2493fd8b 100644 --- a/src/rescue_team_info.c +++ b/src/rescue_team_info.c @@ -5,7 +5,7 @@ extern struct RescueTeamData *gRescueTeamInfoRef; EWRAM_DATA struct RescueTeamData gRescueTeamInfo; -extern u8 sub_80023E4(u32); +extern bool8 sub_80023E4(u32); extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); extern void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); @@ -27,7 +27,7 @@ void InitializeRescueTeamInfo(void) { BoundedCopyStringtoBuffer(gRescueTeamInfoRef->teamName, gTeamNamePlaceholder, TEAM_NAME_LENGTH); gRescueTeamInfoRef->teamRankPts = 0; - gRescueTeamInfoRef->unk10 = 0; + gRescueTeamInfoRef->isTeamRenamed = FALSE; } void sub_80920B8(u8 *buffer) @@ -104,9 +104,9 @@ const u8 *GetTeamRankString(u8 index) } // Unused -u8 sub_80921B8(void) +bool8 GetIsTeamRenamed(void) { - return gRescueTeamInfoRef->unk10; + return gRescueTeamInfoRef->isTeamRenamed; } u32 SaveRescueTeamInfo(u8 *param_1, u32 size) @@ -123,9 +123,9 @@ u32 SaveRescueTeamInfo(u8 *param_1, u32 size) xxx_init_struct_8094924_save_809486C(&auStack36, param_1, size); SaveIntegerBits(&auStack36, gRescueTeamInfoRef->teamName, 0x58); SaveIntegerBits(&auStack36, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20); - gRescueTeamInfoRef->unk10 = sub_80023E4(0); + gRescueTeamInfoRef->isTeamRenamed = sub_80023E4(0); - if (gRescueTeamInfoRef->unk10 != 0) + if (gRescueTeamInfoRef->isTeamRenamed) { puVar2 = &neg1; } @@ -147,7 +147,7 @@ u32 ReadRescueTeamInfo(u8 *param_1, u32 size) RestoreIntegerBits(&auStack32, gRescueTeamInfoRef->teamName, 0x58); RestoreIntegerBits(&auStack32, &gRescueTeamInfoRef->teamRankPts, 0x20); RestoreIntegerBits(&auStack32, byteArray, 1); - gRescueTeamInfoRef->unk10 = byteArray[0] & 1; + gRescueTeamInfoRef->isTeamRenamed = byteArray[0] & 1; nullsub_102(&auStack32); return auStack32.unk8; } diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 7cf877f2c..153e91f4a 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -779,9 +779,9 @@ void sub_8028348(void) } -void sub_8028B04(u32 r0) +void sub_8028B04(u32 state) { - gUnknown_203B2C0->state = r0; + gUnknown_203B2C0->state = state; nullsub_130(); sub_8028348(); } diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index b40cd6dc4..ad16732c5 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -144,7 +144,7 @@ extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void sub_803C37C(struct DungeonLocation *, u32, u8 *); extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); -extern u8 sub_80023E4(u32); +extern bool8 sub_80023E4(u32); extern void nullsub_131(void); extern void sub_802ABF8(void); @@ -365,7 +365,7 @@ void sub_802B3E0(void) switch(gUnknown_203B2C8->currState) { case 0: - if (sub_80023E4(0) != '\0') { + if (sub_80023E4(0)) { // Copy Team Name to buffer sub_80920D8(teamNameBuffer); } From 4796b0bd455378d67f7b2b042c01a064944c4492 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 2 Dec 2022 11:56:59 -0800 Subject: [PATCH 12/21] some ground_script work --- asm/code_809D148.s | 70 -------------------------------- src/ground_map_1.c | 12 +++--- src/ground_script.c | 98 +++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 96 insertions(+), 84 deletions(-) diff --git a/asm/code_809D148.s b/asm/code_809D148.s index aa255fb1a..7e51a98d8 100644 --- a/asm/code_809D148.s +++ b/asm/code_809D148.s @@ -677,74 +677,4 @@ _0809D708: bx r1 thumb_func_end sub_809D6E4 - thumb_func_start sub_809D710 -sub_809D710: - push {r4,lr} - adds r4, r0, 0 - adds r3, r1, 0 - lsls r2, 16 - asrs r2, 16 - ldr r1, _0809D73C - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, 0x8 - adds r0, r1 - ldr r0, [r0] - str r0, [r3] - movs r0, 0x2 - strh r0, [r3, 0x4] - cmp r4, 0 - beq _0809D740 - ldrh r0, [r4, 0x10] - strh r0, [r3, 0x6] - ldrb r0, [r4, 0x12] - b _0809D746 - .align 2, 0 -_0809D73C: .4byte gFunctionScriptTable -_0809D740: - ldr r0, _0809D750 - strh r0, [r3, 0x6] - movs r0, 0xFF -_0809D746: - strb r0, [r3, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809D750: .4byte 0x0000ffff - thumb_func_end sub_809D710 - - thumb_func_start sub_809D754 -sub_809D754: - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x24 - bl sub_809D568 - adds r4, 0x84 - adds r0, r4, 0 - bl sub_809D568 - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_809D754 - - thumb_func_start sub_809D770 -sub_809D770: - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x24 - bl sub_809D568 - adds r0, r4, 0 - adds r0, 0x84 - bl sub_809D568 - movs r0, 0x4 - strh r0, [r4, 0x26] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_809D770 - .align 2,0 diff --git a/src/ground_map_1.c b/src/ground_map_1.c index 6e1f47614..bb83afb7a 100644 --- a/src/ground_map_1.c +++ b/src/ground_map_1.c @@ -26,7 +26,7 @@ extern void GroundMap_GetStationScript(struct GroundScript_ExecutePP_3 *, s16, u bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused); extern u8 sub_809D678(void *); -extern void sub_809D710(u32,struct GroundScript_ExecutePP_3 *, s32); +extern void sub_809D710(u8 *, struct GroundScript_ExecutePP_3 *, s32); extern u8 sub_809D968(void *, s32); void sub_80A4BE8(struct GroundScript_ExecutePP_3 *script, s16 r1) @@ -34,17 +34,17 @@ void sub_80A4BE8(struct GroundScript_ExecutePP_3 *script, s16 r1) GroundMap_GetStationScript(script, r1, 0, 0); } -void GroundMap_ExecuteEvent(s16 param_1, u32 param_2) +void GroundMap_ExecuteEvent(s16 scriptIndex, u32 param_2) { struct GroundScript_ExecutePP_3 script; - s32 iVar1; + s32 index_s32; u8 iVar2; - iVar1 = param_1; + index_s32 = scriptIndex; iVar2 = param_2; - Log(0,gUnknown_8117594,iVar1,iVar2); // "GroundMap ExecuteEvent %3d %d - sub_809D710(0,&script,iVar1); + Log(0,gUnknown_8117594,index_s32,iVar2); // "GroundMap ExecuteEvent %3d %d + sub_809D710(NULL, &script, index_s32); if (iVar2 != 0) { script.scriptType = 5; } diff --git a/src/ground_script.c b/src/ground_script.c index ea06a1e27..3ff992119 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -22,14 +22,96 @@ extern void sub_809D568(void *); extern u8 sub_80AC378(void); extern u8 sub_80AD290(void); extern u8 sub_80A8B74(void); -extern void sub_809D6E4(struct GroundScript_ExecutePP_1 *, struct GroundScript_ExecutePP_3 *, s32); +extern void sub_809D6E4(struct GroundScript_ExecutePP_1 *, struct GroundScript_ExecutePP_3 *, s32 index); extern u8 sub_809A750(void); -extern u32 sub_80A2460(struct GroundScript_ExecutePP_1 *param_1, u32); +extern u8 *sub_80A2460(struct GroundScript_ExecutePP_1 *param_1, u32); void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); +struct FunctionScript +{ + u32 unk0; + u8 *funcName; + u8 *script; +}; + +extern struct FunctionScript gFunctionScriptTable[]; + + +// NOTE: shift of index and load of gFunctionScriptTable is flipped +#ifdef NONMATCHING +void sub_809D710(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_ExecutePP_3 *script, s16 index) +{ + script->scriptPointer = gFunctionScriptTable[index].script; + script->scriptType = 2; + if (param_1 != NULL) { + script->unk6 = param_1->unk10; + script->unk8 = param_1->unk12; + } + else { + script->unk6 = -1; + script->unk8 = -1; + } +} +#else +NAKED void sub_809D710(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_ExecutePP_3 *script, s16 index) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tadds r4, r0, 0\n" + "\tadds r3, r1, 0\n" + "\tlsls r2, 16\n" + "\tasrs r2, 16\n" + "\tldr r1, _0809D73C\n" + "\tlsls r0, r2, 1\n" + "\tadds r0, r2\n" + "\tlsls r0, 2\n" + "\tadds r1, 0x8\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tstr r0, [r3]\n" + "\tmovs r0, 0x2\n" + "\tstrh r0, [r3, 0x4]\n" + "\tcmp r4, 0\n" + "\tbeq _0809D740\n" + "\tldrh r0, [r4, 0x10]\n" + "\tstrh r0, [r3, 0x6]\n" + "\tldrb r0, [r4, 0x12]\n" + "\tb _0809D746\n" + "\t.align 2, 0\n" +"_0809D73C: .4byte gFunctionScriptTable\n" +"_0809D740:\n" + "\tldr r0, _0809D750\n" + "\tstrh r0, [r3, 0x6]\n" + "\tmovs r0, 0xFF\n" +"_0809D746:\n" + "\tstrb r0, [r3, 0x8]\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0809D750: .4byte 0x0000ffff"); +} +#endif + +bool8 sub_809D754(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused) +{ + sub_809D568(¶m_1->unk24); + sub_809D568(¶m_1->unk84); + return TRUE; +} + +bool8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused) +{ + + sub_809D568(¶m_1->unk24); + sub_809D568(¶m_1->unk84); + param_1->unk24.unk2 = 4; + return TRUE; +} + bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused) { - if ((param_3 == NULL) || (param_3->unk0 == 0)) { + if ((param_3 == NULL) || (param_3->scriptPointer == NULL)) { return FALSE; } switch(param_3->scriptType) { @@ -77,8 +159,8 @@ _0809D84A: param_1->unk24.unk2 = 3; param_1->unk24.unkC = param_3->unk6; param_1->unk24.unkE = param_3->unk8; - param_1->unk24.unk4 = param_3->unk0; - param_1->unk24.unk8 = param_3->unk0; + param_1->unk24.scriptPointer1 = param_3->scriptPointer; + param_1->unk24.scriptPointer2 = param_3->scriptPointer; param_1->unk24.unk10 = 0; param_1->unk24.unk14 = 0; @@ -88,11 +170,11 @@ _0809D84A: return TRUE; } -bool8 sub_809D8C0(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, s16 param_3, struct DebugLocation *debug) +bool8 sub_809D8C0(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, s16 index, struct DebugLocation *debug) { struct GroundScript_ExecutePP_3 auStack28; - sub_809D6E4(param_1,&auStack28,param_3); + sub_809D6E4(param_1,&auStack28,index); return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug); } @@ -103,7 +185,7 @@ u8 sub_809D8EC(struct GroundScript_ExecutePP_1 *param_1, s16 param_2) param_2_s32 = param_2; if ((param_2 == 0) && (sub_809A750() == 0)) { - param_1->unk24.unk4 = sub_80A2460(param_1,0); + param_1->unk24.scriptPointer1 = sub_80A2460(param_1, 0); return 0; } else { From bd96ff0fcadb6710115a7eeec0bfbfe4007b567b Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 3 Dec 2022 16:20:36 -0800 Subject: [PATCH 13/21] some script work --- data/cutscenes.s | 43 ++++++++++++++---------- data/cutscenes_1.s | 61 +++++++++++++++++------------------ include/asm/macros/script.inc | 2 +- 3 files changed, 57 insertions(+), 49 deletions(-) diff --git a/data/cutscenes.s b/data/cutscenes.s index cad1fe1d7..07c0042ca 100644 --- a/data/cutscenes.s +++ b/data/cutscenes.s @@ -136,25 +136,31 @@ MsgEnd 0 .byte 0xf6, 0x00, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x28, 0x13, 0x08 - .byte 0x54, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + setAnimation 2 .byte 0x2d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xdb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + pause 1 .byte 0x3c, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + msgEnd 0 + .byte 0xf6, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x28, 0x13, 0x08 - .byte 0x54, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + setAnimation 2 .byte 0x2d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xdb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + pause 1 .byte 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + msgEnd 0 + .byte 0xf6, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x28, 0x13, 0x08 - .byte 0x54, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + setAnimation 2 .byte 0x2d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xdb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x28, 0x13, 0x08, 0x54, 0x00, 0x02, 0x00 + pause 1 + .byte 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + msgEnd 0 + .byte 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + closeThread + + .byte 0xf6, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x28, 0x13, 0x08 + .byte 0x54, 0x00, 0x02, 0x00 .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x01, 0x00 .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x28, 0x13, 0x08, 0x54, 0x00, 0x02, 0x00 @@ -32035,17 +32041,20 @@ .byte 0xcc, 0xbd, 0x22, 0x08, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 .byte 0xf6, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbe, 0x22, 0x08 - .byte 0x08, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + changeTileset 0xB1 + pushR14 msgEnd 0x163 .byte 0x2e, 0x2e, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x6e .byte 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, 0x30, 0x35, 0x70, 0x30, 0x33, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x00, 0x94, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0xe8, 0xbd, 0x22, 0x08 - .byte 0xf6, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbe, 0x22, 0x08, 0x08, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x0c, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0xf6, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbe, 0x22, 0x08 + .byte 0x08, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x0c, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x22, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0xe0, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0xdb, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0xa8, 0xc1, 0x22, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00, 0x23, 0x01, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/data/cutscenes_1.s b/data/cutscenes_1.s index 2c76b6858..fbe9e2ba8 100644 --- a/data/cutscenes_1.s +++ b/data/cutscenes_1.s @@ -644,7 +644,7 @@ .4byte GroundD01P01StationFile_Text .byte 0x3b, 0x39, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 changeTileset 0xB2 - .byte 0x0c, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + StartSceneRunCall 0 PlayMusic 0x67 .byte 0x22, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 waitFlag 3 @@ -658,8 +658,8 @@ .byte 0xf6, 0x00, 0x16, 0x02 .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .4byte GroundD01P01StationFile_Text - .byte 0x54, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x2d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + setAnimation 2 + loadData 7 0 0 .byte 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 pause 0x1E selectFace bottomL 0 0 @@ -669,8 +669,8 @@ PicNameTextBox 2 0x822F630 closeTextBox pause 0xA - .byte 0x2e, 0x15, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xcf, 0x02, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + selectFace 0x15 0x1 0x9 + initVariableTextbox 2 0x26 1 variableTextBox 1 0x822F5C8 variableTextBox 1 0x822F590 elseTextBox 0x822F52C @@ -680,8 +680,8 @@ PicNameTextBox 2 0x822F4D0 closeTextBox pause 0xA - .byte 0x2e, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xcf, 0x02, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + selectFace 0x15 1 0 + initVariableTextbox 0x2 0x26 1 variableTextBox 1 0x822F4C4 variableTextBox 3 0x822F4C4 elseTextBox 0x822F4C4 @@ -692,7 +692,7 @@ setFlag 6 waitFlag 5 pause 0x1E - .byte 0x2e, 0x15, 0x03, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + selectFace 0x15 3 0x41 PicNameTextBox 3 0x822F498 closeTextBox setFlag 6 @@ -700,14 +700,14 @@ pause 0x1E setFlag 6 pause 0x1 - .byte 0x4c, 0x00, 0x00, 0x00, 0xd6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xe8, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + playSound 0x1D6 + executeScript SWEAT_FUNC pause 0x1E - .byte 0x4d, 0x00, 0x00, 0x00, 0xd6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x2e, 0x15, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + stopSound 0x1D6 + selectFace 0x15 0 4 scrollTextbox 0 0x822F468 scrollTextbox 0 0x822F430 - .byte 0x2e, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + selectFace 0x15 0 1 scrollTextBox 0 0x822F3E8 scrollTextBox 0 0x822F3AC closeTextBox @@ -742,29 +742,28 @@ waitFlag 5 setFlag 6 waitFlag 5 - .byte 0x2e, 0x15, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xcf, 0x02, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xd0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf2, 0x22, 0x08 - .byte 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xf2, 0x22, 0x08 + selectFace 0x15 1 1 + initVariableTextbox 0x2 0x26 1 + variableTextBox 1 0x822F2F0 + elseTextBox 0x822F2D8 rotate 8 CW east pause 0xA - .byte 0x2e, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xcf, 0x02, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xd0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xf2, 0x22, 0x08 - .byte 0xd0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf2, 0x22, 0x08 - .byte 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xf2, 0x22, 0x08 - .byte 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xf2, 0x22, 0x08 + selectFace 0x15 1 0 + initVariableTextbox 2 0x26 1 + variableTextBox 1 0x822F2B0 + variableTextBox 1 0x822F270 + elseTextBox 0x822F244 + elseTextBox 0x822F20C closeTextBox pause 0x1E - .byte 0x2e, 0x15, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + selectFace 0x15 0 4 scrollTextBox 0 0x822F1FC closeTextBox pause 0x1E - - .byte 0x2e, 0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xcf, 0x02, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xd0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf1, 0x22, 0x08 - .byte 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xf1, 0x22, 0x08 + selectFace 0x15 1 0 + initVariableTextbox 0x2 0x26 1 + variableTextBox 1 0x822F1A0 + elseTextBox 0x822F148 closeTextBox setFlag 6 waitFlag 5 @@ -872,7 +871,7 @@ loadData 7 3 0 waitFlag 8 playSound 0x1C9 - .byte 0xe8, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + executeScript 0x27 pause 0x14 setFlag 5 waitFlag 8 @@ -923,7 +922,7 @@ playMusic 0x72 .byte 0x22, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 waitFlag 3 - .byte 0x23, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + fadeOut 1 0x1E 0 pause 0x1E endFuncandScript diff --git a/include/asm/macros/script.inc b/include/asm/macros/script.inc index 8ef4bd87f..35e65d7d9 100644 --- a/include/asm/macros/script.inc +++ b/include/asm/macros/script.inc @@ -172,7 +172,7 @@ .endm .macro renameTeam - .byte 0x3D, 0x00, 0x00, 0x00 + .byte 0x3e, 0x00, 0x00, 0x00 .4byte 0x00, 0x00, 0x00 .endm From 298f2c5c310a276bd1c2febdde139209877d4045 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 7 Dec 2022 21:11:35 -0800 Subject: [PATCH 14/21] more decomp --- asm/code_80521D0.s | 6 +- asm/code_8057824.s | 2260 -------------------------------------- include/dungeon_entity.h | 5 +- include/pokemon.h | 4 +- include/status_checker.h | 2 +- src/code_8041AD0.c | 2 +- src/code_8057824.c | 953 +++++++++++++++- src/code_8077274_1.c | 2 +- src/pokemon_mid.c | 2 +- src/status_checker.c | 8 +- 10 files changed, 963 insertions(+), 2281 deletions(-) diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 84546aee5..dd2fff0e0 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -4651,7 +4651,7 @@ _08054CE2: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805834C + bl BideMoveAction b _080554BA _08054CF0: adds r0, r7, 0 @@ -4709,7 +4709,7 @@ _08054D56: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_80582EC + bl RazorWindMoveAction b _080554BA _08054D64: adds r0, r7, 0 @@ -5572,7 +5572,7 @@ _08055414: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8058DBC + bl PsychUpMoveAction b _080554BA _08055422: adds r0, r7, 0 diff --git a/asm/code_8057824.s b/asm/code_8057824.s index 5a9059c2f..ae80cd0f1 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -5,2266 +5,6 @@ .text - thumb_func_start sub_8057D9C -sub_8057D9C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r0, [r4, 0x70] - movs r5, 0 - ldr r1, _08057DF8 - mov r8, r1 - movs r1, 0x8C - lsls r1, 1 - adds r2, r0, r1 - movs r0, 0x1 - mov r12, r0 - movs r7, 0x10 - movs r3, 0x3 -_08057DBC: - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - cmp r0, 0 - beq _08057DD4 - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _08057DD4 - movs r0, 0 - strb r0, [r2, 0x4] - movs r5, 0x1 -_08057DD4: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _08057DBC - mov r0, r8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - cmp r5, 0 - beq _08057E00 - ldr r0, _08057DFC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08057E0C - .align 2, 0 -_08057DF8: .4byte gUnknown_202DFE8 -_08057DFC: .4byte gUnknown_80FD350 -_08057E00: - ldr r0, _08057E18 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08057E0C: - adds r0, r5, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08057E18: .4byte gUnknown_80FD370 - thumb_func_end sub_8057D9C - - thumb_func_start FocusEnergyMoveAction -FocusEnergyMoveAction: - push {lr} - bl FocusEnergyStatusTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end FocusEnergyMoveAction - - thumb_func_start sub_8057E28 -sub_8057E28: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - ldr r1, _08057E4C - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r2, r0, 0 - adds r0, r5, 0 - adds r1, r4, 0 - bl WhifferStatusTarget - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08057E4C: .4byte gUnknown_80F4EDC - thumb_func_end sub_8057E28 - - thumb_func_start sub_8057E50 -sub_8057E50: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl SendThawedMessage - adds r0, r4, 0 - adds r1, r5, 0 - bl MirrorMoveStatusTarget - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8057E50 - - thumb_func_start sub_8057E6C -sub_8057E6C: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r7, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - adds r4, r3, 0 - movs r0, 0 - mov r8, r0 - ldr r1, [r7, 0x70] - mov r9, r1 - adds r0, r7, 0 - adds r1, r5, 0 - bl SendThawedMessage - movs r3, 0x80 - lsls r3, 1 - str r4, [sp] - adds r0, r7, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl sub_8055640 - cmp r0, 0 - beq _08057EBC - movs r0, 0x1 - mov r8, r0 - adds r0, r7, 0 - movs r1, 0 - bl sub_8057308 - lsls r0, 24 - cmp r0, 0 - beq _08057EBC - ldr r0, _08057ECC - add r0, r9 - mov r1, r8 - strb r1, [r0] -_08057EBC: - mov r0, r8 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08057ECC: .4byte 0x00000155 - thumb_func_end sub_8057E6C - - thumb_func_start sub_8057ED0 -sub_8057ED0: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08057F12 - movs r7, 0x1 - ldr r0, _08057F1C - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08057F12 - ldr r0, _08057F20 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - adds r1, r6, 0 - movs r3, 0x80 - bl ChangeAttackMultiplierTarget -_08057F12: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08057F1C: .4byte gUnknown_80F4E04 -_08057F20: .4byte gUnknown_8106A4C - thumb_func_end sub_8057ED0 - - thumb_func_start sub_8057F24 -sub_8057F24: - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x4 - adds r6, r0, 0 - mov r8, r1 - ldr r5, [r6, 0x70] - movs r0, 0x1 - mov r9, r0 - movs r4, 0x1 - strh r4, [r5, 0xE] - ldr r0, _08057F74 - ldr r2, [r0] - str r4, [sp] - adds r0, r6, 0 - movs r3, 0x40 - bl ChangeAttackMultiplierTarget - ldr r0, _08057F78 - ldr r2, [r0] - str r4, [sp] - adds r0, r6, 0 - mov r1, r8 - movs r3, 0x40 - bl ChangeAttackMultiplierTarget - movs r0, 0xAA - lsls r0, 1 - adds r5, r0 - mov r0, r9 - strb r0, [r5] - movs r0, 0x1 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08057F74: .4byte gUnknown_8106A4C -_08057F78: .4byte gUnknown_8106A50 - thumb_func_end sub_8057F24 - - thumb_func_start sub_8057F7C -sub_8057F7C: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08057FBA - movs r7, 0x1 - ldr r0, _08057FC4 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08057FBA - ldr r0, _08057FC8 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r6, 0 - movs r3, 0 - bl LowerAccuracyStageTarget -_08057FBA: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08057FC4: .4byte gUnknown_80F4E02 -_08057FC8: .4byte gUnknown_8106A4C - thumb_func_end sub_8057F7C - - thumb_func_start sub_8057FCC -sub_8057FCC: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r2, 0x1 - bl ConfuseStatusTarget - ldr r0, _08057FF0 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - movs r3, 0x1 - bl RaiseAttackStageTarget - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08057FF0: .4byte gUnknown_8106A50 - thumb_func_end sub_8057FCC - - thumb_func_start sub_8057FF4 -sub_8057FF4: - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl GetFlashFireStatus - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - beq _08058048 - ldr r0, [r4, 0x70] - movs r2, 0xA9 - lsls r2, 1 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - bne _08058054 - movs r0, 0x1 - strb r0, [r1] - ldr r0, _0805802C - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - cmp r6, 0x1 - bne _08058034 - ldr r0, _08058030 - b _08058036 - .align 2, 0 -_0805802C: .4byte gUnknown_202DFE8 -_08058030: .4byte gUnknown_80FAE00 -_08058034: - ldr r0, _08058044 -_08058036: - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08058054 - .align 2, 0 -_08058044: .4byte gUnknown_80FADD8 -_08058048: - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x1 - bl BurnedStatusTarget -_08058054: - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8057FF4 - - thumb_func_start sub_805805C -sub_805805C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - mov r10, r0 - mov r9, r1 - adds r5, r2, 0 - mov r8, r3 - ldr r1, [r0, 0x70] - movs r6, 0x1 - movs r2, 0 - ldr r4, _08058098 - movs r3, 0 - ldrsh r0, [r4, r3] - cmp r0, 0 - blt _080580B0 - movs r7, 0xC - ldrsh r3, [r1, r7] - adds r1, r4, 0 - ldr r4, _0805809C -_08058088: - movs r7, 0 - ldrsh r0, [r1, r7] - cmp r3, r0 - bge _080580A0 - movs r0, 0x2 - ldrsh r6, [r1, r0] - b _080580B0 - .align 2, 0 -_08058098: .4byte gUnknown_80F55BC -_0805809C: .4byte 0x000003e6 -_080580A0: - adds r1, 0x4 - adds r2, 0x1 - cmp r2, r4 - bgt _080580B0 - movs r7, 0 - ldrsh r0, [r1, r7] - cmp r0, 0 - bge _08058088 -_080580B0: - adds r0, r5, 0 - bl GetMoveType - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - mov r1, r8 - bl sub_8057600 - lsls r0, 16 - asrs r0, 16 - add r1, sp, 0x18 - str r1, [sp] - str r4, [sp, 0x4] - str r0, [sp, 0x8] - movs r1, 0 - str r1, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - str r1, [sp, 0x14] - mov r0, r10 - mov r1, r9 - adds r2, r6, 0 - movs r3, 0x1 - bl sub_806F370 - add r1, sp, 0x18 - movs r2, 0 - adds r0, r1, 0 - ldrb r0, [r0] - cmp r0, 0 - bne _080580F4 - movs r2, 0x1 -_080580F4: - strb r2, [r1] - add r0, sp, 0x18 - ldrb r0, [r0] - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_805805C - - thumb_func_start GrudgeMoveAction -GrudgeMoveAction: - push {r4-r7,lr} - adds r6, r0, 0 - adds r5, r1, 0 - movs r7, 0 - ldr r4, [r5, 0x70] - ldr r0, _08058134 - movs r2, 0 - bl SetMessageArgument - adds r4, 0xF4 - ldrb r0, [r4] - cmp r0, 0 - beq _0805813C - ldr r0, _08058138 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 - b _0805814E - .align 2, 0 -_08058134: .4byte gUnknown_202DFE8 -_08058138: .4byte gUnknown_80FD2B4 -_0805813C: - movs r0, 0x1 - strb r0, [r4] - movs r7, 0x1 - ldr r0, _08058158 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_80522F4 -_0805814E: - adds r0, r7, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058158: .4byte gUnknown_80FD294 - thumb_func_end GrudgeMoveAction - - thumb_func_start sub_805815C -sub_805815C: - push {lr} - movs r2, 0x4 - bl sub_80797A0 - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_805815C - - thumb_func_start sub_805816C -sub_805816C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r6, r0, 0 - adds r7, r1, 0 - adds r5, r2, 0 - adds r4, r3, 0 - movs r0, 0 - mov r8, r0 - adds r0, r6, 0 - bl SendThawedMessage - movs r3, 0x80 - lsls r3, 1 - str r4, [sp] - adds r0, r6, 0 - adds r1, r7, 0 - adds r2, r5, 0 - bl sub_8055640 - cmp r0, 0 - beq _080581BE - movs r1, 0x1 - mov r8, r1 - ldr r0, _080581CC - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r6, 0 - adds r1, r7, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _080581BE - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0 - movs r3, 0 - bl BurnedStatusTarget -_080581BE: - mov r0, r8 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080581CC: .4byte gUnknown_80F4DB8 - thumb_func_end sub_805816C - - thumb_func_start sub_80581D0 -sub_80581D0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r6, r0, 0 - adds r7, r1, 0 - adds r5, r2, 0 - adds r4, r3, 0 - movs r0, 0 - mov r8, r0 - adds r0, r6, 0 - bl SendThawedMessage - movs r3, 0x80 - lsls r3, 1 - str r4, [sp] - adds r0, r6, 0 - adds r1, r7, 0 - adds r2, r5, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058222 - movs r1, 0x1 - mov r8, r1 - ldr r0, _08058230 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r6, 0 - adds r1, r7, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08058222 - adds r0, r6, 0 - adds r1, r7, 0 - movs r2, 0 - movs r3, 0 - bl BurnedStatusTarget -_08058222: - mov r0, r8 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058230: .4byte gUnknown_80F4DBA - thumb_func_end sub_80581D0 - - thumb_func_start sub_8058234 -sub_8058234: - push {r4,lr} - adds r3, r0, 0 - adds r4, r1, 0 - ldrh r1, [r2, 0x2] - ldr r0, _08058258 - movs r2, 0x51 - cmp r1, r0 - bne _08058246 - movs r2, 0x7A -_08058246: - adds r0, r3, 0 - adds r1, r4, 0 - bl ExposeStatusTarget - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08058258: .4byte 0x0000013b - thumb_func_end sub_8058234 - - thumb_func_start sub_805825C -sub_805825C: - push {lr} - ldr r2, _0805826C - ldr r2, [r2] - bl RaiseAccuracyStageTarget - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_0805826C: .4byte gUnknown_8106A50 - thumb_func_end sub_805825C - - thumb_func_start sub_8058270 -sub_8058270: - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r2, 0 - adds r2, r3, 0 - movs r3, 0x1 - ldr r0, [r1, 0x70] - adds r0, 0xC0 - ldrb r0, [r0] - subs r0, 0x7 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0805828E - movs r3, 0x2 -_0805828E: - lsls r3, 8 - str r2, [sp] - adds r0, r4, 0 - adds r2, r5, 0 - bl sub_8055640 - adds r1, r0, 0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8058270 - - thumb_func_start sub_80582AC -sub_80582AC: - push {lr} - ldr r2, _080582C0 - ldr r2, [r2] - movs r3, 0x1 - bl RaiseDefenseStageTarget - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_080582C0: .4byte gUnknown_8106A4C - thumb_func_end sub_80582AC - - thumb_func_start sub_80582C4 -sub_80582C4: - push {lr} - movs r2, 0x1 - bl ParalyzeStatusTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_80582C4 - - thumb_func_start sub_80582D4 -sub_80582D4: - push {lr} - ldr r2, _080582E8 - ldr r2, [r2] - movs r3, 0x1 - bl RaiseAttackStageTarget - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_080582E8: .4byte gUnknown_8106A4C - thumb_func_end sub_80582D4 - - thumb_func_start sub_80582EC -sub_80582EC: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r7, r1, 0 - adds r4, r2, 0 - adds r6, r3, 0 - adds r1, r4, 0 - bl MoveMatchesChargingStatus - lsls r0, 24 - cmp r0, 0 - beq _08058328 - ldr r0, _08058324 - ldr r3, [r0] - str r6, [sp] - adds r0, r5, 0 - adds r1, r7, 0 - adds r2, r4, 0 - bl sub_8055640 - negs r1, r0 - orrs r1, r0 - lsrs r4, r1, 31 - adds r0, r5, 0 - bl sub_8079764 - b _0805833C - .align 2, 0 -_08058324: .4byte gUnknown_80F4F50 -_08058328: - ldr r0, _08058348 - ldr r0, [r0] - str r0, [sp] - adds r0, r5, 0 - adds r1, r5, 0 - movs r2, 0x4 - adds r3, r4, 0 - bl sub_8079618 - movs r4, 0x1 -_0805833C: - adds r0, r4, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058348: .4byte gUnknown_80FAC54 - thumb_func_end sub_80582EC - - thumb_func_start sub_805834C -sub_805834C: - push {lr} - sub sp, 0x4 - adds r3, r2, 0 - ldr r2, _08058368 - ldr r2, [r2] - str r2, [sp] - movs r2, 0x1 - bl sub_8079618 - movs r0, 0x1 - add sp, 0x4 - pop {r1} - bx r1 - .align 2, 0 -_08058368: .4byte gUnknown_80FAC74 - thumb_func_end sub_805834C - - thumb_func_start sub_805836C -sub_805836C: - push {r4-r7,lr} - sub sp, 0x1C - adds r6, r0, 0 - adds r7, r1, 0 - movs r5, 0 - add r0, sp, 0x18 - strb r5, [r0] - ldr r0, [r6, 0x70] - adds r0, 0xA0 - ldr r0, [r0] - lsls r4, r0, 1 - ldr r0, _080583D0 - cmp r4, r0 - ble _0805838A - adds r4, r0, 0 -_0805838A: - adds r0, r2, 0 - bl GetMoveType - lsls r0, 24 - lsrs r0, 24 - add r1, sp, 0x18 - str r1, [sp] - str r0, [sp, 0x4] - ldr r0, _080583D4 - str r0, [sp, 0x8] - str r5, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - str r5, [sp, 0x14] - adds r0, r6, 0 - adds r1, r7, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl sub_806F370 - add r1, sp, 0x18 - movs r2, 0 - adds r0, r1, 0 - ldrb r0, [r0] - cmp r0, 0 - bne _080583C0 - movs r2, 0x1 -_080583C0: - strb r2, [r1] - add r0, sp, 0x18 - ldrb r0, [r0] - add sp, 0x1C - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080583D0: .4byte 0x000003e7 -_080583D4: .4byte 0x000001ff - thumb_func_end sub_805836C - - thumb_func_start sub_80583D8 -sub_80583D8: - push {r4-r7,lr} - sub sp, 0x8 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _0805841C - movs r7, 0x1 - ldr r0, _08058428 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _0805841C - ldr r0, _0805842C - ldr r2, [r0] - str r7, [sp] - movs r0, 0 - str r0, [sp, 0x4] - adds r0, r5, 0 - adds r1, r6, 0 - movs r3, 0x1 - bl LowerDefenseStageTarget -_0805841C: - adds r0, r7, 0 - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058428: .4byte gUnknown_80F4DC2 -_0805842C: .4byte gUnknown_8106A50 - thumb_func_end sub_80583D8 - - thumb_func_start sub_8058430 -sub_8058430: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _0805846A - movs r7, 0x1 - ldr r0, _08058474 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _0805846A - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl CringeStatusTarget -_0805846A: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058474: .4byte gUnknown_80F4DEE - thumb_func_end sub_8058430 - - thumb_func_start sub_8058478 -sub_8058478: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _080584B2 - movs r7, 0x1 - ldr r0, _080584BC - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _080584B2 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl ParalyzeStatusTarget -_080584B2: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080584BC: .4byte gUnknown_80F4DE6 - thumb_func_end sub_8058478 - - thumb_func_start sub_80584C0 -sub_80584C0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - mov r9, r0 - mov r10, r1 - adds r6, r2, 0 - mov r8, r3 - movs r7, 0 - add r0, sp, 0x18 - strb r7, [r0] - mov r0, r9 - ldr r2, [r0, 0x70] - ldr r0, [r1, 0x70] - movs r3, 0xE - ldrsh r1, [r0, r3] - movs r3, 0xE - ldrsh r0, [r2, r3] - subs r5, r1, r0 - cmp r5, 0 - bge _080584F0 - movs r5, 0 -_080584F0: - adds r0, r6, 0 - bl GetMoveType - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - mov r1, r8 - bl sub_8057600 - lsls r0, 16 - asrs r0, 16 - add r1, sp, 0x18 - str r1, [sp] - str r4, [sp, 0x4] - str r0, [sp, 0x8] - str r7, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - str r7, [sp, 0x14] - mov r0, r9 - mov r1, r10 - adds r2, r5, 0 - movs r3, 0 - bl sub_806F370 - add r1, sp, 0x18 - movs r2, 0 - adds r0, r1, 0 - ldrb r0, [r0] - cmp r0, 0 - bne _08058532 - movs r2, 0x1 -_08058532: - strb r2, [r1] - add r0, sp, 0x18 - ldrb r0, [r0] - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80584C0 - - thumb_func_start sub_8058548 -sub_8058548: - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r5, 0x80 - lsls r5, 1 - ldr r0, [r4, 0x70] - adds r0, 0xAC - ldrb r0, [r0] - cmp r0, 0 - beq _08058560 - ldr r0, _0805857C - ldr r5, [r0] -_08058560: - str r3, [sp] - adds r0, r4, 0 - adds r3, r5, 0 - bl sub_8055640 - adds r1, r0, 0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805857C: .4byte gUnknown_80F4F6C - thumb_func_end sub_8058548 - - thumb_func_start sub_8058580 -sub_8058580: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _080585BC - movs r7, 0x1 - ldr r0, _080585C8 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _080585BC - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x1 - movs r3, 0 - bl LowerMovementSpeedTarget -_080585BC: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080585C8: .4byte gUnknown_80F4DD4 - thumb_func_end sub_8058580 - - thumb_func_start sub_80585CC -sub_80585CC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r5, r0, 0 - adds r4, r1, 0 - mov r8, r2 - adds r7, r3, 0 - movs r6, 0 - ldr r0, [r4, 0x70] - adds r0, 0xC4 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080585EC - cmp r0, 0x3 - bne _08058602 -_080585EC: - ldr r0, _08058620 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - adds r0, r5, 0 - adds r1, r4, 0 - bl SendProtectionEndMessage - movs r6, 0x1 -_08058602: - movs r3, 0x80 - lsls r3, 1 - str r7, [sp] - adds r0, r5, 0 - adds r1, r4, 0 - mov r2, r8 - bl sub_8055640 - cmp r0, 0 - beq _08058624 - movs r0, 0x1 - orrs r0, r6 - lsls r0, 24 - b _08058626 - .align 2, 0 -_08058620: .4byte gUnknown_80FD104 -_08058624: - lsls r0, r6, 24 -_08058626: - lsrs r0, 24 - adds r6, r0, 0 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80585CC - - thumb_func_start sub_8058638 -sub_8058638: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058670 - movs r7, 0x1 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08058670 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0x1 - movs r3, 0 - bl LowerMovementSpeedTarget -_08058670: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8058638 - - thumb_func_start sub_805867C -sub_805867C: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r7, r1, 0 - adds r4, r2, 0 - adds r6, r3, 0 - adds r1, r4, 0 - bl MoveMatchesChargingStatus - lsls r0, 24 - cmp r0, 0 - beq _080586B8 - ldr r0, _080586B4 - ldr r3, [r0] - str r6, [sp] - adds r0, r5, 0 - adds r1, r7, 0 - adds r2, r4, 0 - bl sub_8055640 - negs r1, r0 - orrs r1, r0 - lsrs r4, r1, 31 - adds r0, r5, 0 - bl sub_8079764 - b _080586CC - .align 2, 0 -_080586B4: .4byte gUnknown_80F4F54 -_080586B8: - ldr r0, _080586D8 - ldr r0, [r0] - str r0, [sp] - adds r0, r5, 0 - adds r1, r5, 0 - movs r2, 0x5 - adds r3, r4, 0 - bl sub_8079618 - movs r4, 0x1 -_080586CC: - adds r0, r4, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080586D8: .4byte gUnknown_80FACA4 - thumb_func_end sub_805867C - - thumb_func_start sub_80586DC -sub_80586DC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r7, r0, 0 - adds r4, r1, 0 - adds r6, r2, 0 - adds r5, r3, 0 - adds r0, r4, 0 - movs r1, 0x3A - bl HasAbility - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r3, 0x80 - lsls r3, 1 - str r5, [sp] - adds r0, r7, 0 - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_8055640 - adds r4, r0, 0 - negs r0, r4 - orrs r0, r4 - lsrs r5, r0, 31 - cmp r5, 0 - beq _08058762 - adds r0, r7, 0 - movs r1, 0 - bl sub_8057308 - lsls r0, 24 - cmp r0, 0 - beq _08058762 - lsrs r0, r4, 31 - adds r0, r4, r0 - asrs r2, r0, 1 - ldr r0, [r7, 0x70] - movs r5, 0x1 - cmp r2, 0 - bgt _08058734 - movs r2, 0x1 -_08058734: - adds r1, r0, 0 - adds r1, 0xFB - ldrb r0, [r1] - cmp r0, 0 - bne _08058740 - strb r5, [r1] -_08058740: - mov r0, r8 - cmp r0, 0 - beq _08058756 - movs r3, 0xFD - lsls r3, 1 - adds r0, r7, 0 - adds r1, r2, 0 - movs r2, 0xD - bl sub_806F324 - b _08058762 -_08058756: - str r5, [sp] - adds r0, r7, 0 - adds r1, r7, 0 - movs r3, 0 - bl HealTargetHP -_08058762: - adds r0, r5, 0 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80586DC - - thumb_func_start sub_8058770 -sub_8058770: - push {r4-r7,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r6, r1, 0 - mov r12, r2 - adds r5, r3, 0 - ldr r2, [r4, 0x70] - movs r0, 0x10 - ldrsh r3, [r2, r0] - adds r0, r3, 0 - cmp r3, 0 - bge _0805878A - adds r0, r3, 0x3 -_0805878A: - movs r7, 0xE - ldrsh r1, [r2, r7] - asrs r0, 2 - cmp r1, r0 - bgt _08058798 - movs r3, 0 - b _080587BE -_08058798: - movs r0, 0xE - ldrsh r1, [r2, r0] - lsrs r0, r3, 31 - adds r0, r3, r0 - asrs r0, 1 - cmp r1, r0 - bgt _080587AA - movs r3, 0x1 - b _080587BE -_080587AA: - lsls r0, r3, 1 - adds r0, r3 - cmp r0, 0 - bge _080587B4 - adds r0, 0x3 -_080587B4: - asrs r0, 2 - movs r3, 0x3 - cmp r1, r0 - bgt _080587BE - movs r3, 0x2 -_080587BE: - ldr r1, _080587E4 - lsls r0, r3, 2 - adds r0, r1 - ldr r3, [r0] - str r5, [sp] - adds r0, r4, 0 - adds r1, r6, 0 - mov r2, r12 - bl sub_8055640 - adds r1, r0, 0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080587E4: .4byte gUnknown_80F51A4 - thumb_func_end sub_8058770 - - thumb_func_start sub_80587E8 -sub_80587E8: - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - adds r5, r1, 0 - adds r1, r3, 0 - ldr r0, [r5, 0x70] - adds r0, 0xAC - ldrb r0, [r0] - cmp r0, 0x4 - bne _0805881A - movs r3, 0x80 - lsls r3, 2 - str r1, [sp] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_8055640 - negs r1, r0 - orrs r1, r0 - lsrs r4, r1, 31 - adds r0, r6, 0 - adds r1, r5, 0 - bl SendNonVolatileEndMessage - b _0805882E -_0805881A: - movs r3, 0x80 - lsls r3, 1 - str r1, [sp] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_8055640 - negs r1, r0 - orrs r1, r0 - lsrs r4, r1, 31 -_0805882E: - adds r0, r4, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80587E8 - - thumb_func_start sub_8058838 -sub_8058838: - push {lr} - sub sp, 0x8 - ldr r2, _08058854 - ldr r2, [r2] - movs r3, 0x1 - str r3, [sp] - str r3, [sp, 0x4] - movs r3, 0x3 - bl LowerDefenseStageTarget - movs r0, 0x1 - add sp, 0x8 - pop {r1} - bx r1 - .align 2, 0 -_08058854: .4byte gUnknown_8106A50 - thumb_func_end sub_8058838 - - thumb_func_start sub_8058858 -sub_8058858: - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x8 - adds r6, r0, 0 - mov r8, r1 - ldr r0, _08058898 - ldr r5, [r0] - movs r4, 0x1 - str r4, [sp] - str r4, [sp, 0x4] - adds r0, r6, 0 - adds r2, r5, 0 - movs r3, 0x1 - bl LowerAttackStageTarget - str r4, [sp] - str r4, [sp, 0x4] - adds r0, r6, 0 - mov r1, r8 - adds r2, r5, 0 - movs r3, 0x1 - bl LowerDefenseStageTarget - movs r0, 0x1 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08058898: .4byte gUnknown_8106A4C - thumb_func_end sub_8058858 - - thumb_func_start sub_805889C -sub_805889C: - push {lr} - bl ImmobilizedStatusTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_805889C - - thumb_func_start sub_80588A8 -sub_80588A8: - push {lr} - movs r2, 0x1 - bl sub_8079E34 - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_80588A8 - - thumb_func_start sub_80588B8 -sub_80588B8: - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r6, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _080588E4 - movs r6, 0x1 - adds r0, r5, 0 - movs r1, 0 - bl sub_8057308 - lsls r0, 24 - cmp r0, 0 - beq _080588E4 - ldr r0, _080588F0 - strb r6, [r0] -_080588E4: - adds r0, r6, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080588F0: .4byte gUnknown_202F219 - thumb_func_end sub_80588B8 - - thumb_func_start sub_80588F4 -sub_80588F4: - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - adds r6, r0, 0 - adds r5, r1, 0 - mov r8, r2 - adds r4, r3, 0 - ldr r0, [r5, 0x70] - movs r1, 0x4 - ldrsh r0, [r0, r1] - bl GetLowKickDmg - adds r3, r0, 0 - str r4, [sp] - adds r0, r6, 0 - adds r1, r5, 0 - mov r2, r8 - bl sub_8055640 - adds r1, r0, 0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80588F4 - - thumb_func_start sub_8058930 -sub_8058930: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r7, r0, 0 - movs r0, 0 - mov r8, r0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r0, r7, 0 - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _080589B8 - movs r2, 0x1 - mov r8, r2 - ldr r0, _080589C8 - movs r2, 0 - ldrsh r1, [r0, r2] - adds r0, r7, 0 - bl sub_8057308 - lsls r0, 24 - cmp r0, 0 - beq _080589B8 - ldr r6, [r7, 0x70] - adds r0, r7, 0 - adds r1, r7, 0 - movs r2, 0 - movs r3, 0x1 - bl RaiseMovementSpeedTarget - ldr r0, _080589CC - ldr r5, [r0] - adds r0, r7, 0 - adds r1, r7, 0 - adds r2, r5, 0 - movs r3, 0x1 - bl RaiseAttackStageTarget - ldr r0, _080589D0 - ldr r4, [r0] - adds r0, r7, 0 - adds r1, r7, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl RaiseAttackStageTarget - adds r0, r7, 0 - adds r1, r7, 0 - adds r2, r5, 0 - movs r3, 0x1 - bl RaiseDefenseStageTarget - adds r0, r7, 0 - adds r1, r7, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl RaiseDefenseStageTarget - adds r6, 0xFB - ldrb r0, [r6] - cmp r0, 0 - bne _080589B8 - mov r0, r8 - strb r0, [r6] -_080589B8: - mov r0, r8 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080589C8: .4byte gUnknown_80F4DD6 -_080589CC: .4byte gUnknown_8106A4C -_080589D0: .4byte gUnknown_8106A50 - thumb_func_end sub_8058930 - - thumb_func_start sub_80589D4 -sub_80589D4: - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - ldr r4, _08058A04 - bl GetWeather - lsls r0, 24 - lsrs r0, 23 - adds r0, r4 - movs r1, 0 - ldrsh r2, [r0, r1] - movs r0, 0x1 - str r0, [sp] - adds r0, r5, 0 - adds r1, r6, 0 - movs r3, 0 - bl HealTargetHP - movs r0, 0x1 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08058A04: .4byte gUnknown_80F500A - thumb_func_end sub_80589D4 - - thumb_func_start sub_8058A08 -sub_8058A08: - push {lr} - movs r2, 0 - movs r3, 0x1 - bl RaiseMovementSpeedTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_8058A08 - - thumb_func_start sub_8058A18 -sub_8058A18: - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r6, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058A44 - movs r6, 0x1 - adds r0, r5, 0 - movs r1, 0 - bl sub_8057308 - lsls r0, 24 - cmp r0, 0 - beq _08058A44 - ldr r0, _08058A50 - strb r6, [r0] -_08058A44: - adds r0, r6, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08058A50: .4byte gUnknown_202F21A - thumb_func_end sub_8058A18 - - thumb_func_start sub_8058A54 -sub_8058A54: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - ldr r1, _08058A78 - adds r0, r4, 0 - movs r2, 0 - bl CalculateStatusTurns - adds r2, r0, 0 - adds r0, r5, 0 - adds r1, r4, 0 - bl SureShotStatusTarget - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08058A78: .4byte gUnknown_80F4EB8 - thumb_func_end sub_8058A54 - - thumb_func_start sub_8058A7C -sub_8058A7C: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r0, _08058AA4 - ldr r2, [r0] - adds r0, r4, 0 - movs r3, 0x1 - bl RaiseDefenseStageTarget - ldr r0, _08058AA8 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - movs r3, 0x1 - bl RaiseDefenseStageTarget - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08058AA4: .4byte gUnknown_8106A4C -_08058AA8: .4byte gUnknown_8106A50 - thumb_func_end sub_8058A7C - - thumb_func_start SkyAttackMoveAction -SkyAttackMoveAction: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r4, r0, 0 - adds r6, r1, 0 - adds r5, r2, 0 - adds r7, r3, 0 - movs r0, 0 - mov r8, r0 - adds r0, r4, 0 - adds r1, r5, 0 - bl MoveMatchesChargingStatus - lsls r0, 24 - cmp r0, 0 - beq _08058B14 - ldr r0, _08058B0C - ldr r3, [r0] - str r7, [sp] - adds r0, r4, 0 - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058B04 - movs r1, 0x1 - mov r8, r1 - ldr r0, _08058B10 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08058B04 - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0 - bl CringeStatusTarget -_08058B04: - adds r0, r4, 0 - bl sub_8079764 - b _08058B2A - .align 2, 0 -_08058B0C: .4byte gUnknown_80F4F4C -_08058B10: .4byte gUnknown_80F4DF4 -_08058B14: - ldr r0, _08058B38 - ldr r0, [r0] - str r0, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r2, 0x3 - adds r3, r5, 0 - bl sub_8079618 - movs r0, 0x1 - mov r8, r0 -_08058B2A: - mov r0, r8 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058B38: .4byte gUnknown_80FACC4 - thumb_func_end SkyAttackMoveAction - - thumb_func_start sub_8058B3C -sub_8058B3C: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058B76 - movs r7, 0x1 - ldr r0, _08058B80 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08058B76 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl FrozenStatusTarget -_08058B76: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058B80: .4byte gUnknown_80F4DBC - thumb_func_end sub_8058B3C - - thumb_func_start sub_8058B84 -sub_8058B84: - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r6, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058BCC - movs r6, 0x1 - ldr r0, _08058BD8 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r5, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08058BCC - ldr r4, [r5, 0x70] - ldr r0, _08058BDC - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r5, 0 - movs r3, 0x1 - bl RaiseAttackStageTarget - adds r4, 0xFB - ldrb r0, [r4] - cmp r0, 0 - bne _08058BCC - strb r6, [r4] -_08058BCC: - adds r0, r6, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08058BD8: .4byte gUnknown_80F4DD0 -_08058BDC: .4byte gUnknown_8106A4C - thumb_func_end sub_8058B84 - - thumb_func_start sub_8058BE0 -sub_8058BE0: - push {lr} - adds r1, r0, 0 - bl EndureStatusTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_8058BE0 - - thumb_func_start sub_8058BF0 -sub_8058BF0: - push {lr} - movs r2, 0x1 - movs r3, 0x1 - bl LowerMovementSpeedTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_8058BF0 - - thumb_func_start sub_8058C00 -sub_8058C00: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058C3A - movs r7, 0x1 - ldr r0, _08058C44 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08058C3A - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl ConfuseStatusTarget -_08058C3A: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058C44: .4byte gUnknown_80F4DF8 - thumb_func_end sub_8058C00 - - thumb_func_start sub_8058C48 -sub_8058C48: - push {r4-r7,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - adds r5, r3, 0 - movs r1, 0xC0 - lsls r1, 1 - movs r0, 0x80 - bl DungeonRandomRange - adds r3, r0, 0 - ldr r0, [r4, 0x70] - ldrb r0, [r0, 0x9] - muls r0, r3 - cmp r0, 0 - bge _08058C6C - adds r0, 0xFF -_08058C6C: - asrs r3, r0, 8 - cmp r3, 0 - bge _08058C74 - movs r3, 0x1 -_08058C74: - cmp r3, 0xC7 - ble _08058C7A - movs r3, 0xC7 -_08058C7A: - str r5, [sp] - adds r0, r4, 0 - adds r1, r6, 0 - adds r2, r7, 0 - bl sub_8055864 - adds r1, r0, 0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8058C48 - - thumb_func_start sub_8058C98 -sub_8058C98: - push {r4-r7,lr} - sub sp, 0x8 - adds r4, r0, 0 - adds r5, r1, 0 - adds r7, r3, 0 - ldr r0, [sp, 0x1C] - movs r6, 0 - movs r3, 0x80 - lsls r3, 1 - str r0, [sp] - adds r0, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058CDE - movs r6, 0x1 - ldr r0, _08058CE8 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08058CDE - str r6, [sp] - movs r0, 0 - str r0, [sp, 0x4] - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r7, 0 - movs r3, 0x1 - bl LowerDefenseStageTarget -_08058CDE: - adds r0, r6, 0 - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058CE8: .4byte gUnknown_80F4DC0 - thumb_func_end sub_8058C98 - - thumb_func_start sub_8058CEC -sub_8058CEC: - push {r4-r6,lr} - sub sp, 0x8 - adds r5, r0, 0 - movs r6, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058D28 - movs r6, 0x1 - adds r0, r5, 0 - movs r1, 0 - bl sub_8057308 - lsls r0, 24 - cmp r0, 0 - beq _08058D28 - ldr r0, _08058D34 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - adds r0, r5, 0 - adds r1, r5, 0 - movs r3, 0x2 - bl LowerAttackStageTarget -_08058D28: - adds r0, r6, 0 - add sp, 0x8 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08058D34: .4byte gUnknown_8106A50 - thumb_func_end sub_8058CEC - - thumb_func_start sub_8058D38 -sub_8058D38: - push {lr} - bl SleeplessStatusTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_8058D38 - - thumb_func_start sub_8058D44 -sub_8058D44: - push {r4-r7,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r6, r1, 0 - mov r12, r2 - adds r5, r3, 0 - ldr r2, [r4, 0x70] - movs r0, 0x10 - ldrsh r3, [r2, r0] - adds r0, r3, 0 - cmp r3, 0 - bge _08058D5E - adds r0, r3, 0x3 -_08058D5E: - movs r7, 0xE - ldrsh r1, [r2, r7] - asrs r0, 2 - cmp r1, r0 - bgt _08058D6C - movs r3, 0 - b _08058D92 -_08058D6C: - movs r0, 0xE - ldrsh r1, [r2, r0] - lsrs r0, r3, 31 - adds r0, r3, r0 - asrs r0, 1 - cmp r1, r0 - bgt _08058D7E - movs r3, 0x1 - b _08058D92 -_08058D7E: - lsls r0, r3, 1 - adds r0, r3 - cmp r0, 0 - bge _08058D88 - adds r0, 0x3 -_08058D88: - asrs r0, 2 - movs r3, 0x3 - cmp r1, r0 - bgt _08058D92 - movs r3, 0x2 -_08058D92: - ldr r1, _08058DB8 - lsls r0, r3, 2 - adds r0, r1 - ldr r3, [r0] - str r5, [sp] - adds r0, r4, 0 - adds r1, r6, 0 - mov r2, r12 - bl sub_8055640 - adds r1, r0, 0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058DB8: .4byte gUnknown_80F51B4 - thumb_func_end sub_8058D44 - - thumb_func_start sub_8058DBC -sub_8058DBC: - push {r4-r7,lr} - adds r7, r0, 0 - adds r6, r1, 0 - ldr r5, [r7, 0x70] - ldr r4, [r6, 0x70] - adds r0, r6, 0 - bl nullsub_92 - movs r3, 0 -_08058DCE: - lsls r2, r3, 1 - adds r1, r5, 0 - adds r1, 0x1C - adds r1, r2 - adds r0, r4, 0 - adds r0, 0x1C - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - adds r1, r5, 0 - adds r1, 0x20 - adds r1, r2 - adds r0, r4, 0 - adds r0, 0x20 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - adds r1, r5, 0 - adds r1, 0x24 - adds r1, r2 - adds r0, r4, 0 - adds r0, 0x24 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - lsls r2, r3, 2 - adds r1, r5, 0 - adds r1, 0x2C - adds r1, r2 - adds r0, r4, 0 - adds r0, 0x2C - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - adds r1, r5, 0 - adds r1, 0x34 - adds r1, r2 - adds r0, r4, 0 - adds r0, 0x34 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - adds r3, 0x1 - cmp r3, 0x1 - ble _08058DCE - ldr r0, _08058E54 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08058E58 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_80522F4 - adds r1, r5, 0 - adds r1, 0xFB - ldrb r0, [r1] - cmp r0, 0 - bne _08058E4C - movs r0, 0x1 - strb r0, [r1] -_08058E4C: - movs r0, 0x1 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058E54: .4byte gAvailablePokemonNames -_08058E58: .4byte gUnknown_80FBD58 - thumb_func_end sub_8058DBC - thumb_func_start sub_8058E5C sub_8058E5C: push {r4-r7,lr} diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 289089c2c..a89961d40 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -203,7 +203,10 @@ struct DungeonEntityData /* 0x14E */ u16 visualFlags; /* 0x150 */ u16 previousVisualFlags; /* 0x152 */ u8 unk152; - u8 fill153[0x158 - 0x153]; + u8 unk153; + u8 unk154; + u8 unk155; + u8 fill158[0x158 - 0x156]; u8 unk158; u8 unk159; u8 unk15A; diff --git a/include/pokemon.h b/include/pokemon.h index 81f1138fb..22a728fa6 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -17,7 +17,7 @@ struct Offense { u8 att[2]; u8 def[2]; -}; +}; struct unkPokeSubStruct_C { @@ -206,7 +206,7 @@ u8 GetWalkableTiles(s16 index); u8 GetUnk1B(s16 index); bool8 GetIsMoving(s16 index); u8 GetUnk1D(s16 index); -u16 GetLowKickDmg(s16 index); +u32 GetLowKickDmg(s16 index); u32 GetSizeOrbDmg(s16 index); u8 GetFriendArea(s16 index); u16 GetBaseHP(s16 index); diff --git a/include/status_checker.h b/include/status_checker.h index d3cc1f85f..edf45d958 100644 --- a/include/status_checker.h +++ b/include/status_checker.h @@ -38,7 +38,7 @@ 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 IdentifyOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); -u32 sub_805C1BC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); +bool8 sub_805C1BC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); bool8 sub_805C1E4(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); diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index c873c9852..126aca11a 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -585,7 +585,7 @@ void sub_80420C8(struct DungeonEntity *pokemon) sub_8041550(pokemon, 0x15, 1, 3, 2, 0); } -void nullsub_92(void) +void nullsub_92(struct DungeonEntity *pokemon) { } diff --git a/src/code_8057824.c b/src/code_8057824.c index 1dbb513a1..c1981789b 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -1,15 +1,19 @@ #include "global.h" +#include "constants/ability.h" #include "constants/status.h" #include "constants/weather.h" #include "charge_move.h" #include "dungeon_global_data.h" #include "dungeon_ai.h" #include "dungeon_entity.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_random.h" #include "dungeon_util.h" #include "code_8077274_1.h" #include "code_808417C.h" #include "map.h" #include "moves.h" +#include "pokemon.h" #include "status.h" #include "status_checks_1.h" #include "tile_types.h" @@ -17,8 +21,45 @@ extern u8 gUnknown_202DE58[]; extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_202DFE8[]; +extern u8 *gUnknown_80FBD58[]; +extern u32 gUnknown_80F51B4[]; +extern s16 gUnknown_80F4DC0; +extern s16 gUnknown_80F4DF8; +extern s16 gUnknown_80F4DD0; +extern s16 gUnknown_80F4DBC; +extern u8 *gUnknown_80FACC4[]; +extern s16 gUnknown_80F4DF4; +extern u32 gUnknown_80F4F4C; +extern s16 gUnknown_80F4EB8[]; +extern u8 gUnknown_202F21A; +extern s16 gUnknown_80F500A[]; +extern s16 gUnknown_80F4DD6; +extern u8 gUnknown_202F219; +extern u32 gUnknown_80F51A4[]; +extern u8 *gUnknown_80FACA4[]; +extern u32 gUnknown_80F4F54; +extern u8 *gUnknown_80FD104[]; +extern s16 gUnknown_80F4DD4; +extern u32 gUnknown_80F4F6C; +extern u32 gUnknown_80F4DE6; +extern u32 gUnknown_80F4DEE; +extern u32 gUnknown_80F4DC2; +extern u8 *gUnknown_80FD294[]; +extern u8 *gUnknown_80FD2B4[]; +extern u8 *gUnknown_80FAC74[]; +extern u8 *gUnknown_80FAC54[]; +extern u32 gUnknown_80F4F50; +extern s16 gUnknown_80F4DB8; +extern s16 gUnknown_80F4DBA; +extern s16 gUnknown_80F55BC[]; +extern u8 *gUnknown_80FAE00[]; +extern u8 *gUnknown_80FADD8[]; +extern s16 gUnknown_80F4E02; +extern s16 gUnknown_80F4E04; extern s16 gUnknown_80F4DB6; +extern s16 gUnknown_80F4EDC[]; extern u16 gUnknown_80F4F42; extern u8 *gUnknown_80FAC88; extern u8 *gUnknown_80FD018[]; @@ -56,16 +97,21 @@ struct unkStruct_80928C0 void sub_80928C0(u8 *buffer, struct PokemonMove *move, struct unkStruct_80928C0 *param_3); +extern void nullsub_92(struct DungeonEntity *); +extern u32 sub_8055864(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *param_3, s32 param_4, s32 param_5); +void sub_8079E34(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 param_3); extern u8 sub_807EAA0(u32, u32); extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, const char[]); extern s32 sub_80556BC(struct DungeonEntity *, struct DungeonEntity *, u8, struct PokemonMove *, u32, u32); -extern u8 sub_805727C(struct DungeonEntity *, struct DungeonEntity *, s16); +extern bool8 sub_805727C(struct DungeonEntity *, struct DungeonEntity *, s16); extern void sub_8078968(struct DungeonEntity *r0, struct DungeonEntity *r1); 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); u8 sub_8057620(u32 param_1); extern s16 sub_8094828(u16, u8); +extern u8 sub_8057308(struct DungeonEntity *, u32); +extern void sub_806F324(struct DungeonEntity *, s32, u32, u32); extern s16 gUnknown_80F4DB4; extern u32 gUnknown_8106A4C; @@ -136,7 +182,7 @@ bool8 sub_8057634(struct DungeonEntity *pokemon, struct DungeonEntity *target, s uVar3 = FALSE; if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { uVar3 = TRUE; - if (sub_805727C(pokemon, target, gUnknown_80F4DB4) != 0) { + if (sub_805727C(pokemon, target, gUnknown_80F4DB4)) { LowerDefenseStageTarget(pokemon, target, gUnknown_8106A4C, 1, 1, FALSE); } } @@ -257,7 +303,7 @@ bool32 sub_80578FC(struct DungeonEntity *pokemon, struct DungeonEntity *target, uVar3 = FALSE; if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { uVar3 = TRUE; - if (sub_805727C(pokemon,target, gUnknown_80F4DB6) != 0) { + if (sub_805727C(pokemon,target, gUnknown_80F4DB6)) { LowerMovementSpeedTarget(pokemon, target, 1, FALSE); } } @@ -407,7 +453,7 @@ bool8 sub_8057BEC(struct DungeonEntity *pokemon, struct DungeonEntity *target, s if (IsSleeping(pokemon)) { if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { uVar3 = TRUE; - if (sub_805727C(pokemon,target,gUnknown_80F4E0A) != 0) { + if (sub_805727C(pokemon,target,gUnknown_80F4E0A)) { CringeStatusTarget(pokemon,target,FALSE); } } @@ -431,7 +477,7 @@ bool8 sub_8057C88(struct DungeonEntity *pokemon, struct DungeonEntity *target, s uVar3 = FALSE; if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { uVar3 = TRUE; - if (sub_805727C(pokemon,target,gUnknown_80F4DF6) != 0) { + if (sub_805727C(pokemon,target,gUnknown_80F4DF6)) { CringeStatusTarget(pokemon,target,FALSE); } } @@ -466,7 +512,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) { + if (sub_805727C(pokemon,target,gUnknown_80F4E08)) { SqueezedStatusTarget(pokemon,target,0x3b,FALSE); } } @@ -475,6 +521,899 @@ bool8 sub_8057D20(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 sub_8057D7C(struct DungeonEntity * param_1, struct DungeonEntity * param_2) { - LowerDefenseStageTarget(param_1, param_2, gUnknown_8106A50, 2, 1, 1); + LowerDefenseStageTarget(param_1, param_2, gUnknown_8106A50, 2, 1, TRUE); + return TRUE; +} + +NAKED bool8 sub_8057D9C(struct DungeonEntity * param_1, struct DungeonEntity * param_2) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tadds r6, r0, 0\n" + "\tadds r4, r1, 0\n" + "\tldr r0, [r4, 0x70]\n" + "\tmovs r5, 0\n" + "\tldr r1, _08057DF8\n" + "\tmov r8, r1\n" + "\tmovs r1, 0x8C\n" + "\tlsls r1, 1\n" + "\tadds r2, r0, r1\n" + "\tmovs r0, 0x1\n" + "\tmov r12, r0\n" + "\tmovs r7, 0x10\n" + "\tmovs r3, 0x3\n" +"_08057DBC:\n" + "\tldrb r1, [r2]\n" + "\tmov r0, r12\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _08057DD4\n" + "\tadds r0, r7, 0\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _08057DD4\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r2, 0x4]\n" + "\tmovs r5, 0x1\n" +"_08057DD4:\n" + "\tadds r2, 0x8\n" + "\tsubs r3, 0x1\n" + "\tcmp r3, 0\n" + "\tbge _08057DBC\n" + "\tmov r0, r8\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0\n" + "\tbl SetMessageArgument\n" + "\tcmp r5, 0\n" + "\tbeq _08057E00\n" + "\tldr r0, _08057DFC\n" + "\tldr r2, [r0]\n" + "\tadds r0, r6, 0\n" + "\tadds r1, r4, 0\n" + "\tbl sub_80522F4\n" + "\tb _08057E0C\n" + "\t.align 2, 0\n" +"_08057DF8: .4byte gUnknown_202DFE8\n" +"_08057DFC: .4byte gUnknown_80FD350\n" +"_08057E00:\n" + "\tldr r0, _08057E18\n" + "\tldr r2, [r0]\n" + "\tadds r0, r6, 0\n" + "\tadds r1, r4, 0\n" + "\tbl sub_80522F4\n" +"_08057E0C:\n" + "\tadds r0, r5, 0\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" +"_08057E18: .4byte gUnknown_80FD370"); +} + +bool8 FocusEnergyMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) +{ + FocusEnergyStatusTarget(pokemon, target); + return TRUE; +} + +bool8 sub_8057E28(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + WhifferStatusTarget(pokemon, target, CalculateStatusTurns(target, gUnknown_80F4EDC, TRUE)); + return TRUE; +} + +bool8 sub_8057E50(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + SendThawedMessage(pokemon, target); + MirrorMoveStatusTarget(pokemon, target); + return TRUE; +} + +bool8 sub_8057E6C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + struct DungeonEntityData *entityData; + bool32 uVar4; + + uVar4 = FALSE; + entityData = pokemon->entityData; + SendThawedMessage(pokemon,target); + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if (sub_8057308(pokemon, 0) != 0) { + entityData->unk155 = 1; + } + } + return uVar4; +} + +bool8 sub_8057ED0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4E04)) + { + ChangeAttackMultiplierTarget(pokemon, target, gUnknown_8106A4C, 0x80, FALSE); + } + } + return uVar4; +} + +bool8 sub_8057F24(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + struct DungeonEntityData *entityData; + + entityData = pokemon->entityData; + entityData->HP = 1; + ChangeAttackMultiplierTarget(pokemon,target,gUnknown_8106A4C,0x40,TRUE); + ChangeAttackMultiplierTarget(pokemon,target,gUnknown_8106A50,0x40,TRUE); + entityData->unk154 = 1; + return TRUE; +} + +bool8 sub_8057F7C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4E02)) + { + LowerAccuracyStageTarget(pokemon, target, gUnknown_8106A4C, FALSE); + } + } + return uVar4; +} + +bool8 sub_8057FCC(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + ConfuseStatusTarget(pokemon, target, TRUE); + RaiseAttackStageTarget(pokemon, target, gUnknown_8106A50, 1); + return TRUE; +} + +bool8 sub_8057FF4(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + u8 flashFireStatus; + + flashFireStatus = GetFlashFireStatus(target); + if (flashFireStatus != FLASH_FIRE_STATUS_NONE) { + if (target->entityData->unk152 == 0) { + target->entityData->unk152 = 1; + SetMessageArgument(gUnknown_202DFE8,target,0); + if (flashFireStatus == FLASH_FIRE_STATUS_MAXED) { + sub_80522F4(pokemon,target,*gUnknown_80FAE00); // Fire moves won't become stronger + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FADD8); // $m0 used flash fire to absorb fire + } + } + } + else { + BurnedStatusTarget(pokemon,target, 0, TRUE); + } + return TRUE; +} + +bool8 sub_805805C(struct DungeonEntity * pokemon,struct DungeonEntity * target,struct PokemonMove * move,s32 param_4) +{ + s16 *psVar3; + s32 index; + s32 r6; + bool8 local_24; + struct DungeonEntityData *entityData; + s32 IQ; + + entityData = pokemon->entityData; + + + r6 = 1; + index = 0; + if (0 <= gUnknown_80F55BC[0]) { + IQ = entityData->IQ; + for(psVar3 = &gUnknown_80F55BC[index]; (999 > index) && (*psVar3 >= 0); psVar3 = psVar3 + 2, index++) + { + if ((IQ < *psVar3)){ + r6 = psVar3[1]; + goto _080580B0; + } + } + } +_080580B0: + sub_806F370(pokemon,target,r6,1,&local_24,GetMoveType(move),sub_8057600(move,param_4),0,1,0); + local_24 = local_24 == 0; + return local_24; +} + +bool8 GrudgeMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity * target) +{ + struct DungeonEntityData *entityData; + bool8 hasGrudge; + + hasGrudge = FALSE; + entityData = target->entityData; + SetMessageArgument(gUnknown_202DFE8,target,0); + if (entityData->grudgeStatus) { + sub_80522F4(pokemon,target,*gUnknown_80FD2B4); + } + else { + entityData->grudgeStatus = TRUE; + hasGrudge = TRUE; + sub_80522F4(pokemon,target,*gUnknown_80FD294); + } + return hasGrudge; +} + +bool8 sub_805815C(struct DungeonEntity *pokemon, struct DungeonEntity *target) +{ + sub_80797A0(pokemon, target, 0x4); + return TRUE; +} + +bool8 sub_805816C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + SendThawedMessage(pokemon, target); + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DB8)) + { + BurnedStatusTarget(pokemon, target, 0, FALSE); + } + } + return uVar4; +} + +bool8 sub_80581D0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + SendThawedMessage(pokemon, target); + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DBA)) + { + BurnedStatusTarget(pokemon, target, 0, FALSE); + } + } + return uVar4; +} + +bool8 sub_8058234(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + u16 uVar1; + uVar1 = (move->moveID == 0x13B) ? 0x7A : 0x51; + ExposeStatusTarget(pokemon, target, uVar1); + return TRUE; +} + +bool8 sub_805825C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + RaiseAccuracyStageTarget(pokemon, target, gUnknown_8106A50); + return TRUE; +} + +bool8 sub_8058270(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + u32 r3; + + r3 = 1; + if((u8)(target->entityData->chargingStatus - 7) <= 1) + r3 = 2; + flag = sub_8055640(pokemon,target,move,r3 << 8,param_4) ? TRUE : FALSE; + return flag; +} + +bool8 sub_80582AC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + RaiseDefenseStageTarget(pokemon, target, gUnknown_8106A4C, 1); + return TRUE; +} + +bool8 sub_80582C4(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + ParalyzeStatusTarget(pokemon, target, TRUE); + return TRUE; +} + +bool8 sub_80582D4(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + RaiseAttackStageTarget(pokemon, target, gUnknown_8106A4C, 1); + return TRUE; +} + +bool8 RazorWindMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) +{ + bool8 flag; + + if (MoveMatchesChargingStatus(pokemon,move)) { + flag = sub_8055640(pokemon,target,move,gUnknown_80F4F50,param_4) ? TRUE : FALSE; + sub_8079764(pokemon); + } + else { + sub_8079618(pokemon,pokemon,CHARGING_STATUS_RAZOR_WIND,move,*gUnknown_80FAC54); + flag = TRUE; + } + return flag; +} + +bool8 BideMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + sub_8079618(pokemon, target, CHARGING_STATUS_BIDE, move, *gUnknown_80FAC74); + return TRUE; +} + +bool8 sub_805836C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + s32 iVar2; + bool8 local_18; + + local_18 = FALSE; + iVar2 = pokemon->entityData->unkA0 * 2; + if (999 < iVar2) { + iVar2 = 999; + } + sub_806F370(pokemon,target,iVar2,1,&local_18, GetMoveType(move),0x1ff,0,1,0); + + local_18 = local_18 == 0; + return local_18; +} + +bool8 sub_80583D8(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DC2)) + { + LowerDefenseStageTarget(pokemon, target, gUnknown_8106A50, 1, 1, FALSE); + } + } + return uVar4; +} + +bool8 sub_8058430(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DEE)) + { + CringeStatusTarget(pokemon, target, FALSE); + } + } + return uVar4; +} + +bool8 sub_8058478(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DE6)) + { + ParalyzeStatusTarget(pokemon, target, FALSE); + } + } + return uVar4; +} + +bool8 sub_80584C0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + s32 diffHP; + bool8 local_24; + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData1; + + + local_24 = 0; + entityData = pokemon->entityData; + entityData1 = target->entityData; + diffHP = entityData1->HP - entityData->HP; + if (diffHP < 0) { + diffHP = 0; + } + sub_806F370(pokemon,target,diffHP,0,&local_24,GetMoveType(move),sub_8057600(move,param_4),0,1,0); + + local_24 = local_24 == 0; + return local_24; +} + +bool8 sub_8058548(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + u32 r5; + + r5 = 0x80 << 1; + if((pokemon->entityData->nonVolatileStatus) != NON_VOLATILE_STATUS_NONE) + r5 = gUnknown_80F4F6C; + flag = sub_8055640(pokemon,target,move,r5,param_4) ? TRUE : FALSE; + return flag; +} + +bool8 sub_8058580(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DD4)) + { + LowerMovementSpeedTarget(pokemon, target, 1, FALSE); + } + } + return uVar4; +} + +bool8 sub_80585CC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + + flag = FALSE; + if ((target->entityData->protectionStatus == '\x01') || (target->entityData->protectionStatus == '\x03')) { + sub_80522F4(pokemon,target,*gUnknown_80FD104); + SendProtectionEndMessage(pokemon,target); + flag = TRUE; + } + + flag |= (sub_8055640(pokemon,target,move,0x100,param_4) != 0); + return flag; +} + +bool8 sub_8058638(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 uVar4; + + uVar4 = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + uVar4 = TRUE; + if(sub_805727C(pokemon, target, 0)) + { + LowerMovementSpeedTarget(pokemon, target, 1, FALSE); + } + } + return uVar4; +} + +bool8 sub_805867C(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) +{ + bool8 flag; + + if (MoveMatchesChargingStatus(pokemon,move)) { + flag = sub_8055640(pokemon,target,move,gUnknown_80F4F54,param_4) ? TRUE : FALSE; + sub_8079764(pokemon); + } + else { + sub_8079618(pokemon,pokemon,CHARGING_STATUS_FOCUS_PUNCH,move,*gUnknown_80FACA4); + flag = TRUE; + } + return flag; +} + +bool8 sub_80586DC(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) +{ + bool8 hasLiquidOoze; + s32 uVar3; + s32 newHP; + bool8 flag; + struct DungeonEntityData *entityData; + + hasLiquidOoze = HasAbility(target, ABILITY_LIQUID_OOZE); + uVar3 = sub_8055640(pokemon,target,move,0x100,param_4); + flag = uVar3 != 0 ? TRUE : FALSE; + if (flag && sub_8057308(pokemon, 0)) { + newHP = uVar3 / 2; + entityData = pokemon->entityData; + flag = TRUE; + if (newHP < 1) { + newHP = 1; + } + if (!entityData->unkFB) { + entityData->unkFB = TRUE; + } + if (hasLiquidOoze) { + sub_806F324(pokemon, newHP, 0xd, 0x1fa); + } + else { + HealTargetHP(pokemon, pokemon, newHP, 0, TRUE); + } + } + return flag; +} + + +// NOTE: copy of sub_805AFA4 in status_checker.c except for different reg for entityData +bool8 sub_8058770(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) +{ + s32 r0; + s32 r2; + s32 r1; + bool8 flag; + +#ifndef NONMATCHING + register struct DungeonEntityData *entityData asm("r2"); +#else + struct DungeonEntityData *entityData; +#endif + + entityData = pokemon->entityData; + r2 = entityData->maxHP; + r0 = r2; + if (r2 < 0) { + r0 = r2 + 3; + } + if (entityData->HP <= r0 >> 2) { + r2 = 0; + } + else if (r1 = entityData->HP, r1 <= r2 / 2) { + r2 = 1; + } + else + { + r0 = r2 * 3; + if (r0 < 0) { + r0 = r0 + 3; + } + if (r0 >>= 2, r2 = 3, r1 <= r0) { + r2 = 2; + } + } + flag = sub_8055640(pokemon,target,move,gUnknown_80F51A4[r2],param_4) ? TRUE : FALSE; + return flag; +} + +bool8 sub_80587E8(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) +{ + bool8 flag; + + if (target->entityData->nonVolatileStatus == NON_VOLATILE_STATUS_PARALYZED) { + flag = sub_8055640(pokemon,target,move,0x80 << 2,param_4) ? TRUE : FALSE; + SendNonVolatileEndMessage(pokemon, target); + } + else { + flag = sub_8055640(pokemon,target,move,0x80 << 1,param_4) ? TRUE : FALSE; + } + return flag; +} + +bool8 sub_8058838(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + LowerDefenseStageTarget(pokemon, target, gUnknown_8106A50, 3, 1, TRUE); + return TRUE; +} + +bool8 sub_8058858(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + s32 index = gUnknown_8106A4C; + LowerAttackStageTarget(pokemon, target, index, 1, 1, TRUE); + LowerDefenseStageTarget(pokemon, target, index, 1, 1, TRUE); + return TRUE; +} + +bool8 sub_805889C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + ImmobilizedStatusTarget(pokemon, target); + return TRUE; +} + +bool8 sub_80588A8(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + sub_8079E34(pokemon, target, TRUE); + return TRUE; +} + +bool8 sub_80588B8(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag = FALSE; + if(sub_8055640(pokemon, target, move, 0x80 << 1, param_4) != 0) + { + flag = TRUE; + if(sub_8057308(pokemon, 0)) + { + gUnknown_202F219 = 1; + } + } + return flag; +} + +bool8 sub_80588F4(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + struct DungeonEntityData *entityData = target->entityData; + + flag = sub_8055640(pokemon, target, move, GetLowKickDmg(entityData->transformSpecies), param_4) != 0 ? TRUE: FALSE; + return flag; +} + + +bool8 sub_8058930(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag = FALSE; + struct DungeonEntityData *entityData; + s32 index1; + s32 index2; + if(sub_8055640(pokemon, target, move, 0x80 << 1, param_4) != 0) + { + flag = TRUE; + if(sub_8057308(pokemon, gUnknown_80F4DD6)) + { + entityData = pokemon->entityData; + RaiseMovementSpeedTarget(pokemon, pokemon, 0, TRUE); + index1 = gUnknown_8106A4C; + RaiseAttackStageTarget(pokemon, pokemon, index1, 1); + index2 = gUnknown_8106A50; + RaiseAttackStageTarget(pokemon, pokemon, index2, 1); + RaiseDefenseStageTarget(pokemon, pokemon, index1, 1); + RaiseDefenseStageTarget(pokemon, pokemon, index2, 1); + if(entityData->unkFB == 0) + { + entityData->unkFB = 1; + } + } + } + return flag; +} + +bool8 sub_80589D4(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + HealTargetHP(pokemon, target, gUnknown_80F500A[GetWeather(pokemon)], 0, TRUE); + return TRUE; +} + +bool8 sub_8058A08(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + RaiseMovementSpeedTarget(pokemon, target, 0, TRUE); + return TRUE; +} + +bool8 sub_8058A18(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag = FALSE; + if(sub_8055640(pokemon, target, move, 0x80 << 1, param_4) != 0) + { + flag = TRUE; + if(sub_8057308(pokemon, 0)) + { + gUnknown_202F21A = 1; + } + } + return flag; +} + +bool8 sub_8058A54(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + SureShotStatusTarget(pokemon, target, CalculateStatusTurns(target, gUnknown_80F4EB8, FALSE)); + return TRUE; +} + +bool8 sub_8058A7C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + RaiseDefenseStageTarget(pokemon, target, gUnknown_8106A4C, 1); + RaiseDefenseStageTarget(pokemon, target, gUnknown_8106A50, 1); + return TRUE; +} + +bool8 SkyAttackMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag = FALSE; + + if(MoveMatchesChargingStatus(pokemon, move)) + { + if (sub_8055640(pokemon, target, move, gUnknown_80F4F4C, param_4) != 0) { + flag = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DF4)) + CringeStatusTarget(pokemon, target, FALSE); + } + sub_8079764(pokemon); + } + else { + sub_8079618(pokemon, pokemon, CHARGING_STATUS_SKY_ATTACK, move, *gUnknown_80FACC4); + flag = TRUE; + } + return flag; +} + +bool8 sub_8058B3C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + + flag = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + flag = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DBC)) + { + FrozenStatusTarget(pokemon, target, FALSE); + } + } + return flag; +} + +bool8 sub_8058B84(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + struct DungeonEntityData *entityData; + + flag = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + flag = TRUE; + if(sub_805727C(pokemon, pokemon, gUnknown_80F4DD0)) + { + entityData = pokemon->entityData; + RaiseAttackStageTarget(pokemon, pokemon, gUnknown_8106A4C, 1); + if(entityData->unkFB == 0) + entityData->unkFB = 1; + } + } + return flag; +} + +bool8 sub_8058BE0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + EndureStatusTarget(pokemon, pokemon); + return TRUE; +} + +bool8 sub_8058BF0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + LowerMovementSpeedTarget(pokemon, target, 1, TRUE); + return TRUE; +} + +bool8 sub_8058C00(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + + flag = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + flag = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DF8)) + { + ConfuseStatusTarget(pokemon, target, FALSE); + } + } + return flag; +} + +bool8 sub_8058C48(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + s32 rand; + s32 iVar2; + bool8 flag; + + rand = DungeonRandomRange(128, 384); // 0x80 - 0x180 + iVar2 = rand * pokemon->entityData->level; + + if (iVar2 < 0) { + iVar2 = iVar2 + 0xFF; + } + rand = iVar2 >> 8; + if (rand < 0) { + rand = 1; + } + if (199 < rand) { + rand = 199; + } + flag = sub_8055864(pokemon,target,move,rand,param_4) != 0 ? TRUE: FALSE; + return flag; +} + +bool8 sub_8058C98(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4, u32 param_5) +{ + bool8 flag; + + flag = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_5) != 0) { + flag = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DC0)) + { + LowerDefenseStageTarget(pokemon, target, param_4, 1, 1, FALSE); + } + } + return flag; +} + +bool8 sub_8058CEC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag = FALSE; + if(sub_8055640(pokemon, target, move, 0x80 << 1, param_4) != 0) + { + flag = TRUE; + if(sub_8057308(pokemon, 0)) + { + LowerAttackStageTarget(pokemon, pokemon, gUnknown_8106A50, 2, 0, FALSE); + } + } + return flag; +} + +bool8 sub_8058D38(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + SleeplessStatusTarget(pokemon, target); + return TRUE; +} + + +// NOTE: same as sub_8058770 +bool8 sub_8058D44(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) +{ + s32 r0; + s32 r2; + s32 r1; + bool8 flag; + +#ifndef NONMATCHING + register struct DungeonEntityData *entityData asm("r2"); +#else + struct DungeonEntityData *entityData; +#endif + + entityData = pokemon->entityData; + r2 = entityData->maxHP; + r0 = r2; + if (r2 < 0) { + r0 = r2 + 3; + } + if (entityData->HP <= r0 >> 2) { + r2 = 0; + } + else if (r1 = entityData->HP, r1 <= r2 / 2) { + r2 = 1; + } + else + { + r0 = r2 * 3; + if (r0 < 0) { + r0 = r0 + 3; + } + if (r0 >>= 2, r2 = 3, r1 <= r0) { + r2 = 2; + } + } + flag = sub_8055640(pokemon,target,move,gUnknown_80F51B4[r2],param_4) ? TRUE : FALSE; + return flag; +} + + +bool8 PsychUpMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) +{ + s32 index; + struct DungeonEntityData *iVar3; + struct DungeonEntityData *iVar4; + + iVar4 = pokemon->entityData; + iVar3 = target->entityData; + nullsub_92(target); + + for(index = 0; index < 2; index++) + { + iVar4->attackStages[index] = iVar3->attackStages[index]; + iVar4->defenseStages[index] = iVar3->defenseStages[index]; + iVar4->accuracyStages[index] = iVar3->accuracyStages[index]; + iVar4->attackMultipliers[index] = iVar3->attackMultipliers[index]; + iVar4->defenseMultipliers[index] = iVar3->defenseMultipliers[index]; + } + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FBD58); // It psyched itself up! + if (iVar4->unkFB == 0) { + iVar4->unkFB = 1; + } return TRUE; } diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index 185ac91fd..524e81963 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -708,7 +708,7 @@ void sub_8079618(struct DungeonEntity *pokemon, struct DungeonEntity *target, u8 else if ((u8)(newStatus - 9) < 2) { entityData->unkFF = 2; } - if (newStatus == 1) { + if (newStatus == CHARGING_STATUS_BIDE) { entityData->chargingStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E9C, FALSE) + 1; entityData->unkA0 = 0; } diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 155067f2c..29291938a 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -368,7 +368,7 @@ u8 GetUnk1D(s16 index) return gMonsterParameters[index].unk1D; } -u16 GetLowKickDmg(s16 index) +u32 GetLowKickDmg(s16 index) { return gMonsterParameters[index].lowkick_dmg; } diff --git a/src/status_checker.c b/src/status_checker.c index 4d1be30f1..bc8d2ba99 100644 --- a/src/status_checker.c +++ b/src/status_checker.c @@ -1225,12 +1225,12 @@ bool8 IdentifyOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *tar return TRUE; } -u32 sub_805C1BC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) +bool8 sub_805C1BC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) { - u32 uVar1; + bool8 flag; - uVar1 = sub_8055864(pokemon, target, move, gUnknown_80F4F80, param_4); - return ((-uVar1 | uVar1) >> 0x1f); + flag = sub_8055864(pokemon, target, move, gUnknown_80F4F80, param_4) != 0 ? TRUE : FALSE; + return flag; } bool8 sub_805C1E4(struct DungeonEntity *pokemon, struct DungeonEntity *target) From 3c34810ca17b90c2dcd20c4c1f8ed64005abdbd2 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 10 Dec 2022 10:14:35 -0800 Subject: [PATCH 15/21] some more decomp --- asm/code_8057824.s | 652 ------------------------------------------- asm/code_8083654.s | 6 +- src/code_8057824.c | 417 +++++++++++++++++++++------ src/code_8057824_1.c | 6 +- src/ground_main.c | 2 +- 5 files changed, 346 insertions(+), 737 deletions(-) diff --git a/asm/code_8057824.s b/asm/code_8057824.s index ae80cd0f1..96a321b47 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -5,658 +5,6 @@ .text - thumb_func_start sub_8058E5C -sub_8058E5C: - push {r4-r7,lr} - sub sp, 0x18 - adds r5, r0, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058ED0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08058ED0 - ldr r0, [r5, 0x70] - movs r1, 0x10 - ldrsh r2, [r0, r1] - cmp r2, 0 - bge _08058E8C - adds r2, 0x7 -_08058E8C: - asrs r6, r2, 3 - cmp r6, 0 - bne _08058E94 - movs r6, 0x1 -_08058E94: - movs r7, 0x1 - adds r0, r5, 0 - movs r1, 0x7 - bl HasAbility - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08058ED0 - adds r0, r5, 0 - movs r1, 0 - bl sub_8057308 - lsls r0, 24 - cmp r0, 0 - beq _08058ED0 - str r4, [sp] - str r4, [sp, 0x4] - ldr r0, _08058EDC - str r0, [sp, 0x8] - movs r0, 0x14 - str r0, [sp, 0xC] - str r7, [sp, 0x10] - str r4, [sp, 0x14] - adds r0, r5, 0 - adds r1, r5, 0 - adds r2, r6, 0 - movs r3, 0 - bl sub_806F370 -_08058ED0: - adds r0, r7, 0 - add sp, 0x18 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058EDC: .4byte 0x000001fd - thumb_func_end sub_8058E5C - - thumb_func_start sub_8058EE0 -sub_8058EE0: - push {lr} - sub sp, 0x4 - ldr r2, [r1, 0x70] - movs r3, 0x10 - ldrsh r2, [r2, r3] - lsrs r3, r2, 31 - adds r2, r3 - asrs r2, 1 - movs r3, 0x1 - str r3, [sp] - movs r3, 0 - bl HealTargetHP - movs r0, 0x1 - add sp, 0x4 - pop {r1} - bx r1 - thumb_func_end sub_8058EE0 - - thumb_func_start sub_8058F04 -sub_8058F04: - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - adds r4, r1, 0 - mov r12, r2 - adds r5, r3, 0 - ldr r3, [r4, 0x70] - movs r6, 0x1 - ldr r0, _08058F50 - ldr r1, [r0] - movs r0, 0xC1 - lsls r0, 9 - adds r2, r1, r0 - movs r0, 0xC - str r0, [r2] - ldr r0, _08058F54 - adds r1, r0 - movs r0, 0 - str r0, [r1] - adds r3, 0xC0 - ldrb r0, [r3] - cmp r0, 0xA - bne _08058F34 - movs r6, 0x2 -_08058F34: - lsls r3, r6, 8 - str r5, [sp] - adds r0, r7, 0 - adds r1, r4, 0 - mov r2, r12 - bl sub_8055640 - cmp r0, 0 - beq _08058F48 - movs r0, 0x1 -_08058F48: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058F50: .4byte gDungeonGlobalData -_08058F54: .4byte 0x00018204 - thumb_func_end sub_8058F04 - - thumb_func_start sub_8058F58 -sub_8058F58: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r6, r0, 0 - adds r7, r1, 0 - mov r8, r3 - ldr r0, _08058FB0 - ldr r0, [r0] - ldr r1, _08058FB4 - adds r0, r1 - movs r1, 0 - ldrsh r5, [r0, r1] - cmp r5, 0 - bge _08058F78 - movs r5, 0 -_08058F78: - cmp r5, 0x4A - ble _08058F7E - movs r5, 0x4A -_08058F7E: - ldr r4, _08058FB8 - lsls r5, 3 - adds r0, r5, r4 - ldrh r1, [r0] - mov r0, sp - bl InitPokemonMove - adds r4, 0x4 - adds r5, r4 - ldr r4, [r5] - adds r0, r6, 0 - adds r1, r7, 0 - mov r2, sp - mov r3, r8 - bl _call_via_r4 - lsls r0, 24 - lsrs r0, 24 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08058FB0: .4byte gDungeonGlobalData -_08058FB4: .4byte 0x00003a0e -_08058FB8: .4byte gNaturePowerMoveTable - thumb_func_end sub_8058F58 - - thumb_func_start sub_8058FBC -sub_8058FBC: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _08058FF6 - movs r7, 0x1 - ldr r0, _08059000 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _08058FF6 - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl ParalyzeStatusTarget -_08058FF6: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08059000: .4byte gUnknown_80F4DE4 - thumb_func_end sub_8058FBC - - thumb_func_start sub_8059004 -sub_8059004: - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x8 - mov r9, r0 - mov r8, r1 - adds r5, r2, 0 - adds r6, r3, 0 - adds r0, r5, 0 - bl GetMoveType - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_8057600 - lsls r0, 16 - asrs r0, 16 - mov r2, r8 - adds r2, 0x4 - str r4, [sp] - str r0, [sp, 0x4] - mov r0, r9 - mov r1, r8 - movs r3, 0x1 - bl sub_807DF38 - movs r0, 0x1 - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8059004 - - thumb_func_start sub_8059050 -sub_8059050: - push {lr} - movs r2, 0x1 - bl ParalyzeStatusTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_8059050 - - thumb_func_start sub_8059060 -sub_8059060: - push {lr} - sub sp, 0x4 - adds r3, r2, 0 - ldr r2, _0805907C - ldr r2, [r2] - str r2, [sp] - movs r2, 0xB - bl sub_8079618 - movs r0, 0x1 - add sp, 0x4 - pop {r1} - bx r1 - .align 2, 0 -_0805907C: .4byte gUnknown_80FAD6C - thumb_func_end sub_8059060 - - thumb_func_start sub_8059080 -sub_8059080: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _080590BA - movs r7, 0x1 - ldr r0, _080590C4 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _080590BA - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl ParalyzeStatusTarget -_080590BA: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080590C4: .4byte gUnknown_80F4DE8 - thumb_func_end sub_8059080 - - thumb_func_start sub_80590C8 -sub_80590C8: - push {lr} - bl MistStatusTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_80590C8 - - thumb_func_start sub_80590D4 -sub_80590D4: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x1C - mov r8, r0 - adds r6, r1, 0 - adds r5, r2, 0 - adds r7, r3, 0 - movs r0, 0 - mov r9, r0 - add r0, sp, 0x18 - mov r1, r9 - strb r1, [r0] - adds r0, r5, 0 - bl GetMoveType - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl sub_806F4A4 - lsls r0, 24 - lsrs r0, 24 - negs r1, r0 - orrs r1, r0 - lsrs r4, r1, 31 - adds r0, r6, 0 - movs r1, 0x37 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0805911C - movs r4, 0 -_0805911C: - cmp r4, 0 - bne _08059134 - ldr r0, _08059130 - ldr r2, [r0] - mov r0, r8 - adds r1, r6, 0 - bl sub_80522F4 - b _0805917A - .align 2, 0 -_08059130: .4byte gUnknown_80FEB88 -_08059134: - adds r0, r5, 0 - bl GetMoveType - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - adds r1, r7, 0 - bl sub_8057600 - lsls r0, 16 - asrs r0, 16 - ldr r2, _0805918C - add r1, sp, 0x18 - str r1, [sp] - str r4, [sp, 0x4] - str r0, [sp, 0x8] - mov r0, r9 - str r0, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - str r0, [sp, 0x14] - mov r0, r8 - adds r1, r6, 0 - movs r3, 0x1 - bl sub_806F370 - add r1, sp, 0x18 - movs r2, 0 - adds r0, r1, 0 - ldrb r0, [r0] - cmp r0, 0 - bne _08059178 - movs r2, 0x1 -_08059178: - strb r2, [r1] -_0805917A: - add r0, sp, 0x18 - ldrb r0, [r0] - add sp, 0x1C - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805918C: .4byte 0x0000270f - thumb_func_end sub_80590D4 - - thumb_func_start sub_8059190 -sub_8059190: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - movs r7, 0 - movs r4, 0x80 - lsls r4, 1 - str r3, [sp] - adds r3, r4, 0 - bl sub_8055640 - cmp r0, 0 - beq _080591CA - movs r7, 0x1 - ldr r0, _080591D4 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_805727C - lsls r0, 24 - cmp r0, 0 - beq _080591CA - adds r0, r5, 0 - adds r1, r6, 0 - movs r2, 0 - bl CringeStatusTarget -_080591CA: - adds r0, r7, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080591D4: .4byte gUnknown_80F4DEA - thumb_func_end sub_8059190 - - thumb_func_start sub_80591D8 -sub_80591D8: - push {lr} - bl SafeguardStatusTarget - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_80591D8 - - thumb_func_start sub_80591E4 -sub_80591E4: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r7, r0, 0 - adds r4, r1, 0 - adds r6, r2, 0 - adds r5, r3, 0 - movs r0, 0 - mov r8, r0 - adds r0, r4, 0 - movs r1, 0x3A - bl HasAbility - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r3, 0x80 - lsls r3, 1 - str r5, [sp] - adds r0, r7, 0 - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_8055640 - adds r1, r0, 0 - cmp r1, 0 - beq _0805927E - lsrs r0, r1, 31 - adds r0, r1, r0 - asrs r4, r0, 1 - cmp r4, 0 - bgt _0805922A - movs r4, 0x1 -_0805922A: - adds r0, r7, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0805927E - ldr r0, [r7, 0x70] - movs r1, 0x1 - mov r8, r1 - adds r1, r0, 0 - adds r1, 0xFB - ldrb r0, [r1] - cmp r0, 0 - bne _0805924A - mov r0, r8 - strb r0, [r1] -_0805924A: - adds r0, r7, 0 - movs r1, 0 - bl sub_8057308 - lsls r0, 24 - cmp r0, 0 - beq _0805927E - mov r1, r9 - cmp r1, 0 - beq _0805926E - movs r3, 0xFD - lsls r3, 1 - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0xD - bl sub_806F324 - b _0805927E -_0805926E: - mov r0, r8 - str r0, [sp] - adds r0, r7, 0 - adds r1, r7, 0 - adds r2, r4, 0 - movs r3, 0 - bl HealTargetHP -_0805927E: - mov r0, r8 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80591E4 - - thumb_func_start SkillSwapMoveAction -SkillSwapMoveAction: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - adds r6, r1, 0 - ldr r7, [r4, 0x70] - ldr r5, [r6, 0x70] - adds r0, r6, 0 - movs r1, 0x35 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - bne _080592BA - adds r0, r4, 0 - movs r1, 0x35 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _080592D0 -_080592BA: - ldr r0, _080592CC - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_80522F4 - movs r0, 0 - b _0805932E - .align 2, 0 -_080592CC: .4byte gUnknown_80FC8C0 -_080592D0: - movs r0, 0x5E - adds r0, r5 - mov r12, r0 - ldrb r3, [r0] - mov r8, r3 - adds r1, r5, 0 - adds r1, 0x5F - ldrb r2, [r1] - adds r5, r7, 0 - adds r5, 0x5E - ldrb r0, [r5] - mov r3, r12 - strb r0, [r3] - movs r0, 0x5F - adds r0, r7 - mov r12, r0 - ldrb r0, [r0] - strb r0, [r1] - mov r3, r8 - strb r3, [r5] - mov r0, r12 - strb r2, [r0] - ldr r0, _08059338 - ldr r0, [r0] - movs r5, 0x1 - strb r5, [r0, 0xC] - ldr r0, _0805933C - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_80522F4 - adds r1, r7, 0 - adds r1, 0xFB - ldrb r0, [r1] - cmp r0, 0 - bne _0805931C - strb r5, [r1] -_0805931C: - adds r0, r4, 0 - adds r1, r4, 0 - bl sub_806ABAC - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_806ABAC - movs r0, 0x1 -_0805932E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08059338: .4byte gDungeonGlobalData -_0805933C: .4byte gUnknown_80FC888 - thumb_func_end SkillSwapMoveAction - thumb_func_start SketchMoveAction SketchMoveAction: push {r4-r7,lr} diff --git a/asm/code_8083654.s b/asm/code_8083654.s index e1996fa57..d3724001a 100644 --- a/asm/code_8083654.s +++ b/asm/code_8083654.s @@ -1086,8 +1086,8 @@ _08083E4E: _08083E54: .4byte 0x000003e5 thumb_func_end PlaySoundEffect - thumb_func_start sub_8083E58 -sub_8083E58: + thumb_func_start StopSoundEffect +StopSoundEffect: push {lr} lsls r0, 16 lsrs r1, r0, 16 @@ -1101,7 +1101,7 @@ _08083E6A: bx r0 .align 2, 0 _08083E70: .4byte 0x000003e5 - thumb_func_end sub_8083E58 + thumb_func_end StopSoundEffect thumb_func_start IsFanfareSEPlaying_2 IsFanfareSEPlaying_2: diff --git a/src/code_8057824.c b/src/code_8057824.c index c1981789b..cc4e7d741 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -19,10 +19,28 @@ #include "tile_types.h" #include "weather.h" +typedef bool8 (*MoveCallback)(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); +struct NaturePowerMove +{ + s16 moveID; + u16 unk2; + MoveCallback move; +}; + +struct NaturePowerMove gNaturePowerMoveTable[10]; + + extern u8 gUnknown_202DE58[]; extern u8 gAvailablePokemonNames[]; extern u8 gUnknown_202DFE8[]; +extern u8 *gUnknown_80FC888[]; +extern u8 *gUnknown_80FC8C0[]; +extern s16 gUnknown_80F4DEA; +extern u8 *gUnknown_80FEB88[]; +extern s16 gUnknown_80F4DE8; +extern u8 *gUnknown_80FAD6C[]; +extern s16 gUnknown_80F4DE4; extern u8 *gUnknown_80FBD58[]; extern u32 gUnknown_80F51B4[]; extern s16 gUnknown_80F4DC0; @@ -97,6 +115,9 @@ struct unkStruct_80928C0 void sub_80928C0(u8 *buffer, struct PokemonMove *move, struct unkStruct_80928C0 *param_3); +extern void sub_806ABAC(struct DungeonEntity *, struct DungeonEntity *); +extern u8 sub_806F4A4(struct DungeonEntity *, u32); +extern void sub_807DF38(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct Position *pos, u32, u8 moveType, s16); extern void nullsub_92(struct DungeonEntity *); extern u32 sub_8055864(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *param_3, s32 param_4, s32 param_5); void sub_8079E34(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 param_3); @@ -110,7 +131,7 @@ extern void SetMessageArgument(char[], struct DungeonEntity*, u32); extern u32 sub_8055640(struct DungeonEntity *, struct DungeonEntity *, struct PokemonMove *, u32, u32); u8 sub_8057620(u32 param_1); extern s16 sub_8094828(u16, u8); -extern u8 sub_8057308(struct DungeonEntity *, u32); +extern bool8 sub_8057308(struct DungeonEntity *, u32); extern void sub_806F324(struct DungeonEntity *, s32, u32, u32); extern s16 gUnknown_80F4DB4; @@ -177,30 +198,30 @@ u8 sub_8057620(u32 param_1) bool8 sub_8057634(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) { - bool8 uVar3; + bool8 flag; - uVar3 = FALSE; + flag = FALSE; if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { - uVar3 = TRUE; + flag = TRUE; if (sub_805727C(pokemon, target, gUnknown_80F4DB4)) { LowerDefenseStageTarget(pokemon, target, gUnknown_8106A4C, 1, 1, FALSE); } } - return uVar3; + return flag; } bool8 sub_805768C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) { - bool8 iVar1; + bool8 flag; - iVar1 = FALSE; + flag = FALSE; gUnknown_202F21C++; if (sub_8055640(pokemon, target, move, gUnknown_8106A54[gUnknown_202F21C], param_4) == 0) gUnknown_202F220 = 1; else - iVar1 = TRUE; - return iVar1; + flag = TRUE; + return flag; } bool8 sub_80576D0(struct DungeonEntity * pokemon, struct DungeonEntity *target) @@ -236,9 +257,9 @@ bool8 VitalThrowMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity bool8 sub_8057788(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) { struct MapTile *tile; - bool8 uVar3; + bool8 flag; - uVar3 = FALSE; + flag = FALSE; tile = GetMapTileForDungeonEntity_2(pokemon); if ((!IsTileGround(tile)) || ((tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) != 1)) { sub_80522F4(pokemon,target,*gUnknown_80FD14C); // It can only be used on land! @@ -251,9 +272,9 @@ bool8 sub_8057788(struct DungeonEntity * pokemon, struct DungeonEntity * target, else { sub_8079618(pokemon,pokemon,10,move,*gUnknown_80FAD4C); // $m0 burrowed underground! } - uVar3 = TRUE; + flag = TRUE; } - return uVar3; + return flag; } bool32 sub_8057824(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -290,24 +311,24 @@ bool32 sub_80578A4(struct DungeonEntity *pokemon, struct DungeonEntity *target) return TRUE; } -bool32 sub_80578EC(struct DungeonEntity *r0, struct DungeonEntity *r1) +bool32 sub_80578EC(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8079F20(r0, r1, 1, 0); + sub_8079F20(pokemon, target, 1, 0); return TRUE; } bool32 sub_80578FC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove * move, u32 param_4) { - bool32 uVar3; + bool32 flag; - uVar3 = FALSE; + flag = FALSE; if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { - uVar3 = TRUE; + flag = TRUE; if (sub_805727C(pokemon,target, gUnknown_80F4DB6)) { LowerMovementSpeedTarget(pokemon, target, 1, FALSE); } } - return uVar3; + return flag; } bool32 sub_8057948(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -447,12 +468,12 @@ bool8 sub_8057BC4(struct DungeonEntity *pokemon, struct DungeonEntity *target) bool8 sub_8057BEC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove * move, u32 param_4) { - bool8 uVar3; + bool8 flag; - uVar3 = FALSE; + flag = FALSE; if (IsSleeping(pokemon)) { if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar3 = TRUE; + flag = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4E0A)) { CringeStatusTarget(pokemon,target,FALSE); } @@ -461,7 +482,7 @@ bool8 sub_8057BEC(struct DungeonEntity *pokemon, struct DungeonEntity *target, s else { sub_80522F4(pokemon,target,*gUnknown_80FC734); } - return uVar3; + return flag; } bool8 sub_8057C68(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -472,16 +493,16 @@ bool8 sub_8057C68(struct DungeonEntity *pokemon, struct DungeonEntity *target) bool8 sub_8057C88(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove * move, u32 param_4) { - u8 uVar3; + bool8 flag; - uVar3 = FALSE; + flag = FALSE; if (sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { - uVar3 = TRUE; + flag = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4DF6)) { CringeStatusTarget(pokemon,target,FALSE); } } - return uVar3; + return flag; } s32 sub_8057CD0(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) @@ -501,31 +522,31 @@ s32 sub_8057CD0(struct DungeonEntity * pokemon, struct DungeonEntity * target, s bool8 sub_8057D20(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) { u32 uVar3; - bool8 uVar4; + bool8 flag; u8 chargeStatus; - uVar4 = FALSE; + flag = FALSE; chargeStatus = target->entityData->chargingStatus; uVar3 = 0x100; if (chargeStatus == CHARGING_STATUS_DIVE) { uVar3 = 0x200; } if (sub_8055640(pokemon,target,move,uVar3,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4E08)) { SqueezedStatusTarget(pokemon,target,0x3b,FALSE); } } - return uVar4; + return flag; } -bool8 sub_8057D7C(struct DungeonEntity * param_1, struct DungeonEntity * param_2) +bool8 sub_8057D7C(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - LowerDefenseStageTarget(param_1, param_2, gUnknown_8106A50, 2, 1, TRUE); + LowerDefenseStageTarget(pokemon, target, gUnknown_8106A50, 2, 1, TRUE); return TRUE; } -NAKED bool8 sub_8057D9C(struct DungeonEntity * param_1, struct DungeonEntity * param_2) +NAKED bool8 sub_8057D9C(struct DungeonEntity * pokemon, struct DungeonEntity * target) { asm_unified( "\tpush {r4-r7,lr}\n" @@ -616,33 +637,33 @@ bool8 sub_8057E50(struct DungeonEntity *pokemon, struct DungeonEntity *target) bool8 sub_8057E6C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { struct DungeonEntityData *entityData; - bool32 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; entityData = pokemon->entityData; SendThawedMessage(pokemon,target); if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; - if (sub_8057308(pokemon, 0) != 0) { + flag = TRUE; + if (sub_8057308(pokemon, 0)) { entityData->unk155 = 1; } } - return uVar4; + return flag; } bool8 sub_8057ED0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4E04)) { ChangeAttackMultiplierTarget(pokemon, target, gUnknown_8106A4C, 0x80, FALSE); } } - return uVar4; + return flag; } bool8 sub_8057F24(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -659,17 +680,17 @@ bool8 sub_8057F24(struct DungeonEntity *pokemon, struct DungeonEntity *target) bool8 sub_8057F7C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4E02)) { LowerAccuracyStageTarget(pokemon, target, gUnknown_8106A4C, FALSE); } } - return uVar4; + return flag; } bool8 sub_8057FCC(struct DungeonEntity *pokemon, struct DungeonEntity *target) @@ -753,46 +774,46 @@ bool8 GrudgeMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity * tar bool8 sub_805815C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_80797A0(pokemon, target, 0x4); + sub_80797A0(pokemon, target, PROTECTION_STATUS_COUNTER); return TRUE; } bool8 sub_805816C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; SendThawedMessage(pokemon, target); if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4DB8)) { BurnedStatusTarget(pokemon, target, 0, FALSE); } } - return uVar4; + return flag; } bool8 sub_80581D0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; SendThawedMessage(pokemon, target); if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4DBA)) { BurnedStatusTarget(pokemon, target, 0, FALSE); } } - return uVar4; + return flag; } bool8 sub_8058234(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { u16 uVar1; - uVar1 = (move->moveID == 0x13B) ? 0x7A : 0x51; + uVar1 = (move->moveID == MOVE_FORESIGHT) ? 0x7A : 0x51; ExposeStatusTarget(pokemon, target, uVar1); return TRUE; } @@ -872,47 +893,47 @@ bool8 sub_805836C(struct DungeonEntity *pokemon, struct DungeonEntity *target, s bool8 sub_80583D8(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4DC2)) { LowerDefenseStageTarget(pokemon, target, gUnknown_8106A50, 1, 1, FALSE); } } - return uVar4; + return flag; } bool8 sub_8058430(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4DEE)) { CringeStatusTarget(pokemon, target, FALSE); } } - return uVar4; + return flag; } bool8 sub_8058478(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4DE6)) { ParalyzeStatusTarget(pokemon, target, FALSE); } } - return uVar4; + return flag; } bool8 sub_80584C0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) @@ -950,17 +971,17 @@ bool8 sub_8058548(struct DungeonEntity *pokemon, struct DungeonEntity *target, s bool8 sub_8058580(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, gUnknown_80F4DD4)) { LowerMovementSpeedTarget(pokemon, target, 1, FALSE); } } - return uVar4; + return flag; } bool8 sub_80585CC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) @@ -968,7 +989,7 @@ bool8 sub_80585CC(struct DungeonEntity *pokemon, struct DungeonEntity *target, s bool8 flag; flag = FALSE; - if ((target->entityData->protectionStatus == '\x01') || (target->entityData->protectionStatus == '\x03')) { + if ((target->entityData->protectionStatus == PROTECTION_STATUS_REFLECT) || (target->entityData->protectionStatus == PROTECTION_STATUS_LIGHT_SCREEN)) { sub_80522F4(pokemon,target,*gUnknown_80FD104); SendProtectionEndMessage(pokemon,target); flag = TRUE; @@ -980,17 +1001,17 @@ bool8 sub_80585CC(struct DungeonEntity *pokemon, struct DungeonEntity *target, s bool8 sub_8058638(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { - bool8 uVar4; + bool8 flag; - uVar4 = FALSE; + flag = FALSE; if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { - uVar4 = TRUE; + flag = TRUE; if(sub_805727C(pokemon, target, 0)) { LowerMovementSpeedTarget(pokemon, target, 1, FALSE); } } - return uVar4; + return flag; } bool8 sub_805867C(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) @@ -1417,3 +1438,243 @@ bool8 PsychUpMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * t } return TRUE; } + +bool8 sub_8058E5C(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) +{ + int iVar2; + int iVar3; + bool8 flag; + + flag = FALSE; + if ((sub_8055640(pokemon, target, move, 0x80 << 1, param_4) != 0) && (EntityExists(pokemon))) { + iVar2 = pokemon->entityData->maxHP; + if (iVar2 < 0) { + iVar2 = iVar2 + 7; + } + iVar3 = iVar2 >> 3; + if (iVar3 == 0) { + iVar3 = 1; + } + flag = TRUE; + if ((!HasAbility(pokemon, ABILITY_ROCK_HEAD)) && sub_8057308(pokemon, 0)) { + sub_806F370(pokemon,pokemon,iVar3,0,0,0,0x1fd,0x14,1,0); + } + } + return flag; +} + +bool8 sub_8058EE0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + HealTargetHP(pokemon, target, target->entityData->maxHP / 2, 0, TRUE); + return TRUE; +} + +bool32 sub_8058F04(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) +{ + bool32 flag; + struct DungeonEntityData *entityData; + s32 iVar3; + + entityData = target->entityData; + iVar3 = 1; + gDungeonGlobalData->unk18200 = 0xc; + gDungeonGlobalData->unk18204 = 0; + if (entityData->chargingStatus == CHARGING_STATUS_DIG) { + iVar3 = 2; + } + flag = sub_8055640(pokemon,target,move,iVar3 << 8,param_4); + if (flag != 0) { + flag = TRUE; + } + return flag; +} + +bool8 sub_8058F58(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) +{ + bool8 flag; + s32 tileset; + struct PokemonMove natureMove; + + tileset = gDungeonGlobalData->tileset; + if (tileset < 0) { + tileset = 0; + } + if (0x4a < tileset) { + tileset = 0x4a; + } + InitPokemonMove(&natureMove, gNaturePowerMoveTable[tileset].moveID); + flag = gNaturePowerMoveTable[tileset].move(pokemon,target,&natureMove,param_4); + return flag; +} + +bool8 sub_8058FBC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + + flag = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + flag = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DE4)) + { + ParalyzeStatusTarget(pokemon, target, FALSE); + } + } + return flag; +} + +bool8 sub_8059004(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + sub_807DF38(pokemon, target, &target->posWorld, 1, GetMoveType(move), sub_8057600(move, param_4)); + return TRUE; +} + +bool8 sub_8059050(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + ParalyzeStatusTarget(pokemon, target, TRUE); + return TRUE; +} + +bool8 sub_8059060(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + sub_8079618(pokemon, target, CHARGING_STATUS_CHARGE, move, *gUnknown_80FAD6C); + return TRUE; +} + +bool8 sub_8059080(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + + flag = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + flag = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DE8)) + { + ParalyzeStatusTarget(pokemon, target, FALSE); + } + } + return flag; +} + +bool8 sub_80590C8(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + MistStatusTarget(pokemon, target); + return TRUE; +} + +bool8 sub_80590D4(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) +{ + u8 moveType; + bool8 uVar5; + bool8 flag; + + flag = FALSE; + moveType = GetMoveType(move); + + uVar5 = sub_806F4A4(target, moveType) != 0 ? TRUE : FALSE; + + if (HasAbility(target, 0x37)) { + uVar5 = FALSE; + } + if (!uVar5) { + sub_80522F4(pokemon,target,*gUnknown_80FEB88); + } + else { + sub_806F370(pokemon,target,9999,1,&flag,GetMoveType(move),sub_8057600(move,param_4),0,1,1); + flag = flag == 0; + } + return flag; +} + +bool8 sub_8059190(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + bool8 flag; + + flag = FALSE; + if (sub_8055640(pokemon,target,move,0x100,param_4) != 0) { + flag = TRUE; + if(sub_805727C(pokemon, target, gUnknown_80F4DEA)) + { + CringeStatusTarget(pokemon, target, FALSE); + } + } + return flag; +} + +bool8 sub_80591D8(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +{ + SafeguardStatusTarget(pokemon, target); + return TRUE; +} + +bool8 sub_80591E4(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) +{ + bool8 hasLiquidOoze; + s32 iVar3; + s32 iVar4; + bool8 flag; + struct DungeonEntityData *entityData; + + flag = FALSE; + hasLiquidOoze = HasAbility(target, ABILITY_LIQUID_OOZE); + iVar3 = sub_8055640(pokemon,target,move,0x100,param_4); + if (iVar3 != 0) { + iVar4 = iVar3 / 2; + if (iVar4 < 1) { + iVar4 = 1; + } + if (EntityExists(pokemon)) { + entityData = pokemon->entityData; + flag = TRUE; + if (entityData->unkFB == 0) { + entityData->unkFB = 1; + } + if (sub_8057308(pokemon,0)) { + if (hasLiquidOoze) { + sub_806F324(pokemon,iVar4,0xd,0x1fa); + } + else { + HealTargetHP(pokemon,pokemon,iVar4,0,1); + } + } + } + } + return flag; +} + +bool8 SkillSwapMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) +{ + u8 ability_1; + u8 ability_2; + bool8 flag; + u8 *puVar5; + u8 *puVar6; + struct DungeonEntityData * targetEntityData; + struct DungeonEntityData * pokeEntityData; + + pokeEntityData = pokemon->entityData; + targetEntityData = target->entityData; + if ((HasAbility(target, ABILITY_WONDER_GUARD)) || (HasAbility(pokemon, ABILITY_WONDER_GUARD))) { + sub_80522F4(pokemon,target,*gUnknown_80FC8C0); + flag = FALSE; + } + else + { + puVar5 = &targetEntityData->abilities[0]; + ability_1 = *puVar5; + puVar6 = &targetEntityData->abilities[1]; + ability_2 = *puVar6; + *puVar5 = pokeEntityData->abilities[0]; + *puVar6 = pokeEntityData ->abilities[1]; + pokeEntityData->abilities[0] = ability_1; + pokeEntityData->abilities[1] = ability_2; + gDungeonGlobalData->unkC = 1; + sub_80522F4(pokemon,target,*gUnknown_80FC888); + if (pokeEntityData->unkFB == 0) { + pokeEntityData->unkFB = 1; + } + sub_806ABAC(pokemon,pokemon); + sub_806ABAC(pokemon,target); + flag = TRUE; + } + return flag; +} diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index a78a5f85c..f105baa14 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -411,7 +411,7 @@ extern void sub_803E46C(u32); extern void sub_80866C4(u32 *); extern void sub_808692C(); -extern void sub_8083E58(u32); +extern void StopSoundEffect(u32); extern void sub_80868F4(); extern void sub_8086910(); extern u32 sub_8085EC8(u32, u32, u32, u32 *, u32); @@ -1713,7 +1713,7 @@ void MagmaCavernMidDialogue(void) // Qu-quake! DisplayDungeonDialogue(&MagmaCavernMidDialogue_3); sub_803E708(0x78,0x46); - sub_8083E58(0x1c5); + StopSoundEffect(0x1c5); sub_808682C(); sub_80855E4(sub_8086910); sub_803E708(0x14,0x46); @@ -2894,7 +2894,7 @@ void HoOhPreFightDialogue(void) PlaySoundEffect(0x1c5); sub_803E708(0xfa,70); HoOhDropInEffect(HoOhEntity); - sub_8083E58(0x1c5); + StopSoundEffect(0x1c5); sub_808682C(); sub_80855E4(sub_8086910); sub_8085930(DIRECTION_NORTH); diff --git a/src/ground_main.c b/src/ground_main.c index 3e826ee52..c74648e26 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -333,7 +333,7 @@ const char *sub_8098FB4(void) } -s32 sub_8098FCC(u32 unused) +s16 sub_8098FCC(u32 unused) { s32 iVar4; s32 iVar5; From 6ada01da4f4f785290f9809bc1f1df4c087526f3 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 12 Dec 2022 11:18:47 -0800 Subject: [PATCH 16/21] document most of the dungeon music --- asm/code_803D110.s | 2 +- asm/code_8041AD0.s | 2 +- asm/code_80428A0.s | 6 +- asm/code_805D8C8.s | 6 +- asm/code_8083654.s | 843 ---------------------------------- asm/code_808417C.s | 2 +- asm/code_8085B0C.s | 2 +- asm/code_8086A3C.s | 10 +- asm/dungeon_music.s | 35 ++ include/dungeon.h | 1 + include/dungeon_engine.h | 2 +- include/dungeon_global_data.h | 48 +- include/dungeon_music.h | 16 + ld_script.txt | 2 + src/code_8040094.c | 4 +- src/code_8057824_1.c | 201 ++++---- src/code_80848F0.c | 4 +- src/code_80869E4.c | 66 +-- src/code_8086A3C.c | 75 ++- src/dungeon_engine.c | 4 +- src/dungeon_music.c | 359 +++++++++++++++ 21 files changed, 646 insertions(+), 1044 deletions(-) create mode 100644 asm/dungeon_music.s create mode 100644 include/dungeon_music.h create mode 100644 src/dungeon_music.c diff --git a/asm/code_803D110.s b/asm/code_803D110.s index 7d0b7f6bb..18385dde0 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -2691,7 +2691,7 @@ _0803E5A2: adds r0, r1 movs r1, 0 strb r1, [r0] - bl sub_8083F58 + bl UpdateDungeonMusic bl sub_8011860 bl sub_8040B60 movs r0, 0 diff --git a/asm/code_8041AD0.s b/asm/code_8041AD0.s index 2b216debc..a9d04e5d0 100644 --- a/asm/code_8041AD0.s +++ b/asm/code_8041AD0.s @@ -573,7 +573,7 @@ sub_80426C8: cmp r4, 0x3 bne _080426D8 movs r0, 0 - bl sub_8083E88 + bl DungeonStartNewBGM _080426D8: cmp r5, 0x4 beq _080426F0 diff --git a/asm/code_80428A0.s b/asm/code_80428A0.s index 7859fb808..c8dca682d 100644 --- a/asm/code_80428A0.s +++ b/asm/code_80428A0.s @@ -695,7 +695,7 @@ _0804300C: ldr r3, _08043134 adds r0, r3 strb r1, [r0] - bl sub_8083F34 + bl StopDungeonBGM bl sub_803D4AC bl sub_804513C bl sub_8043CD8 @@ -1231,7 +1231,7 @@ _0804351C: lsls r0, 1 adds r0, r1 ldrh r0, [r0] - bl sub_8083E88 + bl DungeonStartNewBGM bl sub_80847D4 _08043544: bl sub_8049840 @@ -1597,7 +1597,7 @@ _0804384A: cmp r0, 0x1B bne _08043896 movs r0, 0x3C - bl sub_8083ED8 + bl DungeonFadeOutBGM _08043896: movs r0, 0x4 movs r1, 0x4F diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index cb68e38cc..cf83e1123 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -19743,7 +19743,7 @@ _0806780C: lsls r0, 24 cmp r0, 0 beq _08067834 - bl sub_8044210 + bl IsDungeonMaze lsls r0, 24 cmp r0, 0 beq _0806782C @@ -23059,7 +23059,7 @@ _08069228: adds r1, r4, 0 bl xxx_pokemon2_to_pokemonstruct_index_808DF2C _0806926E: - bl sub_8044210 + bl IsDungeonMaze lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0 @@ -23258,7 +23258,7 @@ _080693CC: adds r1, r4, 0 bl xxx_pokemon2_to_pokemonstruct_index_808DF2C _0806940E: - bl sub_8044210 + bl IsDungeonMaze lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0 diff --git a/asm/code_8083654.s b/asm/code_8083654.s index d3724001a..28971461b 100644 --- a/asm/code_8083654.s +++ b/asm/code_8083654.s @@ -582,847 +582,4 @@ _08083A9E: bx r0 thumb_func_end sub_8083904 - thumb_func_start sub_8083AB0 -sub_8083AB0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r5, r1, 0 - adds r7, r2, 0 - lsls r0, 16 - asrs r0, 16 - mov r8, r0 - ldr r0, _08083AFC - ldr r0, [r0] - ldr r1, _08083B00 - adds r4, r0, r1 - movs r6, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08083AE4 - adds r0, r5, 0 - bl GetEntityType - cmp r0, 0x1 - bne _08083AE4 - ldr r6, [r5, 0x70] -_08083AE4: - ldr r5, [r7, 0x70] - cmp r6, 0 - beq _08083B04 - mov r0, sp - adds r1, r6, 0 - bl sub_80709C8 - adds r0, r4, 0 - mov r1, sp - bl CopyStringtoBuffer - b _08083B0E - .align 2, 0 -_08083AFC: .4byte gDungeonGlobalData -_08083B00: .4byte 0x0001ce98 -_08083B04: - ldr r0, _08083C04 - ldr r1, [r0] - adds r0, r4, 0 - bl CopyStringtoBuffer -_08083B0E: - mov r0, sp - adds r1, r5, 0 - bl sub_80709C8 - adds r0, r4, 0 - adds r0, 0xA - mov r1, sp - bl CopyStringtoBuffer - movs r2, 0 - mov r3, r8 - strh r3, [r4, 0x14] - ldr r0, [r5, 0x60] - str r0, [r4, 0x1C] - ldr r0, [r5, 0x18] - str r0, [r4, 0x20] - ldrb r0, [r5, 0x9] - adds r1, r4, 0 - adds r1, 0x2A - strb r0, [r1] - ldrh r0, [r5, 0x10] - strh r0, [r4, 0x24] - ldrb r0, [r5, 0x14] - subs r1, 0x4 - strb r0, [r1] - ldrb r0, [r5, 0x15] - adds r1, 0x1 - strb r0, [r1] - ldrb r1, [r5, 0x16] - adds r0, r4, 0 - adds r0, 0x28 - strb r1, [r0] - ldrb r0, [r5, 0x17] - adds r1, r4, 0 - adds r1, 0x29 - strb r0, [r1] - ldr r0, _08083C08 - ldr r0, [r0] - ldr r1, _08083C0C - adds r0, r1 - ldr r0, [r0] - str r0, [r4, 0x18] - adds r3, r4, 0 - adds r3, 0x2B - strb r2, [r3] - adds r6, r4, 0 - adds r6, 0x2C - strb r2, [r6] - movs r0, 0x2D - adds r0, r4 - mov r12, r0 - strb r2, [r0] - adds r4, 0x2E - strb r2, [r4] - adds r0, r5, 0 - adds r0, 0x60 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08083BF8 - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08083BF8 - adds r1, r5, 0 - adds r1, 0x62 - ldrb r0, [r1] - cmp r0, 0x13 - bne _08083BA4 - ldr r0, _08083C10 - ldrb r0, [r0] - ldrb r2, [r3] - adds r0, r2 - strb r0, [r3] -_08083BA4: - ldrb r0, [r1] - cmp r0, 0x2B - bne _08083BB4 - ldr r0, _08083C14 - ldrb r0, [r0] - ldrb r2, [r3] - adds r0, r2 - strb r0, [r3] -_08083BB4: - ldrb r0, [r1] - cmp r0, 0x21 - bne _08083BC4 - ldr r0, _08083C18 - ldrb r0, [r0] - ldrb r3, [r6] - adds r0, r3 - strb r0, [r6] -_08083BC4: - ldrb r0, [r1] - cmp r0, 0x2B - bne _08083BD4 - ldr r0, _08083C14 - ldrb r0, [r0] - ldrb r2, [r6] - adds r0, r2 - strb r0, [r6] -_08083BD4: - ldrb r0, [r1] - cmp r0, 0x1E - bne _08083BE8 - ldr r0, _08083C1C - ldrb r0, [r0] - mov r3, r12 - ldrb r3, [r3] - adds r0, r3 - mov r2, r12 - strb r0, [r2] -_08083BE8: - ldrb r0, [r1] - cmp r0, 0x22 - bne _08083BF8 - ldr r0, _08083C20 - ldrb r0, [r0] - ldrb r3, [r4] - adds r0, r3 - strb r0, [r4] -_08083BF8: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08083C04: .4byte gUnknown_80FE6F4 -_08083C08: .4byte gDungeonGlobalData -_08083C0C: .4byte 0x00000644 -_08083C10: .4byte gUnknown_810AC60 -_08083C14: .4byte gUnknown_810AC68 -_08083C18: .4byte gUnknown_810AC62 -_08083C1C: .4byte gUnknown_810AC64 -_08083C20: .4byte gUnknown_810AC66 - thumb_func_end sub_8083AB0 - - thumb_func_start sub_8083C24 -sub_8083C24: - push {lr} - ldr r0, _08083C3C - ldr r0, [r0] - ldr r1, _08083C40 - adds r0, r1 - movs r2, 0x14 - ldrsh r1, [r0, r2] - ldr r0, _08083C44 - cmp r1, r0 - ble _08083C48 - movs r0, 0 - b _08083C4A - .align 2, 0 -_08083C3C: .4byte gDungeonGlobalData -_08083C40: .4byte 0x0001ce98 -_08083C44: .4byte 0x00000225 -_08083C48: - movs r0, 0x1 -_08083C4A: - pop {r1} - bx r1 - thumb_func_end sub_8083C24 - - thumb_func_start sub_8083C50 -sub_8083C50: - push {lr} - ldr r0, _08083C74 - ldr r0, [r0] - ldr r1, _08083C78 - adds r0, r1 - movs r2, 0x14 - ldrsh r1, [r0, r2] - ldr r0, _08083C7C - cmp r1, r0 - beq _08083C70 - adds r0, 0x3 - cmp r1, r0 - beq _08083C70 - subs r0, 0x2 - cmp r1, r0 - bne _08083C80 -_08083C70: - movs r0, 0x1 - b _08083C82 - .align 2, 0 -_08083C74: .4byte gDungeonGlobalData -_08083C78: .4byte 0x0001ce98 -_08083C7C: .4byte 0x00000227 -_08083C80: - movs r0, 0 -_08083C82: - pop {r1} - bx r1 - thumb_func_end sub_8083C50 - - thumb_func_start sub_8083C88 -sub_8083C88: - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _08083CC4 - ldr r0, [r4] - ldr r1, _08083CC8 - adds r5, r0, r1 - ldr r1, _08083CCC - adds r0, r1 - ldrb r0, [r0] - bl GetUnk9 - lsls r0, 24 - cmp r0, 0 - bne _08083CB6 - ldr r0, [r4] - ldr r1, _08083CD0 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08083CC0 - cmp r6, 0 - bne _08083CC0 -_08083CB6: - movs r0, 0x14 - ldrsh r1, [r5, r0] - ldr r0, _08083CD4 - cmp r1, r0 - beq _08083CD8 -_08083CC0: - movs r0, 0x1 - b _08083CDA - .align 2, 0 -_08083CC4: .4byte gDungeonGlobalData -_08083CC8: .4byte 0x0001ce98 -_08083CCC: .4byte 0x00000644 -_08083CD0: .4byte 0x0000065c -_08083CD4: .4byte 0x00000227 -_08083CD8: - movs r0, 0 -_08083CDA: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8083C88 - - thumb_func_start sub_8083CE0 -sub_8083CE0: - push {lr} - lsls r0, 24 - cmp r0, 0 - beq _08083CF2 - ldr r0, _08083D00 - movs r1, 0x1A - ldrsh r0, [r0, r1] - cmp r0, 0x1 - ble _08083CFC -_08083CF2: - ldr r0, _08083D04 - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE -_08083CFC: - pop {r0} - bx r0 - .align 2, 0 -_08083D00: .4byte gUnknown_202EE10 -_08083D04: .4byte 0x0000012d - thumb_func_end sub_8083CE0 - - thumb_func_start sub_8083D08 -sub_8083D08: - push {lr} - movs r0, 0x97 - lsls r0, 1 - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D08 - - thumb_func_start sub_8083D1C -sub_8083D1C: - push {lr} - ldr r0, _08083D2C - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE - pop {r0} - bx r0 - .align 2, 0 -_08083D2C: .4byte 0x00000133 - thumb_func_end sub_8083D1C - - thumb_func_start sub_8083D30 -sub_8083D30: - push {lr} - ldr r0, _08083D40 - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE - pop {r0} - bx r0 - .align 2, 0 -_08083D40: .4byte 0x0000012f - thumb_func_end sub_8083D30 - - thumb_func_start sub_8083D44 -sub_8083D44: - push {lr} - movs r0, 0x98 - lsls r0, 1 - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D44 - - thumb_func_start sub_8083D58 -sub_8083D58: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xC8 - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D58 - - thumb_func_start sub_8083D68 -sub_8083D68: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xCF - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D68 - - thumb_func_start sub_8083D78 -sub_8083D78: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xD3 - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D78 - - thumb_func_start sub_8083D88 -sub_8083D88: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xCC - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D88 - - thumb_func_start sub_8083D98 -sub_8083D98: - push {lr} - movs r0, 0x33 - bl sub_8083E88 - ldr r2, _08083DCC - ldr r0, [r2] - ldr r1, _08083DD0 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r3, _08083DD4 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - adds r3, 0x27 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _08083DD8 - adds r0, r1 - ldr r1, _08083DDC - strh r1, [r0] - pop {r0} - bx r0 - .align 2, 0 -_08083DCC: .4byte gDungeonGlobalData -_08083DD0: .4byte 0x0000066f -_08083DD4: .4byte 0x00000672 -_08083DD8: .4byte 0x0000066a -_08083DDC: .4byte 0x000003e7 - thumb_func_end sub_8083D98 - - thumb_func_start sub_8083DE0 -sub_8083DE0: - push {lr} - movs r0, 0x34 - bl sub_8083E88 - ldr r2, _08083E14 - ldr r0, [r2] - ldr r1, _08083E18 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r3, _08083E1C - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - adds r3, 0x27 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _08083E20 - adds r0, r1 - ldr r1, _08083E24 - strh r1, [r0] - pop {r0} - bx r0 - .align 2, 0 -_08083E14: .4byte gDungeonGlobalData -_08083E18: .4byte 0x0000066f -_08083E1C: .4byte 0x00000672 -_08083E20: .4byte 0x0000066a -_08083E24: .4byte 0x000003e7 - thumb_func_end sub_8083DE0 - - thumb_func_start sub_8083E28 -sub_8083E28: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xCF - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083E28 - - thumb_func_start PlaySoundEffect -PlaySoundEffect: - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _08083E54 - cmp r2, r0 - beq _08083E4E - movs r1, 0x80 - lsls r1, 1 - adds r0, r2, 0 - bl PlayFanfareSE -_08083E4E: - pop {r0} - bx r0 - .align 2, 0 -_08083E54: .4byte 0x000003e5 - thumb_func_end PlaySoundEffect - - thumb_func_start StopSoundEffect -StopSoundEffect: - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - ldr r0, _08083E70 - cmp r1, r0 - beq _08083E6A - adds r0, r1, 0 - bl StopFanfareSE -_08083E6A: - pop {r0} - bx r0 - .align 2, 0 -_08083E70: .4byte 0x000003e5 - thumb_func_end StopSoundEffect - - thumb_func_start IsFanfareSEPlaying_2 -IsFanfareSEPlaying_2: - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl IsFanfareSEPlaying - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end IsFanfareSEPlaying_2 - - thumb_func_start sub_8083E88 -sub_8083E88: - ldr r1, _08083E9C - ldr r1, [r1] - ldr r3, _08083EA0 - adds r2, r1, r3 - movs r3, 0 - strh r0, [r2] - ldr r0, _08083EA4 - adds r1, r0 - strh r3, [r1] - bx lr - .align 2, 0 -_08083E9C: .4byte gDungeonGlobalData -_08083EA0: .4byte 0x0001ceda -_08083EA4: .4byte 0x0001ced4 - thumb_func_end sub_8083E88 - - thumb_func_start sub_8083EA8 -sub_8083EA8: - push {r4,r5,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08083ECC - ldr r2, [r2] - movs r4, 0x80 - lsls r4, 8 - adds r3, r4, 0 - ldr r5, _08083ED0 - adds r4, r2, r5 - orrs r0, r3 - strh r0, [r4] - ldr r0, _08083ED4 - adds r2, r0 - strh r1, [r2] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083ECC: .4byte gDungeonGlobalData -_08083ED0: .4byte 0x0001ceda -_08083ED4: .4byte 0x0001ced4 - thumb_func_end sub_8083EA8 - - thumb_func_start sub_8083ED8 -sub_8083ED8: - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl FadeOutAllMusic - ldr r0, _08083F00 - ldr r1, [r0] - ldr r2, _08083F04 - adds r0, r1, r2 - ldr r2, _08083F08 - strh r2, [r0] - ldr r3, _08083F0C - adds r0, r1, r3 - strh r2, [r0] - ldr r0, _08083F10 - adds r1, r0 - strh r2, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08083F00: .4byte gDungeonGlobalData -_08083F04: .4byte 0x0001ced6 -_08083F08: .4byte 0x000003e7 -_08083F0C: .4byte 0x0001ced8 -_08083F10: .4byte 0x0001ceda - thumb_func_end sub_8083ED8 - - thumb_func_start sub_8083F14 -sub_8083F14: - push {lr} - bl sub_8083F34 - bl xxx_call_stop_bgm - pop {r0} - bx r0 - thumb_func_end sub_8083F14 - - thumb_func_start xxx_call_GetCurrentBGSong -xxx_call_GetCurrentBGSong: - push {lr} - bl GetCurrentBGSong - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end xxx_call_GetCurrentBGSong - - thumb_func_start sub_8083F34 -sub_8083F34: - ldr r0, _08083F4C - ldr r0, [r0] - ldr r1, _08083F50 - adds r0, r1 - movs r1, 0 - str r1, [r0] - str r1, [r0, 0x4] - ldr r1, _08083F54 - strh r1, [r0, 0xA] - strh r1, [r0, 0xC] - strh r1, [r0, 0xE] - bx lr - .align 2, 0 -_08083F4C: .4byte gDungeonGlobalData -_08083F50: .4byte 0x0001cecc -_08083F54: .4byte 0x000003e7 - thumb_func_end sub_8083F34 - - thumb_func_start sub_8083F58 -sub_8083F58: - push {r4,lr} - ldr r0, _08083F7C - ldr r2, [r0] - ldr r0, _08083F80 - adds r4, r2, r0 - ldr r1, _08083F84 - adds r3, r2, r1 - ldrh r1, [r3] - ldr r0, _08083F88 - cmp r1, r0 - bne _08083FB2 - ldr r1, _08083F8C - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08083F90 - movs r1, 0x12 - b _08083FB2 - .align 2, 0 -_08083F7C: .4byte gDungeonGlobalData -_08083F80: .4byte 0x0001cecc -_08083F84: .4byte 0x0000066a -_08083F88: .4byte 0x000003e7 -_08083F8C: .4byte 0x0000066f -_08083F90: - ldr r1, _08083FA0 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08083FA4 - movs r1, 0x80 - b _08083FB2 - .align 2, 0 -_08083FA0: .4byte 0x00000672 -_08083FA4: - ldr r1, _08083FC4 - adds r0, r2, r1 - ldrb r0, [r0] - movs r1, 0x11 - cmp r0, 0 - bne _08083FB2 - ldrh r1, [r4, 0xE] -_08083FB2: - ldr r0, [r4] - cmp r0, 0x4 - bne _08083FC8 - ldrh r0, [r4, 0xC] - cmp r1, r0 - beq _08083FDA - movs r0, 0x2 - b _08083FD6 - .align 2, 0 -_08083FC4: .4byte 0x00000699 -_08083FC8: - ldr r2, _08083FEC - cmp r1, r2 - beq _08083FDA - ldrh r0, [r4, 0xA] - cmp r0, r2 - bne _08083FDA - movs r0, 0x1 -_08083FD6: - str r0, [r4] - strh r1, [r4, 0xA] -_08083FDA: - ldr r0, [r4] - cmp r0, 0x4 - bhi _08084084 - lsls r0, 2 - ldr r1, _08083FF0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08083FEC: .4byte 0x000003e7 -_08083FF0: .4byte _08083FF4 - .align 2, 0 -_08083FF4: - .4byte _08084084 - .4byte _08084008 - .4byte _08084050 - .4byte _0808405E - .4byte _08084084 -_08084008: - ldrh r1, [r4, 0xA] - ldr r0, _08084014 - cmp r1, r0 - bne _08084018 - movs r0, 0 - b _08084040 - .align 2, 0 -_08084014: .4byte 0x000003e7 -_08084018: - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08084030 - ldr r0, _0808402C - ands r0, r1 - bl StartNewBGM - b _0808403A - .align 2, 0 -_0808402C: .4byte 0x00007fff -_08084030: - ldr r0, _08084048 - ands r0, r1 - ldrh r1, [r4, 0x8] - bl FadeInNewBGM -_0808403A: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0xC] - movs r0, 0x4 -_08084040: - str r0, [r4] - ldr r0, _0808404C - strh r0, [r4, 0xA] - b _08084084 - .align 2, 0 -_08084048: .4byte 0x00007fff -_0808404C: .4byte 0x000003e7 -_08084050: - movs r0, 0x1E - bl FadeOutBGM - movs r0, 0x1E - str r0, [r4, 0x4] - movs r0, 0x3 - b _08084082 -_0808405E: - ldr r0, [r4, 0x4] - cmp r0, 0 - beq _0808406C - subs r0, 0x1 - str r0, [r4, 0x4] - cmp r0, 0 - bne _08084084 -_0808406C: - ldrh r1, [r4, 0xA] - ldr r0, _0808407C - cmp r1, r0 - bne _08084080 - bl StopBGM - movs r0, 0 - b _08084082 - .align 2, 0 -_0808407C: .4byte 0x000003e7 -_08084080: - movs r0, 0x1 -_08084082: - str r0, [r4] -_08084084: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8083F58 - - thumb_func_start sub_808408C -sub_808408C: - ldr r2, _0808409C - movs r1, 0x1 - orrs r1, r0 - ldr r0, _080840A0 - ands r0, r1 - str r0, [r2] - bx lr - .align 2, 0 -_0808409C: .4byte gUnknown_203B458 -_080840A0: .4byte 0x00ffffff - thumb_func_end sub_808408C - - thumb_func_start sub_80840A4 -sub_80840A4: - ldr r3, _080840C8 - ldr r0, [r3] - ldr r2, _080840CC - adds r1, r0, 0 - muls r1, r2 - adds r1, 0x1 - lsrs r0, r1, 16 - muls r1, r2 - adds r1, 0x1 - str r1, [r3] - ldr r2, _080840D0 - ands r1, r2 - orrs r0, r1 - ldr r1, _080840D4 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - bx lr - .align 2, 0 -_080840C8: .4byte gUnknown_203B458 -_080840CC: .4byte 0x5d588b65 -_080840D0: .4byte 0xffff0000 -_080840D4: .4byte 0x00ffffff - thumb_func_end sub_80840A4 - .align 2, 0 diff --git a/asm/code_808417C.s b/asm/code_808417C.s index 59f7acf09..a8712e9b7 100644 --- a/asm/code_808417C.s +++ b/asm/code_808417C.s @@ -86,7 +86,7 @@ _0808427C: _08084290: movs r0, 0x36 bl sub_803E668 - bl sub_8083F58 + bl UpdateDungeonMusic ldrh r1, [r4, 0xA] movs r2, 0xA ldrsh r0, [r4, r2] diff --git a/asm/code_8085B0C.s b/asm/code_8085B0C.s index 85b3b9c43..dcdd87787 100644 --- a/asm/code_8085B0C.s +++ b/asm/code_8085B0C.s @@ -745,7 +745,7 @@ sub_8086124: sub_8086130: push {lr} movs r0, 0x3C - bl sub_8083ED8 + bl DungeonFadeOutBGM movs r0, 0x3C movs r1, 0x46 bl sub_803E708 diff --git a/asm/code_8086A3C.s b/asm/code_8086A3C.s index cf488ee7c..80e503289 100644 --- a/asm/code_8086A3C.s +++ b/asm/code_8086A3C.s @@ -79,7 +79,7 @@ TeamMeaniesPreFightDialogue: bl sub_803E708 bl sub_8087144 movs r0, 0xA - bl sub_8083E88 + bl DungeonStartNewBGM ldr r0, _08087050 bl DisplayDungeonDialogue movs r0, 0xA @@ -253,7 +253,7 @@ sub_8087144: mov r0, r9 str r0, [r4, 0x8] movs r0, 0xA - bl sub_8083E88 + bl DungeonStartNewBGM adds r0, r7, 0 bl sub_8086A54 mov r0, r8 @@ -327,7 +327,7 @@ sub_8087230: bl GetEntityFromClientType adds r5, r0, 0 movs r0, 0x72 - bl sub_8083E88 + bl DungeonStartNewBGM bl sub_8085374 bl sub_80854D4 movs r0, 0x4 @@ -514,7 +514,7 @@ ZapdosPreFightDialogue: bl sub_803E708 movs r0, 0x3 bl ZapdosScreenFlash - bl sub_8083F14 + bl DungeonStopBGM movs r0, 0xED lsls r0, 1 bl PlaySoundEffect @@ -523,7 +523,7 @@ ZapdosPreFightDialogue: ldr r0, [sp, 0x68] bl ZapdosDropInEffect movs r0, 0x9 - bl sub_8083E88 + bl DungeonStartNewBGM adds r0, r6, 0 movs r1, 0x6 movs r2, 0x4 diff --git a/asm/dungeon_music.s b/asm/dungeon_music.s new file mode 100644 index 000000000..d5182810e --- /dev/null +++ b/asm/dungeon_music.s @@ -0,0 +1,35 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_80840A4 +sub_80840A4: + ldr r3, _080840C8 + ldr r0, [r3] + ldr r2, _080840CC + adds r1, r0, 0 + muls r1, r2 + adds r1, 0x1 + lsrs r0, r1, 16 + muls r1, r2 + adds r1, 0x1 + str r1, [r3] + ldr r2, _080840D0 + ands r1, r2 + orrs r0, r1 + ldr r1, _080840D4 + ands r0, r1 + movs r1, 0x1 + orrs r0, r1 + bx lr + .align 2, 0 +_080840C8: .4byte gUnknown_203B458 +_080840CC: .4byte 0x5d588b65 +_080840D0: .4byte 0xffff0000 +_080840D4: .4byte 0x00ffffff + thumb_func_end sub_80840A4 + + .align 2,0 diff --git a/include/dungeon.h b/include/dungeon.h index 31c06af57..2be5e8a56 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -31,5 +31,6 @@ const u8 *GetDungeonName1(u8 dungeon); u32 sub_80908D8(struct DungeonLocation *dungeon); u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2); bool8 sub_809095C(u8 dungeon); +u8 GetUnk9(u8 dungeon); #endif //GUARD_DUNGEON_H diff --git a/include/dungeon_engine.h b/include/dungeon_engine.h index aa0cdf7cf..7ae39bb61 100644 --- a/include/dungeon_engine.h +++ b/include/dungeon_engine.h @@ -3,7 +3,7 @@ bool8 IsBossBattle(void); bool8 IsFixedDungeon(void); -bool8 sub_8044210(void); +bool8 IsDungeonMaze(void); void RunDungeon(bool8 param_1); #endif diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index fbd4d443f..93654a024 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -21,6 +21,38 @@ struct DungeonGlobalData_sub u8 unk2; }; +struct unkDungeonGlobal_unk1CE98_sub +{ + /* 0x0 */ u8 buffer1[0xA]; + /* 0xA */ u8 buffer2[0xA]; + /* 0x14 */ s16 unk14; + /* 0x16 */ u8 fill16[0x2];; + /* 0x18 */ struct DungeonLocation dungeonLocation; + /* 0x1C */ struct ItemSlot heldItem; + /* 0x20 */ u32 expPoints; + /* 0x24 */ s16 maxHP; + /* 0x26 */ u8 attack; + /* 0x27 */ u8 specialAttack; + /* 0x28 */ u8 defense; + /* 0x29 */ u8 specialDefense; + /* 0x2A */ u8 level; + /* 0x2B */ u8 attBoost; + /* 0x2C */ u8 spAttBoost; + /* 0x2D */ u8 defBoost; + /* 0x2E */ u8 spDefBoost; + u8 unk4; // speedBoost? +}; + +struct DungeonMusicPlayer +{ + u32 state; + u32 fadeOutSpeed; + u16 fadeInSpeed; + u16 songIndex; + u16 pastSongIndex; + u16 queuedSongIndex; +}; + struct DungeonGlobalData { u8 unk0; @@ -49,9 +81,8 @@ struct DungeonGlobalData u8 fill17A[0x17C - 0x17A]; struct DungeonGlobalData_sub unk17C[0x100]; /* 0x57C */ u8 fill57C[0x644 - 0x57c]; - /* 0x644 */ u8 unk644; - /* 0x645 */ u8 floorNumber; - u8 fill646[0x654 - 0x646]; + /* 0x644 */ struct DungeonLocation dungeonLocation; + u8 fill646[0x654 - 0x648]; u8 unk654; u8 fill655[0x65C - 0x655]; u8 unk65C; @@ -64,7 +95,8 @@ struct DungeonGlobalData u8 unk66C; u8 unk66D; /* 0x66E */ u8 unk66E; - u8 fill66F[0x671 - 0x66F]; + u8 unk66F; + u8 unk670; /* 0x671 */ bool8 monsterHouseActive; /* 0x672 */ u8 unk672; u8 unk673; @@ -75,7 +107,9 @@ struct DungeonGlobalData u8 unk678; u8 unk679[0x68A - 0x679]; /* 0x68A */ u8 unk68A; - u8 fill68B[0x363C - 0x68B]; + u8 fill68B[0x699 - 0x68B]; + u8 unk699; + u8 fill69A[0x363C - 0x69A]; /* 0x363C */ u8 expYieldRankings[NUM_SPECIES]; u8 fill37E3[0x37F4 - 0x37D9]; /* 0x37F4 */ s32 unk37F4; @@ -155,6 +189,10 @@ struct DungeonGlobalData u8 unk18217; u8 fill18218[0x1C578 - 0x18218]; u8 unk1C578; + u8 fill1C579[0x1CE98 - 0x1C579]; + /* 0x1CE98 */ struct unkDungeonGlobal_unk1CE98_sub unk1CE98; + u32 unk1CEC8; + /* 0x1CECC */ struct DungeonMusicPlayer musPlayer; }; #endif diff --git a/include/dungeon_music.h b/include/dungeon_music.h new file mode 100644 index 000000000..53a70f40e --- /dev/null +++ b/include/dungeon_music.h @@ -0,0 +1,16 @@ +#ifndef GUARD_DUNGEON_MUSIC_H +#define GUARD_DUNGEON_MUSIC_H + +void PlaySoundEffect(u32 songIndex); +void StopSoundEffect(u32 songIndex); +bool8 IsFanfareSEPlaying_2(u16 songIndex); +void DungeonStartNewBGM(u16 songIndex); +void DungeonFadeInNewBGM(u16 songIndex, u32 fadeInSpeed); +void DungeonFadeOutBGM(u16 speed); +void DungeonStopBGM(void); +u16 DungeonGetCurrentBGSong(void); +void StopDungeonBGM(void); +void UpdateDungeonMusic(void); + +#endif + diff --git a/ld_script.txt b/ld_script.txt index 3edca36a9..d3c27ea6b 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -269,6 +269,8 @@ SECTIONS { asm/code_808333C.o(.text); src/dungeon_leader.o(.text); asm/code_8083654.o(.text); + src/dungeon_music.o(.text); + asm/dungeon_music.o(.text); src/dungeon_random.o(.text); src/code_808417C.o(.text); asm/code_808417C.o(.text); diff --git a/src/code_8040094.c b/src/code_8040094.c index 926b3ed81..403919e06 100644 --- a/src/code_8040094.c +++ b/src/code_8040094.c @@ -4,6 +4,7 @@ #include "dungeon_entity.h" #include "dungeon_global_data.h" #include "dungeon_map_access.h" +#include "dungeon_music.h" #include "file_system.h" #include "play_time.h" @@ -18,7 +19,6 @@ extern void sub_80060EC(void); extern void sub_800CB20(void); extern void LoadBufferedInputs(void); extern void xxx_call_update_bg_sound_input(void); -extern void sub_8083F58(void); extern void sub_8011860(void); extern void sub_803F580(u32); @@ -59,7 +59,7 @@ void sub_8040094(u8 r0) sub_800CB20(); LoadBufferedInputs(); xxx_call_update_bg_sound_input(); - sub_8083F58(); + UpdateDungeonMusic(); sub_8011860(); } diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index f105baa14..2c78a1389 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -1,10 +1,12 @@ #include "global.h" +#include "constants/bg_music.h" #include "constants/direction.h" #include "constants/friend_area.h" #include "constants/weather.h" #include "dungeon_global_data.h" #include "dungeon_entity.h" #include "dungeon_map_access.h" +#include "dungeon_music.h" #include "dungeon_random.h" #include "dungeon_util.h" #include "dungeon_util_1.h" @@ -310,11 +312,9 @@ extern u8 sub_800E9A8(u32); extern void sub_800DC14(u32); extern void sub_8086A3C(struct DungeonEntity *r0); -extern void sub_8083E88(u32); extern void sub_80854D4(void); extern void sub_80855E4(void *); extern void sub_8068FE0(struct DungeonEntity *, u32, u32); -extern void sub_8083EA8(u32, u32); extern void sub_803E708(u32, u32); extern void sub_8086448(void); @@ -331,12 +331,9 @@ extern void DisplayDungeonDialogue(u32 *); extern void sub_803E708(u32, u32); extern u8 HasRecruitedMon(u32); extern u8 sub_806FD18(struct DungeonEntity *); -extern bool8 IsFanfareSEPlaying_2(u32); -extern void sub_8083F14(); extern void sub_80861D4(struct DungeonEntity *, u32, s32 direction); extern void sub_806FDF4(struct DungeonEntity *, struct DungeonEntity *, struct DungeonEntity **); extern u32 sub_80861F8(u32, struct DungeonEntity *, u32); -extern void sub_8083ED8(u32); extern s32 GetCameraXPos(); extern s32 GetCameraYPos(); extern void sub_803F878(u32, s32); @@ -377,10 +374,8 @@ extern void sub_808BBA8(struct DungeonEntity * ); extern void sub_80855E4(void *); extern void sub_8041888(u32); extern void sub_80861B8(struct DungeonEntity *, u32, u32); -extern void sub_8083ED8(u32); extern void sub_803E708(u32, u32); extern void DisplayDungeonDialogue(u32 *r0); -extern void sub_8083E88(u32); extern void SpriteShockEffect(struct DungeonEntity *); extern u32 sub_80861F8(u32, struct DungeonEntity *, u32); @@ -411,7 +406,6 @@ extern void sub_803E46C(u32); extern void sub_80866C4(u32 *); extern void sub_808692C(); -extern void StopSoundEffect(u32); extern void sub_80868F4(); extern void sub_8086910(); extern u32 sub_8085EC8(u32, u32, u32, u32 *, u32); @@ -449,7 +443,6 @@ void sub_80891F0(void); void sub_8089294(void); void GroudonScreenFlash2(void); -extern void sub_8083F14(); extern u8 sub_8086AE4(u32); @@ -466,8 +459,6 @@ extern void sub_8086738(); extern void sub_8086A54(struct DungeonEntity *); extern void sub_8086764(); -extern s32 GetCameraXPos(); -extern s32 GetCameraYPos(); extern void sub_803F878(u32,s32); void SceneGroudonMovement(struct DungeonEntity * param_1); @@ -613,7 +604,7 @@ void sub_80877E8(void) LeaderEntity = xxx_call_GetLeaderEntity(); MoltresEntity = GetEntityFromClientType(9); - sub_8083E88(0x26); + DungeonStartNewBGM(MUS_THE_MOUNTAIN_OF_FIRE); sub_8085374(); sub_80854D4(); sub_8085930(DIRECTION_WEST); @@ -629,12 +620,12 @@ void sub_8087848(void) struct DungeonEntity *LeaderEntity; struct DungeonEntity *MoltresEntity; - u32 uVar4; - s32 iVar3; + u32 XPos; + s32 YPos; LeaderEntity = xxx_call_GetLeaderEntity(); MoltresEntity = GetEntityFromClientType(9); - sub_8083E88(0x26); + DungeonStartNewBGM(MUS_THE_MOUNTAIN_OF_FIRE); sub_80854D4(); sub_8085930(DIRECTION_WEST); sub_80855E4(sub_8086A3C); @@ -647,9 +638,9 @@ void sub_8087848(void) sub_8086A3C(MoltresEntity); } sub_8085860(LeaderEntity->posWorld.x - 5, LeaderEntity->posWorld.y); - uVar4 = GetCameraXPos(); - iVar3 = GetCameraYPos(); - sub_803F878(uVar4,iVar3 + -0x1000); + XPos = GetCameraXPos(); + YPos = GetCameraYPos(); + sub_803F878(XPos, YPos + -0x1000); CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_MOLTRES); } @@ -699,7 +690,7 @@ void MoltresPreFightDialogue(void) sub_803E708(4,0x46); sub_8085930(DIRECTION_NORTH); PlaySoundEffect(0x2f2); - sub_8083F14(); + DungeonStopBGM(); MoltresScreenDarken(); DisplayDungeonDialogue(&gMoltresPreFightDialogue_6); sub_803E708(10,0x46); @@ -1024,7 +1015,7 @@ void sub_8087F54(void) LeaderEntity = xxx_call_GetLeaderEntity(); ArticunoEntity = GetEntityFromClientType(0xd); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_8085374(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); @@ -1040,7 +1031,7 @@ void sub_8087FB4(void) struct DungeonEntity *ArticunoEntity; ArticunoEntity = GetEntityFromClientType(0xd); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_8085374(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); @@ -1096,7 +1087,7 @@ void ArticunoPreFightDialogue(void) DisplayDungeonDialogue(&gArticunoPreFightDialogue_1); sub_803E708(10,0x46); sub_8086598(); - sub_8083F14(); + DungeonStopBGM(); DisplayDungeonDialogue(&gArticunoPreFightDialogue_2); sub_803E708(10,0x46); sub_80869E4(PartnerEntity,4,1,2); @@ -1273,9 +1264,9 @@ void sub_8088574(void) void sub_80885A0(void) { - sub_8083ED8(0x3c); + DungeonFadeOutBGM(0x3c); sub_803E708(0x3c,0x46); - sub_8083F14(); + DungeonStopBGM(); gDungeonGlobalData->unk7 = 1; } @@ -1284,9 +1275,9 @@ void sub_80885C4(void) struct DungeonEntity * LeaderEntity; LeaderEntity = xxx_call_GetLeaderEntity(); - sub_8083ED8(0x3c); + DungeonFadeOutBGM(0x3c); sub_803E708(0x3c,0x46); - sub_8083F14(); + DungeonStopBGM(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -1316,7 +1307,7 @@ void sub_808862C(void) LeaderEntity = xxx_call_GetLeaderEntity(); AlakazamEntity = GetEntityFromClientType(10); GroudonEntity = GetEntityFromClientType(0xe); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80867F4(); sub_8085374(); sub_80854D4(); @@ -1337,8 +1328,8 @@ void sub_80886C4(void) struct DungeonEntity * AlakazamEntity; struct DungeonEntity * GroudonEntity; - u32 uVar4; - s32 iVar2; + u32 XPos; + s32 YPos; LeaderEntity = xxx_call_GetLeaderEntity(); AlakazamEntity = GetEntityFromClientType(10); @@ -1352,9 +1343,9 @@ void sub_80886C4(void) SetFacingDirection(GroudonEntity, DIRECTION_SOUTH); sub_8086A3C(GroudonEntity); sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); - uVar4 = GetCameraXPos(); - iVar2 = GetCameraYPos(); - sub_803F878(uVar4,iVar2 + -0x1000); + XPos = GetCameraXPos(); + YPos = GetCameraYPos(); + sub_803F878(XPos,YPos + -0x1000); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON); CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM); } @@ -1459,7 +1450,7 @@ void GroudonPreFightDialogue(void) sub_803E708(0x3c,0x46); DisplayDungeonDialogue(&GroudonPreFightDialogue_11); sub_803E708(10,0x46); - sub_8083F14(); + DungeonStopBGM(); GroudonScreenFlash2(); sub_803E708(0x1e,0x46); DisplayDungeonDialogue(&GroudonPreFightDialogue_12); @@ -1501,7 +1492,7 @@ void GroudonReFightDialogue(void) sub_803E708(10,0x46); sub_808682C(); sub_803E708(0x3c,0x46); - sub_8083F14(); + DungeonStopBGM(); PlaySoundEffect(0x1fa); sub_8086738(); DisplayDungeonDialogue(&gGroudonReFightDialogue_4); @@ -1704,7 +1695,7 @@ void MagmaCavernMidDialogue(void) // far already.. DisplayDungeonDialogue(&MagmaCavernMidDialogue_2); sub_803E708(10,0x46); - sub_8083F14(); + DungeonStopBGM(); sub_80855E4(sub_80868F4); sub_808680C(); PlaySoundEffect(0x1c5); @@ -1901,7 +1892,7 @@ void sub_80892C8(void) LeaderEntity = xxx_call_GetLeaderEntity(); RayquazaEntity = GetEntityFromClientType(0xf); - sub_8083E88(0x1a); + DungeonStartNewBGM(MUS_RAYQUAZAS_DOMAIN); sub_8085374(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); @@ -1919,7 +1910,7 @@ void sub_8089328(void) LeaderEntity = xxx_call_GetLeaderEntity(); RayquazaEntity = GetEntityFromClientType(0xf); - sub_8083E88(0x1a); + DungeonStartNewBGM(MUS_RAYQUAZAS_DOMAIN); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -2088,7 +2079,7 @@ void sub_808970C(void) struct DungeonEntity *LeaderEntity; LeaderEntity = xxx_call_GetLeaderEntity(); - sub_8083E88(0x7D); + DungeonStartNewBGM(MUS_TINY_WOODS); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -2210,7 +2201,7 @@ void sub_8089914(void) LeaderEntity = xxx_call_GetLeaderEntity(); MewtwoEntity = GetEntityFromClientType(0x11); - sub_8083F14(); + DungeonStopBGM(); gDungeonGlobalData->unk7 = 1; sub_80854D4(); sub_8085930(DIRECTION_NORTH); @@ -2228,12 +2219,12 @@ void sub_8089978(void) LeaderEntity = xxx_call_GetLeaderEntity(); MewtwoEntity = GetEntityFromClientType(0x11); - sub_8083F14(); + DungeonStopBGM(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); if(HasRecruitedMon(SPECIES_MEWTWO)){ - sub_8083E88(0x23); + DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); sub_8068FE0(MewtwoEntity,0x21c,0); } else { @@ -2263,7 +2254,7 @@ void MewtwoPreFightDialogue(void) sub_8086448(); DisplayDungeonDialogue(&gMewtwoPreFightDialogue_1); sub_803E708(10,0x46); - sub_8083E88(0x23); + DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); sub_8086794(); sub_803E708(0x1e,0x46); MewtwoDropInEffect(MewtwoEntity); @@ -2293,7 +2284,7 @@ void MewtwoReFightDialogue(void) } else { DisplayDungeonDialogue(&gMewtwoReFightDialogue_1); - sub_8083E88(0x23); + DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); sub_8086794(); MewtwoDropInEffect(MewtwoEntity); sub_803E708(0x3c,0x46); @@ -2362,7 +2353,7 @@ void sub_8089C44(void) LeaderEntity = xxx_call_GetLeaderEntity(); EnteiEntity = GetEntityFromClientType(0x12); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(EnteiEntity, DIRECTION_SOUTH); @@ -2378,7 +2369,7 @@ void sub_8089C90(void) LeaderEntity = xxx_call_GetLeaderEntity(); EnteiEntity = GetEntityFromClientType(0x12); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); if (HasRecruitedMon(SPECIES_ENTEI)) { @@ -2493,7 +2484,7 @@ void sub_8089EFC(void) LeaderEntity = xxx_call_GetLeaderEntity(); RaikouEntity = GetEntityFromClientType(0x13); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(RaikouEntity, DIRECTION_SOUTH); @@ -2509,7 +2500,7 @@ void sub_8089F44(void) LeaderEntity = xxx_call_GetLeaderEntity(); RaikouEntity = GetEntityFromClientType(0x13); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(RaikouEntity, DIRECTION_SOUTH); @@ -2525,7 +2516,7 @@ void sub_8089F8C(void) LeaderEntity = xxx_call_GetLeaderEntity(); RaikouEntity = GetEntityFromClientType(0x13); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); if (HasRecruitedMon(SPECIES_RAIKOU)) { @@ -2649,7 +2640,7 @@ void sub_808A264(void) LeaderEntity = xxx_call_GetLeaderEntity(); SuicuneEntity = GetEntityFromClientType(0x14); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -2666,7 +2657,7 @@ void sub_808A2C0(void) LeaderEntity = xxx_call_GetLeaderEntity(); SuicuneEntity = GetEntityFromClientType(0x14); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(SuicuneEntity, DIRECTION_SOUTH); @@ -2681,7 +2672,7 @@ void sub_808A308(void) LeaderEntity = xxx_call_GetLeaderEntity(); SuicuneEntity = GetEntityFromClientType(0x14); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); if (HasRecruitedMon(SPECIES_SUICUNE)) { @@ -2824,7 +2815,7 @@ void sub_808A608(void) LeaderEntity = xxx_call_GetLeaderEntity(); HoOhEntity = GetEntityFromClientType(0x15); - sub_8083E88(0x1c); + DungeonStartNewBGM(MUS_FRIEND_AREA_RAINBOW_PEAK); sub_80867F4(); sub_8086838(0,0,0); sub_80854D4(); @@ -2842,7 +2833,7 @@ void sub_808A668(void) LeaderEntity = xxx_call_GetLeaderEntity(); HoOhEntity = GetEntityFromClientType(0x15); - sub_8083E88(0x1c); + DungeonStartNewBGM(MUS_FRIEND_AREA_RAINBOW_PEAK); sub_80867F4(); sub_8086838(0,0,0); sub_80854D4(); @@ -3003,7 +2994,7 @@ void sub_808A9E4(void) LeaderEntity = xxx_call_GetLeaderEntity(); LatiosEntity = GetEntityFromClientType(0x16); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -3019,7 +3010,7 @@ void sub_808AA3C(void) LeaderEntity = xxx_call_GetLeaderEntity(); LatiosEntity = GetEntityFromClientType(0x16); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -3035,7 +3026,7 @@ void sub_808AA94(void) LeaderEntity = xxx_call_GetLeaderEntity(); LatiosEntity = GetEntityFromClientType(0x16); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -3227,7 +3218,7 @@ void sub_808AE54(char param_1,char param_2,u32 *param_3) if (sub_8098100(0x1d) == 0) { xxx_init_itemslot_8090A8C(&auStack20,ITEM_ID_ROCK_PART,0); sub_80464C8(GetLeaderEntity(),param_3,&auStack20); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); // Something fell from Regirock's body // Regirock was apparently guarding this item DisplayDungeonDialogue(&gRegirockPostFightDialogue_1); @@ -3250,7 +3241,7 @@ void sub_808AEC8(char param_1,char param_2,u32 *param_3) if (sub_8098100(0x1d) == 0) { xxx_init_itemslot_8090A8C(&auStack20,ITEM_ID_ICE_PART,0); sub_80464C8(GetLeaderEntity(),param_3,&auStack20); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); // Something fell from Regice's body // Regice was apparently guarding this item DisplayDungeonDialogue(&gRegicePostFightDialogue_1); @@ -3272,7 +3263,7 @@ void sub_808AF3C(char param_1,char param_2,u32 *param_3) if (sub_8098100(0x1d) == 0) { xxx_init_itemslot_8090A8C(&auStack20,ITEM_ID_STEEL_PART,0); sub_80464C8(GetLeaderEntity(),param_3, &auStack20); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); // Something fell from Registeel's body // Registeel was apparently guarding this item DisplayDungeonDialogue(&gRegisteelPostFightDialogue_1); @@ -3513,7 +3504,7 @@ void sub_808B2F4(void) LeaderEntity = xxx_call_GetLeaderEntity(); JirachiEntity = GetEntityFromClientType(0x1a); - sub_8083E88(0x79); + DungeonStartNewBGM(MUS_FRIEND_AREA_FOREST); sub_808BCE4(); sub_8049ED4(); sub_80854D4(); @@ -3532,7 +3523,7 @@ void sub_808B35C(void) LeaderEntity = xxx_call_GetLeaderEntity(); JirachiEntity = GetEntityFromClientType(0x1a); - sub_8083E88(0x79); + DungeonStartNewBGM(MUS_FRIEND_AREA_FOREST); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -3678,11 +3669,11 @@ void sub_808B50C(void) JirachiEntity->entityData->unk15C = 1; JirachiEntity->entityData->unk15E = 0; sub_80861B8(JirachiEntity,0xe,0); - sub_8083ED8(0x1e); + DungeonFadeOutBGM(0x1e); sub_803E708(0x1e,70); // Fwaaaahhhh DisplayDungeonDialogue(&gUnknown_810554C); - sub_8083E88(0x79); + DungeonStartNewBGM(MUS_FRIEND_AREA_FOREST); // I think I had a dream, and I was fighting in it // Did I imagine it? // I'm sleepy so I'm going back to sleep. @@ -3724,7 +3715,7 @@ void JirachiWish(void) sub_80861B8(JirachiEntity,0xe,0); sub_80855E4(sub_80861A8); gDungeonGlobalData->unk1356C = 1; - sub_8083ED8(0x1e); + DungeonFadeOutBGM(0x1e); sub_803E708(0x1e,0x46); DisplayDungeonDialogue(&gUnknown_8105668); sub_803E708(10,0x46); @@ -3732,7 +3723,7 @@ void JirachiWish(void) sub_803E708(0x96,0x46); SpriteShockEffect(JirachiEntity); DisplayDungeonDialogue(&gUnknown_8105674); - sub_8083E88(0x79); + DungeonStartNewBGM(MUS_FRIEND_AREA_FOREST); sub_803E708(10,0x46); sub_80856E0(JirachiEntity, DIRECTION_SOUTH); PlaySoundEffect(0x16a); @@ -3943,7 +3934,11 @@ void JirachiWishGrantFlash(void) void sub_808BB3C(s16 *param_1) { +#ifndef NONMATCHING register s32 iVar1 asm("r0"); +#else + s32 iVar1; +#endif s32 uVar2; u32 local_8; @@ -4103,12 +4098,12 @@ void sub_808BDEC(void) LeaderEntity = xxx_call_GetLeaderEntity(); LugiaEntity = GetEntityFromClientType(0x1b); - sub_8083F14(); + DungeonStopBGM(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); if (HasRecruitedMon(SPECIES_LUGIA)) { - sub_8083E88(0x23); + DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); sub_8068FE0(LugiaEntity,0x21c,0); } else { @@ -4139,10 +4134,10 @@ void LugiaPreFightDialogue(void) sub_80866C4(&gLugiaPreFightDialogue_8); } else { - sub_8083F14(); + DungeonStopBGM(); sub_8086448(); DisplayDungeonDialogue(&gLugiaPreFightDialogue_1); - sub_8083EA8(0x23,0x3c); + DungeonFadeInNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE,0x3c); sub_808C0CC(); DisplayDungeonDialogue(&gLugiaPreFightDialogue_2); LugiaScreenFlash(); @@ -4158,12 +4153,12 @@ void LugiaPreFightDialogue(void) DisplayDungeonDialogue(&gLugiaPreFightDialogue_6); LugiaScreenFlash2(); SetDungeonBGColorRGB(0xffffff06,0xffffff06,0xffffff06,1,0); - sub_8083F14(); + DungeonStopBGM(); sub_80861D4(LugiaEntity,7,0); DisplayDungeonDialogue(&gLugiaPreFightDialogue_7); LugiaScreenFlash(); SetupBossFightHP(LugiaEntity,800,0x20); - sub_8083E88(0x23); + DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); } } @@ -4238,12 +4233,12 @@ void sub_808C10C(void) struct DungeonEntity * LeaderEntity; struct DungeonEntity * KyogreEntity; - u32 uVar3; - s32 iVar2; + u32 XPos; + s32 YPos; LeaderEntity = xxx_call_GetLeaderEntity(); KyogreEntity = GetEntityFromClientType(0x1c); - sub_8083F14(); + DungeonStopBGM(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); if (HasRecruitedMon(SPECIES_KYOGRE)) { @@ -4254,9 +4249,9 @@ void sub_808C10C(void) SetFacingDirection(KyogreEntity, DIRECTION_SOUTH); } sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); - uVar3 = GetCameraXPos(); - iVar2 = GetCameraYPos(); - sub_803F878(uVar3,iVar2 + -0x1000); + XPos = GetCameraXPos(); + YPos = GetCameraYPos(); + sub_803F878(XPos,YPos + -0x1000); CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_KYOGRE); // TODO: gUnknown_202E088 doesn't match but gUnknown_202E038 + 0x50 does CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_GROUDON); @@ -4266,7 +4261,7 @@ void sub_808C1A4(u8 param_1,u8 param_2) { if ((param_2 == 0x34) && (param_1 == 0x1C)) { gDungeonGlobalData->unk2 = 1; - sub_8083E88(0x23); + DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); } } @@ -4277,9 +4272,9 @@ void KyogrePreFightDialogue(void) LeaderEntity = xxx_call_GetLeaderEntity(); KyogreEntity = GetEntityFromClientType(0x1c); - sub_8083F14(); + DungeonStopBGM(); if (HasRecruitedMon(SPECIES_KYOGRE)) { - sub_8083EA8(0x23,0x3c); + DungeonFadeInNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE,0x3c); SpriteLookAroundEffect(LeaderEntity); sub_803E708(10,0x46); DisplayDungeonDialogue(&gKyogrePreFightDialogue_8); @@ -4296,7 +4291,7 @@ void KyogrePreFightDialogue(void) // Gwwwwwooooooooh DisplayDungeonDialogue(&gKyogrePreFightDialogue_3); sub_803E708(10,0x46); - sub_8083EA8(0x23,0x3c); + DungeonFadeInNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE,0x3c); sub_808C360(); // My duels against {ARG_POKEMON_3} (Groudon) left us both exhausted DisplayDungeonDialogue(&gKyogrePreFightDialogue_4); @@ -4313,7 +4308,7 @@ void KyogrePreFightDialogue(void) DisplayDungeonDialogue(&gKyogrePreFightDialogue_7); sub_803E708(10,0x46); SetupBossFightHP(KyogreEntity,600,0xb); - sub_8083E88(0x23); + DungeonStartNewBGM(MUS_FRIEND_AREA_CRYPTIC_CAVE); ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); } } @@ -4360,7 +4355,7 @@ void sub_808C3A0(void) struct DungeonEntity * LeaderEntity; LeaderEntity = xxx_call_GetLeaderEntity(); - sub_8083F14(); + DungeonStopBGM(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -4379,7 +4374,7 @@ void sub_808C414(u8 param_1,u8 param_2) { if ((param_2 == 0x35) && (param_1 == 0x1D)) { gDungeonGlobalData->unk2 = 1; - sub_8083E88(0x1a); + DungeonStartNewBGM(MUS_RAYQUAZAS_DOMAIN); } } @@ -4396,7 +4391,7 @@ void DeoxysPreFightDialogue(void) } else { DisplayDungeonDialogue(&gDeoxysPreFightDialogue_1); - sub_8083EA8(0x1a,0x3c); + DungeonFadeInNewBGM(MUS_RAYQUAZAS_DOMAIN, 0x3c); sub_808C550(); DisplayDungeonDialogue(&gDeoxysPreFightDialogue_2); DeoxysScreenFlash(); @@ -4462,19 +4457,19 @@ void sub_808C5C0(void) struct DungeonEntity * LeaderEntity; struct DungeonEntity * CelebiEntity; - u32 uVar3; - s32 iVar2; + u32 XPos; + s32 YPos; LeaderEntity = xxx_call_GetLeaderEntity(); CelebiEntity = GetEntityFromClientType(0x1e); - sub_8083E88(0x7f); + DungeonStartNewBGM(MUS_FRIEND_AREA_HEALING_FOREST); sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(CelebiEntity, DIRECTION_SOUTH); sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); - uVar3 = GetCameraXPos(); - iVar2 = GetCameraYPos(); - sub_803F878(uVar3,iVar2 + 0xfffff000); + XPos = GetCameraXPos(); + YPos = GetCameraYPos(); + sub_803F878(XPos,YPos + 0xfffff000); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_CELEBI); } @@ -4538,12 +4533,12 @@ void CelebiJoinDialogue(void) sub_803E708(10,0x46); if (menuChoice == 1) { - sub_8083F14(); + DungeonStopBGM(); PlaySoundEffect(0xcc); while (IsFanfareSEPlaying_2(0xcc) != 0) { sub_803E46C(0x46); } - sub_8083E88(0x7f); + DungeonStartNewBGM(MUS_FRIEND_AREA_HEALING_FOREST); PlaySoundEffect(0x1c7); sub_80861D4(CelebiEntity,0xd,0); sub_803E708(0x37,0x46); @@ -4554,7 +4549,7 @@ void CelebiJoinDialogue(void) DisplayDungeonDialogue(&gCelebiJoinDialogue_4); sub_803E708(10,0x46); sub_806FDF4(LeaderEntity,CelebiEntity,&CelebiEntity); - sub_8083E88(0x7f); + DungeonStartNewBGM(MUS_FRIEND_AREA_HEALING_FOREST); DisplayDungeonDialogue(&gCelebiJoinDialogue_5); sub_803E708(10,0x46); PlaySoundEffect(0x1c7); @@ -4600,7 +4595,7 @@ void CelebiJoinDialogue(void) } } while (state != 2); } - sub_8083ED8(0x1e); + DungeonFadeOutBGM(0x1e); sub_803E708(0x1e,0x46); gDungeonGlobalData->unk2 = 1; } @@ -4727,7 +4722,7 @@ void CelebiJoinDialogue(void) "\tbl sub_803E708\n" "\tcmp r4, 0x1\n" "\tbne _0808C824\n" - "\tbl sub_8083F14\n" + "\tbl DungeonStopBGM\n" "\tmovs r0, 0xCC\n" "\tbl PlaySoundEffect\n" "\tb _0808C76E\n" @@ -4745,7 +4740,7 @@ void CelebiJoinDialogue(void) "\tcmp r0, 0\n" "\tbne _0808C768\n" "\tmovs r0, 0x7F\n" - "\tbl sub_8083E88\n" + "\tbl DungeonStartNewBGM\n" "\tmov r0, r8\n" "\tbl PlaySoundEffect\n" "\tldr r0, [sp]\n" @@ -4775,7 +4770,7 @@ void CelebiJoinDialogue(void) "\tmov r2, sp\n" "\tbl sub_806FDF4\n" "\tmovs r0, 0x7F\n" - "\tbl sub_8083E88\n" + "\tbl DungeonStartNewBGM\n" "\tldr r0, _0808C81C\n" "\tbl DisplayDungeonDialogue\n" "\tmovs r0, 0xA\n" @@ -4868,7 +4863,7 @@ void CelebiJoinDialogue(void) "\tb _0808C70E\n" "_0808C8AC:\n" "\tmovs r0, 0x1E\n" - "\tbl sub_8083ED8\n" + "\tbl DungeonFadeOutBGM\n" "\tmovs r0, 0x1E\n" "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" @@ -4954,7 +4949,7 @@ void sub_808C9C4(void) LeaderEntity = xxx_call_GetLeaderEntity(); MedichamEntity = GetEntityFromClientType(7); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -5023,7 +5018,7 @@ void sub_808CB5C(void) LeaderEntity = xxx_call_GetLeaderEntity(); MedichamEntity = GetEntityFromClientType(7); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_8068FE0(MedichamEntity, 0x21C, 0); @@ -5042,7 +5037,7 @@ void sub_808CBB0(void) LeaderEntity = xxx_call_GetLeaderEntity(); SmeargleEntity = GetEntityFromClientType(0x1F); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); @@ -5114,7 +5109,7 @@ void sub_808CD44(void) LeaderEntity = xxx_call_GetLeaderEntity(); SmeargleEntity = GetEntityFromClientType(0x1F); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); diff --git a/src/code_80848F0.c b/src/code_80848F0.c index 319c427b5..6695f7bf5 100644 --- a/src/code_80848F0.c +++ b/src/code_80848F0.c @@ -1,5 +1,6 @@ #include "global.h" #include "dungeon_global_data.h" +#include "dungeon_music.h" extern void SkarmoryPreFightDialogue(); extern void SkarmoryReFightDialogue(); @@ -86,7 +87,6 @@ extern void sub_808C1A4(u32,u8,u8); extern void sub_808C414(u32,u8,u8); extern void nullsub_100(u32,u8,u8); extern void sub_808C948(struct DungeonEntity *,u8); -extern void sub_8083E88(u32); extern void sub_808AFB0(u8); extern void sub_808B030(u8); @@ -654,7 +654,7 @@ void sub_8084E00(struct DungeonEntity *param_1,char param_2,char param_3) break; } if ((param_3 == '\0') && (gDungeonGlobalData->unk2 != '\0')) { - sub_8083E88(999); + DungeonStartNewBGM(999); } } } diff --git a/src/code_80869E4.c b/src/code_80869E4.c index 3b2519fc1..88847fca4 100644 --- a/src/code_80869E4.c +++ b/src/code_80869E4.c @@ -149,17 +149,17 @@ void sub_8086434(struct DungeonEntity *entity) void sub_8086448(void) { s32 iVar1; - u32 retVar; - u32 retVar2; + u32 XPos; + u32 YPos; sub_80855E4(sub_80862DC); for(iVar1 = 0; iVar1 < 0x38; iVar1++) { - retVar = GetCameraXPos(); - retVar2 = GetCameraYPos(); - retVar2 += (0x80 << 1); - sub_803F878(retVar, retVar2); + XPos = GetCameraXPos(); + YPos = GetCameraYPos(); + YPos += (0x80 << 1); + sub_803F878(XPos, YPos); sub_80855E4(sub_8086410); sub_803E46C(0x46); } @@ -194,17 +194,17 @@ void sub_8086494(void) void sub_8086500(void) { s32 iVar1; - u32 retVar; - u32 retVar2; + u32 XPos; + u32 YPos; sub_80855E4(sub_8086348); for(iVar1 = 0; iVar1 < 0x48; iVar1++) { - retVar = GetCameraXPos(); - retVar += (0x80 << 1); - retVar2 = GetCameraYPos(); - sub_803F878(retVar, retVar2); + XPos = GetCameraXPos(); + XPos += (0x80 << 1); + YPos = GetCameraYPos(); + sub_803F878(XPos, YPos); sub_80855E4(sub_8086434); sub_803E46C(0x46); } @@ -214,17 +214,17 @@ void sub_8086500(void) void sub_808654C(void) { s32 iVar1; - u32 retVar; - u32 retVar2; + u32 XPos; + u32 YPos; sub_80855E4(sub_8086384); for(iVar1 = 0; iVar1 < 0x78; iVar1++) { - retVar = GetCameraXPos(); - retVar += (0x80 << 1); - retVar2 = GetCameraYPos(); - sub_803F878(retVar, retVar2); + XPos = GetCameraXPos(); + XPos += (0x80 << 1); + YPos = GetCameraYPos(); + sub_803F878(XPos, YPos); sub_80855E4(sub_8086434); sub_803E46C(0x46); } @@ -234,16 +234,16 @@ void sub_808654C(void) void sub_8086598(void) { s32 iVar1; - u32 retVar; - u32 retVar2; + u32 XPos; + u32 YPos; sub_80855E4(sub_80863B8); for(iVar1 = 0; iVar1 < 0x18; iVar1++) { - retVar = GetCameraXPos(); - retVar2 = GetCameraYPos(); - sub_803F878(retVar, retVar2 + (0xffffff00)); + XPos = GetCameraXPos(); + YPos = GetCameraYPos(); + sub_803F878(XPos, YPos + (0xffffff00)); sub_80855E4(sub_8086410); sub_803E46C(0x46); } @@ -253,16 +253,16 @@ void sub_8086598(void) void sub_80865E8(void) { s32 iVar1; - u32 retVar; - u32 retVar2; + u32 XPos; + u32 YPos; sub_80855E4(sub_80863E8); for(iVar1 = 0; iVar1 < 0xC; iVar1++) { - retVar = GetCameraXPos(); - retVar2 = GetCameraYPos(); - sub_803F878(retVar, retVar2 + (0x80 << 2)); + XPos = GetCameraXPos(); + YPos = GetCameraYPos(); + sub_803F878(XPos, YPos + (0x80 << 2)); sub_80855E4(sub_8086424); sub_80855E4(sub_8086424); sub_803E46C(0x46); @@ -273,16 +273,16 @@ void sub_80865E8(void) void sub_808663C(void) { s32 iVar1; - u32 retVar; - u32 retVar2; + u32 XPos; + u32 YPos; sub_80855E4(sub_80863E8); for(iVar1 = 0; iVar1 < 0x10; iVar1++) { - retVar = GetCameraXPos(); - retVar2 = GetCameraYPos(); - sub_803F878(retVar, retVar2 + (0x80 << 2)); + XPos = GetCameraXPos(); + YPos = GetCameraYPos(); + sub_803F878(XPos, YPos + (0x80 << 2)); sub_80855E4(sub_8086424); sub_80855E4(sub_8086424); sub_803E46C(0x46); diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index 8e006a9eb..f7e9b7a93 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -1,7 +1,9 @@ #include "global.h" +#include "constants/bg_music.h" #include "constants/direction.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" +#include "dungeon_music.h" #include "pokemon.h" #include "dungeon_util_1.h" @@ -13,7 +15,6 @@ extern void sub_8097FF8(void); extern u8 sub_8044B28(void); extern u8 HasRecruitedMon(u32); extern u8 gUnknown_202E038[]; -extern void sub_8083E88(u32); extern void sub_8085374(); extern void sub_80854D4(); extern void sub_80855E4(void *); @@ -22,14 +23,12 @@ extern void sub_8097FA8(u32); extern void DisplayDungeonDialogue(u8 *); extern void sub_806CDD4(struct DungeonEntity *, u32, u32); extern void sub_80869E4(struct DungeonEntity *, u32, u32, u32); -extern void sub_8083E88(u32); extern void sub_803E708(u32, u32); extern void sub_8086448(void); extern void SpriteShockEffect(struct DungeonEntity *); extern void SkarmoryEntry(struct DungeonEntity *); extern void SpriteLookAroundEffect(struct DungeonEntity *); extern void sub_8086A54(struct DungeonEntity *); -extern void PlaySoundEffect(u32); extern void sub_808563C(void *); extern u8 gSkarmoryPreFightDialogue_1; @@ -46,43 +45,43 @@ extern u8 gSkarmoryReFightDialogue_2; extern u8 gSkarmoryReFightDialogue_3; extern u8 gUnknown_8100D3C; -void sub_8086A3C(struct DungeonEntity *param_1) +void sub_8086A3C(struct DungeonEntity *pokemon) { - param_1->entityData->unk15C = 1; - param_1->entityData->unk15E = 1; + pokemon->entityData->unk15C = 1; + pokemon->entityData->unk15E = 1; } -void sub_8086A54(struct DungeonEntity *param_1) +void sub_8086A54(struct DungeonEntity *pokemon) { - param_1->entityData->unk15C = 1; - param_1->entityData->unk15E = 0; + pokemon->entityData->unk15C = 1; + pokemon->entityData->unk15E = 0; } -void SetupBossFightHP(struct DungeonEntity *param_1, s32 newHP, u16 param_3) +void SetupBossFightHP(struct DungeonEntity *pokemon, s32 newHP, u16 param_3) { // NOTE: needed two of these to match.. very dumb - struct DungeonEntityData *iVar1; - struct DungeonEntityData *iVar2; + struct DungeonEntityData *entityData; + struct DungeonEntityData *enityData_1; - iVar1 = param_1->entityData; - iVar2 = param_1->entityData; + entityData = pokemon->entityData; + enityData_1 = pokemon->entityData; - iVar1->isBoss = TRUE; + entityData->isBoss = TRUE; // BUG: Source of the Reviver Seed Boss Glitch // // Video to demonstration: // https://www.youtube.com/watch?v=rHu7EehrZ68 - iVar1->originalHP = iVar1->maxHP; + entityData->originalHP = entityData->maxHP; if (newHP != 0) { - iVar1->maxHP = newHP; - iVar1->HP = newHP; + entityData->maxHP = newHP; + entityData->HP = newHP; } gDungeonGlobalData->unk66A = param_3; - SetDefaultIQSkills(iVar2->IQSkillsSelected,iVar2->isBoss); - LoadIQSkills(param_1); + SetDefaultIQSkills(enityData_1->IQSkillsSelected, enityData_1->isBoss); + LoadIQSkills(pokemon); } void sub_8086AC0(void) @@ -111,7 +110,7 @@ void sub_8086B14(void) LeaderEntity = xxx_call_GetLeaderEntity(); DiglettEntity = GetEntityFromClientType(4); SkarmoryEntity = GetEntityFromClientType(3); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_8085374(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); @@ -155,19 +154,19 @@ void SkarmoryPreFightDialogue(void) struct DungeonEntity * DiglettEntity; struct DungeonEntity * SkarmoryEntity; - struct Position32 local_1c; - struct Position32 local_20; + struct Position32 pos1; + struct Position32 pos2; LeaderEntity = xxx_call_GetLeaderEntity(); // Player PartnerEntity = GetPartnerEntity(); // Partner DiglettEntity = GetEntityFromClientType(4); // Diglett SkarmoryEntity = GetEntityFromClientType(3); // Skarmory - local_1c.x = DiglettEntity->posPixel.x; - local_1c.y = DiglettEntity->posPixel.y + 0x3000; + pos1.x = DiglettEntity->posPixel.x; + pos1.y = DiglettEntity->posPixel.y + 0x3000; - local_20.x = SkarmoryEntity->posPixel.x; - local_20.y = SkarmoryEntity->posPixel.y + 0x2000; + pos2.x = SkarmoryEntity->posPixel.x; + pos2.y = SkarmoryEntity->posPixel.y + 0x2000; sub_8086448(); sub_803E708(10,0x46); @@ -175,16 +174,16 @@ void SkarmoryPreFightDialogue(void) sub_803E708(0x20,0x46); sub_803E708(10,0x46); DisplayDungeonDialogue(&gSkarmoryPreFightDialogue_1); - ShiftCameraToPosition(&local_1c,0x40); + ShiftCameraToPosition(&pos1,0x40); sub_803E708(0x40,0x46); - ShiftCameraToPosition(&local_20,0x30); + ShiftCameraToPosition(&pos2,0x30); DisplayDungeonDialogue(&gSkarmoryPreFightDialogue_2); sub_803E708(10,0x46); DiglettEntity->entityData->unk15D = 1; - ShiftCameraToPosition(&local_1c,0x30); + ShiftCameraToPosition(&pos1,0x30); DisplayDungeonDialogue(&gSkarmoryPreFightDialogue_3); // Diglett: ...I...\nI'm scared. sub_803E708(10,0x46); - ShiftCameraToPosition(&local_20,0x20); + ShiftCameraToPosition(&pos2,0x20); sub_803E708(0x20,0x46); SkarmoryEntry(SkarmoryEntity); DisplayDungeonDialogue(&gSkarmoryPreFightDialogue_4); // Skarmory: You!\nWhat do you think you're doing here?! @@ -204,7 +203,7 @@ void SkarmoryPreFightDialogue(void) sub_80869E4(PartnerEntity,4,2,4); sub_80869E4(LeaderEntity,4,1,4); sub_803E708(10,0x46); - sub_8083E88(0xb); + DungeonStartNewBGM(MUS_BOSS_BATTLE); ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); } @@ -212,16 +211,16 @@ void SkarmoryReFightDialogue(void) { struct DungeonEntity * LeaderEntity; struct DungeonEntity * SkarmoryEntity; - struct Position32 local_14; + struct Position32 pos; LeaderEntity = xxx_call_GetLeaderEntity(); SkarmoryEntity = GetEntityFromClientType(3); - local_14.x = SkarmoryEntity->posPixel.x; - local_14.y = SkarmoryEntity->posPixel.y + 0x2000; + pos.x = SkarmoryEntity->posPixel.x; + pos.y = SkarmoryEntity->posPixel.y + 0x2000; sub_8086448(); sub_803E708(10,0x46); SkarmoryEntry(SkarmoryEntity); - ShiftCameraToPosition(&local_14,0x10); + ShiftCameraToPosition(&pos,0x10); DisplayDungeonDialogue(&gSkarmoryReFightDialogue_1); sub_803E708(10,0x46); DisplayDungeonDialogue(&gSkarmoryReFightDialogue_2); @@ -230,7 +229,7 @@ void SkarmoryReFightDialogue(void) DisplayDungeonDialogue(&gSkarmoryReFightDialogue_3); sub_803E708(10,0x46); ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); - sub_8083E88(0xb); + DungeonStartNewBGM(MUS_BOSS_BATTLE); } void sub_8086E40(void) @@ -255,7 +254,7 @@ void sub_8086E9C(void) struct DungeonEntity * LeaderEntity; LeaderEntity = xxx_call_GetLeaderEntity(); - sub_8083E88(0x72); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); sub_8085374(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); diff --git a/src/dungeon_engine.c b/src/dungeon_engine.c index 606ea4828..14e2600ce 100644 --- a/src/dungeon_engine.c +++ b/src/dungeon_engine.c @@ -49,9 +49,9 @@ bool8 IsFixedDungeon() return FALSE; } -bool8 sub_8044210(void) +bool8 IsDungeonMaze(void) { - if( (u8)(gDungeonGlobalData->unk644 - 0x4B) < 0x17) + if( (u8)(gDungeonGlobalData->dungeonLocation.dungeonIndex - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) return TRUE; else return FALSE; diff --git a/src/dungeon_music.c b/src/dungeon_music.c new file mode 100644 index 000000000..dc09c189e --- /dev/null +++ b/src/dungeon_music.c @@ -0,0 +1,359 @@ +#include "global.h" +#include "constants/bg_music.h" +#include "dungeon.h" +#include "music.h" +#include "dungeon_global_data.h" +#include "dungeon_music.h" +#include "dungeon_util.h" +#include "text_util.h" + + +struct unkStruct_202EE10 +{ + u8 fill0[0x1A]; + s16 unk1A; +}; + +extern struct unkStruct_202EE10 gUnknown_202EE10; + +extern u32 gUnknown_203B458; +extern u8 *gUnknown_80FE6F4[]; +extern u8 gUnknown_810AC60; // 0xC +extern u8 gUnknown_810AC62; // 0xC +extern u8 gUnknown_810AC68; // 0x8 +extern u8 gUnknown_810AC64; // 0x8 +extern u8 gUnknown_810AC66; // 0x8 + +extern void sub_80709C8(u8 *buffer, struct DungeonEntityData *entityData); +void FadeOutAllMusic(u16); +void xxx_call_stop_bgm(void); + +void sub_8083AB0(s16 param_0, struct DungeonEntity * target, struct DungeonEntity * enity) +{ + u8 *defPtr; + u8 *attackPtr; + u8 *spDefPtr; + struct DungeonEntityData * entityData; + struct DungeonEntityData * targetEntityData; + u8 *spAttPtr; + u8 buffer [0x14]; + struct unkDungeonGlobal_unk1CE98_sub *temp; + u8 *itemIndex; + s32 param_0_s32 = param_0; + + temp = &gDungeonGlobalData->unk1CE98; + targetEntityData = NULL; + if ((EntityExists(target)) && (GetEntityType(target) == ENTITY_POKEMON)) { + targetEntityData = target->entityData; + } + entityData = enity->entityData; + if (targetEntityData != NULL) { + sub_80709C8(buffer, targetEntityData); + CopyStringtoBuffer(temp->buffer1, buffer); + } + else { + CopyStringtoBuffer(temp->buffer1, *gUnknown_80FE6F4); // Someone + } + sub_80709C8(buffer,entityData); + CopyStringtoBuffer(temp->buffer2, buffer); + temp->unk14 = param_0_s32; + temp->heldItem = entityData->heldItem; + temp->expPoints = entityData->expPoints; + temp->level = entityData->level; + temp->maxHP = entityData->maxHP; + temp->attack = entityData->attack; + temp->specialAttack = entityData->specialAttack; + temp->defense = entityData->defense; + temp->specialDefense = entityData->specialDefense; + temp->dungeonLocation = gDungeonGlobalData->dungeonLocation; + attackPtr = &temp->attBoost; + *attackPtr = 0; + spAttPtr = &temp->spAttBoost; + *spAttPtr = 0; + defPtr = &temp->defBoost; + *defPtr = 0; + spDefPtr = &temp->spDefBoost; + *spDefPtr = 0; + if ((entityData->heldItem.itemFlags & ITEM_FLAG_EXISTS) && !(entityData->heldItem.itemFlags & ITEM_FLAG_STICKY)) { + itemIndex = &entityData->heldItem.itemIndex; + if (*itemIndex == ITEM_ID_POWER_BAND) { + *attackPtr += gUnknown_810AC60; + } + if (*itemIndex == ITEM_ID_MUNCH_BELT) { + *attackPtr += gUnknown_810AC68; + } + if (*itemIndex == ITEM_ID_SPECIAL_BAND) { + *spAttPtr += gUnknown_810AC62; + } + if (*itemIndex == ITEM_ID_MUNCH_BELT) { + *spAttPtr += gUnknown_810AC68; + } + if (*itemIndex == ITEM_ID_DEF_SCARF) { + *defPtr += gUnknown_810AC64; + } + if (*itemIndex == ITEM_ID_ZINC_BAND) { + *spDefPtr += gUnknown_810AC66; + } + } +} + +bool8 sub_8083C24(void) +{ + struct unkDungeonGlobal_unk1CE98_sub *temp; + + temp = &gDungeonGlobalData->unk1CE98; + + if (temp->unk14 < 0x226) { + return TRUE; + } + else { + return FALSE; + } +} + +bool8 sub_8083C50(void) +{ + struct unkDungeonGlobal_unk1CE98_sub *temp; + + temp = &gDungeonGlobalData->unk1CE98; + + if ((temp->unk14 == 0x227) || (temp->unk14 == 0x22A) || (temp->unk14 == 0x228)) { + return TRUE; + } + else { + return FALSE; + } +} + +bool8 sub_8083C88(u8 param_1) +{ + struct unkDungeonGlobal_unk1CE98_sub *temp; + + temp = &gDungeonGlobalData->unk1CE98; + + if (((GetUnk9(gDungeonGlobalData->dungeonLocation.dungeonIndex) == 0) && + ((gDungeonGlobalData->unk65C != 0) || (param_1 != 0))) || + (temp->unk14 != 0x227)) { + return TRUE; + } + else { + return FALSE; + } +} + +void sub_8083CE0(u8 param_1) +{ + if ((param_1 == 0) || (1 < gUnknown_202EE10.unk1A)) { + PlayFanfareSE(0x12d,0x100); + } +} + +void sub_8083D08(void) +{ + PlayFanfareSE(0x12E, 0x100); +} + +void sub_8083D1C(void) +{ + PlayFanfareSE(0x133, 0x100); +} + +void sub_8083D30(void) +{ + PlayFanfareSE(0x12F, 0x100); +} + +void sub_8083D44(void) +{ + PlayFanfareSE(0x130, 0x100); +} + +void sub_8083D58(void) +{ + PlayFanfareSE(0xC8, 0x100); +} + +void sub_8083D68(void) +{ + PlayFanfareSE(0xCF, 0x100); +} + +void sub_8083D78(void) +{ + PlayFanfareSE(0xD3, 0x100); +} + +void sub_8083D88(void) +{ + PlayFanfareSE(0xCC, 0x100); +} + +void sub_8083D98(void) +{ + DungeonStartNewBGM(MUS_DUNGEON_FAIL); + gDungeonGlobalData->unk66F = 0; + gDungeonGlobalData->unk672 = 0; + gDungeonGlobalData->unk699 = 0; + gDungeonGlobalData->unk66A = 999; +} + +void sub_8083DE0(void) +{ + DungeonStartNewBGM(MUS_DUNGEON_COMPLETE); + gDungeonGlobalData->unk66F = 0; + gDungeonGlobalData->unk672 = 0; + gDungeonGlobalData->unk699 = 0; + gDungeonGlobalData->unk66A = 999; +} + +void sub_8083E28(void) +{ + PlayFanfareSE(0xCF, 0x100); +} + +void PlaySoundEffect(u32 songIndex) +{ + u16 songIndex_u32 = songIndex; + if(songIndex_u32 != 0x3E5) + PlayFanfareSE(songIndex_u32, 0x100); +} + +void StopSoundEffect(u32 songIndex) +{ + u16 songIndex_u32 = songIndex; + if(songIndex_u32 != 0x3E5) + StopFanfareSE(songIndex_u32); +} + +bool8 IsFanfareSEPlaying_2(u16 songIndex) +{ + return IsFanfareSEPlaying(songIndex); +} + +void DungeonStartNewBGM(u16 songIndex) +{ + gDungeonGlobalData->musPlayer.queuedSongIndex = songIndex; + gDungeonGlobalData->musPlayer.fadeInSpeed = 0; +} + +void DungeonFadeInNewBGM(u16 songIndex, u32 fadeInSpeed) +{ + gDungeonGlobalData->musPlayer.queuedSongIndex = 0x80 << 8 | songIndex; + gDungeonGlobalData->musPlayer.fadeInSpeed = fadeInSpeed; +} + +void DungeonFadeOutBGM(u16 speed) +{ + FadeOutAllMusic(speed); + gDungeonGlobalData->musPlayer.songIndex = 999; + gDungeonGlobalData->musPlayer.pastSongIndex = 999; + gDungeonGlobalData->musPlayer.queuedSongIndex = 999; +} + +void DungeonStopBGM(void) +{ + StopDungeonBGM(); + xxx_call_stop_bgm(); +} + +u16 DungeonGetCurrentBGSong(void) +{ + return GetCurrentBGSong(); +} + +void StopDungeonBGM(void) +{ + struct DungeonMusicPlayer *temp = &gDungeonGlobalData->musPlayer; + temp->state = 0; + temp->fadeOutSpeed = 0; + temp->songIndex = 999; + temp->pastSongIndex = 999; + temp->queuedSongIndex = 999; +} + +void UpdateDungeonMusic(void) +{ +#ifndef NONMATCHING + register s32 uVar1 asm("r1"); + register u16 *uVar3 asm("r3"); +#else + s32 uVar1; + u16 *uVar3; +#endif + s32 songIndex1; + struct DungeonMusicPlayer *musPlayer; + + musPlayer = &gDungeonGlobalData->musPlayer; + + uVar3 = &gDungeonGlobalData->unk66A; + songIndex1 = *uVar3; + if (songIndex1 == 999) { + if (gDungeonGlobalData->unk66F != 0) { + songIndex1 = MUS_STOP_THIEF; + } + else if (gDungeonGlobalData->unk672 != 0) { + songIndex1 = MUS_MONSTER_HOUSE; + } + else if (gDungeonGlobalData->unk699 != 0) { + songIndex1 = MUS_KECLEON_SHOP; + } + else { + songIndex1 = musPlayer->queuedSongIndex; + } + } + if (musPlayer->state == 4) { + if (songIndex1 != musPlayer->pastSongIndex) { + musPlayer->state = 2; + musPlayer->songIndex = songIndex1; + } + } + else if ((songIndex1 != 999) && (musPlayer->songIndex == 999)) { + musPlayer->state = 1; + musPlayer->songIndex = songIndex1; + } + switch(musPlayer->state) { + case 0: + case 4: + default: + break; + case 1: + uVar1 = musPlayer->songIndex; + if (uVar1 == 999) { + musPlayer->state = 0; + } + else { + if ((uVar1 & 0x8000) != 0) { + StartNewBGM(uVar1 & 0x7fff); + } + else { + FadeInNewBGM(uVar1 & 0x7fff, musPlayer->fadeInSpeed); + } + musPlayer->pastSongIndex = musPlayer->songIndex; + musPlayer->state = 4; + } + musPlayer->songIndex = 999; + break; + case 2: + FadeOutBGM(0x1e); + musPlayer->fadeOutSpeed = 0x1e; + musPlayer->state = 3; + break; + case 3: + if ((musPlayer->fadeOutSpeed != 0) && (musPlayer->fadeOutSpeed--, musPlayer->fadeOutSpeed != 0)) { + break; + } + if (musPlayer->songIndex == 999) { + StopBGM(); + musPlayer->state = 0; + } + else { + musPlayer->state = 1; + } + } +} + + +void sub_808408C(u32 param_1) +{ + gUnknown_203B458 = (1 | param_1) & 0xffffff; +} From 908a11cdb03bef29776f333db5962512ad8c192c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 12 Dec 2022 11:22:04 -0800 Subject: [PATCH 17/21] remove extra global.h include --- include/wonder_mail.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 13980253d..dd6aa586f 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -2,7 +2,6 @@ #define GUARD_WONDER_MAIL_H #include "file_system.h" -#include "global.h" #include "text.h" #include "item.h" #include "pokemon.h" From 24f838f2f2f0469c3436174f0ab2cddab1613cec Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 12 Dec 2022 16:58:03 -0800 Subject: [PATCH 18/21] another nonmatch killed --- src/wonder_mail_6.c | 113 ++------------------------------------------ 1 file changed, 5 insertions(+), 108 deletions(-) diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index 44a03ca1b..c5f3dc77a 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -299,16 +299,16 @@ void sub_803136C(void) } } -#ifdef NONMATCHING void sub_80313D8(u32 param_1) { s32 iVar2; s32 local_10; + struct unkStruct_203B480 *unused; local_10 = 0; sub_8030768(0); sub_8012FD8(&gUnknown_203B328->unk8); - if (sub_8012FD8(&gUnknown_203B328->unk58) == '\0') { + if (sub_8012FD8(&gUnknown_203B328->unk58) == 0) { sub_8013114(&gUnknown_203B328->unk58,&local_10); } @@ -327,13 +327,15 @@ void sub_80313D8(u32 param_1) case 3: for(iVar2 = 0; iVar2 < 0x20; iVar2++) { + unused = &gUnknown_203B480[iVar2]; gUnknown_203B480[iVar2].unk0 = 0; + unused = &gUnknown_203B480[iVar2]; gUnknown_203B480[iVar2].unk22 = 0; } break; } if ((gUnknown_203B328->wonderMailMode == 2) || (gUnknown_203B328->wonderMailMode == 4)) { - if (sub_8030C20(gUnknown_203B328->wonderMailMode) != '\0') { + if (sub_8030C20(gUnknown_203B328->wonderMailMode) != 0) { sub_80310E4(5); } else { @@ -341,113 +343,8 @@ void sub_80313D8(u32 param_1) } } break; - } } -#else -NAKED -void sub_80313D8(u32 param_1) -{ - asm_unified( - "\tpush {r4,r5,lr}\n" - "\tsub sp, 0x4\n" - "\tadds r5, r0, 0\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp]\n" - "\tbl sub_8030768\n" - "\tldr r4, _08031418\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x8\n" - "\tbl sub_8012FD8\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x58\n" - "\tbl sub_8012FD8\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _08031408\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x58\n" - "\tmov r1, sp\n" - "\tbl sub_8013114\n" -"_08031408:\n" - "\tldr r0, [sp]\n" - "\tcmp r0, 0x2\n" - "\tbeq _08031428\n" - "\tcmp r0, 0x2\n" - "\tbgt _0803141C\n" - "\tcmp r0, 0x1\n" - "\tbeq _08031420\n" - "\tb _0803148E\n" - "\t.align 2, 0\n" -"_08031418: .4byte gUnknown_203B328\n" -"_0803141C:\n" - "\tcmp r0, 0x3\n" - "\tbne _0803148E\n" -"_08031420:\n" - "\tmovs r0, 0\n" - "\tbl sub_80310E4\n" - "\tb _0803148E\n" -"_08031428:\n" - "\tcmp r5, 0x2\n" - "\tbeq _08031432\n" - "\tcmp r5, 0x3\n" - "\tbeq _0803143C\n" - "\tb _0803145A\n" -"_08031432:\n" - "\tldr r0, [r4]\n" - "\tldrb r0, [r0, 0x4]\n" - "\tbl sub_8095240\n" - "\tb _0803145A\n" -"_0803143C:\n" - "\tldr r4, _08031480\n" - "\tmovs r3, 0\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0x1F\n" -"_08031444:\n" - "\tldr r0, [r4]\n" - "\tadds r0, r1\n" - "\tstrb r3, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, r1\n" - "\tadds r0, 0x22\n" - "\tstrb r3, [r0]\n" - "\tadds r1, 0x30\n" - "\tsubs r2, 0x1\n" - "\tcmp r2, 0\n" - "\tbge _08031444\n" -"_0803145A:\n" - "\tldr r0, _08031484\n" - "\tldr r0, [r0]\n" - "\tmovs r1, 0x8C\n" - "\tlsls r1, 1\n" - "\tadds r0, r1\n" - "\tldr r0, [r0]\n" - "\tcmp r0, 0x2\n" - "\tbeq _0803146E\n" - "\tcmp r0, 0x4\n" - "\tbne _0803148E\n" -"_0803146E:\n" - "\tbl sub_8030C20\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08031488\n" - "\tmovs r0, 0x5\n" - "\tbl sub_80310E4\n" - "\tb _0803148E\n" - "\t.align 2, 0\n" -"_08031480: .4byte gUnknown_203B480\n" -"_08031484: .4byte gUnknown_203B328\n" -"_08031488:\n" - "\tmovs r0, 0\n" - "\tbl sub_80310E4\n" -"_0803148E:\n" - "\tadd sp, 0x4\n" - "\tpop {r4,r5}\n" - "\tpop {r0}\n" - "\tbx r0" - ); -} -#endif void sub_8031498(void) { From 4d52451f808248607b9f8611906cf5e2135646e9 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 14 Dec 2022 17:51:26 -0800 Subject: [PATCH 19/21] rename funcs from github review --- asm/code_80521D0.s | 20 ++++++++++---------- include/dungeon_global_data.h | 2 +- src/code_8045A00.c | 10 +++++----- src/code_8057824.c | 24 +++++++++++------------- 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index dd2fff0e0..1c5a92221 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -3882,7 +3882,7 @@ _0805460A: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8057D20 + bl WhirlpoolMoveAction bl _080554BA _0805461A: adds r0, r7, 0 @@ -4161,7 +4161,7 @@ _08054888: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_80576D0 + bl YawnMoveAction bl _080554BA _08054898: adds r0, r7, 0 @@ -4539,14 +4539,14 @@ _08054BE8: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_80591D8 + bl SafeguardMoveAction bl _080554BA _08054BF8: adds r0, r7, 0 adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_80590C8 + bl MistMoveAction bl _080554BA _08054C08: adds r0, r7, 0 @@ -4730,7 +4730,7 @@ _08054D80: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8057720 + bl NightmareMoveAction b _080554BA _08054D8E: adds r0, r7, 0 @@ -5038,7 +5038,7 @@ _08054FE8: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8057788 + bl DigMoveAction b _080554BA _08054FF6: adds r0, r7, 0 @@ -5215,7 +5215,7 @@ _0805514A: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8057E28 + bl SmokescreenMoveAction b _080554BA _08055158: adds r0, r7, 0 @@ -5334,7 +5334,7 @@ _08055238: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8058BE0 + bl EndureMoveAction b _080554BA _08055246: adds r0, r7, 0 @@ -5488,7 +5488,7 @@ _0805536C: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8058F58 + bl NaturePowerMoveAction b _080554BA _0805537A: adds r0, r7, 0 @@ -5579,7 +5579,7 @@ _08055422: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8057BEC + bl SnoreMoveAction b _080554BA _08055430: adds r0, r7, 0 diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 93654a024..dbcd54535 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -26,7 +26,7 @@ struct unkDungeonGlobal_unk1CE98_sub /* 0x0 */ u8 buffer1[0xA]; /* 0xA */ u8 buffer2[0xA]; /* 0x14 */ s16 unk14; - /* 0x16 */ u8 fill16[0x2];; + /* 0x16 */ u8 fill16[0x2]; /* 0x18 */ struct DungeonLocation dungeonLocation; /* 0x1C */ struct ItemSlot heldItem; /* 0x20 */ u32 expPoints; diff --git a/src/code_8045A00.c b/src/code_8045A00.c index 9321e21d4..38413a5ea 100644 --- a/src/code_8045A00.c +++ b/src/code_8045A00.c @@ -57,18 +57,18 @@ s32 GetTeamMemberEntityIndex(struct DungeonEntity *pokemon) return -1; } -void SetMessageArgument(char *buffer, struct DungeonEntity *pokemon, u32 param_3) +void SetMessageArgument(char *buffer, struct DungeonEntity *entity, u32 param_3) { - switch(GetEntityType(pokemon)) + switch(GetEntityType(entity)) { case ENTITY_POKEMON: - SetMessageArgument_2(buffer, pokemon->entityData, param_3); + SetMessageArgument_2(buffer, entity->entityData, param_3); break; case ENTITY_ITEM: - sub_8045BF8(buffer, GetItemData_1(pokemon)); + sub_8045BF8(buffer, GetItemData_1(entity)); break; case ENTITY_TRAP: - GetTrapName(buffer, *((u8 *)GetTrapData_1(pokemon))); + GetTrapName(buffer, *((u8 *)GetTrapData_1(entity))); break; default: strcpy(buffer, *gUnknown_80FE6F4); diff --git a/src/code_8057824.c b/src/code_8057824.c index cc4e7d741..807bbc8ec 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -224,7 +224,7 @@ bool8 sub_805768C(struct DungeonEntity *pokemon, struct DungeonEntity *target, s return flag; } -bool8 sub_80576D0(struct DungeonEntity * pokemon, struct DungeonEntity *target) +bool8 YawnMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity *target) { YawnedStatusTarget(pokemon, target, CalculateStatusTurns(target,gUnknown_80F4F28,TRUE) + 1); return TRUE; @@ -236,7 +236,7 @@ bool8 sub_80576F8(struct DungeonEntity * pokemon, struct DungeonEntity *target) return TRUE; } -bool8 sub_8057720(struct DungeonEntity * pokemon, struct DungeonEntity *target) +bool8 NightmareMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity *target) { NightmareStatusTarget(pokemon, target, CalculateStatusTurns(target,gUnknown_80F4E78,TRUE)); return TRUE; @@ -254,7 +254,7 @@ bool8 VitalThrowMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity return TRUE; } -bool8 sub_8057788(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) +bool8 DigMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove *move, s32 param_4) { struct MapTile *tile; bool8 flag; @@ -279,14 +279,12 @@ bool8 sub_8057788(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool32 sub_8057824(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - // Lower evasion? LowerAccuracyStageTarget(pokemon,target,gUnknown_8106A50,TRUE); return TRUE; } bool32 sub_805783C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - // Lower attack? ChangeAttackMultiplierTarget(pokemon,target,gUnknown_8106A4C,0x80,TRUE); return TRUE; } @@ -466,7 +464,7 @@ bool8 sub_8057BC4(struct DungeonEntity *pokemon, struct DungeonEntity *target) return TRUE; } -bool8 sub_8057BEC(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove * move, u32 param_4) +bool8 SnoreMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove * move, u32 param_4) { bool8 flag; @@ -519,7 +517,7 @@ s32 sub_8057CD0(struct DungeonEntity * pokemon, struct DungeonEntity * target, s return iVar2; } -bool8 sub_8057D20(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) +bool8 WhirlpoolMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove * move, u32 param_4) { u32 uVar3; bool8 flag; @@ -621,7 +619,7 @@ bool8 FocusEnergyMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity return TRUE; } -bool8 sub_8057E28(struct DungeonEntity *pokemon, struct DungeonEntity *target) +bool8 SmokescreenMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target) { WhifferStatusTarget(pokemon, target, CalculateStatusTurns(target, gUnknown_80F4EDC, TRUE)); return TRUE; @@ -1286,7 +1284,7 @@ bool8 sub_8058B84(struct DungeonEntity *pokemon, struct DungeonEntity *target, s return flag; } -bool8 sub_8058BE0(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +bool8 EndureMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { EndureStatusTarget(pokemon, pokemon); return TRUE; @@ -1489,7 +1487,7 @@ bool32 sub_8058F04(struct DungeonEntity *pokemon, struct DungeonEntity *target, return flag; } -bool8 sub_8058F58(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) +bool8 NaturePowerMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4) { bool8 flag; s32 tileset; @@ -1555,7 +1553,7 @@ bool8 sub_8059080(struct DungeonEntity *pokemon, struct DungeonEntity *target, s return flag; } -bool8 sub_80590C8(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +bool8 MistMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { MistStatusTarget(pokemon, target); return TRUE; @@ -1572,7 +1570,7 @@ bool8 sub_80590D4(struct DungeonEntity *pokemon, struct DungeonEntity *target, s uVar5 = sub_806F4A4(target, moveType) != 0 ? TRUE : FALSE; - if (HasAbility(target, 0x37)) { + if (HasAbility(target, ABILITY_LEVITATE)) { uVar5 = FALSE; } if (!uVar5) { @@ -1600,7 +1598,7 @@ bool8 sub_8059190(struct DungeonEntity *pokemon, struct DungeonEntity *target, s return flag; } -bool8 sub_80591D8(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) +bool8 SafeguardMoveAction(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, u32 param_4) { SafeguardStatusTarget(pokemon, target); return TRUE; From ad30396f489765bc1b96966c918644dd05f1cd50 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 15 Dec 2022 21:06:04 -0800 Subject: [PATCH 20/21] split dungeon_ai into move_effects_target and dungeon_ai --- include/dungeon_ai.h | 25 +- include/move_effects_target.h | 28 + ld_script.txt | 1 + src/code_8048480.c | 2 +- src/code_8048DB8.c | 2 +- src/code_8057824.c | 2 +- src/code_8077274_1.c | 2 +- src/dungeon_ai.c | 1131 ------------------------------- src/move_effects_target.c | 1170 +++++++++++++++++++++++++++++++++ 9 files changed, 1205 insertions(+), 1158 deletions(-) create mode 100644 include/move_effects_target.h create mode 100644 src/move_effects_target.c diff --git a/include/dungeon_ai.h b/include/dungeon_ai.h index 6c9e60b43..3653fbec5 100644 --- a/include/dungeon_ai.h +++ b/include/dungeon_ai.h @@ -3,29 +3,8 @@ #include "dungeon_entity.h" +u32 sub_8075818(struct DungeonEntity *entity); +void sub_8075900(struct DungeonEntity *pokemon, u8 r1); void DecideAction(struct DungeonEntity *pokemon, u32 unused); -u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 sleepTurns); -void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 displayMessage); -bool8 CannotSleep(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, bool8 displayMessage); -void NightmareStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); -void NappingStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); -void YawnedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); -void SleeplessStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); -void PausedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, s32 turns, bool8 displayMessage); -void InfatuateStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); -void BurnedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, bool8 displayMessage); -void PoisonedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); -void BadlyPoisonedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); -void FrozenStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); -void SqueezedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s16 param_3, bool32 displayMessage); -void ImmobilizedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); -void IngrainedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); -void WrapTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); -void sub_8076CB4(s32 param_1); -void PetrifiedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); -void LowerAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 decrement, u8 param_5, bool8 displayMessage); -void LowerDefenseStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 decrement, u8 param_5, bool8 displayMessage); -void RaiseAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 increment); -void RaiseDefenseStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 increment); #endif diff --git a/include/move_effects_target.h b/include/move_effects_target.h new file mode 100644 index 000000000..3145c1e2b --- /dev/null +++ b/include/move_effects_target.h @@ -0,0 +1,28 @@ +#ifndef GUARD_MOVE_EFFECTS_TARGET_H +#define GUARD_MOVE_EFFECTS_TARGET_H + +u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 sleepTurns); +void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 displayMessage); +bool8 CannotSleep(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, bool8 displayMessage); +void NightmareStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); +void NappingStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); +void YawnedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns); +void SleeplessStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void PausedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, s32 turns, bool8 displayMessage); +void InfatuateStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void BurnedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, u8 param_3, bool8 displayMessage); +void PoisonedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void BadlyPoisonedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void FrozenStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void SqueezedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s16 param_3, bool32 displayMessage); +void ImmobilizedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void IngrainedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void WrapTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void sub_8076CB4(s32 param_1); +void PetrifiedStatusTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target); +void LowerAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 decrement, u8 param_5, bool8 displayMessage); +void LowerDefenseStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 decrement, u8 param_5, bool8 displayMessage); +void RaiseAttackStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 increment); +void RaiseDefenseStageTarget(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 index, s32 increment); + +#endif diff --git a/ld_script.txt b/ld_script.txt index d3c27ea6b..92b0da751 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -248,6 +248,7 @@ SECTIONS { src/code_8073CF0.o(.text); asm/code_8073CF0.o(.text); src/dungeon_ai.o(.text); + src/move_effects_target.o(.text); src/status.o(.text); asm/code_8077274.o(.text); src/code_8077274_1.o(.text); diff --git a/src/code_8048480.c b/src/code_8048480.c index 4faeffcb7..8f7677818 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -3,7 +3,7 @@ #include "constants/status.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" -#include "dungeon_ai.h" +#include "move_effects_target.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "number_util.h" diff --git a/src/code_8048DB8.c b/src/code_8048DB8.c index c60f8d3b9..20615da55 100644 --- a/src/code_8048DB8.c +++ b/src/code_8048DB8.c @@ -1,7 +1,7 @@ #include "global.h" #include "constants/status.h" #include "code_80521D0.h" -#include "dungeon_ai.h" +#include "move_effects_target.h" #include "dungeon_random.h" #include "item.h" #include "status.h" diff --git a/src/code_8057824.c b/src/code_8057824.c index 807bbc8ec..34a20530d 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -4,7 +4,6 @@ #include "constants/weather.h" #include "charge_move.h" #include "dungeon_global_data.h" -#include "dungeon_ai.h" #include "dungeon_entity.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" @@ -13,6 +12,7 @@ #include "code_808417C.h" #include "map.h" #include "moves.h" +#include "move_effects_target.h" #include "pokemon.h" #include "status.h" #include "status_checks_1.h" diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index 524e81963..5d58d84a5 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -5,7 +5,6 @@ #include "constants/type.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" -#include "dungeon_ai.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_items.h" @@ -14,6 +13,7 @@ #include "code_8077274_1.h" #include "code_808417C.h" #include "moves.h" +#include "move_effects_target.h" #include "pokemon.h" #include "status_checks_1.h" diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index d81064ebd..fbc18f0ce 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -36,130 +36,13 @@ extern char gAvailablePokemonNames[]; extern char *gPtrCouldntBeUsedMessage; extern char *gPtrItsaMonsterHouseMessage; -extern u8 *gUnknown_80FB380[]; -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 u8 *gUnknown_80FC138[]; -extern u8 *gUnknown_80FC21C[]; -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 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) { @@ -395,1017 +278,3 @@ void DecideAction(struct DungeonEntity *pokemon, u32 unused) } } } - -void sub_8075BA4(struct DungeonEntity *param_1, u8 param_2) -{ - struct DungeonEntityData * entityData = param_1->entityData; - - if ((param_2 != 0) && (entityData->volatileStatus == VOLATILE_STATUS_COWERING)) { - entityData->action.facingDir = (entityData->action.facingDir + 4) & DIRECTION_MASK; - TargetTileInFront(param_1); - } - else if (entityData->volatileStatus == VOLATILE_STATUS_CONFUSED) { - entityData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS); - TargetTileInFront(param_1); - } -} - -u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 sleepTurns) -{ - struct DungeonEntityData *entityData; - u32 uVar4; - - uVar4 = 0; - if (!EntityExists(pokemon)){ - return uVar4; - } - else - { - entityData = pokemon->entityData; - - if(entityData->sleepStatus != SLEEP_STATUS_NIGHTMARE && entityData->sleepStatus != SLEEP_STATUS_SLEEP) - { - entityData->sleepStatus = SLEEP_STATUS_SLEEP; - if ((sleepTurns != 0x7f) && HasAbility(pokemon, ABILITY_EARLY_BIRD) && - (sleepTurns = sleepTurns / 2, sleepTurns < 1)) { - sleepTurns = 1; - } - entityData->sleepStatusTurnsLeft = sleepTurns; - } - else if(entityData->sleepStatus == SLEEP_STATUS_SLEEP) - uVar4 = 1; - else if(entityData->sleepStatus == SLEEP_STATUS_NIGHTMARE) - uVar4 = 2; - DungeonEntityUpdateStatusSprites(pokemon); - } - return uVar4; -} - -void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, u8 displayMessage) -{ - u8 sleepStatus; - u8 cVar2; - - - if (!CannotSleep(pokemon,target,1,displayMessage)) { - sleepStatus = target->entityData->sleepStatus; - if (sleepStatus == SLEEP_STATUS_SLEEPLESS) { - if (displayMessage) - sub_80522F4(pokemon,target,*gUnknown_80FB380); - } - else if (sleepStatus == SLEEP_STATUS_NAPPING) { - if (displayMessage) - sub_80522F4(pokemon,target,*gUnknown_80FB384); - } - else { - sub_8041AF4(target); - cVar2 = sub_8075BF4(target, turns); - sub_806CE68(target,8); - - if (cVar2 == 1) - sub_80522F4(pokemon,target,*gUnknown_80FB338); - else if (cVar2 == 2) - sub_80522F4(pokemon,target,*gUnknown_80FB35C); - else - sub_80522F4(pokemon,target,*gUnknown_80FB318); - } - } -} - -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,TRUE) + 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 ImmobilizedStatusTarget(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); -} - -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/move_effects_target.c b/src/move_effects_target.c new file mode 100644 index 000000000..e315993b8 --- /dev/null +++ b/src/move_effects_target.c @@ -0,0 +1,1170 @@ +#include "global.h" + + +#include "constants/ability.h" +#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" +#include "dungeon_util_1.h" +#include "dungeon_visibility.h" +#include "map.h" +#include "move_effects_target.h" +#include "pokemon.h" +#include "status_checks.h" +#include "targeting.h" +#include "tile_types.h" + +extern char gAvailablePokemonNames[]; +extern u8 *gUnknown_80FB380[]; +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 u8 *gUnknown_80FC138[]; +extern u8 *gUnknown_80FC21C[]; + +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 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 *); + + +void sub_8075BA4(struct DungeonEntity *param_1, u8 param_2) +{ + struct DungeonEntityData * entityData = param_1->entityData; + + if ((param_2 != 0) && (entityData->volatileStatus == VOLATILE_STATUS_COWERING)) { + entityData->action.facingDir = (entityData->action.facingDir + 4) & DIRECTION_MASK; + TargetTileInFront(param_1); + } + else if (entityData->volatileStatus == VOLATILE_STATUS_CONFUSED) { + entityData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS); + TargetTileInFront(param_1); + } +} + +u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 sleepTurns) +{ + struct DungeonEntityData *entityData; + u32 uVar4; + + uVar4 = 0; + if (!EntityExists(pokemon)){ + return uVar4; + } + else + { + entityData = pokemon->entityData; + + if(entityData->sleepStatus != SLEEP_STATUS_NIGHTMARE && entityData->sleepStatus != SLEEP_STATUS_SLEEP) + { + entityData->sleepStatus = SLEEP_STATUS_SLEEP; + if ((sleepTurns != 0x7f) && HasAbility(pokemon, ABILITY_EARLY_BIRD) && + (sleepTurns = sleepTurns / 2, sleepTurns < 1)) { + sleepTurns = 1; + } + entityData->sleepStatusTurnsLeft = sleepTurns; + } + else if(entityData->sleepStatus == SLEEP_STATUS_SLEEP) + uVar4 = 1; + else if(entityData->sleepStatus == SLEEP_STATUS_NIGHTMARE) + uVar4 = 2; + DungeonEntityUpdateStatusSprites(pokemon); + } + return uVar4; +} + +void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, u8 displayMessage) +{ + u8 sleepStatus; + u8 cVar2; + + + if (!CannotSleep(pokemon,target,1,displayMessage)) { + sleepStatus = target->entityData->sleepStatus; + if (sleepStatus == SLEEP_STATUS_SLEEPLESS) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FB380); + } + else if (sleepStatus == SLEEP_STATUS_NAPPING) { + if (displayMessage) + sub_80522F4(pokemon,target,*gUnknown_80FB384); + } + else { + sub_8041AF4(target); + cVar2 = sub_8075BF4(target, turns); + sub_806CE68(target,8); + + if (cVar2 == 1) + sub_80522F4(pokemon,target,*gUnknown_80FB338); + else if (cVar2 == 2) + sub_80522F4(pokemon,target,*gUnknown_80FB35C); + else + sub_80522F4(pokemon,target,*gUnknown_80FB318); + } + } +} + +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,TRUE) + 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 ImmobilizedStatusTarget(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); +} + +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); +} From 29b6e36457c0489b23d2a9ae0404f85553e341cd Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 15 Dec 2022 21:18:01 -0800 Subject: [PATCH 21/21] split status_checker into status_actions and move_checks --- include/move_checks.h | 10 + .../{status_checker.h => status_actions.h} | 9 +- ld_script.txt | 5 +- src/dungeon_ai_attack.c | 2 +- src/move_checks.c | 954 ++++++++++++++++++ src/{status_checker.c => status_actions.c} | 933 +---------------- 6 files changed, 972 insertions(+), 941 deletions(-) create mode 100644 include/move_checks.h rename include/{status_checker.h => status_actions.h} (91%) create mode 100644 src/move_checks.c rename src/{status_checker.c => status_actions.c} (59%) diff --git a/include/move_checks.h b/include/move_checks.h new file mode 100644 index 000000000..80a27bc6a --- /dev/null +++ b/include/move_checks.h @@ -0,0 +1,10 @@ +#ifndef GUARD_MOVE_CHECKS_H +#define GUARD_MOVE_CHECKS_H + +bool8 CanUseOnSelfWithStatusChecker(struct DungeonEntity *pokemon, struct PokemonMove *move); +bool8 CanUseOnTargetWithStatusChecker(struct DungeonEntity *user, struct DungeonEntity *target, struct PokemonMove *move); +bool8 HasDisabledMove(struct PokemonMove *moves); +bool8 LastUsedMoveOutOfPP(struct PokemonMove *moves); +bool8 HasLastUsedMove(struct PokemonMove *moves); + +#endif diff --git a/include/status_checker.h b/include/status_actions.h similarity index 91% rename from include/status_checker.h rename to include/status_actions.h index edf45d958..f72fc1c8d 100644 --- a/include/status_checker.h +++ b/include/status_actions.h @@ -1,5 +1,5 @@ -#ifndef GUARD_STATUS_CHECKER_H -#define GUARD_STATUS_CHECKER_H +#ifndef GUARD_STATUS_ACTIONS_H +#define GUARD_STATUS_ACTIONS_H #include "constants/move.h" #include "dungeon_entity.h" @@ -52,10 +52,5 @@ bool8 sub_805C468(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 StairsOrbAction(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); -bool8 LastUsedMoveOutOfPP(struct PokemonMove *moves); -bool8 HasLastUsedMove(struct PokemonMove *moves); #endif diff --git a/ld_script.txt b/ld_script.txt index 92b0da751..2ddeeb517 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -220,7 +220,8 @@ SECTIONS { asm/code_805744C.o(.text); src/code_8057824.o(.text); asm/code_8057824.o(.text); - src/status_checker.o(.text); + src/status_actions.o(.text); + src/move_checks.o(.text); asm/code_805D8C8.o(.text); src/targeting.o(.text); src/code_8069E0C.o(.text); @@ -459,7 +460,7 @@ SECTIONS { data/data_80F4E2C.o(.rodata); src/type_chart.o(.rodata); data/data_80F54B4.o(.rodata); - src/status_checker.o(.rodata); + src/move_checks.o(.rodata); data/data_80F5668.o(.rodata); src/dungeon_pokemon_attributes.o(.rodata); data/data_80F59C8.o(.rodata); diff --git a/src/dungeon_ai_attack.c b/src/dungeon_ai_attack.c index 37998f13e..715735634 100644 --- a/src/dungeon_ai_attack.c +++ b/src/dungeon_ai_attack.c @@ -22,8 +22,8 @@ #include "dungeon_visibility.h" #include "move_util.h" #include "moves.h" +#include "move_checks.h" #include "position_util.h" -#include "status_checker.h" #include "status_checks.h" #include "status_checks_1.h" #include "targeting.h" diff --git a/src/move_checks.c b/src/move_checks.c new file mode 100644 index 000000000..577f68248 --- /dev/null +++ b/src/move_checks.c @@ -0,0 +1,954 @@ +#include "global.h" +#include "constants/status.h" +#include "constants/type.h" +#include "constants/weather.h" +#include "dungeon_engine.h" +#include "dungeon_global_data.h" +#include "dungeon_items.h" +#include "dungeon_map_access.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_util.h" +#include "dungeon_visibility.h" +#include "move_checks.h" +#include "moves.h" +#include "number_util.h" +#include "status.h" +#include "status_actions.h" +#include "status_checks_1.h" +#include "team_inventory.h" +#include "text_util.h" +#include "tile_types.h" +#include "trap.h" +#include "weather.h" + +// Array indices correspond to the current dungeon tileset. +const u8 gDungeonCamouflageTypes[76] = { + TYPE_WATER, + TYPE_GRASS, + TYPE_ROCK, + TYPE_ROCK, + TYPE_ROCK, + TYPE_ROCK, + TYPE_ROCK, + TYPE_ROCK, + TYPE_NORMAL, + TYPE_ROCK, + TYPE_GRASS, + TYPE_GROUND, + TYPE_NORMAL, + TYPE_NORMAL, + TYPE_GRASS, + TYPE_ICE, + TYPE_NORMAL, + TYPE_ROCK, + TYPE_ICE, + TYPE_ICE, + TYPE_GRASS, + TYPE_GROUND, + TYPE_ROCK, + TYPE_NORMAL, + TYPE_ICE, + TYPE_GRASS, + TYPE_GRASS, + TYPE_NORMAL, + TYPE_ROCK, + TYPE_GRASS, + TYPE_ROCK, + TYPE_ROCK, + TYPE_GRASS, + TYPE_GRASS, + TYPE_ROCK, + TYPE_NORMAL, + TYPE_ICE, + TYPE_ROCK, + TYPE_ROCK, + TYPE_ROCK, + TYPE_ROCK, + TYPE_GRASS, + TYPE_ROCK, + TYPE_ROCK, + TYPE_GROUND, + TYPE_NORMAL, + TYPE_ROCK, + TYPE_ICE, + TYPE_ROCK, + TYPE_WATER, + TYPE_GRASS, + TYPE_GRASS, + TYPE_GROUND, + TYPE_WATER, + TYPE_ROCK, + TYPE_ROCK, + TYPE_GRASS, + TYPE_NORMAL, + TYPE_NORMAL, + TYPE_ROCK, + TYPE_GRASS, + TYPE_ROCK, + TYPE_GRASS, + TYPE_GRASS, + TYPE_ROCK, + TYPE_GRASS, + TYPE_ROCK, + TYPE_ROCK, + TYPE_NORMAL, + TYPE_NORMAL, + TYPE_ROCK, + TYPE_NORMAL, + TYPE_ICE, + TYPE_WATER, + TYPE_WATER, + TYPE_ROCK +}; + + +bool8 CanUseOnSelfWithStatusChecker(struct DungeonEntity *pokemon, struct PokemonMove *move) +{ + struct DungeonEntityData *pokemonData = pokemon->entityData; + switch (move->moveID) + { + case MOVE_HAIL: + if (GetWeather(pokemon) == WEATHER_HAIL) + { + return FALSE; + } + break; + case MOVE_RAGE: + if (pokemonData->chargingStatus == CHARGING_STATUS_RAGE) + { + return FALSE; + } + break; + case MOVE_COUNTER: + case MOVE_PURSUIT: + if (pokemonData->protectionStatus == PROTECTION_STATUS_COUNTER) + { + return FALSE; + } + break; + case MOVE_MIRROR_MOVE: + if (pokemonData->protectionStatus == PROTECTION_STATUS_MIRROR_MOVE) + { + return FALSE; + } + break; + case MOVE_HOWL: + case MOVE_MEDITATE: + case MOVE_SHARPEN: + if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_BELLY_DRUM: + if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE || RoundUpFixedPoint(pokemonData->belly) <= 0) + { + return FALSE; + } + break; + case MOVE_ACID_ARMOR: + case MOVE_BARRIER: + case MOVE_DEFENSE_CURL: + case MOVE_HARDEN: + case MOVE_IRON_DEFENSE: + case MOVE_WITHDRAW: + if (pokemonData->defenseStages[STAT_STAGE_DEFENSE] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_BIDE: + case MOVE_REVENGE: + if (pokemonData->chargingStatus == CHARGING_STATUS_BIDE) + { + return FALSE; + } + break; + case MOVE_AGILITY: + { + u32 r1; +#ifndef NONMATCHING + asm("":"=r"(r1)); +#else + r1 = 0; +#endif + if (pokemon->entityData->movementSpeed >= MAX_MOVEMENT_SPEED) + { + r1 = !r1; + return FALSE; + } + break; + } + case MOVE_LOCK_ON: + case MOVE_MIND_READER: + if (pokemonData->moveStatus == MOVE_STATUS_SURE_SHOT) + { + return FALSE; + } + break; + case MOVE_COSMIC_POWER: + if (pokemonData->defenseStages[STAT_STAGE_DEFENSE] >= MAX_STAT_STAGE && pokemonData->defenseStages[STAT_STAGE_SPECIAL_DEFENSE] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_ENDURE: + if (pokemonData->protectionStatus == PROTECTION_STATUS_ENDURE) + { + return FALSE; + } + break; + case MOVE_CHARGE: + if (pokemonData->chargingStatus == CHARGING_STATUS_CHARGE) + { + return FALSE; + } + break; + case MOVE_MIST: + if (pokemonData->protectionStatus == PROTECTION_STATUS_MIST) + { + return FALSE; + } + break; + case MOVE_LIGHT_SCREEN: + if (pokemonData->protectionStatus == PROTECTION_STATUS_LIGHT_SCREEN) + { + return FALSE; + } + break; + case MOVE_MINIMIZE: + if (pokemonData->accuracyStages[STAT_STAGE_EVASION] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_INGRAIN: + if (pokemonData->immobilizeStatus == IMMOBILIZE_STATUS_INGRAIN || pokemonData->maxHP / 2 < pokemonData->HP) + { + return FALSE; + } + break; + case MOVE_SWALLOW: + if (pokemonData->maxHP <= pokemonData->HP || pokemonData->stockpileCount == 0) + { + return FALSE; + } + break; + case MOVE_SPIT_UP: + if (pokemonData->stockpileCount == 0) + { + return FALSE; + } + break; + case MOVE_DOOM_DESIRE: + case MOVE_FUTURE_SIGHT: + if (pokemonData->moveStatus == MOVE_STATUS_SET_DAMAGE) + { + return FALSE; + } + break; + case MOVE_BULK_UP: + if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE && pokemonData->defenseStages[STAT_STAGE_DEFENSE] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_CAMOUFLAGE: + if (HasType(pokemon, gDungeonCamouflageTypes[gDungeonGlobalData->tileset])) + { + return FALSE; + } + break; + case MOVE_TAIL_GLOW: + if (pokemonData->attackStages[STAT_STAGE_SPECIAL_ATTACK] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_DESTINY_BOND: + if (pokemonData->linkedStatus == LINKED_STATUS_DESTINY_BOND) + { + return FALSE; + } + break; + case MOVE_MIRROR_COAT: + if (pokemonData->protectionStatus == PROTECTION_STATUS_MIRROR_COAT) + { + return FALSE; + } + break; + case MOVE_REFLECT: + if (pokemonData->protectionStatus == PROTECTION_STATUS_REFLECT) + { + return FALSE; + } + break; + case MOVE_DRAGON_DANCE: + if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE && pokemon->entityData->movementSpeed >= MAX_MOVEMENT_SPEED) + { + return FALSE; + } + break; + case MOVE_MAGIC_COAT: + if (pokemonData->protectionStatus == PROTECTION_STATUS_MAGIC_COAT) + { + return FALSE; + } + break; + case MOVE_DETECT: + case MOVE_PROTECT: + if (pokemonData->protectionStatus == PROTECTION_STATUS_PROTECT) + { + return FALSE; + } + break; + case MOVE_RAIN_DANCE: + if (GetWeather(pokemon) == WEATHER_RAIN) + { + return FALSE; + } + break; + case MOVE_SANDSTORM: + if (GetWeather(pokemon) == WEATHER_SANDSTORM) + { + return FALSE; + } + break; + case MOVE_SUNNY_DAY: + if (GetWeather(pokemon) == WEATHER_SUNNY) + { + return FALSE; + } + break; + case MOVE_SAFEGUARD: + if (pokemonData->protectionStatus == PROTECTION_STATUS_SAFEGUARD) + { + return FALSE; + } + break; + case MOVE_INVISIFY: + if (pokemonData->transformStatus == TRANSFORM_STATUS_INVISIBLE) + { + return FALSE; + } + break; + case MOVE_FOCUS_ENERGY: + if (pokemonData->moveStatus == MOVE_STATUS_FOCUS_ENERGY) + { + return FALSE; + } + break; + case MOVE_TAKEAWAY: + if (pokemonData->heldItem.itemFlags & ITEM_FLAG_EXISTS) + { + return FALSE; + } + break; + case MOVE_REST: + if (!HasQuarterHPOrLess(pokemon) && !HasNegativeStatus(pokemon)) + { + return FALSE; + } + break; + case MOVE_DIVE: + if (IsTileGround(GetMapTileForDungeonEntity_2(pokemon))) + { + return FALSE; + } + break; + case MOVE_DIG: + { + struct MapTile *tile = GetMapTileForDungeonEntity_2(pokemon); + if (!IsTileGround(tile) || (tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) != TILE_TYPE_FLOOR) + { + return FALSE; + } + break; + } + case MOVE_TRAP_BUSTER: + { + struct DungeonEntity *mapObject = GetMapTileForDungeonEntity_2(pokemon)->mapObject; + if (mapObject == NULL || GetEntityType(mapObject) != ENTITY_TRAP) + { + return FALSE; + } + break; + } + case MOVE_MUD_SPORT: + if (gDungeonGlobalData->mudSportTurnsLeft > 0) + { + return FALSE; + } + break; + case MOVE_WATER_SPORT: + if (gDungeonGlobalData->waterSportTurnsLeft > 0) + { + return FALSE; + } + break; + case MOVE_GRUDGE: + if (pokemonData->grudgeStatus) + { + return FALSE; + } + break; + case MOVE_DECOY_MAKER: + case MOVE_FOLLOW_ME: + case MOVE_SUBSTITUTE: + if (gDungeonGlobalData->decoyActive) + { + return FALSE; + } + break; + case MOVE_STOCKPILE: + if (pokemonData->stockpileCount >= MAX_STOCKPILE_COUNT) + { + return FALSE; + } + break; + case MOVE_CLEANSE: + if (pokemonData->heldItem.itemFlags & ITEM_FLAG_EXISTS && + !(pokemonData->heldItem.itemFlags & ITEM_FLAG_STICKY)) + { + return FALSE; + } + break; + case MOVE_DOUBLE_TEAM: + if (pokemonData->accuracyStages[STAT_STAGE_EVASION] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_GROWTH: + if (pokemonData->attackStages[STAT_STAGE_SPECIAL_ATTACK] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_SWORDS_DANCE: + if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_WISH: + if (pokemonData->isEnemy || pokemonData->protectionStatus == PROTECTION_STATUS_WISH) + { + return FALSE; + } + break; + case MOVE_TRANSFORM: + if (pokemonData->transformStatus == TRANSFORM_STATUS_TRANSFORMED) + { + return FALSE; + } + break; + case MOVE_SPIKES: + if (!CanLayTrap(&pokemon->posWorld)) + { + return FALSE; + } + break; + case MOVE_CALM_MIND: + if (pokemonData->attackStages[STAT_STAGE_SPECIAL_ATTACK] < MAX_STAT_STAGE) + { + break; + } + case MOVE_AMNESIA: + if (pokemonData->defenseStages[STAT_STAGE_SPECIAL_DEFENSE] >= MAX_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_SNATCH: + if (pokemonData->waitingStatus == WAITING_STATUS_SNATCH) + { + return FALSE; + } + break; + case MOVE_BEAT_UP: + case MOVE_BLOWBACK: + case MOVE_HURL: + case MOVE_MEMENTO: + case MOVE_ROAR: + case MOVE_STAY_AWAY: + case MOVE_SWITCHER: + case MOVE_TELEPORT: + case MOVE_VITAL_THROW: + case MOVE_WARP: + case MOVE_WHIRLWIND: + if (IsBossBattle()) + { + return FALSE; + } + break; + case MOVE_CONVERSION_2: + if (pokemonData->protectionStatus == PROTECTION_STATUS_CONVERSION_2) + { + return FALSE; + } + break; + case MOVE_HELPING_HAND: + if (pokemonData->isEnemy) + { + s32 i; + for (i = 0; i < DUNGEON_MAX_WILD_POKEMON; i++) + { + struct DungeonEntity *target = gDungeonGlobalData->wildPokemon[i]; + if (EntityExists(target) && target != pokemon && CanSee(pokemon, target)) + { + if (target->entityData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE) + { + continue; + } + if (target->entityData->attackStages[STAT_STAGE_SPECIAL_ATTACK] < MAX_STAT_STAGE) + { + break; + } + } + } + if (i == DUNGEON_MAX_WILD_POKEMON) + { + return FALSE; + } + break; + } + else + { + s32 i; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) + { + struct DungeonEntity *target = gDungeonGlobalData->teamPokemon[i]; + if (EntityExists(target) && target != pokemon && CanSee(pokemon, target)) + { + if (target->entityData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE) + { + continue; + } + if (target->entityData->attackStages[STAT_STAGE_SPECIAL_ATTACK] < MAX_STAT_STAGE) + { + break; + } + } + } + if (i == MAX_TEAM_MEMBERS) + { + return FALSE; + } + break; + } + } + return TRUE; +} + +bool8 CanUseOnTargetWithStatusChecker(struct DungeonEntity *user, struct DungeonEntity *target, struct PokemonMove *move) +{ + struct DungeonEntityData *userData = user->entityData; + struct DungeonEntityData *targetData = target->entityData; + s32 i; + if (targetData->immobilizeStatus == IMMOBILIZE_STATUS_FROZEN && MoveCannotHitFrozen(move)) + { + return FALSE; + } + switch (move->moveID) + { + case MOVE_GRASSWHISTLE: + case MOVE_HYPNOSIS: + case MOVE_LOVELY_KISS: + case MOVE_SING: + case MOVE_SLEEP_POWDER: + case MOVE_SPORE: + if (IsSleeping(target)) + { + return FALSE; + } + break; + case MOVE_YAWN: + if (targetData->sleepStatus == SLEEP_STATUS_YAWNING) + { + return FALSE; + } + if (IsSleeping(target)) + { + return FALSE; + } + break; + case MOVE_NIGHTMARE: + if (targetData->sleepStatus == SLEEP_STATUS_NIGHTMARE) + { + return FALSE; + } + break; + case MOVE_SWEET_SCENT: + if (targetData->accuracyStages[STAT_STAGE_EVASION] <= 0) + { + return FALSE; + } + break; + case MOVE_CHARM: + if (targetData->attackMultipliers[STAT_STAGE_ATTACK] < STAT_MULTIPLIER_THRESHOLD) + { + return FALSE; + } + break; + case MOVE_ENCORE: + if (targetData->volatileStatus == VOLATILE_STATUS_ENCORE) + { + return FALSE; + } + if (!HasLastUsedMove(targetData->moves)) + { + return FALSE; + } + break; + case MOVE_SUPER_FANG: + if (targetData->HP <= 1) + { + return FALSE; + } + break; + case MOVE_PAIN_SPLIT: + if (targetData->HP <= userData->HP) + { + return FALSE; + } + break; + case MOVE_TORMENT: + if (HasDisabledMove(targetData->moves) || !HasLastUsedMove(targetData->moves)) + { + return FALSE; + } + break; + case MOVE_COTTON_SPORE: + case MOVE_SCARY_FACE: + case MOVE_STRING_SHOT: + if (target->entityData->movementSpeed <= 0) + { + return FALSE; + } + break; + case MOVE_SCREECH: + if (targetData->defenseMultipliers[STAT_STAGE_DEFENSE] < STAT_MULTIPLIER_THRESHOLD) + { + return FALSE; + } + break; + case MOVE_FAKE_TEARS: + if (targetData->defenseStages[STAT_STAGE_SPECIAL_DEFENSE] <= 0) + { + return FALSE; + } + break; + case MOVE_SPITE: + if (LastUsedMoveOutOfPP(targetData->moves)) + { + return FALSE; + } + break; + case MOVE_SMOKESCREEN: + if (targetData->moveStatus == MOVE_STATUS_WHIFFER) + { + return FALSE; + } + break; + case MOVE_MEMENTO: + if (targetData->attackMultipliers[STAT_STAGE_ATTACK] < STAT_MULTIPLIER_THRESHOLD && + targetData->attackMultipliers[STAT_STAGE_SPECIAL_ATTACK] < STAT_MULTIPLIER_THRESHOLD) + { + return FALSE; + } + break; + case MOVE_WILL_O_WISP: + if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_BURNED) + { + return FALSE; + } + break; + case MOVE_FORESIGHT: + case MOVE_ODOR_SLEUTH: + if (targetData->types[0] == TYPE_GHOST || targetData->types[1] == TYPE_GHOST) + { + if (!targetData->exposedStatus) + { + break; + } + } + if (targetData->accuracyStages[STAT_STAGE_EVASION] <= DEFAULT_STAT_STAGE) + { + return FALSE; + } + break; + case MOVE_DISABLE: + case MOVE_GLARE: + case MOVE_STUN_SPORE: + case MOVE_THUNDER_WAVE: + if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_PARALYZED) + { + return FALSE; + } + break; + case MOVE_ENDEAVOR: + if (targetData->HP - userData->HP <= 0) + { + return FALSE; + } + break; + case MOVE_LEER: + case MOVE_TAIL_WHIP: + if (targetData->defenseStages[STAT_STAGE_DEFENSE] <= 0) + { + return FALSE; + } + break; + case MOVE_METAL_SOUND: + if (targetData->defenseStages[STAT_STAGE_SPECIAL_DEFENSE] <= 0) + { + return FALSE; + } + break; + case MOVE_TICKLE: + if (targetData->attackStages[STAT_STAGE_ATTACK] <= 0 && + targetData->defenseStages[STAT_STAGE_DEFENSE] <= 0) + { + return FALSE; + } + break; + case MOVE_BLOCK: + case MOVE_MEAN_LOOK: + case MOVE_SPIDER_WEB: + if (targetData->immobilizeStatus == IMMOBILIZE_STATUS_IMMOBILIZED) + { + return FALSE; + } + break; + case MOVE_HAZE: + { + for (i = 0; i < 2; i++) + { + if (targetData->attackStages[i] < DEFAULT_STAT_STAGE) break; + if (targetData->defenseStages[i] < DEFAULT_STAT_STAGE) break; + if (targetData->accuracyStages[i] < DEFAULT_STAT_STAGE || + targetData->attackMultipliers[i] < DEFAULT_STAT_MULTIPLIER || + targetData->defenseMultipliers[i] < DEFAULT_STAT_MULTIPLIER) + { + break; + } + } + if (i == 2) + { + return FALSE; + } + break; + } + case MOVE_UPROAR: + if (targetData->sleepStatus == SLEEP_STATUS_SLEEPLESS) + { + return FALSE; + } + break; + case MOVE_PSYCH_UP: + { + for (i = 0; i < 2; i++) + { + if (userData->attackStages[i] < targetData->attackStages[i]) break; + if (userData->defenseStages[i] < targetData->defenseStages[i] || + userData->accuracyStages[i] < targetData->accuracyStages[i] || + userData->attackMultipliers[i] < targetData->attackMultipliers[i] || + userData->defenseMultipliers[i] < targetData->defenseMultipliers[i]) + { + break; + } + } + if (i == 2) + { + return FALSE; + } + break; + } + case MOVE_FLASH: + case MOVE_KINESIS: + case MOVE_SAND_ATTACK: + if (targetData->accuracyStages[STAT_STAGE_ACCURACY] <= 0) + { + return FALSE; + } + break; + case MOVE_TAUNT: + if (targetData->volatileStatus == VOLATILE_STATUS_TAUNTED) + { + return FALSE; + } + break; + case MOVE_TRICK: + if (!(userData->heldItem.itemFlags & ITEM_FLAG_EXISTS) || + !(targetData->heldItem.itemFlags & ITEM_FLAG_EXISTS)) + { + return FALSE; + } + break; + case MOVE_KNOCK_OFF: + if (!(targetData->heldItem.itemFlags & ITEM_FLAG_EXISTS)) + { + return FALSE; + } + break; + case MOVE_FEATHERDANCE: + case MOVE_GROWL: + if (targetData->attackStages[STAT_STAGE_ATTACK] <= 0) + { + return FALSE; + } + break; + case MOVE_ROLE_PLAY: + if (userData->abilities[0] == targetData->abilities[0] && + userData->abilities[1] == targetData->abilities[1]) + { + return FALSE; + } + break; + case MOVE_CURSE: + if (HasType(user, TYPE_GHOST)) + { + if (targetData->waitingStatus == WAITING_STATUS_CURSED) + { + return FALSE; + } + } + else + { + if (userData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE && + userData->defenseStages[STAT_STAGE_DEFENSE] >= MAX_STAT_STAGE) + { + return FALSE; + } + } + break; + case MOVE_IMPRISON: + case MOVE_OBSERVER: + if (targetData->volatileStatus == VOLATILE_STATUS_PAUSED) + { + return FALSE; + } + break; + case MOVE_FALSE_SWIPE: + if (targetData->HP <= 1) + { + return FALSE; + } + break; + case MOVE_LEECH_SEED: + if (targetData->linkedStatus == LINKED_STATUS_LEECH_SEED) + { + return FALSE; + } + break; + case MOVE_PERISH_SONG: + if (targetData->perishSongTimer != 0) + { + return FALSE; + } + break; + case MOVE_MIMIC: + case MOVE_SKETCH: + if (!HasLastUsedMove(targetData->moves)) + { + return FALSE; + } + break; + case MOVE_ATTRACT: + if (targetData->volatileStatus == VOLATILE_STATUS_INFATUATED) + { + return FALSE; + } + break; + case MOVE_WRAP: + if (targetData->immobilizeStatus == IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE) + { + return FALSE; + } + if (targetData->immobilizeStatus == IMMOBILIZE_STATUS_WRAPPED_BY_FOE) + { + return FALSE; + } + break; + case MOVE_TOXIC: + if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_BADLY_POISONED) + { + return FALSE; + } + break; + case MOVE_POISON_GAS: + case MOVE_POISONPOWDER: + if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_POISONED) + { + return FALSE; + } + if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_BADLY_POISONED) + { + return FALSE; + } + break; + case MOVE_CONFUSE_RAY: + case MOVE_FLATTER: + case MOVE_SUPERSONIC: + case MOVE_SWAGGER: + case MOVE_SWEET_KISS: + case MOVE_TEETER_DANCE: + case MOVE_TOTTER: + if (targetData->volatileStatus == VOLATILE_STATUS_CONFUSED) + { + return FALSE; + } + break; + } + return TRUE; +} + +bool8 HasDisabledMove(struct PokemonMove *moves) +{ + s32 i; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i].moveFlags & MOVE_FLAG_EXISTS && moves[i].moveFlags & MOVE_FLAG_DISABLED) + { + return TRUE; + } + } + if (moves[STRUGGLE_MOVE_INDEX].moveFlags & MOVE_FLAG_DISABLED) + { + return TRUE; + } + return FALSE; +} + +bool8 LastUsedMoveOutOfPP(struct PokemonMove *moves) +{ + s32 i; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i].moveFlags & MOVE_FLAG_EXISTS && + moves[i].moveFlags & MOVE_FLAG_LAST_USED && + moves[i].PP == 0) + { + return TRUE; + } + } + return FALSE; +} + +bool8 HasLastUsedMove(struct PokemonMove *moves) +{ + s32 i; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i].moveFlags & MOVE_FLAG_EXISTS && moves[i].moveFlags & MOVE_FLAG_LAST_USED) + { + return TRUE; + } + } + if (moves[STRUGGLE_MOVE_INDEX].moveFlags & MOVE_FLAG_LAST_USED) + { + return TRUE; + } + return FALSE; +} diff --git a/src/status_checker.c b/src/status_actions.c similarity index 59% rename from src/status_checker.c rename to src/status_actions.c index bc8d2ba99..b537812dd 100644 --- a/src/status_checker.c +++ b/src/status_actions.c @@ -1,5 +1,5 @@ #include "global.h" -#include "status_checker.h" +#include "status_actions.h" #include "code_80521D0.h" #include "code_8077274_1.h" @@ -146,6 +146,7 @@ extern u8 *gPtrForecastPreventsTypeSwitchMessage[]; extern u8 *gUnknown_80FEB08[]; extern u8 gUnknown_202DE58[]; extern s16 gUnknown_80F4E08; +extern u8 gDungeonCamouflageTypes[76]; struct Position_Alt { @@ -156,85 +157,6 @@ struct Position_Alt } temp; }; -// Array indices correspond to the current dungeon tileset. -const u8 gDungeonCamouflageTypes[76] = { - TYPE_WATER, - TYPE_GRASS, - TYPE_ROCK, - TYPE_ROCK, - TYPE_ROCK, - TYPE_ROCK, - TYPE_ROCK, - TYPE_ROCK, - TYPE_NORMAL, - TYPE_ROCK, - TYPE_GRASS, - TYPE_GROUND, - TYPE_NORMAL, - TYPE_NORMAL, - TYPE_GRASS, - TYPE_ICE, - TYPE_NORMAL, - TYPE_ROCK, - TYPE_ICE, - TYPE_ICE, - TYPE_GRASS, - TYPE_GROUND, - TYPE_ROCK, - TYPE_NORMAL, - TYPE_ICE, - TYPE_GRASS, - TYPE_GRASS, - TYPE_NORMAL, - TYPE_ROCK, - TYPE_GRASS, - TYPE_ROCK, - TYPE_ROCK, - TYPE_GRASS, - TYPE_GRASS, - TYPE_ROCK, - TYPE_NORMAL, - TYPE_ICE, - TYPE_ROCK, - TYPE_ROCK, - TYPE_ROCK, - TYPE_ROCK, - TYPE_GRASS, - TYPE_ROCK, - TYPE_ROCK, - TYPE_GROUND, - TYPE_NORMAL, - TYPE_ROCK, - TYPE_ICE, - TYPE_ROCK, - TYPE_WATER, - TYPE_GRASS, - TYPE_GRASS, - TYPE_GROUND, - TYPE_WATER, - TYPE_ROCK, - TYPE_ROCK, - TYPE_GRASS, - TYPE_NORMAL, - TYPE_NORMAL, - TYPE_ROCK, - TYPE_GRASS, - TYPE_ROCK, - TYPE_GRASS, - TYPE_GRASS, - TYPE_ROCK, - TYPE_GRASS, - TYPE_ROCK, - TYPE_ROCK, - TYPE_NORMAL, - TYPE_NORMAL, - TYPE_ROCK, - TYPE_NORMAL, - TYPE_ICE, - TYPE_WATER, - TYPE_WATER, - TYPE_ROCK -}; extern s16 gUnknown_80F4DC6; extern u8 *gUnknown_80FEFF4[]; @@ -1382,854 +1304,3 @@ bool8 PierceOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *targe PierceStatusTarget(pokemon, target); return TRUE; } - -bool8 CanUseOnSelfWithStatusChecker(struct DungeonEntity *pokemon, struct PokemonMove *move) -{ - struct DungeonEntityData *pokemonData = pokemon->entityData; - switch (move->moveID) - { - case MOVE_HAIL: - if (GetWeather(pokemon) == WEATHER_HAIL) - { - return FALSE; - } - break; - case MOVE_RAGE: - if (pokemonData->chargingStatus == CHARGING_STATUS_RAGE) - { - return FALSE; - } - break; - case MOVE_COUNTER: - case MOVE_PURSUIT: - if (pokemonData->protectionStatus == PROTECTION_STATUS_COUNTER) - { - return FALSE; - } - break; - case MOVE_MIRROR_MOVE: - if (pokemonData->protectionStatus == PROTECTION_STATUS_MIRROR_MOVE) - { - return FALSE; - } - break; - case MOVE_HOWL: - case MOVE_MEDITATE: - case MOVE_SHARPEN: - if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_BELLY_DRUM: - if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE || RoundUpFixedPoint(pokemonData->belly) <= 0) - { - return FALSE; - } - break; - case MOVE_ACID_ARMOR: - case MOVE_BARRIER: - case MOVE_DEFENSE_CURL: - case MOVE_HARDEN: - case MOVE_IRON_DEFENSE: - case MOVE_WITHDRAW: - if (pokemonData->defenseStages[STAT_STAGE_DEFENSE] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_BIDE: - case MOVE_REVENGE: - if (pokemonData->chargingStatus == CHARGING_STATUS_BIDE) - { - return FALSE; - } - break; - case MOVE_AGILITY: - { - u32 r1; -#ifndef NONMATCHING - asm("":"=r"(r1)); -#else - r1 = 0; -#endif - if (pokemon->entityData->movementSpeed >= MAX_MOVEMENT_SPEED) - { - r1 = !r1; - return FALSE; - } - break; - } - case MOVE_LOCK_ON: - case MOVE_MIND_READER: - if (pokemonData->moveStatus == MOVE_STATUS_SURE_SHOT) - { - return FALSE; - } - break; - case MOVE_COSMIC_POWER: - if (pokemonData->defenseStages[STAT_STAGE_DEFENSE] >= MAX_STAT_STAGE && pokemonData->defenseStages[STAT_STAGE_SPECIAL_DEFENSE] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_ENDURE: - if (pokemonData->protectionStatus == PROTECTION_STATUS_ENDURE) - { - return FALSE; - } - break; - case MOVE_CHARGE: - if (pokemonData->chargingStatus == CHARGING_STATUS_CHARGE) - { - return FALSE; - } - break; - case MOVE_MIST: - if (pokemonData->protectionStatus == PROTECTION_STATUS_MIST) - { - return FALSE; - } - break; - case MOVE_LIGHT_SCREEN: - if (pokemonData->protectionStatus == PROTECTION_STATUS_LIGHT_SCREEN) - { - return FALSE; - } - break; - case MOVE_MINIMIZE: - if (pokemonData->accuracyStages[STAT_STAGE_EVASION] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_INGRAIN: - if (pokemonData->immobilizeStatus == IMMOBILIZE_STATUS_INGRAIN || pokemonData->maxHP / 2 < pokemonData->HP) - { - return FALSE; - } - break; - case MOVE_SWALLOW: - if (pokemonData->maxHP <= pokemonData->HP || pokemonData->stockpileCount == 0) - { - return FALSE; - } - break; - case MOVE_SPIT_UP: - if (pokemonData->stockpileCount == 0) - { - return FALSE; - } - break; - case MOVE_DOOM_DESIRE: - case MOVE_FUTURE_SIGHT: - if (pokemonData->moveStatus == MOVE_STATUS_SET_DAMAGE) - { - return FALSE; - } - break; - case MOVE_BULK_UP: - if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE && pokemonData->defenseStages[STAT_STAGE_DEFENSE] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_CAMOUFLAGE: - if (HasType(pokemon, gDungeonCamouflageTypes[gDungeonGlobalData->tileset])) - { - return FALSE; - } - break; - case MOVE_TAIL_GLOW: - if (pokemonData->attackStages[STAT_STAGE_SPECIAL_ATTACK] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_DESTINY_BOND: - if (pokemonData->linkedStatus == LINKED_STATUS_DESTINY_BOND) - { - return FALSE; - } - break; - case MOVE_MIRROR_COAT: - if (pokemonData->protectionStatus == PROTECTION_STATUS_MIRROR_COAT) - { - return FALSE; - } - break; - case MOVE_REFLECT: - if (pokemonData->protectionStatus == PROTECTION_STATUS_REFLECT) - { - return FALSE; - } - break; - case MOVE_DRAGON_DANCE: - if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE && pokemon->entityData->movementSpeed >= MAX_MOVEMENT_SPEED) - { - return FALSE; - } - break; - case MOVE_MAGIC_COAT: - if (pokemonData->protectionStatus == PROTECTION_STATUS_MAGIC_COAT) - { - return FALSE; - } - break; - case MOVE_DETECT: - case MOVE_PROTECT: - if (pokemonData->protectionStatus == PROTECTION_STATUS_PROTECT) - { - return FALSE; - } - break; - case MOVE_RAIN_DANCE: - if (GetWeather(pokemon) == WEATHER_RAIN) - { - return FALSE; - } - break; - case MOVE_SANDSTORM: - if (GetWeather(pokemon) == WEATHER_SANDSTORM) - { - return FALSE; - } - break; - case MOVE_SUNNY_DAY: - if (GetWeather(pokemon) == WEATHER_SUNNY) - { - return FALSE; - } - break; - case MOVE_SAFEGUARD: - if (pokemonData->protectionStatus == PROTECTION_STATUS_SAFEGUARD) - { - return FALSE; - } - break; - case MOVE_INVISIFY: - if (pokemonData->transformStatus == TRANSFORM_STATUS_INVISIBLE) - { - return FALSE; - } - break; - case MOVE_FOCUS_ENERGY: - if (pokemonData->moveStatus == MOVE_STATUS_FOCUS_ENERGY) - { - return FALSE; - } - break; - case MOVE_TAKEAWAY: - if (pokemonData->heldItem.itemFlags & ITEM_FLAG_EXISTS) - { - return FALSE; - } - break; - case MOVE_REST: - if (!HasQuarterHPOrLess(pokemon) && !HasNegativeStatus(pokemon)) - { - return FALSE; - } - break; - case MOVE_DIVE: - if (IsTileGround(GetMapTileForDungeonEntity_2(pokemon))) - { - return FALSE; - } - break; - case MOVE_DIG: - { - struct MapTile *tile = GetMapTileForDungeonEntity_2(pokemon); - if (!IsTileGround(tile) || (tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) != TILE_TYPE_FLOOR) - { - return FALSE; - } - break; - } - case MOVE_TRAP_BUSTER: - { - struct DungeonEntity *mapObject = GetMapTileForDungeonEntity_2(pokemon)->mapObject; - if (mapObject == NULL || GetEntityType(mapObject) != ENTITY_TRAP) - { - return FALSE; - } - break; - } - case MOVE_MUD_SPORT: - if (gDungeonGlobalData->mudSportTurnsLeft > 0) - { - return FALSE; - } - break; - case MOVE_WATER_SPORT: - if (gDungeonGlobalData->waterSportTurnsLeft > 0) - { - return FALSE; - } - break; - case MOVE_GRUDGE: - if (pokemonData->grudgeStatus) - { - return FALSE; - } - break; - case MOVE_DECOY_MAKER: - case MOVE_FOLLOW_ME: - case MOVE_SUBSTITUTE: - if (gDungeonGlobalData->decoyActive) - { - return FALSE; - } - break; - case MOVE_STOCKPILE: - if (pokemonData->stockpileCount >= MAX_STOCKPILE_COUNT) - { - return FALSE; - } - break; - case MOVE_CLEANSE: - if (pokemonData->heldItem.itemFlags & ITEM_FLAG_EXISTS && - !(pokemonData->heldItem.itemFlags & ITEM_FLAG_STICKY)) - { - return FALSE; - } - break; - case MOVE_DOUBLE_TEAM: - if (pokemonData->accuracyStages[STAT_STAGE_EVASION] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_GROWTH: - if (pokemonData->attackStages[STAT_STAGE_SPECIAL_ATTACK] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_SWORDS_DANCE: - if (pokemonData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_WISH: - if (pokemonData->isEnemy || pokemonData->protectionStatus == PROTECTION_STATUS_WISH) - { - return FALSE; - } - break; - case MOVE_TRANSFORM: - if (pokemonData->transformStatus == TRANSFORM_STATUS_TRANSFORMED) - { - return FALSE; - } - break; - case MOVE_SPIKES: - if (!CanLayTrap(&pokemon->posWorld)) - { - return FALSE; - } - break; - case MOVE_CALM_MIND: - if (pokemonData->attackStages[STAT_STAGE_SPECIAL_ATTACK] < MAX_STAT_STAGE) - { - break; - } - case MOVE_AMNESIA: - if (pokemonData->defenseStages[STAT_STAGE_SPECIAL_DEFENSE] >= MAX_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_SNATCH: - if (pokemonData->waitingStatus == WAITING_STATUS_SNATCH) - { - return FALSE; - } - break; - case MOVE_BEAT_UP: - case MOVE_BLOWBACK: - case MOVE_HURL: - case MOVE_MEMENTO: - case MOVE_ROAR: - case MOVE_STAY_AWAY: - case MOVE_SWITCHER: - case MOVE_TELEPORT: - case MOVE_VITAL_THROW: - case MOVE_WARP: - case MOVE_WHIRLWIND: - if (IsBossBattle()) - { - return FALSE; - } - break; - case MOVE_CONVERSION_2: - if (pokemonData->protectionStatus == PROTECTION_STATUS_CONVERSION_2) - { - return FALSE; - } - break; - case MOVE_HELPING_HAND: - if (pokemonData->isEnemy) - { - s32 i; - for (i = 0; i < DUNGEON_MAX_WILD_POKEMON; i++) - { - struct DungeonEntity *target = gDungeonGlobalData->wildPokemon[i]; - if (EntityExists(target) && target != pokemon && CanSee(pokemon, target)) - { - if (target->entityData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE) - { - continue; - } - if (target->entityData->attackStages[STAT_STAGE_SPECIAL_ATTACK] < MAX_STAT_STAGE) - { - break; - } - } - } - if (i == DUNGEON_MAX_WILD_POKEMON) - { - return FALSE; - } - break; - } - else - { - s32 i; - for (i = 0; i < MAX_TEAM_MEMBERS; i++) - { - struct DungeonEntity *target = gDungeonGlobalData->teamPokemon[i]; - if (EntityExists(target) && target != pokemon && CanSee(pokemon, target)) - { - if (target->entityData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE) - { - continue; - } - if (target->entityData->attackStages[STAT_STAGE_SPECIAL_ATTACK] < MAX_STAT_STAGE) - { - break; - } - } - } - if (i == MAX_TEAM_MEMBERS) - { - return FALSE; - } - break; - } - } - return TRUE; -} - -bool8 CanUseOnTargetWithStatusChecker(struct DungeonEntity *user, struct DungeonEntity *target, struct PokemonMove *move) -{ - struct DungeonEntityData *userData = user->entityData; - struct DungeonEntityData *targetData = target->entityData; - s32 i; - if (targetData->immobilizeStatus == IMMOBILIZE_STATUS_FROZEN && MoveCannotHitFrozen(move)) - { - return FALSE; - } - switch (move->moveID) - { - case MOVE_GRASSWHISTLE: - case MOVE_HYPNOSIS: - case MOVE_LOVELY_KISS: - case MOVE_SING: - case MOVE_SLEEP_POWDER: - case MOVE_SPORE: - if (IsSleeping(target)) - { - return FALSE; - } - break; - case MOVE_YAWN: - if (targetData->sleepStatus == SLEEP_STATUS_YAWNING) - { - return FALSE; - } - if (IsSleeping(target)) - { - return FALSE; - } - break; - case MOVE_NIGHTMARE: - if (targetData->sleepStatus == SLEEP_STATUS_NIGHTMARE) - { - return FALSE; - } - break; - case MOVE_SWEET_SCENT: - if (targetData->accuracyStages[STAT_STAGE_EVASION] <= 0) - { - return FALSE; - } - break; - case MOVE_CHARM: - if (targetData->attackMultipliers[STAT_STAGE_ATTACK] < STAT_MULTIPLIER_THRESHOLD) - { - return FALSE; - } - break; - case MOVE_ENCORE: - if (targetData->volatileStatus == VOLATILE_STATUS_ENCORE) - { - return FALSE; - } - if (!HasLastUsedMove(targetData->moves)) - { - return FALSE; - } - break; - case MOVE_SUPER_FANG: - if (targetData->HP <= 1) - { - return FALSE; - } - break; - case MOVE_PAIN_SPLIT: - if (targetData->HP <= userData->HP) - { - return FALSE; - } - break; - case MOVE_TORMENT: - if (HasDisabledMove(targetData->moves) || !HasLastUsedMove(targetData->moves)) - { - return FALSE; - } - break; - case MOVE_COTTON_SPORE: - case MOVE_SCARY_FACE: - case MOVE_STRING_SHOT: - if (target->entityData->movementSpeed <= 0) - { - return FALSE; - } - break; - case MOVE_SCREECH: - if (targetData->defenseMultipliers[STAT_STAGE_DEFENSE] < STAT_MULTIPLIER_THRESHOLD) - { - return FALSE; - } - break; - case MOVE_FAKE_TEARS: - if (targetData->defenseStages[STAT_STAGE_SPECIAL_DEFENSE] <= 0) - { - return FALSE; - } - break; - case MOVE_SPITE: - if (LastUsedMoveOutOfPP(targetData->moves)) - { - return FALSE; - } - break; - case MOVE_SMOKESCREEN: - if (targetData->moveStatus == MOVE_STATUS_WHIFFER) - { - return FALSE; - } - break; - case MOVE_MEMENTO: - if (targetData->attackMultipliers[STAT_STAGE_ATTACK] < STAT_MULTIPLIER_THRESHOLD && - targetData->attackMultipliers[STAT_STAGE_SPECIAL_ATTACK] < STAT_MULTIPLIER_THRESHOLD) - { - return FALSE; - } - break; - case MOVE_WILL_O_WISP: - if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_BURNED) - { - return FALSE; - } - break; - case MOVE_FORESIGHT: - case MOVE_ODOR_SLEUTH: - if (targetData->types[0] == TYPE_GHOST || targetData->types[1] == TYPE_GHOST) - { - if (!targetData->exposedStatus) - { - break; - } - } - if (targetData->accuracyStages[STAT_STAGE_EVASION] <= DEFAULT_STAT_STAGE) - { - return FALSE; - } - break; - case MOVE_DISABLE: - case MOVE_GLARE: - case MOVE_STUN_SPORE: - case MOVE_THUNDER_WAVE: - if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_PARALYZED) - { - return FALSE; - } - break; - case MOVE_ENDEAVOR: - if (targetData->HP - userData->HP <= 0) - { - return FALSE; - } - break; - case MOVE_LEER: - case MOVE_TAIL_WHIP: - if (targetData->defenseStages[STAT_STAGE_DEFENSE] <= 0) - { - return FALSE; - } - break; - case MOVE_METAL_SOUND: - if (targetData->defenseStages[STAT_STAGE_SPECIAL_DEFENSE] <= 0) - { - return FALSE; - } - break; - case MOVE_TICKLE: - if (targetData->attackStages[STAT_STAGE_ATTACK] <= 0 && - targetData->defenseStages[STAT_STAGE_DEFENSE] <= 0) - { - return FALSE; - } - break; - case MOVE_BLOCK: - case MOVE_MEAN_LOOK: - case MOVE_SPIDER_WEB: - if (targetData->immobilizeStatus == IMMOBILIZE_STATUS_IMMOBILIZED) - { - return FALSE; - } - break; - case MOVE_HAZE: - { - for (i = 0; i < 2; i++) - { - if (targetData->attackStages[i] < DEFAULT_STAT_STAGE) break; - if (targetData->defenseStages[i] < DEFAULT_STAT_STAGE) break; - if (targetData->accuracyStages[i] < DEFAULT_STAT_STAGE || - targetData->attackMultipliers[i] < DEFAULT_STAT_MULTIPLIER || - targetData->defenseMultipliers[i] < DEFAULT_STAT_MULTIPLIER) - { - break; - } - } - if (i == 2) - { - return FALSE; - } - break; - } - case MOVE_UPROAR: - if (targetData->sleepStatus == SLEEP_STATUS_SLEEPLESS) - { - return FALSE; - } - break; - case MOVE_PSYCH_UP: - { - for (i = 0; i < 2; i++) - { - if (userData->attackStages[i] < targetData->attackStages[i]) break; - if (userData->defenseStages[i] < targetData->defenseStages[i] || - userData->accuracyStages[i] < targetData->accuracyStages[i] || - userData->attackMultipliers[i] < targetData->attackMultipliers[i] || - userData->defenseMultipliers[i] < targetData->defenseMultipliers[i]) - { - break; - } - } - if (i == 2) - { - return FALSE; - } - break; - } - case MOVE_FLASH: - case MOVE_KINESIS: - case MOVE_SAND_ATTACK: - if (targetData->accuracyStages[STAT_STAGE_ACCURACY] <= 0) - { - return FALSE; - } - break; - case MOVE_TAUNT: - if (targetData->volatileStatus == VOLATILE_STATUS_TAUNTED) - { - return FALSE; - } - break; - case MOVE_TRICK: - if (!(userData->heldItem.itemFlags & ITEM_FLAG_EXISTS) || - !(targetData->heldItem.itemFlags & ITEM_FLAG_EXISTS)) - { - return FALSE; - } - break; - case MOVE_KNOCK_OFF: - if (!(targetData->heldItem.itemFlags & ITEM_FLAG_EXISTS)) - { - return FALSE; - } - break; - case MOVE_FEATHERDANCE: - case MOVE_GROWL: - if (targetData->attackStages[STAT_STAGE_ATTACK] <= 0) - { - return FALSE; - } - break; - case MOVE_ROLE_PLAY: - if (userData->abilities[0] == targetData->abilities[0] && - userData->abilities[1] == targetData->abilities[1]) - { - return FALSE; - } - break; - case MOVE_CURSE: - if (HasType(user, TYPE_GHOST)) - { - if (targetData->waitingStatus == WAITING_STATUS_CURSED) - { - return FALSE; - } - } - else - { - if (userData->attackStages[STAT_STAGE_ATTACK] >= MAX_STAT_STAGE && - userData->defenseStages[STAT_STAGE_DEFENSE] >= MAX_STAT_STAGE) - { - return FALSE; - } - } - break; - case MOVE_IMPRISON: - case MOVE_OBSERVER: - if (targetData->volatileStatus == VOLATILE_STATUS_PAUSED) - { - return FALSE; - } - break; - case MOVE_FALSE_SWIPE: - if (targetData->HP <= 1) - { - return FALSE; - } - break; - case MOVE_LEECH_SEED: - if (targetData->linkedStatus == LINKED_STATUS_LEECH_SEED) - { - return FALSE; - } - break; - case MOVE_PERISH_SONG: - if (targetData->perishSongTimer != 0) - { - return FALSE; - } - break; - case MOVE_MIMIC: - case MOVE_SKETCH: - if (!HasLastUsedMove(targetData->moves)) - { - return FALSE; - } - break; - case MOVE_ATTRACT: - if (targetData->volatileStatus == VOLATILE_STATUS_INFATUATED) - { - return FALSE; - } - break; - case MOVE_WRAP: - if (targetData->immobilizeStatus == IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE) - { - return FALSE; - } - if (targetData->immobilizeStatus == IMMOBILIZE_STATUS_WRAPPED_BY_FOE) - { - return FALSE; - } - break; - case MOVE_TOXIC: - if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_BADLY_POISONED) - { - return FALSE; - } - break; - case MOVE_POISON_GAS: - case MOVE_POISONPOWDER: - if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_POISONED) - { - return FALSE; - } - if (targetData->nonVolatileStatus == NON_VOLATILE_STATUS_BADLY_POISONED) - { - return FALSE; - } - break; - case MOVE_CONFUSE_RAY: - case MOVE_FLATTER: - case MOVE_SUPERSONIC: - case MOVE_SWAGGER: - case MOVE_SWEET_KISS: - case MOVE_TEETER_DANCE: - case MOVE_TOTTER: - if (targetData->volatileStatus == VOLATILE_STATUS_CONFUSED) - { - return FALSE; - } - break; - } - return TRUE; -} - -bool8 HasDisabledMove(struct PokemonMove *moves) -{ - s32 i; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (moves[i].moveFlags & MOVE_FLAG_EXISTS && moves[i].moveFlags & MOVE_FLAG_DISABLED) - { - return TRUE; - } - } - if (moves[STRUGGLE_MOVE_INDEX].moveFlags & MOVE_FLAG_DISABLED) - { - return TRUE; - } - return FALSE; -} - -bool8 LastUsedMoveOutOfPP(struct PokemonMove *moves) -{ - s32 i; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (moves[i].moveFlags & MOVE_FLAG_EXISTS && - moves[i].moveFlags & MOVE_FLAG_LAST_USED && - moves[i].PP == 0) - { - return TRUE; - } - } - return FALSE; -} - -bool8 HasLastUsedMove(struct PokemonMove *moves) -{ - s32 i; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (moves[i].moveFlags & MOVE_FLAG_EXISTS && moves[i].moveFlags & MOVE_FLAG_LAST_USED) - { - return TRUE; - } - } - if (moves[STRUGGLE_MOVE_INDEX].moveFlags & MOVE_FLAG_LAST_USED) - { - return TRUE; - } - return FALSE; -}