diff options
-rw-r--r-- | include/pokemon.h | 17 | ||||
-rw-r--r-- | include/pokemon_summary_screen.h | 2 | ||||
-rw-r--r-- | src/battle/battle_2.c | 6 | ||||
-rw-r--r-- | src/battle/battle_4.c | 9 | ||||
-rw-r--r-- | src/battle/battle_party_menu.c | 10 | ||||
-rw-r--r-- | src/choose_party.c | 11 | ||||
-rw-r--r-- | src/field_control_avatar.c | 9 | ||||
-rw-r--r-- | src/field_poison.c | 59 | ||||
-rw-r--r-- | src/party_menu.c | 136 | ||||
-rw-r--r-- | src/pokemon_3.c | 50 | ||||
-rw-r--r-- | src/pokemon_summary_screen.c | 30 |
11 files changed, 181 insertions, 158 deletions
diff --git a/include/pokemon.h b/include/pokemon.h index 8864aee8a..9e3dd2e34 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -118,6 +118,23 @@ #define TYPE_DRAGON 0x10 #define TYPE_DARK 0x11 +#define FRIENDSHIP_EVENT_GROW_LEVEL 0x0 +#define FRIENDSHIP_EVENT_VITAMIN 0x1 // unused +#define FRIENDSHIP_EVENT_BATTLE_ITEM 0x2 // unused +#define FRIENDSHIP_EVENT_LEAGUE_BATTLE 0x3 +#define FRIENDSHIP_EVENT_LEARN_TMHM 0x4 +#define FRIENDSHIP_EVENT_WALKING 0x5 +#define FRIENDSHIP_EVENT_FAINT_SMALL 0x6 +#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 0x7 +#define FRIENDSHIP_EVENT_FAINT_LARGE 0x8 + +#define STATUS_PRIMARY_NONE 0x0 +#define STATUS_PRIMARY_POISON 0x1 +#define STATUS_PRIMARY_PARALYSIS 0x2 +#define STATUS_PRIMARY_SLEEP 0x3 +#define STATUS_PRIMARY_FREEZE 0x4 +#define STATUS_PRIMARY_BURN 0x5 + #define PARTY_SIZE 6 #define MAX_TOTAL_EVS 510 #define NUM_STATS 6 diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 945e810a3..f1dbe0089 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -61,7 +61,7 @@ struct PokemonSummaryScreenStruct void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u8); void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16); u8 sub_809FA30(void); -u8 pokemon_ailments_get_primary(u32); +u8 GetPrimaryStatus(u32); u8 GetMonStatusAndPokerus(); u8 *sub_80A1E9C(u8 *dest, const u8 *src, u8); u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level); diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 096bd878f..21f53b5d7 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -291,8 +291,8 @@ void InitBattle(void) SetWildMonHeldItem(); } gMain.inBattle = TRUE; - for (i = 0; i < 6; i++) - AdjustFriendship(&gPlayerParty[i], 3); + for (i = 0; i < PARTY_SIZE; i++) + AdjustFriendship(&gPlayerParty[i], FRIENDSHIP_EVENT_LEAGUE_BATTLE); gBattleCommunication[0] = 0; } @@ -304,7 +304,7 @@ void sub_800E9EC(void) u32 status; s32 i; - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 8f5ea7cae..950ccb6ae 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -203,7 +203,6 @@ void PlayBGM(u16 songID); void MonGainEVs(struct Pokemon*, u16 defeatedSpecies); extern u8 gBattleBufferB[4][0x200]; void HandleLowHpMusicChange(struct Pokemon*, u8 bank); -void AdjustFriendship(struct Pokemon*, u8 value); bool8 IsTradedMon(struct Pokemon*); void BattleScriptPop(void); void SwitchInClearSetData(void); @@ -5133,10 +5132,10 @@ static void atk19_tryfaintmon(void) gBattleResults.playerFaintCounter++; if (gBattleMons[bank].level > gBattleMons[gActiveBattler].level) { - if (gBattleMons[bank].level - gBattleMons[gActiveBattler].level > 0x1D) - AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 8); + if (gBattleMons[bank].level - gBattleMons[gActiveBattler].level > 29) + AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], FRIENDSHIP_EVENT_FAINT_LARGE); else - AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 6); + AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], FRIENDSHIP_EVENT_FAINT_SMALL); } } else @@ -5569,7 +5568,7 @@ static void atk23_getexp(void) gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterID]; gBattlescriptCurrInstr = BattleScript_LevelUp; gBattleMoveDamage = (gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8)); - AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterID], 0); + AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterID], FRIENDSHIP_EVENT_GROW_LEVEL); // update battle mon structure after level up if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterID && gBattleMons[0].hp) diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index be376a9f1..923cf05a4 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -232,16 +232,16 @@ void sub_8094B6C(u8 a, u8 b, u8 c) } } -u8 sub_8094C20(u8 a) +u8 sub_8094C20(u8 monIndex) { u8 retVal; - u8 val = a & 1; + u8 val = monIndex & 1; - a /= 2; + monIndex /= 2; if (val) - retVal = gUnknown_02038470[a] & 0xF; + retVal = gUnknown_02038470[monIndex] & 0xF; else - retVal = gUnknown_02038470[a] >> 4; + retVal = gUnknown_02038470[monIndex] >> 4; return retVal; } diff --git a/src/choose_party.c b/src/choose_party.c index b4920dedd..186b42de3 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -671,15 +671,16 @@ static void sub_8122B10(u8 taskId) { if (gMultiPartnerParty[i].species != 0) { - u8 r2; + u8 primaryStatus; PartyMenuDoPrintHP(i + 3, 3, gMultiPartnerParty[i].hp, gMultiPartnerParty[i].maxhp); if (gMultiPartnerParty[i].hp == 0) - r2 = 7; + primaryStatus = 7; else - r2 = pokemon_ailments_get_primary(gMultiPartnerParty[i].status); - if (r2 != 0) - PartyMenuPutStatusTilemap(i + 3, 3, r2 - 1); + primaryStatus = GetPrimaryStatus(gMultiPartnerParty[i].status); + + if (primaryStatus != STATUS_PRIMARY_NONE) + PartyMenuPutStatusTilemap(i + 3, 3, primaryStatus - 1); else PartyMenuDoPrintLevel(i + 3, 3, gMultiPartnerParty[i].level); PartyMenuDoPrintGenderIcon(gMultiPartnerParty[i].species, gMultiPartnerParty[i].gender, 3, i + 3, gMultiPartnerParty[i].nickname); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 3ae422512..918ab0e21 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -587,12 +587,11 @@ static void happiness_algorithm_step(void) (*ptr) %= 128; if (*ptr == 0) { - struct Pokemon *pkmn = gPlayerParty; - - for (i = 0; i < 6; i++) + struct Pokemon *mon = gPlayerParty; + for (i = 0; i < PARTY_SIZE; i++) { - AdjustFriendship(pkmn, 5); - pkmn++; + AdjustFriendship(mon, FRIENDSHIP_EVENT_WALKING); + mon++; } } } diff --git a/src/field_poison.c b/src/field_poison.c index 8365351f9..dd7500d22 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -8,53 +8,54 @@ #include "string_util.h" #include "task.h" #include "text.h" +#include "constants/species.h" extern u16 gSpecialVar_Result; extern u8 fieldPoisonText_PokemonFainted[]; -bool32 CheckMonIsValid(struct Pokemon *pkmn) +static bool32 IsMonValidSpecies(struct Pokemon *mon) { // UB: Too few arguments for function 'GetMonData' - u16 species2 = GetMonData(pkmn, MON_DATA_SPECIES2); - - if (species2 == 0 || species2 == 0x19C) + u16 species = GetMonData(mon, MON_DATA_SPECIES2); + if (species == SPECIES_NONE || species == SPECIES_EGG) return FALSE; else return TRUE; } -bool32 AllMonsFainted(void) +static bool32 AllMonsFainted(void) { - struct Pokemon *pkmn = &gPlayerParty[0]; int i; + struct Pokemon *mon = gPlayerParty; - for (i = 0; i < 6; i++, pkmn++) + for (i = 0; i < PARTY_SIZE; i++, mon++) { // UB: Too few arguments for function 'GetMonData' - if (CheckMonIsValid(pkmn) && GetMonData(pkmn, MON_DATA_HP) != 0) + if (IsMonValidSpecies(mon) && GetMonData(mon, MON_DATA_HP) != 0) return FALSE; } + return TRUE; } -void MonFaintFromPoisonOnField(u8 partyMember) +static void FaintFromFieldPoison(u8 monIndex) { - struct Pokemon *pkmn = &gPlayerParty[partyMember]; - u32 val = 0; + struct Pokemon *mon = &gPlayerParty[monIndex]; + u32 status = 0; - AdjustFriendship(pkmn, 7); - SetMonData(pkmn, MON_DATA_STATUS, &val); - GetMonData(pkmn, MON_DATA_NICKNAME, gStringVar1); + AdjustFriendship(mon, FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE); + SetMonData(mon, MON_DATA_STATUS, &status); + GetMonData(mon, MON_DATA_NICKNAME, gStringVar1); StringGetEnd10(gStringVar1); } -bool32 CheckMonFaintedFromPoison(u8 partyMember) +static bool32 MonFaintedFromPoison(u8 monIndex) { - struct Pokemon *pkmn = &gPlayerParty[partyMember]; + struct Pokemon *mon = &gPlayerParty[monIndex]; // UB: Too few arguments for function 'GetMonData' - if (CheckMonIsValid(pkmn) && GetMonData(pkmn, MON_DATA_HP) == 0 - && pokemon_ailments_get_primary(GetMonData(pkmn, MON_DATA_STATUS)) == 1) + if (IsMonValidSpecies(mon) && GetMonData(mon, MON_DATA_HP) == 0 + && GetPrimaryStatus(GetMonData(mon, MON_DATA_STATUS)) == STATUS_PRIMARY_POISON) return TRUE; else return FALSE; @@ -63,7 +64,7 @@ bool32 CheckMonFaintedFromPoison(u8 partyMember) #define tState data[0] #define tPartyMember data[1] -void Task_WhiteOut(u8 taskId) +static void Task_WhiteOut(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -71,12 +72,12 @@ void Task_WhiteOut(u8 taskId) { case 0: // Check if any Pokemon have fainted due to poison - while (tPartyMember < 6) + while (tPartyMember < PARTY_SIZE) { - if (CheckMonFaintedFromPoison(tPartyMember)) + if (MonFaintedFromPoison(tPartyMember)) { // Show message about fainted mon - MonFaintFromPoisonOnField(tPartyMember); + FaintFromFieldPoison(tPartyMember); ShowFieldMessage(fieldPoisonText_PokemonFainted); tState++; return; @@ -111,30 +112,30 @@ void ExecuteWhiteOut(void) s32 DoPoisonFieldEffect(void) { - struct Pokemon *pkmn = &gPlayerParty[0]; + struct Pokemon *mon = &gPlayerParty[0]; u32 numPoisoned = 0; u32 numFainting = 0; int i; // count the number of mons that are poisoned and fainting from poison, // and decrement HP of all poisoned mons - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { u32 hp; - if (GetMonData(pkmn, MON_DATA_SANITY_BIT2) != 0 - && pokemon_ailments_get_primary(GetMonData(pkmn, MON_DATA_STATUS)) == 1) + if (GetMonData(mon, MON_DATA_SANITY_BIT2) != 0 + && GetPrimaryStatus(GetMonData(mon, MON_DATA_STATUS)) == STATUS_PRIMARY_POISON) { // decrement HP of poisoned mon - hp = GetMonData(pkmn, MON_DATA_HP); + hp = GetMonData(mon, MON_DATA_HP); if (hp != 0) hp--; if (hp == 0) numFainting++; - SetMonData(pkmn, MON_DATA_HP, &hp); + SetMonData(mon, MON_DATA_HP, &hp); numPoisoned++; } - pkmn++; + mon++; } if (numFainting != 0 || numPoisoned != 0) FldeffPoison_Start(); diff --git a/src/party_menu.c b/src/party_menu.c index 9caaa05b9..c21c29b01 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -450,8 +450,8 @@ struct Unk201C000 { /*0x00*/ struct Pokemon *pokemon; /*0x04*/ u8 unk4; - /*0x05*/ u8 unk5; - /*0x06*/ u16 unk6; + /*0x05*/ u8 primarySelectedMonIndex; + /*0x06*/ u16 secondarySelectedIndex; /*0x08*/ u16 unk8; /*0x0A*/ u8 pad_0A[2]; /*0x0C*/ s32 unkC; @@ -3601,9 +3601,9 @@ void sub_806E8D0(u8 taskId, u16 b, TaskFunc c) { ewram1C000.unk10 = c; ewram1C000.unk4 = taskId; - ewram1C000.unk5 = sub_806CA38(taskId); - ewram1C000.unk6 = b; - ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; + ewram1C000.primarySelectedMonIndex = sub_806CA38(taskId); + ewram1C000.secondarySelectedIndex = b; + ewram1C000.pokemon = &gPlayerParty[ewram1C000.primarySelectedMonIndex]; } bool8 PartyMenuUpdateMonHeldItem(struct Pokemon *pkmn, u16 item) @@ -3664,7 +3664,7 @@ void PartyMenuTryGiveMonHeldItem(u8 taskId, u16 newItem, TaskFunc c) } else { - DisplayGiveHeldItemMessage(ewram1C000.unk5, newItem, 1); + DisplayGiveHeldItemMessage(ewram1C000.primarySelectedMonIndex, newItem, 1); CreateTask(party_menu_link_mon_held_item_object, 5); } } @@ -3674,7 +3674,7 @@ void party_menu_link_mon_held_item_object(u8 taskId) { if (gUnknown_0202E8F6 == 0) { - SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); + SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.primarySelectedMonIndex); gTasks[ewram1C000.unk4].func = ewram1C000.unk10; DestroyTask(taskId); } @@ -3690,17 +3690,17 @@ void PartyMenuTryGiveMonHeldItem_806EACC(u8 taskId) Menu_EraseWindowRect(23, 8, 29, 13); currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); - RemoveBagItem(ewram1C000.unk6, 1); + RemoveBagItem(ewram1C000.secondarySelectedIndex, 1); if (AddBagItem(currentItem, 1) == TRUE) { - PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, ewram1C000.unk6); - if (ItemIsMail(ewram1C000.unk6)) + PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, ewram1C000.secondarySelectedIndex); + if (ItemIsMail(ewram1C000.secondarySelectedIndex)) { - DisplayTakeHeldItemMessage(ewram1C000.unk5, currentItem, 1); + DisplayTakeHeldItemMessage(ewram1C000.primarySelectedMonIndex, currentItem, 1); } else { - CopyItemName(ewram1C000.unk6, gStringVar1); + CopyItemName(ewram1C000.secondarySelectedIndex, gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_TakenAndReplaced); sub_806E834(gStringVar4, 1); } @@ -3708,7 +3708,7 @@ void PartyMenuTryGiveMonHeldItem_806EACC(u8 taskId) else { sub_806E834(gOtherText_BagFullCannotRemoveItem, 0); - AddBagItem(ewram1C000.unk6, 1); + AddBagItem(ewram1C000.secondarySelectedIndex, 1); } } else @@ -3789,7 +3789,7 @@ void PartyMenuTryGiveMonHeldItem_806ECE8(u8 taskId, TaskFunc func) { if (ItemIsMail(currentItem) == TRUE) TakeMailFromMon(ewram1C000.pokemon); - DisplayTakeHeldItemMessage(ewram1C000.unk5, currentItem, 0); + DisplayTakeHeldItemMessage(ewram1C000.primarySelectedMonIndex, currentItem, 0); SetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM, itemData); } else @@ -3812,7 +3812,7 @@ void DoTakeMail(u8 taskId, TaskFunc func) { gTasks[taskId].func = TaskDummy; sub_806E8D0(taskId, 0, func); - ewram1C000.unk6 = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); + ewram1C000.secondarySelectedIndex = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); sub_806E834(gOtherText_SendRemovedMailPrompt, 1); CreateTask(Task_ConfirmTakeHeldMail, 5); } @@ -3823,7 +3823,7 @@ void Task_LoseMailMessage(u8 taskId) if (selection == 0) { - if (AddBagItem(ewram1C000.unk6, 1) == TRUE) + if (AddBagItem(ewram1C000.secondarySelectedIndex, 1) == TRUE) { TakeMailFromMon(ewram1C000.pokemon); sub_806E834(gOtherText_MailTaken, 0); @@ -3923,7 +3923,7 @@ extern u8 gUnknown_020297ED; void Task_TeamMonTMMove(u8 taskId) { GetMonNickname(ewram1C000.pokemon, gStringVar1); - ewram1C000.unk8 = ItemIdToBattleMoveId(ewram1C000.unk6); + ewram1C000.unk8 = ItemIdToBattleMoveId(ewram1C000.secondarySelectedIndex); StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); ewram1B000.unk282 = 0; if (pokemon_has_move(ewram1C000.pokemon, ewram1C000.unk8)) @@ -3938,7 +3938,7 @@ void Task_TeamMonTMMove(u8 taskId) #if DEBUG !gUnknown_020297ED && #endif - !CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.unk6 - 33)) + !CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.secondarySelectedIndex - 33)) { StringExpandPlaceholders(gStringVar4, gOtherText_NotCompatible); sub_806E834(gStringVar4, 1); @@ -3965,9 +3965,9 @@ void Task_TeamMonTMMove2(u8 taskId) StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); sub_806E834(gStringVar4, 1); - AdjustFriendship(ewram1C000.pokemon, 4); - if (ewram1B000.unk282 == 0 && ewram1C000.unk6 <= 0x152) - RemoveBagItem(ewram1C000.unk6, 1); + AdjustFriendship(ewram1C000.pokemon, FRIENDSHIP_EVENT_LEARN_TMHM); + if (ewram1B000.unk282 == 0 && ewram1C000.secondarySelectedIndex < ITEM_HM01_CUT) + RemoveBagItem(ewram1C000.secondarySelectedIndex, 1); gTasks[taskId].func = Task_TeamMonTMMove3; } @@ -3986,7 +3986,7 @@ void Task_TeamMonTMMove4(u8 taskId) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { - SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); + SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.primarySelectedMonIndex); if (ewram1B000.unk282 == 1) { TeachMonMoveInPartyMenu(taskId); @@ -4004,7 +4004,7 @@ void sub_806F2FC(u8 taskId) { if (gUnknown_0202E8F6 == 0) { - SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); + SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.primarySelectedMonIndex); if (ewram1B000.unk282 == 1) { TeachMonMoveInPartyMenu(taskId); @@ -4050,7 +4050,7 @@ void sub_806F3FC(u8 taskId) { if (!gPaletteFade.active) { - ShowSelectMovePokemonSummaryScreen(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, ewram1C000.primarySelectedMonIndex, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8); DestroyTask(taskId); } } @@ -4184,7 +4184,7 @@ s16 sub_806F7E8(u8 taskId, struct BattleInterfaceStruct1 *b, s8 c) b->unkC_0 = 5; if (hpBarLevel < 2) b->unkC_0 = 6; - vramPtr = gUnknown_08376858[IsDoubleBattle()][ewram1C000.unk5]; + vramPtr = gUnknown_08376858[IsDoubleBattle()][ewram1C000.primarySelectedMonIndex]; return sub_80460C8(b, &ewram1C000.unkC, vramPtr, 0); } @@ -4208,19 +4208,19 @@ void sub_806F8AC(u8 taskId) StringExpandPlaceholders(gStringVar4, gOtherText_HPRestoredBy); else StringExpandPlaceholders(gStringVar4, gOtherText_RegainedHealth); - SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram1C000.unk5), ewram1C000.pokemon); - task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 7); + SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram1C000.primarySelectedMonIndex), ewram1C000.pokemon); + task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.primarySelectedMonIndex * 2], 7); ewram1B000.unk261 = 2; sub_806E834(gStringVar4, 1); sp14 += sp0.unk4; SetMonData(ewram1C000.pokemon, MON_DATA_HP, &sp14); - RemoveBagItem(ewram1C000.unk6, 1); + RemoveBagItem(ewram1C000.secondarySelectedIndex, 1); sub_8032638(); gTasks[taskId].func = sub_806FB44; } else { - PartyMenuDoPrintHP(ewram1C000.unk5, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0); + PartyMenuDoPrintHP(ewram1C000.primarySelectedMonIndex, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0); } } @@ -4236,8 +4236,8 @@ void sub_806FA18(u8 taskId) gTasks[taskId].data[11] -= gTasks[taskId].data[12]; SetMonData(ewram1C000.pokemon, MON_DATA_HP, &gTasks[taskId].data[11]); SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon); - ewram1C000.unk5 = gSprites[ewram01000.unk2].data[0]; - ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; + ewram1C000.primarySelectedMonIndex = gSprites[ewram01000.unk2].data[0]; + ewram1C000.pokemon = &gPlayerParty[ewram1C000.primarySelectedMonIndex]; gTasks[taskId].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); gTasks[taskId].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); ewram1C000.unkC = -32768; @@ -4247,7 +4247,7 @@ void sub_806FA18(u8 taskId) } else { - PartyMenuDoPrintHP(ewram1C000.unk5, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0); + PartyMenuDoPrintHP(ewram1C000.primarySelectedMonIndex, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0); } } @@ -4364,12 +4364,12 @@ bool8 IsMedicineIneffective(struct Pokemon *pkmn, u16 item) return FALSE; } -bool8 ExecuteTableBasedItemEffect__(u8 a, u16 b, u8 c) +bool8 ExecuteTableBasedItemEffect__(u8 monIndex, u16 item, u8 moveIndex) { if (gMain.inBattle) - return ExecuteTableBasedItemEffect_(&gPlayerParty[a], b, sub_8094C20(a), c); + return ExecuteTableBasedItemEffect_(&gPlayerParty[monIndex], item, sub_8094C20(monIndex), moveIndex); else - return ExecuteTableBasedItemEffect_(&gPlayerParty[a], b, a, c); + return ExecuteTableBasedItemEffect_(&gPlayerParty[monIndex], item, monIndex, moveIndex); } void UseMedicine(u8 taskId, u16 item, TaskFunc func) @@ -4395,7 +4395,7 @@ void UseMedicine(u8 taskId, u16 item, TaskFunc func) gTasks[r7].data[11] = 0; } } - r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, item, 0); + r0 = ExecuteTableBasedItemEffect__(ewram1C000.primarySelectedMonIndex, item, 0); } else { @@ -4420,7 +4420,7 @@ void UseMedicine(u8 taskId, u16 item, TaskFunc func) PlaySE(SE_BIDORO); statusAndPkrs = GetMonStatusAndPokerus(ewram1C000.pokemon); if (statusAndPkrs == 6 || statusAndPkrs == 0) - PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5); + PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.primarySelectedMonIndex); if (r9 == TRUE) { gTasks[r7].data[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - gTasks[r7].data[11]; @@ -4439,7 +4439,7 @@ void UseMedicine(u8 taskId, u16 item, TaskFunc func) if (!IsBlueYellowRedFlute(item)) RemoveBagItem(item, 1); GetMedicineItemEffectMessage(item); - TryPrintPartyMenuMonNickname(ewram1C000.unk5, ewram1C000.pokemon); + TryPrintPartyMenuMonNickname(ewram1C000.primarySelectedMonIndex, ewram1C000.pokemon); sub_806E834(gStringVar4, 1); gTasks[r7].func = sub_806FB0C; } @@ -4460,8 +4460,8 @@ void sub_8070048(u8 taskId, u16 item, TaskFunc func) { ewram1C000.unk10 = func; ewram1C000.unk4 = taskId; - ewram1C000.unk6 = item; - ewram1C000.unk5 = 0; + ewram1C000.secondarySelectedIndex = item; + ewram1C000.primarySelectedMonIndex = 0; ewram1C000.unk14 = sub_80701DC; ewram1B000.unk27E = 0; ewram1B000.unk280 = 0; @@ -4473,7 +4473,7 @@ void sub_8070088(u8 taskId) u8 taskId2; gTasks[taskId].func = TaskDummy; - if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) == 0) + if (GetMonData(&gPlayerParty[ewram1C000.primarySelectedMonIndex], MON_DATA_SPECIES) == 0) { gTasks[taskId].func = sub_80701DC; } @@ -4483,10 +4483,10 @@ void sub_8070088(u8 taskId) taskId2 = CreateTask(TaskDummy, 5); taskData = gTasks[taskId2].data; - ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; + ewram1C000.pokemon = &gPlayerParty[ewram1C000.primarySelectedMonIndex]; taskData[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); taskData[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); - if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, 0)) + if (ExecuteTableBasedItemEffect__(ewram1C000.primarySelectedMonIndex, ewram1C000.secondarySelectedIndex, 0)) { DestroyTask(taskId2); gTasks[taskId].func = sub_80701DC; @@ -4496,8 +4496,8 @@ void sub_8070088(u8 taskId) gUnknown_0202E8F4 = 1; Menu_EraseWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); PlaySE(SE_KAIFUKU); - PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5); - task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 9); + PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.primarySelectedMonIndex); + task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.primarySelectedMonIndex * 2], 9); ewram1B000.unk261 = 2; taskData[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - taskData[11]; taskData[14] = 1; @@ -4514,16 +4514,16 @@ void sub_80701DC(u8 taskId) { if (ewram1B000.unk27E == 1) { - AddBagItem(ewram1C000.unk6, 1); - if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) != 0) + AddBagItem(ewram1C000.secondarySelectedIndex, 1); + if (GetMonData(&gPlayerParty[ewram1C000.primarySelectedMonIndex], MON_DATA_SPECIES) != 0) { - task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 3); + task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.primarySelectedMonIndex * 2], 3); ewram1B000.unk261 = 2; } ewram1B000.unk27E = 0; } - ewram1C000.unk5++; - if (ewram1C000.unk5 == 6) + ewram1C000.primarySelectedMonIndex++; + if (ewram1C000.primarySelectedMonIndex == 6) { gUnknown_0202E8F4 = 0; if (ewram1B000.unk280 == 0) @@ -4534,7 +4534,7 @@ void sub_80701DC(u8 taskId) } else { - RemoveBagItem(ewram1C000.unk6, 1); + RemoveBagItem(ewram1C000.secondarySelectedIndex, 1); gTasks[taskId].func = ewram1C000.unk10; } gLastFieldPokeMenuOpened = 0; @@ -4607,7 +4607,7 @@ void DoPPRecoveryItemEffect(u8 taskId, u16 item, TaskFunc c) { PlaySE(SE_SELECT); PrintPartyMenuPromptText(10, 3); - CreateItemUseMoveMenu(ewram1C000.unk5); + CreateItemUseMoveMenu(ewram1C000.primarySelectedMonIndex); gTasks[taskId2].func = Task_HandleItemUseMoveMenuInput; gMain.newKeys = 0; } @@ -4638,7 +4638,7 @@ void DoRecoverPP(u8 taskId) { u16 r5 = 0; - if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, gTasks[taskId].data[11])) + if (ExecuteTableBasedItemEffect__(ewram1C000.primarySelectedMonIndex, ewram1C000.secondarySelectedIndex, gTasks[taskId].data[11])) { gUnknown_0202E8F4 = r5; PlaySE(SE_SELECT); @@ -4648,10 +4648,10 @@ void DoRecoverPP(u8 taskId) { gUnknown_0202E8F4 = 1; PlaySE(SE_KAIFUKU); - RemoveBagItem(ewram1C000.unk6, 1); + RemoveBagItem(ewram1C000.secondarySelectedIndex, 1); r5 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + gTasks[taskId].data[11]); StringCopy(gStringVar1, gMoveNames[r5]); - GetMedicineItemEffectMessage(ewram1C000.unk6); + GetMedicineItemEffectMessage(ewram1C000.secondarySelectedIndex); sub_806E834(gStringVar4, 1); } gTasks[taskId].func = sub_806FB0C; @@ -4663,7 +4663,7 @@ void DoPPUpItemEffect(u8 taskId, u16 b, TaskFunc c) sub_806E8D0(taskId, b, c); PlaySE(SE_SELECT); PrintPartyMenuPromptText(11, 3); - CreateItemUseMoveMenu(ewram1C000.unk5); + CreateItemUseMoveMenu(ewram1C000.primarySelectedMonIndex); CreateTask(Task_HandleItemUseMoveMenuInput, 5); gMain.newKeys = 0; } @@ -4698,24 +4698,24 @@ const u8 gUnknown_Debug_839B6D8[] = _( #endif -void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) +void DoRareCandyItemEffect(u8 taskId, u16 item, TaskFunc c) { u8 i; - bool8 r0; + bool8 noEffect; gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, b, c); + sub_806E8D0(taskId, item, c); if (GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL) != 100) { - for (i = 0; i < 6; i++) + for (i = 0; i < NUM_STATS; i++) ewram1B000.statGrowths[i] = GetMonData(ewram1C000.pokemon, StatDataTypes[i]); - r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, b, 0); + noEffect = ExecuteTableBasedItemEffect__(ewram1C000.primarySelectedMonIndex, item, 0); } else - r0 = TRUE; + noEffect = TRUE; - if (r0) + if (noEffect) { gUnknown_0202E8F4 = 0; PlaySE(SE_SELECT); @@ -4728,8 +4728,8 @@ void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) gUnknown_0202E8F4 = 1; PlayFanfareByFanfareNum(0); - RedrawPokemonInfoInMenu(ewram1C000.unk5, ewram1C000.pokemon); - RemoveBagItem(b, 1); + RedrawPokemonInfoInMenu(ewram1C000.primarySelectedMonIndex, ewram1C000.pokemon); + RemoveBagItem(item, 1); GetMonNickname(ewram1C000.pokemon, gStringVar1); level = GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL); ConvertIntToDecimalStringN(gStringVar2, level, 0, 3); @@ -4878,7 +4878,7 @@ void Task_RareCandy3(u8 taskId) if (evolutionSpecies != 0) { gCB2_AfterEvolution = sub_80A53F8; - BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); + BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.primarySelectedMonIndex); DestroyTask(taskId); } else @@ -4930,7 +4930,7 @@ void TeachMonMoveInPartyMenu(u8 taskId) if (evolutionSpecies != 0) { gCB2_AfterEvolution = sub_80A53F8; - BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); + BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.primarySelectedMonIndex); DestroyTask(taskId); } else @@ -4981,7 +4981,7 @@ void DoEvolutionStoneItemEffect(u8 taskId, u16 evolutionStoneItem, TaskFunc c) gCB2_AfterEvolution = sub_80A53F8; - if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, evolutionStoneItem, 0)) + if (ExecuteTableBasedItemEffect__(ewram1C000.primarySelectedMonIndex, evolutionStoneItem, 0)) { gUnknown_0202E8F4 = 0; sub_806E834(gOtherText_WontHaveAnyEffect, 1); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 791dd5d2f..ac739728e 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -22,6 +22,7 @@ #include "sprite.h" #include "string_util.h" #include "text.h" +#include "trainer.h" #include "util.h" #include "ewram.h" @@ -643,18 +644,19 @@ u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex) return n; } -const s8 gUnknown_082082FE[][3] = -{ - // Happiness deltas - { 5, 3, 2}, - { 5, 3, 2}, - { 1, 1, 0}, - { 3, 2, 1}, - { 1, 1, 0}, - { 1, 1, 1}, - {-1, -1, -1}, - {-5, -5, -10}, - {-5, -5, -10} +// Friendship deltas. Each event has 3 separate values, depending on the mon's +// current friendship value. In general, a mon's friendship grows faster if +// its current friendship is lower. The 3 tiers are 0-99, 100-199, and 200-255. +static const s8 sFriendshipEventDeltas[][3] = { + { 5, 3, 2}, // FRIENDSHIP_EVENT_GROW_LEVEL + { 5, 3, 2}, // FRIENDSHIP_EVENT_VITAMIN + { 1, 1, 0}, // FRIENDSHIP_EVENT_BATTLE_ITEM + { 3, 2, 1}, // FRIENDSHIP_EVENT_LEAGUE_BATTLE + { 1, 1, 0}, // FRIENDSHIP_EVENT_LEARN_TMHM + { 1, 1, 1}, // FRIENDSHIP_EVENT_WALKING + {-1, -1, -1}, // FRIENDSHIP_EVENT_FAINT_SMALL + {-5, -5, -10}, // FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE + {-5, -5, -10}, // FRIENDSHIP_EVENT_FAINT_LARGE }; void AdjustFriendship(struct Pokemon *mon, u8 event) @@ -683,28 +685,32 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) friendshipLevel++; if (friendship > 199) friendshipLevel++; - if ((event != 5 || !(Random() & 1)) - && (event != 3 + + if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1)) + && (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && (gTrainers[gTrainerBattleOpponent].trainerClass == 24 - || gTrainers[gTrainerBattleOpponent].trainerClass == 25 - || gTrainers[gTrainerBattleOpponent].trainerClass == 32)))) + && (gTrainers[gTrainerBattleOpponent].trainerClass == TRAINER_CLASS_ELITE_FOUR + || gTrainers[gTrainerBattleOpponent].trainerClass == TRAINER_CLASS_LEADER + || gTrainers[gTrainerBattleOpponent].trainerClass == TRAINER_CLASS_CHAMPION)))) { - s8 mod = gUnknown_082082FE[event][friendshipLevel]; - if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) - mod = (150 * mod) / 100; - friendship += mod; - if (mod > 0) + s8 delta = sFriendshipEventDeltas[event][friendshipLevel]; + if (delta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + delta = (150 * delta) / 100; + + friendship += delta; + if (delta > 0) { if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL) friendship++; if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name()) friendship++; } + if (friendship < 0) friendship = 0; if (friendship > 255) friendship = 255; + SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); } } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 75ddb52d0..2bfb42681 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -4823,20 +4823,20 @@ void sub_80A1C30(u8 a) } } -u8 pokemon_ailments_get_primary(u32 status) +u8 GetPrimaryStatus(u32 status) { - if (status & 0x88) - return 1; - if (status & 0x40) - return 2; - if (status & 0x7) - return 3; - if (status & 0x20) - return 4; - if (status & 0x10) - return 5; - - return 0; + if (status & (STATUS_POISON | STATUS_TOXIC_POISON)) + return STATUS_PRIMARY_POISON; + if (status & STATUS_PARALYSIS) + return STATUS_PRIMARY_PARALYSIS; + if (status & STATUS_SLEEP) + return STATUS_PRIMARY_SLEEP; + if (status & STATUS_FREEZE) + return STATUS_PRIMARY_FREEZE; + if (status & STATUS_BURN) + return STATUS_PRIMARY_BURN; + + return STATUS_PRIMARY_NONE; } u8 GetMonStatusAndPokerus(struct Pokemon *mon) @@ -4846,8 +4846,8 @@ u8 GetMonStatusAndPokerus(struct Pokemon *mon) if (GetMonData(mon, MON_DATA_HP) == 0) return 7; - statusAilment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)); - if (statusAilment == 0) + statusAilment = GetPrimaryStatus(GetMonData(mon, MON_DATA_STATUS)); + if (statusAilment == STATUS_PRIMARY_NONE) { if (!CheckPartyPokerus(mon, 0)) return 0; |