diff options
-rw-r--r-- | asm/party_menu.s | 176 | ||||
-rw-r--r-- | include/party_menu.h | 2 | ||||
-rw-r--r-- | include/pokemon.h | 4 | ||||
-rw-r--r-- | src/party_menu.c | 64 | ||||
-rw-r--r-- | src/pokemon_menu.c | 1 |
5 files changed, 68 insertions, 179 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s index e2c7d694a..cee9edf14 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -7448,182 +7448,6 @@ PartyMenuGetPopupMenuFunc: @ 806E81C .section .text_8070968 - thumb_func_start Task_RareCandy3 -Task_RareCandy3: @ 8070AC8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0 - bl WaitFanfare - lsls r0, 24 - cmp r0, 0 - bne _08070ADC - b _08070C2C -_08070ADC: - ldr r0, _08070B24 @ =gMain - ldrh r1, [r0, 0x2E] - movs r5, 0x1 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _08070AF4 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08070AF4 - b _08070C2C -_08070AF4: - movs r0, 0xB - movs r1, 0 - movs r2, 0x1D - movs r3, 0x7 - bl MenuZeroFillWindowRect - ldr r7, _08070B28 @ =0x0201c000 - ldr r0, [r7] - movs r1, 0x1 - bl MonTryLearningNewMove - lsls r0, 16 - lsrs r4, r0, 16 - ldr r1, _08070B2C @ =0xfffff282 - adds r0, r7, r1 - strh r5, [r0] - ldr r0, _08070B30 @ =0x0000fffe - cmp r4, r0 - beq _08070BDC - cmp r4, r0 - bgt _08070B34 - cmp r4, 0 - beq _08070B40 - b _08070BF4 - .align 2, 0 -_08070B24: .4byte gMain -_08070B28: .4byte 0x0201c000 -_08070B2C: .4byte 0xfffff282 -_08070B30: .4byte 0x0000fffe -_08070B34: - ldr r0, _08070B3C @ =0x0000ffff - cmp r4, r0 - beq _08070B7C - b _08070BF4 - .align 2, 0 -_08070B3C: .4byte 0x0000ffff -_08070B40: - ldr r0, [r7] - movs r1, 0 - movs r2, 0 - bl GetEvolutionTargetSpecies - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _08070B74 - ldr r1, _08070B6C @ =gCB2_AfterEvolution - ldr r0, _08070B70 @ =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 _08070C2C - .align 2, 0 -_08070B6C: .4byte gCB2_AfterEvolution -_08070B70: .4byte sub_80A53F8 -_08070B74: - adds r0, r6, 0 - bl sub_8070D90 - b _08070C2C -_08070B7C: - ldr r0, [r7] - ldr r1, _08070BBC @ =gStringVar1 - bl GetMonNickname - ldr r0, _08070BC0 @ =gStringVar2 - ldr r5, _08070BC4 @ =gMoveToLearn - ldrh r2, [r5] - movs r1, 0xD - muls r1, r2 - ldr r2, _08070BC8 @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r4, _08070BCC @ =gStringVar4 - ldr r1, _08070BD0 @ =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, _08070BD4 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08070BD8 @ =sub_806F358 - b _08070C2A - .align 2, 0 -_08070BBC: .4byte gStringVar1 -_08070BC0: .4byte gStringVar2 -_08070BC4: .4byte gMoveToLearn -_08070BC8: .4byte gMoveNames -_08070BCC: .4byte gStringVar4 -_08070BD0: .4byte gOtherText_WantsToLearn -_08070BD4: .4byte gTasks -_08070BD8: .4byte sub_806F358 -_08070BDC: - ldr r0, _08070BEC @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _08070BF0 @ =sub_8070C54 - str r0, [r1] - b _08070C2C - .align 2, 0 -_08070BEC: .4byte gTasks -_08070BF0: .4byte sub_8070C54 -_08070BF4: - ldr r0, _08070C34 @ =0x0201c000 - ldr r0, [r0] - ldr r1, _08070C38 @ =gStringVar1 - bl GetMonNickname - ldr r0, _08070C3C @ =gStringVar2 - movs r1, 0xD - muls r1, r4 - ldr r2, _08070C40 @ =gMoveNames - adds r1, r2 - bl StringCopy - ldr r4, _08070C44 @ =gStringVar4 - ldr r1, _08070C48 @ =gOtherText_LearnedMove - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0x1 - bl sub_806E834 - ldr r1, _08070C4C @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08070C50 @ =Task_TeamMonTMMove3 -_08070C2A: - str r1, [r0] -_08070C2C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08070C34: .4byte 0x0201c000 -_08070C38: .4byte gStringVar1 -_08070C3C: .4byte gStringVar2 -_08070C40: .4byte gMoveNames -_08070C44: .4byte gStringVar4 -_08070C48: .4byte gOtherText_LearnedMove -_08070C4C: .4byte gTasks -_08070C50: .4byte Task_TeamMonTMMove3 - thumb_func_end Task_RareCandy3 - thumb_func_start sub_8070C54 sub_8070C54: @ 8070C54 push {r4-r7,lr} diff --git a/include/party_menu.h b/include/party_menu.h index b485d982f..b1c6ccd02 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -123,7 +123,7 @@ void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem * void sub_806E7D0(u8, const struct PartyPopupMenu *); TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); void Task_RareCandy3(u8); -void sub_8070C54(); +void sub_8070C54(u8); void DoEvolutionStoneItemEffect(u8, u16, TaskFunc); u8 GetItemEffectType(); u8 sub_806E834(const u8 *message, u8 arg1); diff --git a/include/pokemon.h b/include/pokemon.h index 9c6f16442..29fd763db 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -520,7 +520,7 @@ void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot); void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot); void GiveMonInitialMoveset(struct Pokemon *mon); void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon); -u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 a2); +u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove); void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move); void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); @@ -566,6 +566,8 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex); u8 GetNature(struct Pokemon *mon); u8 GetNatureFromPersonality(u32 personality); +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem); + u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex); void MonRestorePP(struct Pokemon *); diff --git a/src/party_menu.c b/src/party_menu.c index c57753085..c8a59c390 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5,8 +5,10 @@ #include "battle_party_menu.h" #include "data2.h" #include "event_data.h" +#include "evolution_scene.h" #include "item.h" #include "item_use.h" +#include "item_menu.h" #include "mail_data.h" #include "main.h" #include "menu.h" @@ -69,6 +71,7 @@ extern u8 gUnknown_0202E8FA; extern u8 gLastFieldPokeMenuOpened; extern u8 gPlayerPartyCount; extern s32 gBattleMoveDamage; +extern u16 gMoveToLearn; //extern const u16 gUnknown_083769A8[][6]; //extern const u8 gUnknown_083769A8[][12]; @@ -81,6 +84,7 @@ extern const u8 *const gUnknown_08376D04[NUM_STATS]; extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; static void sub_806E884(u8 taskId); +void sub_8070D90(u8 taskId); void PartyMenuTryDrawHPBar(u8, struct Pokemon *); /* @@ -1549,3 +1553,63 @@ void RedrawPokemonInfoInMenu(u8 a, struct Pokemon *pokemon) task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + a * 2], 7); ewram1B000.unk261 = 2; } + +void Task_RareCandy3(u8 taskId) +{ + if (WaitFanfare(0)) + { + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + u16 learnedMove; + u16 evolutionSpecies; + + MenuZeroFillWindowRect(WINDOW_LEFT + 8, 0, WINDOW_RIGHT + 3, 7); + + learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, 1); + ewram1B000.unk282 = 1; + + 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. + gTasks[taskId].func = sub_8070C54; + 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; + } + } + } +} diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index bc5150a16..dd6b576a3 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -57,7 +57,6 @@ void sub_80E62A0(u8 arg0, struct MailStruct* arg1, void* arg2, u8 arg3); void sub_808A520(void); void sub_80A61D0(void); void CB2_InitFlyRegionMap(void); -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem); bool8 SetUpFieldMove_Cut(void); bool8 SetUpFieldMove_Flash(void); bool8 SetUpFieldMove_RockSmash(void); |