From 4b02cad24bbff6b914991488f1783602d6443b8c Mon Sep 17 00:00:00 2001 From: BRODY MORAN Date: Tue, 11 Oct 2022 17:43:31 +0000 Subject: [PATCH] Fairy type --- graphics/types/fairy.png | Bin 0 -> 324 bytes graphics_file_rules.mk | 2 +- include/battle_main.h | 2 +- include/constants/pokemon.h | 3 ++- src/battle_main.c | 4 ++- src/battle_message.c | 5 ++-- src/data/battle_moves.h | 6 ++--- src/data/pokemon/base_stats.h | 48 +++++++++++++++++----------------- src/pokedex.c | 2 ++ src/pokemon_summary_screen.c | 6 +++++ 10 files changed, 45 insertions(+), 33 deletions(-) create mode 100644 graphics/types/fairy.png diff --git a/graphics/types/fairy.png b/graphics/types/fairy.png new file mode 100644 index 0000000000000000000000000000000000000000..498386c20313853f2ef8543bea99efc09e0dc13d GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!VDx^^%Amx6nlxMuPggA4rx9uKFc?(u0SF2 z64!{5;QX|b^2DN426rD9pfL(%sYMFLdM1UfOCAE1aFi7IxdUa4fouk^22FV&#ggvm z>&U>cv7h@-A}f$@5a1I6GVbir|7)gvD~_6zHRao!d-tyXf9GWx^gpWm|IsZ|l9HA< zF1gpdcgmC{&DF*K|Nq}%de9cAhcU_9-G!lpRn`N@$?$Y>45^rt+JBI@!GObcr_}WC zS&sznl`N{|^g;(q*d+2d1&6s;k!3 zmWe;D>Xeo|TC~LJ$ZowOOS*kJjg5t$YaL2_ZgJm0p85Ct-|S|ScKG!D$~y$Klfl!~ K&t;ucLK6T1m2+kQ literal 0 HcmV?d00001 diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index eb36d42..03efabe 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -19,7 +19,7 @@ OBJEVENTGFXDIR := graphics/object_events MISCGFXDIR := graphics/misc JPCONTESTGFXDIR := graphics/contest/japanese -types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark +types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy contest_types := cool beauty cute smart tough diff --git a/include/battle_main.h b/include/battle_main.h index b7691b4..c8ebed8 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -85,7 +85,7 @@ extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; extern const struct SpriteTemplate gUnusedBattleInitSprite; extern const struct OamData gOamData_BattleSpriteOpponentSide; extern const struct OamData gOamData_BattleSpritePlayerSide; -extern const u8 gTypeEffectiveness[336]; +extern const u8 gTypeEffectiveness[339]; extern const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1]; extern const struct TrainerMoney gTrainerMoneyTable[]; extern const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1]; diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 9fa023c..33135dd 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -21,7 +21,8 @@ #define TYPE_ICE 15 #define TYPE_DRAGON 16 #define TYPE_DARK 17 -#define NUMBER_OF_MON_TYPES 18 +#define TYPE_FAIRY 18 +#define NUMBER_OF_MON_TYPES 19 // Pokemon egg groups #define EGG_GROUP_NONE 0 diff --git a/src/battle_main.c b/src/battle_main.c index e807909..a8102e1 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -315,7 +315,7 @@ static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; // 10 is ×1.0 TYPE_MUL_NORMAL // 05 is ×0.5 TYPE_MUL_NOT_EFFECTIVE // 00 is ×0.0 TYPE_MUL_NO_EFFECT -const u8 gTypeEffectiveness[336] = +const u8 gTypeEffectiveness[339] = { TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, @@ -425,6 +425,7 @@ const u8 gTypeEffectiveness[336] = TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FAIRY, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE, TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT, TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT, TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT, @@ -451,6 +452,7 @@ const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1] = [TYPE_ICE] = _("Ice"), [TYPE_DRAGON] = _("Dragon"), [TYPE_DARK] = _("Dark"), + [TYPE_FAIRY] = ("Fairy"), }; // This is a factor in how much money you get for beating a trainer. diff --git a/src/battle_message.c b/src/battle_message.c index 1d174a8..1d0fb99 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1322,7 +1322,7 @@ static const u8 sText_SpaceIs[] = _(" is"); static const u8 sText_ApostropheS[] = _("'s"); // For displaying names of invalid moves -static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] = +static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][18] = { [TYPE_NORMAL] = _("a Normal move"), [TYPE_FIGHTING] = _("a Fighting move"), @@ -1341,7 +1341,8 @@ static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] = [TYPE_PSYCHIC] = _("a Psychic move"), [TYPE_ICE] = _("an Ice move"), [TYPE_DRAGON] = _("a Dragon move"), - [TYPE_DARK] = _("a Dark move") + [TYPE_DARK] = _("a Dark move"), + [TYPE_FAIRY] = _("a Fairy move") }; const u8 gText_BattleTourney[] = _("Battle Tourney"); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 8289212..1cb8808 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -2422,7 +2422,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = { .effect = EFFECT_CONFUSE, .power = 0, - .type = TYPE_NORMAL, + .type = TYPE_FAIRY, .accuracy = 75, .pp = 10, .secondaryEffectChance = 0, @@ -2656,7 +2656,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = { .effect = EFFECT_ATTACK_DOWN_2, .power = 0, - .type = TYPE_NORMAL, + .type = TYPE_FAIRY, .accuracy = 100, .pp = 20, .secondaryEffectChance = 0, @@ -3072,7 +3072,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = { .effect = EFFECT_MOONLIGHT, .power = 0, - .type = TYPE_NORMAL, + .type = TYPE_FAIRY, .accuracy = 0, .pp = 5, .secondaryEffectChance = 0, diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index d851dfb..82a02ff 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -1134,8 +1134,8 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 35, .baseSpAttack = 60, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type1 = TYPE_FAIRY, + .type2 = TYPE_FAIRY, .catchRate = 150, .expYield = 68, .evYield_HP = 2, @@ -1166,8 +1166,8 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 60, .baseSpAttack = 85, .baseSpDefense = 90, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type1 = TYPE_FAIRY, + .type2 = TYPE_FAIRY, .catchRate = 25, .expYield = 129, .evYield_HP = 3, @@ -1263,7 +1263,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 45, .baseSpDefense = 25, .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type2 = TYPE_FAIRY, .catchRate = 170, .expYield = 76, .evYield_HP = 2, @@ -1295,7 +1295,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 75, .baseSpDefense = 50, .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type2 = TYPE_FAIRY, .catchRate = 50, .expYield = 109, .evYield_HP = 3, @@ -3919,7 +3919,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 100, .baseSpDefense = 120, .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .type2 = TYPE_FAIRY, .catchRate = 45, .expYield = 136, .evYield_HP = 0, @@ -5550,8 +5550,8 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 15, .baseSpAttack = 45, .baseSpDefense = 55, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type1 = TYPE_FAIRY, + .type2 = TYPE_FAIRY, .catchRate = 150, .expYield = 37, .evYield_HP = 0, @@ -5583,7 +5583,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 40, .baseSpDefense = 20, .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type2 = TYPE_FAIRY, .catchRate = 170, .expYield = 39, .evYield_HP = 1, @@ -5614,8 +5614,8 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 20, .baseSpAttack = 40, .baseSpDefense = 65, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type1 = TYPE_FAIRY, + .type2 = TYPE_FAIRY, .catchRate = 190, .expYield = 74, .evYield_HP = 0, @@ -5646,7 +5646,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 40, .baseSpAttack = 80, .baseSpDefense = 105, - .type1 = TYPE_NORMAL, + .type1 = TYPE_FAIRY, .type2 = TYPE_FLYING, .catchRate = 75, .expYield = 114, @@ -5871,7 +5871,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 20, .baseSpDefense = 50, .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .type2 = TYPE_FAIRY, .catchRate = 190, .expYield = 58, .evYield_HP = 2, @@ -5903,7 +5903,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 50, .baseSpDefense = 80, .type1 = TYPE_WATER, - .type2 = TYPE_WATER, + .type2 = TYPE_FAIRY, .catchRate = 75, .expYield = 153, .evYield_HP = 3, @@ -6702,8 +6702,8 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 30, .baseSpAttack = 40, .baseSpDefense = 40, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type1 = TYPE_FAIRY, + .type2 = TYPE_FAIRY, .catchRate = 190, .expYield = 63, .evYield_HP = 0, @@ -6734,8 +6734,8 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 45, .baseSpAttack = 60, .baseSpDefense = 60, - .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type1 = TYPE_FAIRY, + .type2 = TYPE_FAIRY, .catchRate = 75, .expYield = 178, .evYield_HP = 0, @@ -10465,7 +10465,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 20, .baseSpDefense = 40, .type1 = TYPE_NORMAL, - .type2 = TYPE_NORMAL, + .type2 = TYPE_FAIRY, .catchRate = 150, .expYield = 33, .evYield_HP = 1, @@ -10625,7 +10625,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 55, .baseSpDefense = 55, .type1 = TYPE_STEEL, - .type2 = TYPE_STEEL, + .type2 = TYPE_FAIRY, .catchRate = 45, .expYield = 98, .evYield_HP = 0, @@ -11809,7 +11809,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 45, .baseSpDefense = 35, .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .type2 = TYPE_FAIRY, .catchRate = 235, .expYield = 70, .evYield_HP = 0, @@ -11841,7 +11841,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 65, .baseSpDefense = 55, .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .type2 = TYPE_FAIRY, .catchRate = 120, .expYield = 140, .evYield_HP = 0, @@ -11873,7 +11873,7 @@ const struct BaseStats gBaseStats[] = .baseSpAttack = 125, .baseSpDefense = 115, .type1 = TYPE_PSYCHIC, - .type2 = TYPE_PSYCHIC, + .type2 = TYPE_FAIRY, .catchRate = 45, .expYield = 208, .evYield_HP = 0, diff --git a/src/pokedex.c b/src/pokedex.c index b419373..b240b19 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1393,6 +1393,7 @@ static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES + {gText_DexEmptyString, gTypeNames[TYPE_ICE]}, {gText_DexEmptyString, gTypeNames[TYPE_DRAGON]}, {gText_DexEmptyString, gTypeNames[TYPE_DARK]}, + {gText_DexEmptyString, gTypeNames[TYPE_FAIRY]}, {}, }; @@ -1427,6 +1428,7 @@ static const u8 sDexSearchTypeIds[NUMBER_OF_MON_TYPES] = TYPE_ICE, TYPE_DRAGON, TYPE_DARK, + TYPE_FAIRY, }; // Number pairs are the task data for tracking the cursor pos and scroll offset of each option list diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 4ac475a..e5c6ddf 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -819,6 +819,10 @@ static const union AnimCmd sSpriteAnim_TypeDark[] = { ANIMCMD_FRAME(TYPE_DARK * 8, 0, FALSE, FALSE), ANIMCMD_END }; +static const union AnimCmd sSpriteAnim_TypeFairy[] = { + ANIMCMD_FRAME(TYPE_FAIRY * 8, 0, FALSE, FALSE), + ANIMCMD_END +}; static const union AnimCmd sSpriteAnim_CategoryCool[] = { ANIMCMD_FRAME((CONTEST_CATEGORY_COOL + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE), ANIMCMD_END @@ -858,6 +862,7 @@ static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES sSpriteAnim_TypeIce, sSpriteAnim_TypeDragon, sSpriteAnim_TypeDark, + sSpriteAnim_TypeFairy, sSpriteAnim_CategoryCool, sSpriteAnim_CategoryBeauty, sSpriteAnim_CategoryCute, @@ -901,6 +906,7 @@ static const u8 sMoveTypeToOamPaletteNum[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIE [TYPE_ICE] = 14, [TYPE_DRAGON] = 15, [TYPE_DARK] = 13, + [TYPE_FAIRY] = 14, [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_COOL] = 13, [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_BEAUTY] = 14, [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_CUTE] = 14,