diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 61f76ebeb..453ebf6e0 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -5299,7 +5299,7 @@ _080551F2: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_8057948 + bl EncoreMoveAction b _080554BA _08055200: adds r0, r7, 0 diff --git a/asm/code_8077274.s b/asm/code_8077274.s index 84678a4c3..5af2088a2 100644 --- a/asm/code_8077274.s +++ b/asm/code_8077274.s @@ -5,124 +5,6 @@ .text - thumb_func_start sub_8078968 -sub_8078968: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r5, [r4, 0x70] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08078A4A - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08078A4A - movs r3, 0 - ldr r0, _080789E8 - mov r8, r0 - movs r1, 0x1 - mov r12, r1 - movs r0, 0x8C - lsls r0, 1 - adds r2, r5, r0 - movs r7, 0x10 -_080789A2: - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - cmp r0, 0 - beq _080789B4 - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _080789BC -_080789B4: - adds r2, 0x8 - adds r3, 0x1 - cmp r3, 0x3 - ble _080789A2 -_080789BC: - cmp r3, 0x4 - bne _080789F0 - movs r1, 0x9C - lsls r1, 1 - adds r0, r5, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080789F0 - mov r0, r8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _080789EC - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08078A4A - .align 2, 0 -_080789E8: .4byte gAvailablePokemonNames -_080789EC: .4byte gUnknown_80FBBD4 -_080789F0: - mov r0, r8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r1, r5, 0 - adds r1, 0xBC - ldrb r0, [r1] - cmp r0, 0x6 - beq _08078A38 - movs r0, 0x6 - strb r0, [r1] - ldr r1, _08078A30 - 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 nullsub_83 - ldr r0, _08078A34 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08078A44 - .align 2, 0 -_08078A30: .4byte gUnknown_80F4EF4 -_08078A34: .4byte gUnknown_80FBB94 -_08078A38: - ldr r0, _08078A54 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08078A44: - adds r0, r4, 0 - bl EntityUpdateStatusSprites -_08078A4A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078A54: .4byte gUnknown_80FBBB8 - thumb_func_end sub_8078968 - thumb_func_start sub_8078A58 sub_8078A58: push {r4-r7,lr} diff --git a/asm/friend_area_action_menu.s b/asm/friend_area_action_menu.s index 2db2ec8f6..f8fe42030 100644 --- a/asm/friend_area_action_menu.s +++ b/asm/friend_area_action_menu.s @@ -298,126 +298,4 @@ _080276A0: bx r0 thumb_func_end CreateFriendActionMenu - thumb_func_start sub_80276A8 -sub_80276A8: - push {r4-r7,lr} - ldr r5, _0802775C - ldr r0, [r5] - movs r7, 0xB6 - lsls r7, 1 - adds r0, r7 - movs r1, 0 - movs r2, 0x14 - bl MemoryFill16 - ldr r2, [r5] - movs r0, 0x8E - lsls r0, 1 - adds r1, r2, r0 - ldr r0, _08027760 - str r0, [r1] - movs r3, 0x90 - lsls r3, 1 - adds r1, r2, r3 - movs r0, 0xA - str r0, [r1] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _080276E4 - ldr r0, [r5] - adds r4, r7, 0 - adds r0, r4 - movs r1, 0x1 - strh r1, [r0] -_080276E4: - ldr r4, [r5] - movs r2, 0x1 - movs r0, 0x92 - lsls r0, 1 - adds r1, r4, r0 - ldr r0, _08027764 - ldr r0, [r0] - str r0, [r1] - movs r3, 0x94 - lsls r3, 1 - adds r1, r4, r3 - movs r0, 0x4 - str r0, [r1] - movs r6, 0x2 - movs r0, 0x96 - lsls r0, 1 - adds r1, r4, r0 - movs r0, 0 - str r0, [r1] - movs r1, 0x98 - lsls r1, 1 - adds r0, r4, r1 - str r2, [r0] - movs r3, 0 - mov r12, r4 - movs r4, 0x90 - lsls r4, 1 - add r4, r12 - mov r0, r12 - adds r2, r0, r7 -_08027720: - ldrh r0, [r2] - cmp r0, 0 - bne _08027730 - ldr r1, [r4] - mov r7, r12 - ldr r0, [r7, 0x74] - cmp r1, r0 - beq _0802778E -_08027730: - adds r4, 0x8 - adds r2, 0x2 - adds r3, 0x1 - cmp r3, r6 - blt _08027720 - movs r3, 0 - cmp r3, r6 - bge _0802778E - ldr r1, [r5] - movs r2, 0xB6 - lsls r2, 1 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r0, 0 - bne _08027768 - movs r3, 0x90 - lsls r3, 1 - adds r0, r1, r3 - ldr r0, [r0] - str r0, [r1, 0x74] - b _0802778E - .align 2, 0 -_0802775C: .4byte gUnknown_203B2BC -_08027760: .4byte gFriendActionGive -_08027764: .4byte gUnknown_80D4970 -_08027768: - adds r3, 0x1 - cmp r3, r6 - bge _0802778E - ldr r2, [r5] - lsls r0, r3, 1 - movs r4, 0xB6 - lsls r4, 1 - adds r1, r2, r4 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08027768 - lsls r0, r3, 3 - movs r7, 0x90 - lsls r7, 1 - adds r1, r2, r7 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x74] -_0802778E: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80276A8 - .align 2,0 diff --git a/include/status.h b/include/status.h index abdd59e33..c72583aeb 100644 --- a/include/status.h +++ b/include/status.h @@ -35,5 +35,6 @@ void TauntStatusTarget(struct Entity * pokemon, struct Entity * target); void HandleStockpile(struct Entity * pokemon, struct Entity * target); void InvisibleStatusTarget(struct Entity * pokemon, struct Entity * target); void PerishSongTarget(struct Entity * pokemon, struct Entity * target); +void EncoreStatusTarget(struct Entity * pokemon, struct Entity * target); #endif diff --git a/src/code_8057824.c b/src/code_8057824.c index 8e9e9adb1..77ce4e4b0 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -125,7 +125,6 @@ extern u8 sub_807EAA0(u32, u32); extern void sub_80522F4(struct Entity *r1, struct Entity *r2, const char[]); extern s32 sub_80556BC(struct Entity *, struct Entity *, u8, struct Move *, u32, u32); extern bool8 sub_805727C(struct Entity *, struct Entity *, s16); -extern void sub_8078968(struct Entity *r0, struct Entity *r1); extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); extern void SetMessageArgument(char[], struct Entity*, u32); extern u32 sub_8055640(struct Entity *, struct Entity *, struct Move *, u32, u32); @@ -329,9 +328,9 @@ bool32 sub_80578FC(struct Entity *pokemon, struct Entity *target, struct Move * return flag; } -bool32 sub_8057948(struct Entity *pokemon, struct Entity *target) +bool32 EncoreMoveAction(struct Entity *pokemon, struct Entity *target) { - sub_8078968(pokemon, target); + EncoreStatusTarget(pokemon, target); return TRUE; } diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index 29bf3b254..fa2b1bcf5 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -71,23 +71,60 @@ static const u8 filler[] = "pksdir0"; extern u8 *gUnknown_80D4920[]; extern u8 *gUnknown_80D4928[]; +extern u8 *gUnknown_80D4970[]; + +void sub_80276A8(void) +{ + int index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C)); + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive; + gUnknown_203B2BC->menuItems[loopMax].menuAction = 10; + if (GetNumberOfFilledInventorySlots() == 0) { + gUnknown_203B2BC->unk16C[loopMax] = 1; + } + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4970; + gUnknown_203B2BC->menuItems[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = 0; + gUnknown_203B2BC->menuItems[loopMax].menuAction = 1; + + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2BC->unk16C[index] == 0) + { + if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction2) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2BC->unk16C[index] == 0) + { + gUnknown_203B2BC->menuAction2 = gUnknown_203B2BC->menuItems[index].menuAction; + break; + } + } +} void sub_8027794(void) { - struct unkStruct_203B2BC *puVar1; - u8 *nullText; - s32 menuAction; + s32 loopMax = 0; MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C)); - puVar1 = gUnknown_203B2BC; - nullText = NULL; - puVar1->menuItems[0].text = *gUnknown_80D4920; - gUnknown_203B2BC->menuItems[0].menuAction = 0x2; - menuAction = 1; - gUnknown_203B2BC->menuItems[1].text = *gUnknown_80D4928; - gUnknown_203B2BC->menuItems[1].menuAction = 3; - gUnknown_203B2BC->menuItems[2].text = nullText; - gUnknown_203B2BC->menuItems[2].menuAction = menuAction; + gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4920; + gUnknown_203B2BC->menuItems[loopMax].menuAction = 0x2; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4928; + gUnknown_203B2BC->menuItems[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = NULL; + gUnknown_203B2BC->menuItems[loopMax].menuAction = 1; } void sub_80277FC(void) diff --git a/src/friend_list_menu_1.c b/src/friend_list_menu_1.c index 313cd5231..e0ccc137b 100644 --- a/src/friend_list_menu_1.c +++ b/src/friend_list_menu_1.c @@ -32,8 +32,7 @@ struct unkStruct_203B2B4 u32 menuAction1; s32 menuAction2; struct MenuStruct unk78; - struct MenuItem unkC8[4]; - u8 fillE8[0x108 - 0xE8]; + struct MenuItem unkC8[8]; u16 unk108[8]; struct UnkTextStruct2 unk118[4]; }; diff --git a/src/other_menus.c b/src/other_menus.c index 851a4a4d6..2310a26a9 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -91,7 +91,7 @@ void sub_8036FDC(s32 param_1) } gUnknown_203B35C->unk0 = param_1; - gUnknown_203B35C->unk4 = 0; + gUnknown_203B35C->linkStatus = 0; gUnknown_203B35C->state = 0; iVar3 = 0; do { diff --git a/src/status.c b/src/status.c index 1a38e9281..4b3c6bb57 100644 --- a/src/status.c +++ b/src/status.c @@ -112,6 +112,10 @@ extern s16 gUnknown_80F4EE4[]; extern s16 gUnknown_80F4EEC[]; extern u8 *gUnknown_80FBB04[]; extern u8 *gUnknown_80FBB28[]; +extern u8 *gUnknown_80FBBD4[]; +extern u8 *gUnknown_80FBBB8[]; +extern u8 *gUnknown_80FBB94[]; +extern s16 gUnknown_80F4EF4[]; extern s32 gUnknown_202DE30[10]; @@ -138,6 +142,7 @@ extern void nullsub_79(struct Entity *); extern void nullsub_80(struct Entity *); extern void nullsub_81(struct Entity *); extern void nullsub_82(struct Entity *); +extern void nullsub_83(struct Entity *); extern void sub_803F580(u32); extern void sub_8040A84(void); extern void sub_8041CA8(struct Entity *); @@ -1187,3 +1192,36 @@ void PerishSongTarget(struct Entity * pokemon, struct Entity * target) EntityUpdateStatusSprites(target); } } + +void EncoreStatusTarget(struct Entity *pokemon,struct Entity *target) +{ + struct Move *movePtr; + int index; + struct EntityInfo *EntityInfo; + + EntityInfo = target->info; + if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,TRUE))) { + for(index = 0; index < MAX_MON_MOVES; index++) + { + movePtr = &EntityInfo->moves[index]; + if ((EntityInfo->moves[index].moveFlags & MOVE_FLAG_EXISTS) && (movePtr->moveFlags & MOVE_FLAG_LAST_USED)) break; + } + if ((index == MAX_MON_MOVES) && ((EntityInfo->struggleMoveFlags & MOVE_FLAG_LAST_USED) == 0)) { + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FBBD4); + } + else { + SetMessageArgument(gAvailablePokemonNames,target,0); + if (EntityInfo->volatileStatus != STATUS_ENCORE) { + EntityInfo->volatileStatus = STATUS_ENCORE; + EntityInfo->volatileStatusTurns = CalculateStatusTurns(target,gUnknown_80F4EF4,TRUE) + 1; + nullsub_83(target); + sub_80522F4(pokemon,target,*gUnknown_80FBB94); + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FBBB8); + } + EntityUpdateStatusSprites(target); + } + } +}