Merge branch 'fairy' into 'main'

Fairy type

See merge request tbld/game!9
This commit is contained in:
Skye Chappelle 2022-10-11 17:46:54 +00:00
commit f0a61f8324
10 changed files with 45 additions and 33 deletions

BIN
graphics/types/fairy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

View File

@ -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

View File

@ -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];

View File

@ -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

View File

@ -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.

View File

@ -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");

View File

@ -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,

View File

@ -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,

View File

@ -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

View File

@ -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,