From 48013b0879d0159c2c7df3de5da362ba306c0aeb Mon Sep 17 00:00:00 2001 From: cawtds Date: Thu, 30 May 2024 14:29:40 +0200 Subject: [PATCH] added mint functionality and nature mod color --- data/maps/ViridianCity_Mart/scripts.inc | 4 + include/item_use.h | 1 + include/party_menu.h | 1 + include/pokemon.h | 1 + src/data/items.h | 42 +++++------ src/item_use.c | 6 ++ src/party_menu.c | 98 +++++++++++++++++++++++++ src/pokemon_summary_screen.c | 78 ++++++++++++++------ 8 files changed, 188 insertions(+), 43 deletions(-) diff --git a/data/maps/ViridianCity_Mart/scripts.inc b/data/maps/ViridianCity_Mart/scripts.inc index e13aa1cee..28438446e 100644 --- a/data/maps/ViridianCity_Mart/scripts.inc +++ b/data/maps/ViridianCity_Mart/scripts.inc @@ -127,6 +127,10 @@ ViridianCity_Mart_Items:: .2byte ITEM_Z_POWER_RING .2byte ITEM_NORMALIUM_Z .2byte ITEM_ULTRANECROZIUM_Z + .2byte ITEM_MODEST_MINT + .2byte ITEM_BOLD_MINT + .2byte ITEM_ADAMANT_MINT + .2byte ITEM_SERIOUS_MINT .2byte ITEM_NONE release end diff --git a/include/item_use.h b/include/item_use.h index 0b9fca97d..3a8990195 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -20,6 +20,7 @@ void ItemUseOutOfBattle_FameChecker(u8 taskId); void ItemUseOutOfBattle_Itemfinder(u8 taskId); void ItemUseOutOfBattle_Mail(u8 taskId); void ItemUseOutOfBattle_Medicine(u8 taskId); +void ItemUseOutOfBattle_Mint(u8 taskId); void ItemUseOutOfBattle_PokeFlute(u8 taskId); void ItemUseOutOfBattle_PowderJar(u8 taskId); void ItemUseOutOfBattle_PPRecovery(u8 taskId); diff --git a/include/party_menu.h b/include/party_menu.h index 08dce7efd..cd199b855 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -55,6 +55,7 @@ void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task); void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task); void ItemUseCB_BattleScript(u8 taskId, TaskFunc task); void ItemUseCB_Medicine(u8 taskId, TaskFunc func); +void ItemUseCB_Mint(u8 taskId, TaskFunc task); void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task); void ItemUseCB_ResetEVs(u8 taskId, TaskFunc task); void ItemUseCB_PPRecovery(u8 taskId, TaskFunc func); diff --git a/include/pokemon.h b/include/pokemon.h index 175171715..e0fd07d21 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -660,6 +660,7 @@ extern const struct SpriteTemplate gSpriteTemplates_Battlers[]; extern const u8 gPPUpGetMask[]; extern const u32 sExpCandyExperienceTable[]; extern const struct Ability gAbilitiesInfo[]; +extern const s8 gNatureStatTable[][5]; void ZeroBoxMonData(struct BoxPokemon *boxMon); void ZeroMonData(struct Pokemon *mon); diff --git a/src/data/items.h b/src/data/items.h index 35714f8b7..caeff0a2e 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -1387,7 +1387,7 @@ const struct Item gItemsInfo[] = "reduces Defense."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_LONELY, .flingPower = 10, }, @@ -1402,7 +1402,7 @@ const struct Item gItemsInfo[] = "reduces Sp. Atk."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_ADAMANT, .flingPower = 10, }, @@ -1417,7 +1417,7 @@ const struct Item gItemsInfo[] = "reduces Sp. Def."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_NAUGHTY, .flingPower = 10, }, @@ -1432,7 +1432,7 @@ const struct Item gItemsInfo[] = "reduces Speed."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_BRAVE, .flingPower = 10, }, @@ -1447,7 +1447,7 @@ const struct Item gItemsInfo[] = "reduces Attack."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_BOLD, .flingPower = 10, }, @@ -1462,7 +1462,7 @@ const struct Item gItemsInfo[] = "reduces Sp. Atk."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_IMPISH, .flingPower = 10, }, @@ -1477,7 +1477,7 @@ const struct Item gItemsInfo[] = "reduces Sp. Def."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_LAX, .flingPower = 10, }, @@ -1492,7 +1492,7 @@ const struct Item gItemsInfo[] = "reduces Speed."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_RELAXED, .flingPower = 10, }, @@ -1507,7 +1507,7 @@ const struct Item gItemsInfo[] = "reduces Attack."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_MODEST, .flingPower = 10, }, @@ -1522,7 +1522,7 @@ const struct Item gItemsInfo[] = "reduces Defense."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_MILD, .flingPower = 10, }, @@ -1537,7 +1537,7 @@ const struct Item gItemsInfo[] = "reduces Sp. Def."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_RASH, .flingPower = 10, }, @@ -1552,7 +1552,7 @@ const struct Item gItemsInfo[] = "reduces Speed."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_QUIET, .flingPower = 10, }, @@ -1567,7 +1567,7 @@ const struct Item gItemsInfo[] = "reduces Attack."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_CALM, .flingPower = 10, }, @@ -1582,7 +1582,7 @@ const struct Item gItemsInfo[] = "reduces Defense."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_GENTLE, .flingPower = 10, }, @@ -1597,7 +1597,7 @@ const struct Item gItemsInfo[] = "reduces Sp. Atk."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_CAREFUL, .flingPower = 10, }, @@ -1612,7 +1612,7 @@ const struct Item gItemsInfo[] = "reduces Speed."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_SASSY, .flingPower = 10, }, @@ -1627,7 +1627,7 @@ const struct Item gItemsInfo[] = "reduces Attack."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_TIMID, .flingPower = 10, }, @@ -1642,7 +1642,7 @@ const struct Item gItemsInfo[] = "reduces Defense."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_HASTY, .flingPower = 10, }, @@ -1657,7 +1657,7 @@ const struct Item gItemsInfo[] = "reduces Sp. Atk."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_JOLLY, .flingPower = 10, }, @@ -1672,7 +1672,7 @@ const struct Item gItemsInfo[] = "reduces Sp. Def."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_NAIVE, .flingPower = 10, }, @@ -1687,7 +1687,7 @@ const struct Item gItemsInfo[] = "grow equally."), .pocket = POCKET_ITEMS, .type = ITEM_TYPE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_Mint, .secondaryId = NATURE_SERIOUS, .flingPower = 10, }, diff --git a/src/item_use.c b/src/item_use.c index 3a4bb5a3a..9b41db7ff 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -447,6 +447,12 @@ void ItemUseOutOfBattle_Medicine(u8 taskId) DoSetUpItemUseCallback(taskId); } +void ItemUseOutOfBattle_Mint(u8 taskId) +{ + gItemUseCB = ItemUseCB_Mint; + SetUpItemUseCallback(taskId); +} + void ItemUseOutOfBattle_PPRecovery(u8 taskId) { gItemUseCB = ItemUseCB_PPRecovery; diff --git a/src/party_menu.c b/src/party_menu.c index 0c4227b7d..b19bea22f 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4595,6 +4595,104 @@ void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task) #undef tMonId #undef tOldFunc +#define tState data[0] +#define tMonId data[1] +#define tOldNature data[2] +#define tNewNature data[3] +#define tOldFunc 4 + +void Task_Mint(u8 taskId) +{ + static const u8 askText[] = _("It might affect {STR_VAR_1}'s stats.\nAre you sure you want to use it?"); + static const u8 doneText[] = _("{STR_VAR_1}'s stats may have changed due\nto the effects of the {STR_VAR_2}!{PAUSE_UNTIL_PRESS}"); + s16 *data = gTasks[taskId].data; + + switch (tState) + { + case 0: + // Can't use. + if (tOldNature == tNewNature) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, 1); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + return; + } + gPartyMenuUseExitCallback = TRUE; + GetMonNickname(&gPlayerParty[tMonId], gStringVar1); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, askText); + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gStringVar4, 1); + ScheduleBgCopyTilemapToVram(2); + tState++; + break; + case 1: + if (!IsPartyMenuTextPrinterActive()) + { + PartyMenuDisplayYesNoMenu(); + tState++; + } + break; + case 2: + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + tState++; + break; + case 1: + case MENU_B_PRESSED: + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + ScheduleBgCopyTilemapToVram(2); + // Don't exit party selections screen, return to choosing a mon. + ClearStdWindowAndFrameToTransparent(6, 0); + ClearWindowTilemap(6); + DisplayPartyMenuStdMessage(5); + gTasks[taskId].func = (void *)GetWordTaskArg(taskId, tOldFunc); + return; + } + break; + case 3: + PlaySE(SE_USE_ITEM); + StringExpandPlaceholders(gStringVar4, doneText); + DisplayPartyMenuMessage(gStringVar4, 1); + ScheduleBgCopyTilemapToVram(2); + tState++; + break; + case 4: + if (!IsPartyMenuTextPrinterActive()) + tState++; + break; + case 5: + SetMonData(&gPlayerParty[tMonId], MON_DATA_HIDDEN_NATURE, &tNewNature); + CalculateMonStats(&gPlayerParty[tMonId]); + RemoveBagItem(gSpecialVar_ItemId, 1); + gTasks[taskId].func = Task_ClosePartyMenu; + break; + } +} + +void ItemUseCB_Mint(u8 taskId, TaskFunc task) +{ + s16 *data = gTasks[taskId].data; + + tState = 0; + tMonId = gPartyMenu.slotId; + tOldNature = GetMonData(&gPlayerParty[tMonId], MON_DATA_HIDDEN_NATURE); + tNewNature = ItemId_GetSecondaryId(gSpecialVar_ItemId); + SetWordTaskArg(taskId, tOldFunc, (uintptr_t)(gTasks[taskId].func)); + gTasks[taskId].func = Task_Mint; +} + +#undef tState +#undef tMonId +#undef tOldNature +#undef tNewNature +#undef tOldFunc + static bool32 CannotUsePartyBattleItem(u16 itemId, struct Pokemon* mon) { u8 i; diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e5b5b7f1a..a6222fed0 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -173,7 +173,7 @@ struct PokemonSummaryScreenData u8 ALIGNED(4) genderSymbolStrBuf[3]; u8 ALIGNED(4) levelStrBuf[7]; u8 ALIGNED(4) curHpStrBuf[9]; - u8 ALIGNED(4) statValueStrBufs[5][5]; + u8 ALIGNED(4) statValueStrBufs[5][20]; u8 ALIGNED(4) moveCurPpStrBufs[5][11]; u8 ALIGNED(4) moveMaxPpStrBufs[5][11]; @@ -2143,12 +2143,52 @@ static void BufferMonInfo(void) CopyItemName(heldItem, sMonSummaryScreen->summary.itemNameStrBuf); } + #define GetNumberRightAlign63(x) (63 - StringLength((x)) * 6) #define GetNumberRightAlign27(x) (27 - StringLength((x)) * 6) +static void ColorNatureString(u8 stat, u8 statValue, u8 nature, u8 *dst) +{ + u8 temp[20]; + const u8 blue[] = _("{COLOR 7}"); + const u8 red[] = _("{COLOR 1}"); + const u8 none[] = _(""); + const s8 *natureMods = gNatureStatTable[nature]; + s8 mod = natureMods[stat - 1]; + + if (mod > 0) + { + StringCopy(dst, red); + } + else if (mod < 0) + { + StringCopy(dst, blue); + } + else + { + StringCopy(dst, none); + } + ConvertIntToDecimalStringN(temp, statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + StringAppend(dst, temp); + + switch (stat) + { + case STAT_ATK: + sMonSkillsPrinterXpos->atkStr = GetNumberRightAlign27(temp); + case STAT_DEF: + sMonSkillsPrinterXpos->defStr = GetNumberRightAlign27(temp); + case STAT_SPATK: + sMonSkillsPrinterXpos->spAStr = GetNumberRightAlign27(temp); + case STAT_SPDEF: + sMonSkillsPrinterXpos->spDStr = GetNumberRightAlign27(temp); + case STAT_SPEED: + sMonSkillsPrinterXpos->speStr = GetNumberRightAlign27(temp); + } +} + static void BufferMonSkills(void) { - u8 tempStr[20]; + u8 tempStr[20], tempStr2[20]; u8 level; u16 type; u16 species; @@ -2156,6 +2196,7 @@ static void BufferMonSkills(void) u16 statValue; u32 exp; u32 expToNextLevel; + u8 nature; hp = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_HP); ConvertIntToDecimalStringN(sMonSummaryScreen->summary.curHpStrBuf, hp, STR_CONV_MODE_LEFT_ALIGN, 3); @@ -2166,50 +2207,43 @@ static void BufferMonSkills(void) StringAppend(sMonSummaryScreen->summary.curHpStrBuf, tempStr); sMonSkillsPrinterXpos->curHpStr = GetNumberRightAlign63(sMonSummaryScreen->summary.curHpStrBuf); + nature = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_HIDDEN_NATURE); + if (!nature) + nature = GetNature(&sMonSummaryScreen->currentMon); if (sMonSummaryScreen->savedCallback == CB2_ReturnToTradeMenuFromSummary && sMonSummaryScreen->isEnemyParty == TRUE) { statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->atkStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); + ColorNatureString(STAT_ATK, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_DEF2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->defStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); + ColorNatureString(STAT_DEF, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->spAStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); + ColorNatureString(STAT_SPATK, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPDEF2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->spDStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); + ColorNatureString(STAT_SPDEF, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->speStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); + ColorNatureString(STAT_SPEED, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); } else { statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->atkStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); + ColorNatureString(STAT_ATK, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_DEF); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->defStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); + ColorNatureString(STAT_DEF, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->spAStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); + ColorNatureString(STAT_SPATK, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPDEF); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->spDStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); + ColorNatureString(STAT_SPDEF, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->speStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); + ColorNatureString(STAT_SPEED, statValue, nature, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); } exp = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EXP);