diff options
-rw-r--r-- | asm/party_menu.s | 138 | ||||
-rw-r--r-- | include/party_menu.h | 4 | ||||
-rw-r--r-- | src/party_menu.c | 58 |
3 files changed, 56 insertions, 144 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s index cee9edf14..7c55732b9 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -7448,144 +7448,6 @@ PartyMenuGetPopupMenuFunc: @ 806E81C .section .text_8070968 - thumb_func_start sub_8070C54 -sub_8070C54: @ 8070C54 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r7, _08070C78 @ =0x0201c000 - ldr r0, [r7] - movs r1, 0 - bl MonTryLearningNewMove - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _08070C7C @ =0x0000fffe - cmp r4, r0 - beq _08070D28 - cmp r4, r0 - bgt _08070C80 - cmp r4, 0 - beq _08070C8C - b _08070D30 - .align 2, 0 -_08070C78: .4byte 0x0201c000 -_08070C7C: .4byte 0x0000fffe -_08070C80: - ldr r0, _08070C88 @ =0x0000ffff - cmp r4, r0 - beq _08070CC8 - b _08070D30 - .align 2, 0 -_08070C88: .4byte 0x0000ffff -_08070C8C: - ldr r0, [r7] - movs r1, 0 - movs r2, 0 - bl GetEvolutionTargetSpecies - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _08070CC0 - ldr r1, _08070CB8 @ =gCB2_AfterEvolution - ldr r0, _08070CBC @ =sub_80A53F8 - str r0, [r1] - ldr r0, [r7] - ldrb r3, [r7, 0x5] - adds r1, r2, 0 - movs r2, 0x1 - bl BeginEvolutionScene - adds r0, r6, 0 - bl DestroyTask - b _08070D68 - .align 2, 0 -_08070CB8: .4byte gCB2_AfterEvolution -_08070CBC: .4byte sub_80A53F8 -_08070CC0: - adds r0, r6, 0 - bl sub_8070D90 - b _08070D68 -_08070CC8: - ldr r0, [r7] - ldr r1, _08070D08 @ =gStringVar1 - bl GetMonNickname - ldr r0, _08070D0C @ =gStringVar2 - ldr r5, _08070D10 @ =gMoveToLearn - ldrh r2, [r5] - movs r1, 0xD - muls r1, r2 - ldr r2, _08070D14 @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r4, _08070D18 @ =gStringVar4 - ldr r1, _08070D1C @ =gOtherText_WantsToLearn - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0x1 - bl sub_806E834 - ldrh r0, [r5] - strh r0, [r7, 0x8] - ldr r1, _08070D20 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08070D24 @ =sub_806F358 - b _08070D66 - .align 2, 0 -_08070D08: .4byte gStringVar1 -_08070D0C: .4byte gStringVar2 -_08070D10: .4byte gMoveToLearn -_08070D14: .4byte gMoveNames -_08070D18: .4byte gStringVar4 -_08070D1C: .4byte gOtherText_WantsToLearn -_08070D20: .4byte gTasks -_08070D24: .4byte sub_806F358 -_08070D28: - adds r0, r6, 0 - bl sub_8070C54 - b _08070D68 -_08070D30: - ldr r0, _08070D70 @ =0x0201c000 - ldr r0, [r0] - ldr r1, _08070D74 @ =gStringVar1 - bl GetMonNickname - ldr r0, _08070D78 @ =gStringVar2 - movs r1, 0xD - muls r1, r4 - ldr r2, _08070D7C @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r4, _08070D80 @ =gStringVar4 - ldr r1, _08070D84 @ =gOtherText_LearnedMove - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0x1 - bl sub_806E834 - ldr r1, _08070D88 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08070D8C @ =Task_TeamMonTMMove3 -_08070D66: - str r1, [r0] -_08070D68: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08070D70: .4byte 0x0201c000 -_08070D74: .4byte gStringVar1 -_08070D78: .4byte gStringVar2 -_08070D7C: .4byte gMoveNames -_08070D80: .4byte gStringVar4 -_08070D84: .4byte gOtherText_LearnedMove -_08070D88: .4byte gTasks -_08070D8C: .4byte Task_TeamMonTMMove3 - thumb_func_end sub_8070C54 - thumb_func_start sub_8070D90 sub_8070D90: @ 8070D90 push {r4,lr} diff --git a/include/party_menu.h b/include/party_menu.h index b1c6ccd02..68af9669b 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -122,8 +122,6 @@ void sub_806E6F0(); void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int); void sub_806E7D0(u8, const struct PartyPopupMenu *); TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); -void Task_RareCandy3(u8); -void sub_8070C54(u8); void DoEvolutionStoneItemEffect(u8, u16, TaskFunc); u8 GetItemEffectType(); u8 sub_806E834(const u8 *message, u8 arg1); @@ -168,6 +166,8 @@ void Task_RareCandy2(u8); void PrintStatGrowthsInLevelUpWindow(u8 taskId); void PrintNewStatsInLevelUpWindow(u8 taskId); void RedrawPokemonInfoInMenu(u8, struct Pokemon *); +void Task_RareCandy3(u8); +void TeachMonMoveInPartyMenu(u8); void sub_806CA60(u8 taskId); void sub_806CD5C(u8 taskId); void DoTakeMail(u8 taskId, TaskFunc func); diff --git a/src/party_menu.c b/src/party_menu.c index c8a59c390..49c421b54 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -598,7 +598,7 @@ void Task_TeamMonTMMove4(u8 taskId) SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); if (ewram1B000.unk282 == 1) { - sub_8070C54(taskId); + TeachMonMoveInPartyMenu(taskId); } else { @@ -616,7 +616,7 @@ void sub_806F2FC(u8 taskId) SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); if (ewram1B000.unk282 == 1) { - sub_8070C54(taskId); + TeachMonMoveInPartyMenu(taskId); } else { @@ -1565,7 +1565,7 @@ void Task_RareCandy3(u8 taskId) MenuZeroFillWindowRect(WINDOW_LEFT + 8, 0, WINDOW_RIGHT + 3, 7); - learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, 1); + learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, TRUE); ewram1B000.unk282 = 1; switch (learnedMove) @@ -1597,7 +1597,7 @@ void Task_RareCandy3(u8 taskId) break; case 0xFFFE: // Move was already known by the mon. - gTasks[taskId].func = sub_8070C54; + gTasks[taskId].func = TeachMonMoveInPartyMenu; break; default: // Mon automatically learned a move because it knew less than four moves. @@ -1613,3 +1613,53 @@ void Task_RareCandy3(u8 taskId) } } } + +void TeachMonMoveInPartyMenu(u8 taskId) +{ + u16 learnedMove; + u16 evolutionSpecies; + + learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, FALSE); + switch (learnedMove) + { + case 0: + // No move is learned. + evolutionSpecies = GetEvolutionTargetSpecies(ewram1C000.pokemon, 0, 0); + if (evolutionSpecies != 0) + { + gCB2_AfterEvolution = sub_80A53F8; + BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); + DestroyTask(taskId); + } + else + { + sub_8070D90(taskId); + } + break; + case 0xFFFF: + // Mon already knows 4 moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); + + StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); + sub_806E834(gStringVar4, 1); + + ewram1C000.unk8 = gMoveToLearn; + gTasks[taskId].func = sub_806F358; + break; + case 0xFFFE: + // Move was already known by the mon. Go on the the next move to be learned. + TeachMonMoveInPartyMenu(taskId); + break; + default: + // Mon automatically learned a move because it knew less than four moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[learnedMove]); + + StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); + sub_806E834(gStringVar4, 1); + + gTasks[taskId].func = Task_TeamMonTMMove3; + break; + } +} |