added fairy type

This commit is contained in:
cawtds
2024-03-23 15:40:31 +01:00
parent 0ab492f7e8
commit 356ffd1627
23 changed files with 5288 additions and 38 deletions

1
.gitignore vendored
View File

@@ -44,7 +44,6 @@ ld_script_ruby.txt
ld_script_sapphire.txt
sound/**/*.bin
sound/songs/midi/*.s
src/data/items.h
src/data/wild_encounters.h
src/data/region_map/region_map_entries.h
src/data/region_map/region_map_entry_strings.h

View File

@@ -1230,6 +1230,7 @@ AI_CV_SpAtkDown_SpecialTypeList::
.byte TYPE_ICE
.byte TYPE_DRAGON
.byte TYPE_DARK
.byte TYPE_FAIRY
.byte -1
AI_CV_SpDefDown::
@@ -1471,6 +1472,7 @@ AI_CV_LightScreen_SpecialTypeList::
.byte TYPE_ICE
.byte TYPE_DRAGON
.byte TYPE_DARK
.byte TYPE_FAIRY
.byte -1
AI_CV_Rest::
@@ -2305,6 +2307,7 @@ AI_CV_MirrorCoat_SpecialTypeList::
.byte TYPE_ICE
.byte TYPE_DRAGON
.byte TYPE_DARK
.byte TYPE_FAIRY
.byte -1
AI_CV_ChargeUpMove::

View File

@@ -69,6 +69,8 @@ ViridianCity_Mart_Items::
.2byte ITEM_POTION
.2byte ITEM_ANTIDOTE
.2byte ITEM_PARALYZE_HEAL
.2byte ITEM_RARE_CANDY
.2byte ITEM_MASTER_BALL
.2byte ITEM_NONE
release
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -57,7 +57,7 @@ extern const u8 gStatusConditionString_IceJpn[8];
extern const u8 gStatusConditionString_ConfusionJpn[8];
extern const u8 gStatusConditionString_LoveJpn[8];
extern const u8 *const gStatusConditionStringsTable[7][2];
extern const u8 gTypeEffectiveness[336];
extern const u8 gTypeEffectiveness[372];
extern const struct TrainerMoney gTrainerMoneyTable[];
extern const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT];
extern const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1];

View File

@@ -2,7 +2,7 @@
#define GUARD_CONFIG_POKEMON_H
// Species data settings
#define P_UPDATED_TYPES GEN_3 // Since Gen 6, several Pokémon were changed to be partially or fully Fairy type.
#define P_UPDATED_TYPES GEN_LATEST // Since Gen 6, several Pokémon were changed to be partially or fully Fairy type.
#define P_UPDATED_STATS GEN_LATEST // Since Gen 6, Pokémon stats are updated with each passing generation.
#define P_UPDATED_ABILITIES GEN_LATEST // Since Gen 6, certain Pokémon have their abilities changed.
#define P_UPDATED_EGG_GROUPS GEN_LATEST // Since Gen 8, certain Pokémon have gained new egg groups.

View File

@@ -69,4 +69,7 @@
#define HOLD_EFFECT_THICK_CLUB 65
#define HOLD_EFFECT_STICK 66
#define HOLD_EFFECT_FAIRY_POWER 139
#endif // GUARD_HOLD_EFFECTS_H

View File

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

@@ -7,8 +7,8 @@ typedef void (*ItemUseFunc)(u8);
struct Item
{
u8 name[ITEM_NAME_LENGTH];
u16 itemId;
u8 name[ITEM_NAME_LENGTH];
u16 price;
u8 holdEffect;
u8 holdEffectParam;

View File

@@ -1,12 +1,12 @@
# JSON files are run through jsonproc, which is a tool that converts JSON data to an output file
# based on an Inja template. https://github.com/pantor/inja
AUTO_GEN_TARGETS += $(DATA_C_SUBDIR)/items.h
# AUTO_GEN_TARGETS += $(DATA_C_SUBDIR)/items.h
$(DATA_C_SUBDIR)/items.h: $(DATA_C_SUBDIR)/items.json $(DATA_C_SUBDIR)/items.json.txt
$(JSONPROC) $^ $@
# $(DATA_C_SUBDIR)/items.h: $(DATA_C_SUBDIR)/items.json $(DATA_C_SUBDIR)/items.json.txt
# $(JSONPROC) $^ $@
$(C_BUILDDIR)/item.o: c_dep += $(DATA_C_SUBDIR)/items.h
# $(C_BUILDDIR)/item.o: c_dep += $(DATA_C_SUBDIR)/items.h
AUTO_GEN_TARGETS += $(DATA_C_SUBDIR)/wild_encounters.h
$(DATA_C_SUBDIR)/wild_encounters.h: $(DATA_C_SUBDIR)/wild_encounters.json $(DATA_C_SUBDIR)/wild_encounters.json.txt

View File

@@ -309,7 +309,7 @@ static const s8 sPlayerThrowXTranslation[] = { -32, -16, -16, -32, -32, 0, 0, 0
// 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[372] =
{
TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
@@ -360,12 +360,14 @@ const u8 gTypeEffectiveness[336] =
TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_FIGHTING, TYPE_FAIRY, TYPE_MUL_NOT_EFFECTIVE,
TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT,
TYPE_POISON, TYPE_FAIRY, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
@@ -394,6 +396,7 @@ const u8 gTypeEffectiveness[336] =
TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
TYPE_BUG, TYPE_FAIRY, TYPE_MUL_NOT_EFFECTIVE,
TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
@@ -408,17 +411,26 @@ const u8 gTypeEffectiveness[336] =
TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
TYPE_DRAGON, TYPE_FAIRY, TYPE_MUL_NO_EFFECT,
TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
TYPE_DARK, TYPE_FAIRY, TYPE_MUL_NOT_EFFECTIVE,
TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
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_STEEL, TYPE_FAIRY, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_FAIRY, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_FAIRY, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
TYPE_FAIRY, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
TYPE_FAIRY, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
TYPE_FAIRY, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
TYPE_FAIRY, TYPE_DARK, 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,
@@ -445,6 +457,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

@@ -1349,6 +1349,7 @@ const u8 gText_APsychicMove[] = _("a PSYCHIC move");
const u8 gText_AnIceMove[] = _("an ICE move");
const u8 gText_ADragonMove[] = _("a DRAGON move");
const u8 gText_ADarkMove[] = _("a DARK move");
const u8 gText_AFairyMove[] = _("a FAIRY move");
const u8 gText_TimeBoard[] = _("TIME BOARD");
const u8 gText_ClearTime[] = _("CLEAR TIME"); // Unused
const u8 gText_XMinYZSec[] = _("{STR_VAR_1}MIN. {STR_VAR_2}.{STR_VAR_3}SEC.");
@@ -1392,7 +1393,8 @@ static const u8 *const sATypeMove_Table[NUMBER_OF_MON_TYPES] =
[TYPE_PSYCHIC] = gText_APsychicMove,
[TYPE_ICE] = gText_AnIceMove,
[TYPE_DRAGON] = gText_ADragonMove,
[TYPE_DARK] = gText_ADarkMove
[TYPE_DARK] = gText_ADarkMove,
[TYPE_FAIRY] = gText_AFairyMove,
};
static const u16 sGrammarMoveUsedTable[] =

View File

@@ -7636,9 +7636,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
[MOVE_DISARMING_VOICE] =
{
.effect = EFFECT_HIT,
.effect = EFFECT_ALWAYS_HIT,
.power = 40,
.type = TYPE_NORMAL,
.type = TYPE_FAIRY,
.accuracy = 0,
.pp = 15,
.secondaryEffectChance = 0,

5221
src/data/items.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,9 @@
## if item.pocket == "POCKET_TM_CASE"
extern const u8 s{{ item.moveId }}Description[];
## endif
{% if item.itemId != "ITEM_NONE" %}const u8 gItemDescription_{{ item.itemId }}[] = _("{{ item.description_english }}");{% endif %}
{% if item.itemId != "ITEM_NONE" %}
const u8 gItemDescription_{{ item.itemId }}[] = _("{{ item.description_english }}");
{% endif %}
## endfor
const u8 gItemDescription_ITEM_NONE[] = _("?????");

View File

@@ -2652,7 +2652,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#if P_FAMILY_CLEFAIRY
#if P_UPDATED_TYPES >= GEN_6
#define CLEFAIRY_FAMILY_TYPES { TYPE_NORMAL, TYPE_NORMAL }
#define CLEFAIRY_FAMILY_TYPES { TYPE_FAIRY, TYPE_FAIRY }
#else
#define CLEFAIRY_FAMILY_TYPES { TYPE_NORMAL, TYPE_NORMAL }
#endif
@@ -2950,7 +2950,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpeed = 109,
.baseSpAttack = 81,
.baseSpDefense = 100,
.types = { TYPE_ICE, TYPE_NORMAL },
.types = { TYPE_ICE, TYPE_FAIRY },
.abilities = { ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SNOW_WARNING },
.bodyColor = BODY_COLOR_BLUE,
.description = COMPOUND_STRING(
@@ -2975,7 +2975,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#if P_FAMILY_JIGGLYPUFF
#if P_UPDATED_TYPES >= GEN_6
#define JIGGLYPUFF_FAMILY_TYPES { TYPE_NORMAL, TYPE_NORMAL}
#define JIGGLYPUFF_FAMILY_TYPES { TYPE_NORMAL, TYPE_FAIRY}
#else
#define JIGGLYPUFF_FAMILY_TYPES { TYPE_NORMAL, TYPE_NORMAL}
#endif
@@ -5810,7 +5810,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
GALARIAN_PONYTA_FAMILY_INFO,
RAPIDASH_MISC_INFO,
.types = { TYPE_PSYCHIC, TYPE_NORMAL },
.types = { TYPE_PSYCHIC, TYPE_FAIRY },
.categoryName = _("Unique Horn"),
.weight = 800,
.description = COMPOUND_STRING(
@@ -8353,7 +8353,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
[SPECIES_WEEZING_GALARIAN] =
{
WEEZING_MISC_INFO,
.types = { TYPE_POISON, TYPE_NORMAL },
.types = { TYPE_POISON, TYPE_FAIRY },
.abilities = { ABILITY_LEVITATE, ABILITY_NEUTRALIZING_GAS, ABILITY_MISTY_SURGE },
.bodyColor = BODY_COLOR_GRAY,
.isGalarianForm = TRUE,
@@ -9243,7 +9243,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpAttack = 70,
.baseSpDefense = 90,
#if P_UPDATED_TYPES >= GEN_6
.types = { TYPE_PSYCHIC, TYPE_NORMAL },
.types = { TYPE_PSYCHIC, TYPE_FAIRY },
#else
.types = { TYPE_PSYCHIC, TYPE_PSYCHIC },
#endif
@@ -9312,7 +9312,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpAttack = 100,
.baseSpDefense = 120,
#if P_UPDATED_TYPES >= GEN_6
.types = { TYPE_PSYCHIC, TYPE_NORMAL },
.types = { TYPE_PSYCHIC, TYPE_FAIRY },
#else
.types = { TYPE_PSYCHIC, TYPE_PSYCHIC },
#endif

View File

@@ -984,7 +984,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
#endif //P_FAMILY_CHINCHOU
#if P_FAMILY_TOGEPI
#define TOGEPI_FAMILY_TYPE (P_UPDATED_TYPES >= GEN_6 ? TYPE_NORMAL : TYPE_NORMAL)
#define TOGEPI_FAMILY_TYPE (P_UPDATED_TYPES >= GEN_6 ? TYPE_FAIRY : TYPE_NORMAL)
[SPECIES_TOGEPI] =
{

View File

@@ -1616,7 +1616,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
#endif //P_FAMILY_WINGULL
#if P_FAMILY_RALTS
#define RALTS_FAMILY_TYPE2 (P_UPDATED_TYPES >= GEN_6 ? TYPE_PSYCHIC : TYPE_PSYCHIC)
#define RALTS_FAMILY_TYPE2 (P_UPDATED_TYPES >= GEN_6 ? TYPE_FAIRY : TYPE_PSYCHIC)
#if P_UPDATED_EGG_GROUPS >= GEN_8
#define RALTS_FAMILY_EGG_GROUPS { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_AMORPHOUS }
@@ -2931,7 +2931,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
#if P_FAMILY_MAWILE
#if P_UPDATED_TYPES >= GEN_6
#define MAWILE_TYPES { TYPE_STEEL, TYPE_STEEL }
#define MAWILE_TYPES { TYPE_STEEL, TYPE_FAIRY }
#else
#define MAWILE_TYPES { TYPE_STEEL, TYPE_STEEL }
#endif
@@ -4916,7 +4916,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpeed = 80,
.baseSpAttack = 110,
.baseSpDefense = 105,
.types = { TYPE_DRAGON, TYPE_DRAGON },
.types = { TYPE_DRAGON, TYPE_FAIRY },
.expYield = 207,
.abilities = { ABILITY_PIXILATE, ABILITY_PIXILATE, ABILITY_PIXILATE },
.cryId = CRY_ALTARIA_MEGA,

View File

@@ -265,6 +265,7 @@ static const struct ListMenuItem sListMenuItems_TypeNames[NUMBER_OF_MON_TYPES] =
{ gTypeNames[TYPE_DRAGON], TYPE_DRAGON },
{ gTypeNames[TYPE_STEEL], TYPE_STEEL },
{ gTypeNames[TYPE_DARK], TYPE_DARK },
{ gTypeNames[TYPE_FAIRY], TYPE_FAIRY },
{ gText_UR_Exit, NUMBER_OF_MON_TYPES }
};

View File

@@ -8263,62 +8263,62 @@
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_PIDGEY"
"species": "SPECIES_CLEFAIRY"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_RATTATA"
"species": "SPECIES_CLEFAIRY"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_PIDGEY"
"species": "SPECIES_CLEFAIRY"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_RATTATA"
"species": "SPECIES_RATTATA_ALOLAN"
},
{
"min_level": 2,
"max_level": 2,
"species": "SPECIES_PIDGEY"
"species": "SPECIES_RATTATA_ALOLAN"
},
{
"min_level": 2,
"max_level": 2,
"species": "SPECIES_RATTATA"
"species": "SPECIES_RATTATA_ALOLAN"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_PIDGEY"
"species": "SPECIES_CHARIZARD_MEGA_Y"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_RATTATA"
"species": "SPECIES_CHARIZARD_MEGA_Y"
},
{
"min_level": 4,
"max_level": 4,
"species": "SPECIES_PIDGEY"
"species": "SPECIES_CHARIZARD_MEGA_Y"
},
{
"min_level": 4,
"max_level": 4,
"species": "SPECIES_RATTATA"
"species": "SPECIES_CHARIZARD_MEGA_Y"
},
{
"min_level": 5,
"max_level": 5,
"species": "SPECIES_PIDGEY"
"species": "SPECIES_CHARIZARD_MEGA_Y"
},
{
"min_level": 4,
"max_level": 4,
"species": "SPECIES_RATTATA"
"species": "SPECIES_CHARIZARD_MEGA_Y"
}
]
}

View File

@@ -70,6 +70,7 @@ static const struct MoveMenuInfoIcon sMenuInfoIcons[] =
[TYPE_ICE + 1] = { 32, 12, 0x4C },
[TYPE_DRAGON + 1] = { 32, 12, 0xA0 },
[TYPE_DARK + 1] = { 32, 12, 0x8C },
[TYPE_FAIRY + 1] = { 32, 12, 0x0C },
[MENU_INFO_ICON_TYPE] = { 40, 12, 0xA8 },
[MENU_INFO_ICON_POWER] = { 40, 12, 0xC0 },
[MENU_INFO_ICON_ACCURACY] = { 40, 12, 0xC8 },

View File

@@ -491,6 +491,7 @@ static const u8 sHoldEffectToType[][2] =
{HOLD_EFFECT_FIRE_POWER, TYPE_FIRE},
{HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON},
{HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL},
{HOLD_EFFECT_FAIRY_POWER, TYPE_FAIRY},
};
const struct SpriteTemplate gSpriteTemplates_Battlers[MAX_BATTLERS_COUNT] =

View File

@@ -410,7 +410,8 @@ static const u16 sTMSpritePaletteOffsetByType[NUMBER_OF_MON_TYPES] = {
[TYPE_PSYCHIC] = 0x0d0,
[TYPE_STEEL] = 0x0e0,
[TYPE_DARK] = 0x0f0,
[TYPE_DRAGON] = 0x100
[TYPE_DRAGON] = 0x100,
[TYPE_FAIRY] = 0x0f0,
};
void InitTMCase(u8 type, void (* exitCallback)(void), bool8 allowSelectClose)