From b5f7a5135131fd82071d320a7c79074bdb2484a7 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sun, 8 Oct 2023 13:56:09 -0500 Subject: [PATCH] Add Teal Mask item, move, and ability data (#3349) --- data/battle_anim_scripts.s | 8 ++ include/constants/abilities.h | 10 +- include/constants/item_effects.h | 1 + include/constants/items.h | 18 +++- include/constants/moves.h | 6 +- include/item_use.h | 1 + include/party_menu.h | 1 + include/strings.h | 2 + src/data/battle_moves.h | 62 +++++++++++ src/data/contest_moves.h | 8 ++ src/data/item_icon_table.h | 15 +++ src/data/items.h | 164 ++++++++++++++++++++++++++++++ src/data/pokemon/item_effects.h | 52 ++++++++++ src/data/text/abilities.h | 32 ++++++ src/data/text/item_descriptions.h | 75 ++++++++++++++ src/data/text/move_descriptions.h | 20 ++++ src/data/text/move_names.h | 8 ++ src/item_use.c | 6 ++ src/party_menu.c | 27 +++++ src/pokemon.c | 18 +++- src/strings.c | 2 +- 21 files changed, 530 insertions(+), 6 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 0b72e1cf98..21188f1f18 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -856,6 +856,10 @@ gBattleAnims_Moves:: .4byte Move_MAGICAL_TORQUE .4byte Move_PSYBLADE .4byte Move_HYDRO_STEAM + .4byte Move_BLOOD_MOON + .4byte Move_MATCHA_GOTCHA + .4byte Move_SYRUP_BOMB + .4byte Move_IVY_CUDGEL @@@@ Z MOVES .4byte Move_BREAKNECK_BLITZ .4byte Move_ALL_OUT_PUMMELING @@ -16505,6 +16509,10 @@ Move_COMBAT_TORQUE:: Move_MAGICAL_TORQUE:: Move_PSYBLADE:: Move_HYDRO_STEAM:: +Move_BLOOD_MOON:: +Move_MATCHA_GOTCHA:: +Move_SYRUP_BOMB:: +Move_IVY_CUDGEL:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ diff --git a/include/constants/abilities.h b/include/constants/abilities.h index 94e5986f77..d844a94e11 100644 --- a/include/constants/abilities.h +++ b/include/constants/abilities.h @@ -324,8 +324,16 @@ #define ABILITY_ARMOR_TAIL 296 #define ABILITY_EARTH_EATER 297 #define ABILITY_MYCELIUM_MIGHT 298 +#define ABILITY_HOSPITALITY 299 +#define ABILITY_MINDS_EYE 300 +#define ABILITY_EMBODY_ASPECT_TEAL 301 +#define ABILITY_EMBODY_ASPECT_HEARTHFLAME 302 +#define ABILITY_EMBODY_ASPECT_WELLSPRING 303 +#define ABILITY_EMBODY_ASPECT_CORNERSTONE 304 +#define ABILITY_TOXIC_CHAIN 305 +#define ABILITY_SUPERSWEET_SYRUP 306 -#define ABILITIES_COUNT_GEN9 299 +#define ABILITIES_COUNT_GEN9 307 #define ABILITIES_COUNT ABILITIES_COUNT_GEN9 diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index fca7924514..ac1c7d5c5b 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -66,6 +66,7 @@ #define ITEM6_ADD_EV 10 #define ITEM6_SUBTRACT_EV -10 #define ITEM6_ADD_ONE_EV 1 +#define ITEM6_RESET_EV 0 // Used for GetItemEffectType. #define ITEM_EFFECT_X_ITEM 0 diff --git a/include/constants/items.h b/include/constants/items.h index 20cbc6379b..1cf69b9da4 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -914,7 +914,23 @@ #define ITEM_PEAT_BLOCK 797 #define ITEM_BERSERK_GENE 798 -#define ITEMS_COUNT 799 +#define ITEM_FAIRY_FEATHER 799 +#define ITEM_SYRUPY_APPLE 800 +#define ITEM_UNREMARKABLE_TEACUP 801 +#define ITEM_MASTERPIECE_TEACUP 802 +#define ITEM_CORNERSTONE_MASK 803 +#define ITEM_WELLSPRING_MASK 804 +#define ITEM_HEARTHFLAME_MASK 805 +#define ITEM_HEALTH_MOCHI 806 +#define ITEM_MUSCLE_MOCHI 807 +#define ITEM_RESIST_MOCHI 808 +#define ITEM_GENIUS_MOCHI 809 +#define ITEM_CLEVER_MOCHI 810 +#define ITEM_SWIFT_MOCHI 811 +#define ITEM_FRESH_START_MOCHI 812 +#define ITEM_GLIMMERING_CHARM 813 + +#define ITEMS_COUNT 814 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/include/constants/moves.h b/include/constants/moves.h index dd00aacb45..b3a881b77f 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -860,8 +860,12 @@ #define MOVE_MAGICAL_TORQUE 826 #define MOVE_PSYBLADE 827 #define MOVE_HYDRO_STEAM 828 +#define MOVE_BLOOD_MOON 829 +#define MOVE_MATCHA_GOTCHA 830 +#define MOVE_SYRUP_BOMB 831 +#define MOVE_IVY_CUDGEL 832 -#define MOVES_COUNT_GEN9 829 +#define MOVES_COUNT_GEN9 833 #define MOVES_COUNT MOVES_COUNT_GEN9 diff --git a/include/item_use.h b/include/item_use.h index 6b3d0c590e..05ff09c0bc 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -13,6 +13,7 @@ void ItemUseOutOfBattle_WailmerPail(u8); void ItemUseOutOfBattle_Medicine(u8); void ItemUseOutOfBattle_AbilityCapsule(u8); void ItemUseOutOfBattle_AbilityPatch(u8); +void ItemUseOutOfBattle_ResetEVs(u8); void ItemUseOutOfBattle_ReduceEV(u8); void ItemUseOutOfBattle_SacredAsh(u8); void ItemUseOutOfBattle_PPRecovery(u8); diff --git a/include/party_menu.h b/include/party_menu.h index 38139cc962..1b618741cb 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -53,6 +53,7 @@ void ItemUseCB_BattleChooseMove(u8 taskId, TaskFunc task); void ItemUseCB_Medicine(u8 taskId, TaskFunc task); void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task); void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task); +void ItemUseCB_ResetEVs(u8 taskId, TaskFunc task); void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task); void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task); void ItemUseCB_PPUp(u8 taskId, TaskFunc task); diff --git a/include/strings.h b/include/strings.h index a298a2f9ae..4fd5670a0d 100644 --- a/include/strings.h +++ b/include/strings.h @@ -3166,4 +3166,6 @@ extern const u8 gText_TellHimTheWords[]; extern const u8 gText_ExpShareOn[]; extern const u8 gText_ExpShareOff[]; +extern const u8 gText_BasePointsResetToZero[]; + #endif // GUARD_STRINGS_H diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 80ac9f9458..41bb61eec3 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13813,6 +13813,68 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE, }, + [MOVE_BLOOD_MOON] = + { + .effect = EFFECT_GIGATON_HAMMER, + .power = 140, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 5, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_MATCHA_GOTCHA] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_MATCHA_GOTCHA + .power = 80, + .type = TYPE_GRASS, + .accuracy = 90, + .pp = 15, + .secondaryEffectChance = 20, //burn + .target = MOVE_TARGET_BOTH, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + .thawsUser = TRUE, + .metronomeBanned = TRUE, + }, + + [MOVE_SYRUP_BOMB] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_SYRUP_BOMB + .power = 60, + .type = TYPE_GRASS, + .accuracy = 85, + .pp = 10, + .secondaryEffectChance = 100, // syrup bomb volatile status + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + .ballisticMove = TRUE, + .metronomeBanned = TRUE, + }, + + [MOVE_IVY_CUDGEL] = + { + .effect = EFFECT_PLACEHOLDER, // EFFECT_IVY_CUDGEL + .power = 100, + .type = TYPE_GRASS, + .accuracy = 100, + .pp = 10, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + .highCritRatio = TRUE, + .metronomeBanned = TRUE, + }, + // Z-Moves [MOVE_BREAKNECK_BLITZ] = { diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index 3d633a2562..6084091683 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -6066,6 +6066,14 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = [MOVE_PSYBLADE] = {0}, // TODO [MOVE_HYDRO_STEAM] = {0}, // TODO + + [MOVE_BLOOD_MOON] = {0}, // TODO + + [MOVE_MATCHA_GOTCHA] = {0}, // TODO + + [MOVE_SYRUP_BOMB] = {0}, // TODO + + [MOVE_IVY_CUDGEL] = {0}, // TODO }; const struct ContestEffect gContestEffects[] = diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index a0a207be2d..30ae4ba19f 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -844,6 +844,21 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_LINKING_CORD] = {gItemIcon_LinkingCord, gItemIconPalette_LinkingCord}, [ITEM_PEAT_BLOCK] = {gItemIcon_PeatBlock, gItemIconPalette_PeatBlock}, [ITEM_BERSERK_GENE] = {gItemIcon_BerserkGene, gItemIconPalette_BerserkGene}, + [ITEM_FAIRY_FEATHER] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FairyFeather, gItemIconPalette_FairyFeather}, + [ITEM_SYRUPY_APPLE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SyrupyApple, gItemIconPalette_SyrupyApple}, + [ITEM_UNREMARKABLE_TEACUP] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_UnremarkableTeacup, gItemIconPalette_UnremarkableTeacup}, + [ITEM_MASTERPIECE_TEACUP] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MasterpieceTeacup, gItemIconPalette_MasterpieceTeacup}, + [ITEM_CORNERSTONE_MASK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_CornerstoneMask, gItemIconPalette_CornerstoneMask}, + [ITEM_WELLSPRING_MASK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WellspringMask, gItemIconPalette_WellspringMask}, + [ITEM_HEARTHFLAME_MASK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_HearthflameMask, gItemIconPalette_HearthflameMask}, + [ITEM_HEALTH_MOCHI] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_Mochi, gItemIconPalette_HealthMochi}, + [ITEM_MUSCLE_MOCHI] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_Mochi, gItemIconPalette_MuscleMochi}, + [ITEM_RESIST_MOCHI] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_Mochi, gItemIconPalette_ResistMochi}, + [ITEM_GENIUS_MOCHI] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_Mochi, gItemIconPalette_GeniusMochi}, + [ITEM_CLEVER_MOCHI] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_Mochi, gItemIconPalette_CleverMochi}, + [ITEM_SWIFT_MOCHI] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_Mochi, gItemIconPalette_SwiftMochi}, + [ITEM_FRESH_START_MOCHI] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_Mochi, gItemIconPalette_FreshStartMochi}, + [ITEM_GLIMMERING_CHARM] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GlimmeringCharm, gItemIconPalette_GlimmeringCharm}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 1093d29122..131e08386a 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -9649,4 +9649,168 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 10, }, + + [ITEM_FAIRY_FEATHER] = + { + .name = _("Fairy Feather"), + .price = 1000, + .holdEffect = HOLD_EFFECT_FAIRY_POWER, + .holdEffectParam = TYPE_BOOST_PARAM, + .description = sFairyFeatherDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, + + [ITEM_SYRUPY_APPLE] = + { + .name = _("Syrupy Apple"), + .price = 2200, + .description = sSyrupyAppleDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_UNREMARKABLE_TEACUP] = + { + .name = _("UnrmkblTeacup"), + .price = 1600, + .description = sUnremarkableTeacupDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 80, + }, + + [ITEM_MASTERPIECE_TEACUP] = + { + .name = _("MstrpceTeacup"), + .price = 38000, + .description = sMasterpieceTeacupDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 80, + }, + + [ITEM_CORNERSTONE_MASK] = + { + .name = _("CornrstneMask"), + .price = 0, + .description = sCornerstoneMaskDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_WELLSPRING_MASK] = + { + .name = _("WellsprngMask"), + .price = 0, + .description = sWellspringMaskDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_HEARTHFLAME_MASK] = + { + .name = _("HrthflameMask"), + .price = 0, + .description = sHearthflameMaskDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_HEALTH_MOCHI] = + { + .name = _("Health Mochi"), + .price = 500, + .description = sHealthMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_MUSCLE_MOCHI] = + { + .name = _("Muscle Mochi"), + .price = 500, + .description = sMuscleMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_RESIST_MOCHI] = + { + .name = _("Resist Mochi"), + .price = 500, + .description = sResistMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_GENIUS_MOCHI] = + { + .name = _("Genius Mochi"), + .price = 500, + .description = sGeniusMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_CLEVER_MOCHI] = + { + .name = _("Clever Mochi"), + .price = 500, + .description = sCleverMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_SWIFT_MOCHI] = + { + .name = _("Swift Mochi"), + .price = 500, + .description = sSwiftMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_Medicine, + .flingPower = 30, + }, + + [ITEM_FRESH_START_MOCHI] = + { + .name = _("FrshStrtMochi"), + .price = 300, + .description = sFreshStartMochiDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_ResetEVs, + .flingPower = 30, + }, + + [ITEM_GLIMMERING_CHARM] = + { + .name = _("GlmmringCharm"), + .price = 0, + .importance = 1, + .description = sGlimmeringCharmDesc, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, }; diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index d7482d5043..81be2ca115 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -282,6 +282,49 @@ const u8 gItemEffect_SpdefFeather[11] = { [10] = 0, }; +const u8 gItemEffect_HpMochi[11] = { + [4] = ITEM4_EV_HP, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_AtkMochi[11] = { + [4] = ITEM4_EV_ATK, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_DefMochi[11] = { + [5] = ITEM5_EV_DEF, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_SpeedMochi[11] = { + [5] = ITEM5_EV_SPEED, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_SpatkMochi[11] = { + [5] = ITEM5_EV_SPATK, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_SpdefMochi[11] = { + [5] = ITEM5_EV_SPDEF, + [6] = ITEM6_ADD_EV, + [10] = 0, +}; + +const u8 gItemEffect_ResetMochi[11] = { + [4] = ITEM4_EV_HP | ITEM4_EV_ATK, + [5] = ITEM5_EV_DEF | ITEM5_EV_SPEED | ITEM5_EV_SPATK | ITEM5_EV_SPDEF, + [6] = ITEM6_RESET_EV, + [10] = 0, +}; + const u8 gItemEffect_RareCandy[10] = { [3] = ITEM3_LEVEL_UP, [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, @@ -508,6 +551,15 @@ const u8 *const gItemEffectTable[ITEMS_COUNT] = [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, + //Mochi + [ITEM_HEALTH_MOCHI] = gItemEffect_HpMochi, + [ITEM_MUSCLE_MOCHI] = gItemEffect_AtkMochi, + [ITEM_RESIST_MOCHI] = gItemEffect_DefMochi, + [ITEM_GENIUS_MOCHI] = gItemEffect_SpatkMochi, + [ITEM_CLEVER_MOCHI] = gItemEffect_SpdefMochi, + [ITEM_SWIFT_MOCHI] = gItemEffect_SpeedMochi, + [ITEM_FRESH_START_MOCHI] = gItemEffect_ResetMochi, + // Candy [ITEM_RARE_CANDY] = gItemEffect_RareCandy, [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h index a3bad09b1b..dce75dd912 100644 --- a/src/data/text/abilities.h +++ b/src/data/text/abilities.h @@ -289,6 +289,14 @@ static const u8 sToxicDebrisDescription[] = _("Throws poison spikes if hit."); static const u8 sArmorTailDescription[] = _("Protects from priority."); static const u8 sEarthEaterDescription[] = _("Eats ground to heal HP."); static const u8 sMyceliumMightDescription[] = _("Status moves never fail."); +static const u8 sHospitalityDescription[] = _("Restores ally's HP."); +static const u8 sMindsEyeDescription[] = _("Keen Eye and Scrappy."); +static const u8 sEmbodyAspectTealDescription[] = _("Raises Speed."); +static const u8 sEmbodyAspectHearthflameDescription[] = _("Raises Attack."); +static const u8 sEmbodyAspectWellspringDescription[] = _("Raises Sp. Def."); +static const u8 sEmbodyAspectCornerstoneDescription[] = _("Raises Defense."); +static const u8 sToxicChainDescription[] = _("Moves can poison."); +static const u8 sSupersweetSyrupDescription[] = _("Lowers the foe's Speed."); #if B_EXPANDED_ABILITY_NAMES == TRUE const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = @@ -592,6 +600,14 @@ const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = [ABILITY_ARMOR_TAIL] = _("Armor Tail"), [ABILITY_EARTH_EATER] = _("Earth Eater"), [ABILITY_MYCELIUM_MIGHT] = _("Mycelium Might"), + [ABILITY_HOSPITALITY] = _("Hospitality"), + [ABILITY_MINDS_EYE] = _("Mind's Eye"), + [ABILITY_EMBODY_ASPECT_TEAL] = _("Embody Aspect"), + [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = _("Embody Aspect"), + [ABILITY_EMBODY_ASPECT_WELLSPRING] = _("Embody Aspect"), + [ABILITY_EMBODY_ASPECT_CORNERSTONE] = _("Embody Aspect"), + [ABILITY_TOXIC_CHAIN] = _("Toxic Chain"), + [ABILITY_SUPERSWEET_SYRUP] = _("Supersweet Syrup"), }; #else // 12 characters const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = @@ -895,6 +911,14 @@ const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = [ABILITY_ARMOR_TAIL] = _("Armor Tail"), [ABILITY_EARTH_EATER] = _("Earth Eater"), [ABILITY_MYCELIUM_MIGHT] = _("MceliumMight"), + [ABILITY_HOSPITALITY] = _("Hospitality"), + [ABILITY_MINDS_EYE] = _("Mind's Eye"), + [ABILITY_EMBODY_ASPECT_TEAL] = _("EmbodyAspect"), + [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = _("EmbodyAspect"), + [ABILITY_EMBODY_ASPECT_WELLSPRING] = _("EmbodyAspect"), + [ABILITY_EMBODY_ASPECT_CORNERSTONE] = _("EmbodyAspect"), + [ABILITY_TOXIC_CHAIN] = _("Toxic Chain"), + [ABILITY_SUPERSWEET_SYRUP] = _("SuprswtSyrup"), }; #endif @@ -1199,4 +1223,12 @@ const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] = [ABILITY_ARMOR_TAIL] = sArmorTailDescription, [ABILITY_EARTH_EATER] = sEarthEaterDescription, [ABILITY_MYCELIUM_MIGHT] = sMyceliumMightDescription, + [ABILITY_HOSPITALITY] = sHospitalityDescription, + [ABILITY_MINDS_EYE] = sMindsEyeDescription, + [ABILITY_EMBODY_ASPECT_TEAL] = sEmbodyAspectTealDescription, + [ABILITY_EMBODY_ASPECT_HEARTHFLAME] = sEmbodyAspectHearthflameDescription, + [ABILITY_EMBODY_ASPECT_WELLSPRING] = sEmbodyAspectWellspringDescription, + [ABILITY_EMBODY_ASPECT_CORNERSTONE] = sEmbodyAspectCornerstoneDescription, + [ABILITY_TOXIC_CHAIN] = sToxicChainDescription, + [ABILITY_SUPERSWEET_SYRUP] = sSupersweetSyrupDescription, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index 0948fbe187..6e74ec173c 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3918,3 +3918,78 @@ static const u8 sBerserkGene[] = _( "Sharply boosts\n" "Attack, but causes\n" "lasting confusion."); + +static const u8 sFairyFeatherDesc[] = _( + "A hold item that\n" + "raises the power of\n" + "Fairy-type moves."); + +static const u8 sSyrupyAppleDesc[] = _( + "A very syrupy apple\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sUnremarkableTeacupDesc[] = _( + "A cracked teacup\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sMasterpieceTeacupDesc[] = _( + "A chipped teacup\n" + "that makes certain\n" + "Pokémon evolve."); + +static const u8 sCornerstoneMaskDesc[] = _( + "Allows Ogerpon to\n" + "wield the Rock-\n" + "type in battle."); + +static const u8 sWellspringMaskDesc[] = _( + "Allows Ogerpon to\n" + "wield the Water-\n" + "type in battle."); + +static const u8 sHearthflameMaskDesc[] = _( + "Allows Ogerpon to\n" + "wield the Fire-\n" + "type in battle."); + +static const u8 sHealthMochiDesc[] = _( + "An item that raises\n" + "the base HP of\n" + "a Pokémon."); + +static const u8 sMuscleMochiDesc[] = _( + "An item that raises\n" + "the base Attack of\n" + "a Pokémon."); + +static const u8 sResistMochiDesc[] = _( + "An item that raises\n" + "the base Defense\n" + "of a Pokémon."); + +static const u8 sGeniusMochiDesc[] = _( + "An item that raises\n" + "the base Sp. Atk.\n" + "of a Pokémon."); + +static const u8 sCleverMochiDesc[] = _( + "An item that raises\n" + "the base Sp. Def.\n" + "of a Pokémon."); + +static const u8 sSwiftMochiDesc[] = _( + "An item that raises\n" + "the base Speed of\n" + "a Pokémon."); + +static const u8 sFreshStartMochiDesc[] = _( + "An item that resets\n" + "all base points of\n" + "a Pokémon."); + +static const u8 sGlimmeringCharmDesc[] = _( + "A charm that will\n" + "raise the shards\n" + "from Tera Raids."); diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index f950c2a1aa..3c1189144a 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -3260,6 +3260,22 @@ static const u8 sHydroSteamDescription[] = _( "This move's power increases\n" "under harsh sunlight."); +static const u8 sBloodMoonDescription[] = _( + "Unleashes the blood moon.\n" + "Can't be used twice in a row."); + +static const u8 sMatchaGotchaDescription[] = _( + "Absorbs half the damage\n" + "inflicted. May cause a burn."); + +static const u8 sSyrupBombDescription[] = _( + "Lowers the foe's speed\n" + "each turn for 3 turns."); + +static const u8 sIvyCudgelDescription[] = _( + "Type changes with held mask.\n" + "High critical-hit ratio."); + const u8 gNotDoneYetDescription[] = _( "This move can't be used. Its\n" "effect is in development."); @@ -4099,4 +4115,8 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = [MOVE_MAGICAL_TORQUE - 1] = sMagicalTorqueDescription, [MOVE_PSYBLADE - 1] = sPsybladeDescription, [MOVE_HYDRO_STEAM - 1] = sHydroSteamDescription, + [MOVE_BLOOD_MOON - 1] = sBloodMoonDescription, + [MOVE_MATCHA_GOTCHA - 1] = sMatchaGotchaDescription, + [MOVE_SYRUP_BOMB - 1] = sSyrupBombDescription, + [MOVE_IVY_CUDGEL - 1] = sIvyCudgelDescription, }; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index 85d406dcab..8ec4520e94 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -831,6 +831,10 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_MAGICAL_TORQUE] = _("Magical Torque"), [MOVE_PSYBLADE] = _("Psyblade"), [MOVE_HYDRO_STEAM] = _("Hydro Steam"), + [MOVE_BLOOD_MOON] = _("Blood Moon"), + [MOVE_MATCHA_GOTCHA] = _("Matcha Gotcha"), + [MOVE_SYRUP_BOMB] = _("Syrup Bomb"), + [MOVE_IVY_CUDGEL] = _("Ivy Cudgel"), }; #else // 12 letters @@ -1665,6 +1669,10 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_MAGICAL_TORQUE] = _("MagiclTorque"), [MOVE_PSYBLADE] = _("Psyblade"), [MOVE_HYDRO_STEAM] = _("Hydro Steam"), + [MOVE_BLOOD_MOON] = _("Blood Moon"), + [MOVE_MATCHA_GOTCHA] = _("MatchaGotcha"), + [MOVE_SYRUP_BOMB] = _("Syrup Bomb"), + [MOVE_IVY_CUDGEL] = _("Ivy Cudgel"), }; #endif diff --git a/src/item_use.c b/src/item_use.c index eb3565fec6..07dc2f5411 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -795,6 +795,12 @@ void ItemUseOutOfBattle_AbilityPatch(u8 taskId) SetUpItemUseCallback(taskId); } +void ItemUseOutOfBattle_ResetEVs(u8 taskId) +{ + gItemUseCB = ItemUseCB_ResetEVs; + SetUpItemUseCallback(taskId); +} + void ItemUseOutOfBattle_ReduceEV(u8 taskId) { gItemUseCB = ItemUseCB_ReduceEV; diff --git a/src/party_menu.c b/src/party_menu.c index 4ed4433e65..e360c9a50e 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4777,6 +4777,33 @@ static void Task_ClosePartyMenuAfterText(u8 taskId) } } +void ItemUseCB_ResetEVs(u8 taskId, TaskFunc task) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u16 item = gSpecialVar_ItemId; + bool8 cannotUseEffect = ExecuteTableBasedItemEffect(mon, item, gPartyMenu.slotId, 0); + + if (cannotUseEffect) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; + } + else + { + gPartyMenuUseExitCallback = TRUE; + PlaySE(SE_USE_ITEM); + RemoveBagItem(item, 1); + GetMonNickname(mon, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_BasePointsResetToZero); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; + } +} + void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; diff --git a/src/pokemon.c b/src/pokemon.c index 03c7c34712..0a453b9a01 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5953,7 +5953,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataSigned += temp2; } - else // Decreasing EV (HP or Atk) + else if (evChange < 0) // Decreasing EV (HP or Atk) { if (dataSigned == 0) { @@ -5970,6 +5970,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (dataSigned < 0) dataSigned = 0; } + else // Reset EV (HP or Atk) + { + if (dataSigned == 0) + break; + + dataSigned = 0; + } // Update EVs and stats SetMonData(mon, sGetMonDataEVConstants[temp1], &dataSigned); @@ -6133,7 +6140,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataSigned += temp2; } - else // Decreasing EV + else if (evChange < 0) // Decreasing EV { if (dataSigned == 0) { @@ -6150,6 +6157,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (dataSigned < 0) dataSigned = 0; } + else // Reset EV + { + if (dataSigned == 0) + break; + + dataSigned = 0; + } // Update EVs and stats SetMonData(mon, sGetMonDataEVConstants[temp1 + 2], &dataSigned); diff --git a/src/strings.c b/src/strings.c index b9a089ba32..52b6fefc02 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1833,7 +1833,7 @@ const u8 gText_Berry[] = _("BERRY"); const u8 gText_Berries[] = _("BERRIES"); const u8 gText_ExpShareOn[] = _("The Exp. Share has been turned on.{PAUSE_UNTIL_PRESS}"); const u8 gText_ExpShareOff[] = _("The Exp. Share has been turned off.{PAUSE_UNTIL_PRESS}"); - +const u8 gText_BasePointsResetToZero[] = _("{STR_VAR_1}'s base points\nwere all reset to zero!{PAUSE_UNTIL_PRESS}"); //HGSS_Ui PokedexPlus #if POKEDEX_PLUS_HGSS == TRUE const u8 gText_Stats_Buttons[] = _("{A_BUTTON}TOGGLE {DPAD_UPDOWN}MOVES");