Merge branch 'upcoming' into feature/dynmulti-expansion

This commit is contained in:
Alex 2024-01-03 15:54:39 +01:00 committed by GitHub
commit 34f51da5f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 1434 additions and 2134 deletions

View File

@ -473,7 +473,7 @@ endif
$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS)
cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld
LDFLAGS = -Map ../../$(MAP)
LDFLAGS = -Map ../../$(MAP) --no-warn-rwx-segments
$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) libagbsyscall
@echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ <objects> <lib>"
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat

View File

@ -222,16 +222,6 @@ void RecalcBattlerStats(u32 battler, struct Pokemon *mon);
bool32 IsAlly(u32 battlerAtk, u32 battlerDef);
bool32 IsGen6ExpShareEnabled(void);
// Ability checks
bool32 IsSkillSwapBannedAbility(u16 ability);
bool32 IsRolePlayDoodleBannedAbility(u16 ability);
bool32 IsRolePlayDoodleBannedAbilityAttacker(u16 ability);
bool32 IsWorrySeedBannedAbility(u16 ability);
bool32 IsGastroAcidBannedAbility(u16 ability);
bool32 IsEntrainmentBannedAbility(u16 ability);
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability);
bool32 IsSimpleBeamBannedAbility(u16 ability);
bool32 CanSleep(u32 battler);
bool32 CanBePoisoned(u32 battlerAttacker, u32 battlerTarget);
bool32 CanBeBurned(u32 battler);

View File

@ -71,6 +71,9 @@
#define B_PP_REDUCED_BY_SPITE GEN_LATEST // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5.
#define B_EXTRAPOLATED_MOVE_FLAGS TRUE // Adds move flags to moves that they don't officially have but would likely have if they were in the latest core series game.
// Ability data settings
#define B_UPDATED_ABILITY_DATA GEN_LATEST // Affects flags
// Move accuracy settings
#define B_TOXIC_NEVER_MISS GEN_LATEST // In Gen6+, if Toxic is used by a Poison-type Pokémon, it will never miss.
#define B_MINIMIZE_DMG_ACC GEN_LATEST // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks.

View File

@ -594,5 +594,11 @@
#define P_FAMILY_MUNKIDORI P_GEN_9_POKEMON
#define P_FAMILY_FEZANDIPITI P_GEN_9_POKEMON
#define P_FAMILY_OGERPON P_GEN_9_POKEMON
#define P_FAMILY_GOUGING_FIRE P_GEN_9_POKEMON
#define P_FAMILY_RAGING_BOLT P_GEN_9_POKEMON
#define P_FAMILY_IRON_BOULDER P_GEN_9_POKEMON
#define P_FAMILY_IRON_CROWN P_GEN_9_POKEMON
#define P_FAMILY_TERAPAGOS P_GEN_9_POKEMON
#define P_FAMILY_PECHARUNT P_GEN_9_POKEMON
#endif // GUARD_CONFIG_SPECIES_ENABLED_H

View File

@ -2025,6 +2025,7 @@ enum {
CRY_APPLETUN,
#if P_GEN_9_CROSS_EVOS
CRY_DIPPLIN,
//CRY_HYDRAPPLE,
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_APPLIN
#if P_FAMILY_SILICOBRA
@ -2112,6 +2113,9 @@ enum {
#endif //P_FAMILY_ARCTOVISH
#if P_FAMILY_DURALUDON
CRY_DURALUDON,
#if P_GEN_9_CROSS_EVOS
//CRY_ARCHALUDON,
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_DREEPY
CRY_DREEPY,
@ -2404,6 +2408,24 @@ enum {
#if P_FAMILY_OGERPON
CRY_OGERPON,
#endif //P_FAMILY_OGERPON
#if P_FAMILY_GOUGING_FIRE
//CRY_GOUGING_FIRE,
#endif //P_FAMILY_GOUGING_FIRE
#if P_FAMILY_RAGING_BOLT
//CRY_RAGING_BOLT,
#endif //P_FAMILY_RAGING_BOLT
#if P_FAMILY_IRON_BOULDER
//CRY_IRON_BOULDER,
#endif //P_FAMILY_IRON_BOULDER
#if P_FAMILY_IRON_CROWN
//CRY_IRON_CROWN,
#endif //P_FAMILY_IRON_CROWN
#if P_FAMILY_TERAPAGOS
//CRY_TERAPAGOS,
#endif //P_FAMILY_TERAPAGOS
#if P_FAMILY_PECHARUNT
//CRY_PECHARUNT,
#endif //P_FAMILY_PECHARUNT
CRY_COUNT,
};

View File

@ -1031,21 +1031,21 @@ enum {
NATIONAL_DEX_MUNKIDORI,
NATIONAL_DEX_FEZANDIPITI,
NATIONAL_DEX_OGERPON,
NATIONAL_DEX_1018,
NATIONAL_DEX_1019,
NATIONAL_DEX_1020,
NATIONAL_DEX_1021,
NATIONAL_DEX_1022,
NATIONAL_DEX_1023,
NATIONAL_DEX_1024,
NATIONAL_DEX_1025,
NATIONAL_DEX_ARCHALUDON,
NATIONAL_DEX_HYDRAPPLE,
NATIONAL_DEX_GOUGING_FIRE,
NATIONAL_DEX_RAGING_BOLT,
NATIONAL_DEX_IRON_BOULDER,
NATIONAL_DEX_IRON_CROWN,
NATIONAL_DEX_TERAPAGOS,
NATIONAL_DEX_PECHARUNT,
};
#define KANTO_DEX_COUNT NATIONAL_DEX_MEW
#define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI
#if P_GEN_9_POKEMON == TRUE
#define NATIONAL_DEX_COUNT NATIONAL_DEX_1025
#define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT
#elif P_GEN_8_POKEMON == TRUE
#define NATIONAL_DEX_COUNT NATIONAL_DEX_ENAMORUS
#elif P_GEN_7_POKEMON == TRUE

View File

@ -1658,19 +1658,19 @@
#define SPECIES_OGERPON_CORNERSTONE_MASK_TERA GEN9_START + 135
#define SPECIES_URSALUNA_BLOODMOON GEN9_START + 136
// Indigo Disk
#define SPECIES_1018 GEN9_START + 137
#define SPECIES_1019 GEN9_START + 138
#define SPECIES_1020 GEN9_START + 139
#define SPECIES_1021 GEN9_START + 140
#define SPECIES_1022 GEN9_START + 141
#define SPECIES_1023 GEN9_START + 142
#define SPECIES_1024 SPECIES_1024_FORM_1
#define SPECIES_1024_FORM_1 GEN9_START + 143
#define SPECIES_1024_FORM_2 GEN9_START + 144
#define SPECIES_1024_FORM_3 GEN9_START + 145
#define SPECIES_1025 GEN9_START + 146
#define SPECIES_ARCHALUDON GEN9_START + 137
#define SPECIES_HYDRAPPLE GEN9_START + 138
#define SPECIES_GOUGING_FIRE GEN9_START + 139
#define SPECIES_RAGING_BOLT GEN9_START + 140
#define SPECIES_IRON_BOULDER GEN9_START + 141
#define SPECIES_IRON_CROWN GEN9_START + 142
#define SPECIES_TERAPAGOS SPECIES_TERAPAGOS_NORMAL
#define SPECIES_TERAPAGOS_NORMAL GEN9_START + 143
#define SPECIES_TERAPAGOS_TERASTAL GEN9_START + 144
#define SPECIES_TERAPAGOS_STELLAR GEN9_START + 145
#define SPECIES_PECHARUNT GEN9_START + 146
#define PLACEHOLDER_START SPECIES_1025
#define PLACEHOLDER_START SPECIES_PECHARUNT
// XD: Gale of Darkness
#define SPECIES_LUGIA_SHADOW PLACEHOLDER_START + 1
// Diamond & Pearl

View File

@ -3,4 +3,6 @@
extern u32 IntrMain[];
extern void ReInitializeEWRAM();
#endif //GUARD_CRT0_H

View File

@ -6,8 +6,10 @@
#define TRUE 1
#define FALSE 0
#define IWRAM_DATA __attribute__((section("iwram_data")))
#define EWRAM_DATA __attribute__((section("ewram_data")))
#define IWRAM_DATA __attribute__((section(".bss")))
#define EWRAM_DATA __attribute__((section(".sbss")))
#define IWRAM_INIT __attribute__((section(".iwram")))
#define EWRAM_INIT __attribute__((section(".ewram")))
#define UNUSED __attribute__((unused))
#if MODERN

View File

@ -514,6 +514,13 @@ struct Ability
u8 name[ABILITY_NAME_LENGTH + 1];
const u8 *description;
s8 aiRating;
u8 cantBeCopied:1; // cannot be copied by Role Play or Doodle
u8 cantBeSwapped:1; // cannot be swapped with Skill Swap or Wandering Spirit
u8 cantBeTraced:1; // cannot be copied by Trace - same as cantBeCopied except for Wonder Guard
u8 cantBeSuppressed:1; // cannot be negated by Gastro Acid or Neutralizing Gas
u8 cantBeOverwritten:1; // cannot be overwritten by Entrainment, Worry Seed or Simple Beam (but can be by Mummy) - same as cantBeSuppressed except for Truant
u8 breakable:1; // can be bypassed by Mold Breaker and clones
u8 failsOnImposter:1; // doesn't work on an Imposter mon; when can we actually use this?
};
#define SPINDA_SPOT_WIDTH 16

View File

@ -13,19 +13,35 @@ MEMORY
SECTIONS {
ewram 0x2000000 (NOLOAD) :
.ewram ORIGIN(EWRAM) : AT (__ewram_lma)
ALIGN(4)
{
__ewram_start = .;
*(.ewram*)
__ewram_end = .;
} > EWRAM
.ewram.sbss (NOLOAD) :
ALIGN(4)
{
INCLUDE "sym_ewram.ld"
src/*.o(ewram_data);
gflib/*.o(ewram_data);
src/*.o(.sbss);
gflib/*.o(.sbss);
*libc.a:impure.o(.data);
*libc.a:locale.o(.data);
*libc.a:mallocr.o(.data);
} > EWRAM
iwram 0x3000000 (NOLOAD) :
.iwram ORIGIN(IWRAM) : AT (__iwram_lma)
ALIGN(4)
{
__iwram_start = .;
*(.iwram*);
__iwram_end = .;
} > IWRAM
.iwram.bss (NOLOAD) :
ALIGN(4)
{
/* .bss starts at 0x3000000 */
@ -1324,6 +1340,20 @@ SECTIONS {
data/*.o(.rodata);
} > ROM = 0
.data.iwram :
ALIGN(4)
{
__iwram_lma = .;
. = . + (__iwram_end - __iwram_start);
} > ROM = 0
.data.ewram :
ALIGN(4)
{
__ewram_lma = .;
. = . + (__ewram_end - __ewram_start);
} > ROM = 0
__rom_end = .;
/* DWARF debug sections.

View File

@ -12,15 +12,32 @@ MEMORY
}
SECTIONS {
ewram 0x2000000 (NOLOAD) :
.ewram ORIGIN(EWRAM) : AT (__ewram_lma)
ALIGN(4)
{
src/*.o(ewram_data);
gflib/*.o(ewram_data);
__ewram_start = .;
*(.ewram*)
__ewram_end = .;
} > EWRAM
iwram 0x3000000 (NOLOAD) :
.ewram.sbss (NOLOAD) :
ALIGN(4)
{
src/*.o(.sbss);
gflib/*.o(.sbss);
} > EWRAM
.iwram ORIGIN(IWRAM) : AT (__iwram_lma)
ALIGN(4)
{
__iwram_start = .;
*(.iwram*);
__iwram_end = .;
} > IWRAM
.iwram.bss (NOLOAD) :
ALIGN(4)
{
src/*.o(.bss);
@ -38,9 +55,8 @@ SECTIONS {
} > IWRAM
/* BEGIN ROM DATA */
. = 0x8000000;
.text :
.text ORIGIN(ROM) :
ALIGN(4)
{
src/rom_header.o(.text*);
@ -125,6 +141,20 @@ SECTIONS {
src/graphics.o(.rodata);
} > ROM =0
.data.iwram :
ALIGN(4)
{
__iwram_lma = .;
. = . + (__iwram_end - __iwram_start);
} > ROM = 0
.data.ewram :
ALIGN(4)
{
__ewram_lma = .;
. = . + (__ewram_end - __ewram_start);
} > ROM = 0
__rom_end = .;
/* DWARF debug sections.

View File

@ -12,15 +12,32 @@ MEMORY
}
SECTIONS {
ewram 0x2000000 (NOLOAD) :
.ewram ORIGIN(EWRAM) : AT (__ewram_lma)
ALIGN(4)
{
src/*.o(ewram_data);
gflib/*.o(ewram_data);
test/*.o(ewram_data);
__ewram_start = .;
*(.ewram*)
__ewram_end = .;
} > EWRAM
iwram 0x3000000 (NOLOAD) :
.ewram.sbss (NOLOAD) :
ALIGN(4)
{
src/*.o(.sbss);
gflib/*.o(.sbss);
test/*.o(.sbss);
} > EWRAM
.iwram ORIGIN(IWRAM) : AT (__iwram_lma)
ALIGN(4)
{
__iwram_start = .;
*(.iwram*);
__iwram_end = .;
} > IWRAM
.iwram.sbss (NOLOAD) :
ALIGN(4)
{
src/*.o(.bss);
@ -97,6 +114,20 @@ SECTIONS {
src/libisagbprn.o(.rodata);
} > ROM =0
.data.iwram :
ALIGN(4)
{
__iwram_lma = .;
. = . + (__iwram_end - __iwram_start);
} > ROM = 0
.data.ewram :
ALIGN(4)
{
__ewram_lma = .;
. = . + (__ewram_end - __ewram_start);
} > ROM = 0
tests :
ALIGN(4)
{

View File

@ -2153,8 +2153,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_ROLE_PLAY:
if (aiData->abilities[battlerAtk] == aiData->abilities[battlerDef]
|| aiData->abilities[battlerDef] == ABILITY_NONE
|| IsRolePlayDoodleBannedAbilityAttacker(aiData->abilities[battlerAtk])
|| IsRolePlayDoodleBannedAbility(aiData->abilities[battlerDef]))
|| gAbilities[aiData->abilities[battlerAtk]].cantBeSuppressed
|| gAbilities[aiData->abilities[battlerDef]].cantBeCopied)
ADJUST_SCORE(-10);
else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5))
ADJUST_SCORE(-4);
@ -2183,25 +2183,26 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_SKILL_SWAP:
if (aiData->abilities[battlerAtk] == ABILITY_NONE || aiData->abilities[battlerDef] == ABILITY_NONE
|| IsSkillSwapBannedAbility(aiData->abilities[battlerAtk]) || IsSkillSwapBannedAbility(aiData->abilities[battlerDef])
|| gAbilities[aiData->abilities[battlerAtk]].cantBeSwapped
|| gAbilities[aiData->abilities[battlerDef]].cantBeSwapped
|| aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD)
ADJUST_SCORE(-10);
break;
case EFFECT_WORRY_SEED:
if (aiData->abilities[battlerDef] == ABILITY_INSOMNIA
|| IsWorrySeedBannedAbility(aiData->abilities[battlerDef])
|| gAbilities[aiData->abilities[battlerDef]].cantBeOverwritten
|| aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD)
ADJUST_SCORE(-10);
break;
case EFFECT_GASTRO_ACID:
if (gStatuses3[battlerDef] & STATUS3_GASTRO_ACID
|| IsGastroAcidBannedAbility(aiData->abilities[battlerDef]))
|| gAbilities[aiData->abilities[battlerDef]].cantBeSuppressed)
ADJUST_SCORE(-10);
break;
case EFFECT_ENTRAINMENT:
if (aiData->abilities[battlerAtk] == ABILITY_NONE
|| IsEntrainmentBannedAbilityAttacker(aiData->abilities[battlerAtk])
|| IsEntrainmentBannedAbility(aiData->abilities[battlerDef])
|| gAbilities[aiData->abilities[battlerAtk]].cantBeCopied
|| gAbilities[aiData->abilities[battlerDef]].cantBeOverwritten
|| aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD)
ADJUST_SCORE(-10);
break;
@ -2209,7 +2210,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_SIMPLE_BEAM:
if (aiData->abilities[battlerDef] == ABILITY_SIMPLE
|| IsSimpleBeamBannedAbility(aiData->abilities[battlerDef])
|| gAbilities[aiData->abilities[battlerDef]].cantBeOverwritten
|| aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD)
ADJUST_SCORE(-10);
break;
@ -4377,8 +4378,8 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
}
break;
case EFFECT_ROLE_PLAY:
if (!IsRolePlayDoodleBannedAbilityAttacker(aiData->abilities[battlerAtk])
&& !IsRolePlayDoodleBannedAbility(aiData->abilities[battlerDef])
if (!gAbilities[aiData->abilities[battlerAtk]].cantBeSuppressed
&& !gAbilities[aiData->abilities[battlerDef]].cantBeCopied
&& !IsAbilityOfRating(aiData->abilities[battlerAtk], 5)
&& IsAbilityOfRating(aiData->abilities[battlerDef], 5))
ADJUST_SCORE(2);

View File

@ -9210,28 +9210,14 @@ static void Cmd_various(void)
i = GetBattlerAbility(gBattlerAbility);
if (IsBattlerAlive(gBattlerAbility)
&& (i == ABILITY_RECEIVER || i == ABILITY_POWER_OF_ALCHEMY)
&& GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD)
&& GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD
&& !gAbilities[gBattleMons[battler].ability].cantBeCopied)
{
switch (gBattleMons[battler].ability)
{ // Can't copy these abilities.
case ABILITY_POWER_OF_ALCHEMY: case ABILITY_RECEIVER:
case ABILITY_FORECAST: case ABILITY_MULTITYPE:
case ABILITY_FLOWER_GIFT: case ABILITY_ILLUSION:
case ABILITY_WONDER_GUARD: case ABILITY_ZEN_MODE:
case ABILITY_STANCE_CHANGE: case ABILITY_IMPOSTER:
case ABILITY_POWER_CONSTRUCT: case ABILITY_BATTLE_BOND:
case ABILITY_SCHOOLING: case ABILITY_COMATOSE:
case ABILITY_SHIELDS_DOWN: case ABILITY_DISGUISE:
case ABILITY_RKS_SYSTEM: case ABILITY_TRACE:
case ABILITY_ZERO_TO_HERO:
break;
default:
gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[battler].ability; // re-using the variable for trace
gBattleScripting.battler = battler;
BattleScriptPush(cmd->nextInstr);
gBattlescriptCurrInstr = BattleScript_ReceiverActivates;
return;
}
gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[battler].ability; // re-using the variable for trace
gBattleScripting.battler = battler;
BattleScriptPush(cmd->nextInstr);
gBattlescriptCurrInstr = BattleScript_ReceiverActivates;
return;
}
break;
}
@ -9329,7 +9315,7 @@ static void Cmd_various(void)
case VARIOUS_SET_SIMPLE_BEAM:
{
VARIOUS_ARGS(const u8 *failInstr);
if (IsSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability)
if (gAbilities[gBattleMons[gBattlerTarget].ability].cantBeOverwritten
|| gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE)
{
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
@ -9353,8 +9339,8 @@ static void Cmd_various(void)
case VARIOUS_TRY_ENTRAINMENT:
{
VARIOUS_ARGS(const u8 *failInstr);
if (IsEntrainmentBannedAbilityAttacker(gBattleMons[gBattlerAttacker].ability)
|| IsEntrainmentBannedAbility(gBattleMons[gBattlerTarget].ability))
if (gAbilities[gBattleMons[gBattlerAttacker].ability].cantBeCopied
|| gAbilities[gBattleMons[gBattlerTarget].ability].cantBeOverwritten)
{
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
gBattlescriptCurrInstr = cmd->failInstr;
@ -13951,9 +13937,9 @@ static void Cmd_trycopyability(void)
if (gBattleMons[battler].ability == defAbility
|| defAbility == ABILITY_NONE
|| IsRolePlayDoodleBannedAbilityAttacker(gBattleMons[battler].ability)
|| IsRolePlayDoodleBannedAbilityAttacker(gBattleMons[BATTLE_PARTNER(battler)].ability)
|| IsRolePlayDoodleBannedAbility(defAbility))
|| gAbilities[gBattleMons[battler].ability].cantBeSuppressed
|| gAbilities[gBattleMons[BATTLE_PARTNER(battler)].ability].cantBeSuppressed
|| gAbilities[defAbility].cantBeCopied)
{
gBattlescriptCurrInstr = cmd->failInstr;
}
@ -14029,7 +14015,7 @@ static void Cmd_setgastroacid(void)
{
CMD_ARGS(const u8 *failInstr);
if (IsGastroAcidBannedAbility(gBattleMons[gBattlerTarget].ability))
if (gAbilities[gBattleMons[gBattlerTarget].ability].cantBeSuppressed)
{
gBattlescriptCurrInstr = cmd->failInstr;
}
@ -14129,8 +14115,8 @@ static void Cmd_tryswapabilities(void)
{
CMD_ARGS(const u8 *failInstr);
if (IsSkillSwapBannedAbility(gBattleMons[gBattlerAttacker].ability)
|| IsSkillSwapBannedAbility(gBattleMons[gBattlerTarget].ability))
if (gAbilities[gBattleMons[gBattlerAttacker].ability].cantBeSwapped
|| gAbilities[gBattleMons[gBattlerTarget].ability].cantBeSwapped)
{
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
gBattlescriptCurrInstr = cmd->failInstr;
@ -15489,7 +15475,8 @@ static void Cmd_tryworryseed(void)
{
CMD_ARGS(const u8 *failInstr);
if (IsWorrySeedBannedAbility(gBattleMons[gBattlerTarget].ability))
if (gAbilities[gBattleMons[gBattlerTarget].ability].cantBeOverwritten
|| gBattleMons[gBattlerTarget].ability == ABILITY_INSOMNIA)
{
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);

View File

@ -94,224 +94,6 @@ static const u8 sPkblToEscapeFactor[][3] = {
static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
static const u16 sSkillSwapBannedAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_BATTLE_BOND,
ABILITY_COMATOSE,
ABILITY_COMMANDER,
ABILITY_DISGUISE,
ABILITY_GULP_MISSILE,
ABILITY_HADRON_ENGINE,
ABILITY_HUNGER_SWITCH,
ABILITY_ICE_FACE,
ABILITY_ILLUSION,
ABILITY_MULTITYPE,
ABILITY_NEUTRALIZING_GAS,
ABILITY_ORICHALCUM_PULSE,
ABILITY_POWER_CONSTRUCT,
ABILITY_PROTOSYNTHESIS,
ABILITY_QUARK_DRIVE,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_STANCE_CHANGE,
ABILITY_WONDER_GUARD,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
static const u16 sRolePlayDoodleBannedAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_BATTLE_BOND,
ABILITY_COMATOSE,
ABILITY_COMMANDER,
ABILITY_DISGUISE,
ABILITY_FLOWER_GIFT,
ABILITY_FORECAST,
ABILITY_GULP_MISSILE,
ABILITY_HADRON_ENGINE,
ABILITY_HUNGER_SWITCH,
ABILITY_ICE_FACE,
ABILITY_ILLUSION,
ABILITY_IMPOSTER,
ABILITY_MULTITYPE,
ABILITY_NEUTRALIZING_GAS,
ABILITY_ORICHALCUM_PULSE,
ABILITY_POWER_CONSTRUCT,
ABILITY_POWER_OF_ALCHEMY,
ABILITY_PROTOSYNTHESIS,
ABILITY_QUARK_DRIVE,
ABILITY_RECEIVER,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_STANCE_CHANGE,
ABILITY_TRACE,
ABILITY_WONDER_GUARD,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
static const u16 sRolePlayDoodleBannedAttackerAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_BATTLE_BOND,
ABILITY_COMATOSE,
ABILITY_COMMANDER,
ABILITY_DISGUISE,
ABILITY_GULP_MISSILE,
ABILITY_HADRON_ENGINE,
ABILITY_ICE_FACE,
ABILITY_MULTITYPE,
ABILITY_ORICHALCUM_PULSE,
ABILITY_POWER_CONSTRUCT,
ABILITY_PROTOSYNTHESIS,
ABILITY_QUARK_DRIVE,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_STANCE_CHANGE,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
static const u16 sWorrySeedBannedAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_BATTLE_BOND,
ABILITY_COMATOSE,
ABILITY_COMMANDER,
ABILITY_DISGUISE,
ABILITY_GULP_MISSILE,
ABILITY_HADRON_ENGINE,
ABILITY_ICE_FACE,
ABILITY_INSOMNIA,
ABILITY_MULTITYPE,
ABILITY_ORICHALCUM_PULSE,
ABILITY_POWER_CONSTRUCT,
ABILITY_PROTOSYNTHESIS,
ABILITY_QUARK_DRIVE,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_STANCE_CHANGE,
ABILITY_TRUANT,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
static const u16 sGastroAcidBannedAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_BATTLE_BOND,
ABILITY_COMATOSE,
ABILITY_COMMANDER,
ABILITY_DISGUISE,
ABILITY_GULP_MISSILE,
ABILITY_HADRON_ENGINE,
ABILITY_ICE_FACE,
ABILITY_MULTITYPE,
ABILITY_ORICHALCUM_PULSE,
ABILITY_POWER_CONSTRUCT,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_STANCE_CHANGE,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
static const u16 sEntrainmentBannedAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_BATTLE_BOND,
ABILITY_COMATOSE,
ABILITY_COMMANDER,
ABILITY_DISGUISE,
ABILITY_GULP_MISSILE,
ABILITY_HADRON_ENGINE,
ABILITY_ICE_FACE,
ABILITY_MULTITYPE,
ABILITY_ORICHALCUM_PULSE,
ABILITY_POWER_CONSTRUCT,
ABILITY_PROTOSYNTHESIS,
ABILITY_QUARK_DRIVE,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_STANCE_CHANGE,
ABILITY_TRUANT,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
static const u16 sEntrainmentBannedAttackerAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_BATTLE_BOND,
ABILITY_COMATOSE,
ABILITY_COMMANDER,
ABILITY_DISGUISE,
ABILITY_FLOWER_GIFT,
ABILITY_FORECAST,
ABILITY_GULP_MISSILE,
ABILITY_HADRON_ENGINE,
ABILITY_HUNGER_SWITCH,
ABILITY_ICE_FACE,
ABILITY_ILLUSION,
ABILITY_IMPOSTER,
ABILITY_MULTITYPE,
ABILITY_NEUTRALIZING_GAS,
ABILITY_ORICHALCUM_PULSE,
ABILITY_POWER_CONSTRUCT,
ABILITY_POWER_OF_ALCHEMY,
ABILITY_PROTOSYNTHESIS,
ABILITY_QUARK_DRIVE,
ABILITY_RECEIVER,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_STANCE_CHANGE,
ABILITY_TRACE,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
static const u16 sSimpleBeamBannedAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_BATTLE_BOND,
ABILITY_COMATOSE,
ABILITY_COMMANDER,
ABILITY_DISGUISE,
ABILITY_GULP_MISSILE,
ABILITY_HADRON_ENGINE,
ABILITY_ICE_FACE,
ABILITY_MULTITYPE,
ABILITY_ORICHALCUM_PULSE,
ABILITY_POWER_CONSTRUCT,
ABILITY_PROTOSYNTHESIS,
ABILITY_QUARK_DRIVE,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_SIMPLE,
ABILITY_STANCE_CHANGE,
ABILITY_TRUANT,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
static u8 CalcBeatUpPower(void)
{
u8 basePower;
@ -985,114 +767,6 @@ void HandleAction_ActionFinished(void)
}
}
static const u8 sAbilitiesAffectedByMoldBreaker[] =
{
[ABILITY_BATTLE_ARMOR] = 1,
[ABILITY_CLEAR_BODY] = 1,
[ABILITY_DAMP] = 1,
[ABILITY_DRY_SKIN] = 1,
[ABILITY_FILTER] = 1,
[ABILITY_FLASH_FIRE] = 1,
[ABILITY_FLOWER_GIFT] = 1,
[ABILITY_HEATPROOF] = 1,
[ABILITY_HYPER_CUTTER] = 1,
[ABILITY_IMMUNITY] = 1,
[ABILITY_INNER_FOCUS] = 1,
[ABILITY_INSOMNIA] = 1,
[ABILITY_KEEN_EYE] = 1,
[ABILITY_LEAF_GUARD] = 1,
[ABILITY_LEVITATE] = 1,
[ABILITY_LIGHTNING_ROD] = 1,
[ABILITY_LIMBER] = 1,
[ABILITY_MAGMA_ARMOR] = 1,
[ABILITY_MARVEL_SCALE] = 1,
[ABILITY_MOTOR_DRIVE] = 1,
[ABILITY_OBLIVIOUS] = 1,
[ABILITY_OWN_TEMPO] = 1,
[ABILITY_SAND_VEIL] = 1,
[ABILITY_SHELL_ARMOR] = 1,
[ABILITY_SHIELD_DUST] = 1,
[ABILITY_SIMPLE] = 1,
[ABILITY_SNOW_CLOAK] = 1,
[ABILITY_SOLID_ROCK] = 1,
[ABILITY_SOUNDPROOF] = 1,
[ABILITY_STICKY_HOLD] = 1,
[ABILITY_STORM_DRAIN] = 1,
[ABILITY_STURDY] = 1,
[ABILITY_SUCTION_CUPS] = 1,
[ABILITY_TANGLED_FEET] = 1,
[ABILITY_THICK_FAT] = 1,
[ABILITY_UNAWARE] = 1,
[ABILITY_VITAL_SPIRIT] = 1,
[ABILITY_VOLT_ABSORB] = 1,
[ABILITY_WATER_ABSORB] = 1,
[ABILITY_WATER_VEIL] = 1,
[ABILITY_WHITE_SMOKE] = 1,
[ABILITY_WONDER_GUARD] = 1,
[ABILITY_BIG_PECKS] = 1,
[ABILITY_CONTRARY] = 1,
[ABILITY_FRIEND_GUARD] = 1,
[ABILITY_HEAVY_METAL] = 1,
[ABILITY_LIGHT_METAL] = 1,
[ABILITY_MAGIC_BOUNCE] = 1,
[ABILITY_MULTISCALE] = 1,
[ABILITY_SAP_SIPPER] = 1,
[ABILITY_TELEPATHY] = 1,
[ABILITY_WONDER_SKIN] = 1,
[ABILITY_AROMA_VEIL] = 1,
[ABILITY_BULLETPROOF] = 1,
[ABILITY_FLOWER_VEIL] = 1,
[ABILITY_FUR_COAT] = 1,
[ABILITY_OVERCOAT] = 1,
[ABILITY_SWEET_VEIL] = 1,
[ABILITY_DAZZLING] = 1,
[ABILITY_DISGUISE] = 1,
[ABILITY_FLUFFY] = 1,
[ABILITY_QUEENLY_MAJESTY] = 1,
[ABILITY_WATER_BUBBLE] = 1,
[ABILITY_MIRROR_ARMOR] = 1,
[ABILITY_PUNK_ROCK] = 1,
[ABILITY_ICE_SCALES] = 1,
[ABILITY_ICE_FACE] = 1,
[ABILITY_PASTEL_VEIL] = 1,
[ABILITY_ARMOR_TAIL] = 1,
[ABILITY_EARTH_EATER] = 1,
[ABILITY_GOOD_AS_GOLD] = 1,
[ABILITY_PURIFYING_SALT] = 1,
[ABILITY_WELL_BAKED_BODY] = 1,
[ABILITY_MINDS_EYE] = 1,
[ABILITY_ILLUMINATE] = 1,
};
static const u8 sAbilitiesNotTraced[ABILITIES_COUNT] =
{
[ABILITY_AS_ONE_ICE_RIDER] = 1,
[ABILITY_AS_ONE_SHADOW_RIDER] = 1,
[ABILITY_BATTLE_BOND] = 1,
[ABILITY_COMATOSE] = 1,
[ABILITY_DISGUISE] = 1,
[ABILITY_FLOWER_GIFT] = 1,
[ABILITY_FORECAST] = 1,
[ABILITY_GULP_MISSILE] = 1,
[ABILITY_HUNGER_SWITCH] = 1,
[ABILITY_ICE_FACE] = 1,
[ABILITY_ILLUSION] = 1,
[ABILITY_IMPOSTER] = 1,
[ABILITY_MULTITYPE] = 1,
[ABILITY_NEUTRALIZING_GAS] = 1,
[ABILITY_NONE] = 1,
[ABILITY_POWER_CONSTRUCT] = 1,
[ABILITY_POWER_OF_ALCHEMY] = 1,
[ABILITY_RECEIVER] = 1,
[ABILITY_RKS_SYSTEM] = 1,
[ABILITY_SCHOOLING] = 1,
[ABILITY_SHIELDS_DOWN] = 1,
[ABILITY_STANCE_CHANGE] = 1,
[ABILITY_TRACE] = 1,
[ABILITY_ZEN_MODE] = 1,
[ABILITY_ZERO_TO_HERO] = 1,
};
static const u8 sHoldEffectToType[][2] =
{
{HOLD_EFFECT_BUG_POWER, TYPE_BUG},
@ -5459,34 +5133,22 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
&& IsBattlerAlive(gBattlerAttacker)
&& TARGET_TURN_DAMAGED
&& IsMoveMakingContact(move, gBattlerAttacker)
&& gBattleStruct->overwrittenAbilities[gBattlerAttacker] != GetBattlerAbility(gBattlerTarget))
&& gBattleStruct->overwrittenAbilities[gBattlerAttacker] != GetBattlerAbility(gBattlerTarget)
&& gBattleMons[gBattlerTarget].ability != ABILITY_MUMMY
&& gBattleMons[gBattlerTarget].ability != ABILITY_LINGERING_AROMA
&& !gAbilities[gBattleMons[gBattlerTarget].ability].cantBeSuppressed)
{
switch (gBattleMons[gBattlerAttacker].ability)
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
{
case ABILITY_MUMMY:
case ABILITY_BATTLE_BOND:
case ABILITY_COMATOSE:
case ABILITY_DISGUISE:
case ABILITY_MULTITYPE:
case ABILITY_POWER_CONSTRUCT:
case ABILITY_RKS_SYSTEM:
case ABILITY_SCHOOLING:
case ABILITY_SHIELDS_DOWN:
case ABILITY_STANCE_CHANGE:
break;
default:
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
{
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD);
break;
}
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_MummyActivates;
effect++;
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD);
break;
}
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_MummyActivates;
effect++;
break;
}
break;
case ABILITY_WANDERING_SPIRIT:
@ -5494,40 +5156,22 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
&& IsBattlerAlive(gBattlerAttacker)
&& TARGET_TURN_DAMAGED
&& IsMoveMakingContact(move, gBattlerAttacker)
&& !IsDynamaxed(gBattlerTarget))
&& !IsDynamaxed(gBattlerTarget)
&& !gAbilities[gBattleMons[gBattlerAttacker].ability].cantBeSwapped)
{
switch (gBattleMons[gBattlerAttacker].ability)
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
{
case ABILITY_DISGUISE:
case ABILITY_FLOWER_GIFT:
case ABILITY_GULP_MISSILE:
case ABILITY_HUNGER_SWITCH:
case ABILITY_ICE_FACE:
case ABILITY_ILLUSION:
case ABILITY_IMPOSTER:
case ABILITY_RECEIVER:
case ABILITY_RKS_SYSTEM:
case ABILITY_SCHOOLING:
case ABILITY_STANCE_CHANGE:
case ABILITY_WONDER_GUARD:
case ABILITY_ZEN_MODE:
case ABILITY_ZERO_TO_HERO:
break;
default:
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
{
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD);
break;
}
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gLastUsedAbility;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates;
effect++;
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD);
break;
}
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gLastUsedAbility;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates;
effect++;
break;
}
break;
case ABILITY_ANGER_POINT:
@ -6152,17 +5796,17 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0
&& !sAbilitiesNotTraced[gBattleMons[target2].ability] && gBattleMons[target2].hp != 0)
if (!gAbilities[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0
&& !gAbilities[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0)
chosenTarget = GetBattlerAtPosition((RandomPercentage(RNG_TRACE, 50) * 2) | side), effect++;
else if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0)
else if (!gAbilities[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0)
chosenTarget = target1, effect++;
else if (!sAbilitiesNotTraced[gBattleMons[target2].ability] && gBattleMons[target2].hp != 0)
else if (!gAbilities[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0)
chosenTarget = target2, effect++;
}
else
{
if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0)
if (!gAbilities[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0)
chosenTarget = target1, effect++;
}
@ -6324,35 +5968,6 @@ bool32 TryPrimalReversion(u32 battler)
return FALSE;
}
static const u16 sNeutralizingGasBannedAbilities[] =
{
ABILITY_AS_ONE_ICE_RIDER,
ABILITY_AS_ONE_SHADOW_RIDER,
ABILITY_COMATOSE,
ABILITY_DISGUISE,
ABILITY_GULP_MISSILE,
ABILITY_ICE_FACE,
ABILITY_MULTITYPE,
ABILITY_POWER_CONSTRUCT,
ABILITY_RKS_SYSTEM,
ABILITY_SCHOOLING,
ABILITY_SHIELDS_DOWN,
ABILITY_STANCE_CHANGE,
ABILITY_ZEN_MODE,
ABILITY_ZERO_TO_HERO,
};
bool32 IsNeutralizingGasBannedAbility(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sNeutralizingGasBannedAbilities); i++)
{
if (ability == sNeutralizingGasBannedAbilities[i])
return TRUE;
}
return FALSE;
}
bool32 IsNeutralizingGasOnField(void)
{
u32 i;
@ -6386,10 +6001,13 @@ bool32 IsMoldBreakerTypeAbility(u32 ability)
u32 GetBattlerAbility(u32 battler)
{
if (gAbilities[gBattleMons[battler].ability].cantBeSuppressed)
return gBattleMons[battler].ability;
if (gStatuses3[battler] & STATUS3_GASTRO_ACID)
return ABILITY_NONE;
if (IsNeutralizingGasOnField() && !IsNeutralizingGasBannedAbility(gBattleMons[battler].ability))
if (IsNeutralizingGasOnField() && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS)
return ABILITY_NONE;
if (IsMyceliumMightOnField())
@ -6398,7 +6016,7 @@ u32 GetBattlerAbility(u32 battler)
if (((IsMoldBreakerTypeAbility(gBattleMons[gBattlerAttacker].ability)
&& !(gStatuses3[gBattlerAttacker] & STATUS3_GASTRO_ACID))
|| gBattleMoves[gCurrentMove].ignoresTargetAbility)
&& sAbilitiesAffectedByMoldBreaker[gBattleMons[battler].ability]
&& gAbilities[gBattleMons[battler].ability].breakable
&& gBattlerByTurnOrder[gCurrentTurnActionNumber] == gBattlerAttacker
&& gActionsByTurnOrder[gBattlerByTurnOrder[gBattlerAttacker]] == B_ACTION_USE_MOVE
&& gCurrentTurnActionNumber < gBattlersCount)
@ -10953,95 +10571,6 @@ bool32 CanFling(u32 battler)
return TRUE;
}
// Ability checks
bool32 IsSkillSwapBannedAbility(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sSkillSwapBannedAbilities); i++)
{
if (ability == sSkillSwapBannedAbilities[i])
return TRUE;
}
return FALSE;
}
bool32 IsRolePlayDoodleBannedAbility(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sRolePlayDoodleBannedAbilities); i++)
{
if (ability == sRolePlayDoodleBannedAbilities[i])
return TRUE;
}
return FALSE;
}
bool32 IsRolePlayDoodleBannedAbilityAttacker(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sRolePlayDoodleBannedAttackerAbilities); i++)
{
if (ability == sRolePlayDoodleBannedAttackerAbilities[i])
return TRUE;
}
return FALSE;
}
bool32 IsWorrySeedBannedAbility(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sWorrySeedBannedAbilities); i++)
{
if (ability == sWorrySeedBannedAbilities[i])
return TRUE;
}
return FALSE;
}
bool32 IsGastroAcidBannedAbility(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sGastroAcidBannedAbilities); i++)
{
if (ability == sGastroAcidBannedAbilities[i])
return TRUE;
}
return FALSE;
}
bool32 IsEntrainmentBannedAbility(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sEntrainmentBannedAbilities); i++)
{
if (ability == sEntrainmentBannedAbilities[i])
return TRUE;
}
return FALSE;
}
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sEntrainmentBannedAttackerAbilities); i++)
{
if (ability == sEntrainmentBannedAttackerAbilities[i])
return TRUE;
}
return FALSE;
}
bool32 IsSimpleBeamBannedAbility(u16 ability)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sSimpleBeamBannedAbilities); i++)
{
if (ability == sSimpleBeamBannedAbilities[i])
return TRUE;
}
return FALSE;
}
// Sort an array of battlers by speed
// Useful for effects like pickpocket, eject button, red card, dancer
void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast)

View File

@ -6,22 +6,28 @@
.align 2, 0
Init::
@ Set up location for IRQ stack
mov r0, #PSR_IRQ_MODE
msr cpsr_cf, r0
ldr sp, sp_irq
@ Set up location for system stack
mov r0, #PSR_SYS_MODE
msr cpsr_cf, r0
ldr sp, sp_sys
@ Prepare for interrupt handling
ldr r1, =INTR_VECTOR
adr r0, IntrMain
str r0, [r1]
.if MODERN
@ Dispatch memory reset request to hardware
mov r0, #255 @ RESET_ALL
svc #1 << 16
.endif @ MODERN
@ Fill RAM areas with appropriate data
bl InitializeWorkingMemory
@ Jump to AgbMain
ldr r1, =AgbMain + 1
mov lr, pc
bx r1
@ Re-init if AgbMain exits
b Init
.align 2, 0
@ -124,3 +130,54 @@ IntrMain_RetAddr:
.pool
.align 2, 0 @ Don't pad with nop.
@ Fills initialized IWRAM and EWRAM sections in RAM from LMA areas in ROM
InitializeWorkingMemory:
push {r0-r3,lr}
ldr r0, =__iwram_lma
ldr r1, =__iwram_start
ldr r2, =__iwram_end
cmp r1, r2
beq skip_iwram_copy
bl CopyMemory_DMA
skip_iwram_copy:
ldr r0, =__ewram_lma
ldr r1, =__ewram_start
ldr r2, =__ewram_end
cmp r1, r2
beq skip_ewram_copy
bl CopyMemory_DMA
skip_ewram_copy:
pop {r0-r3,lr}
bx lr
@ Uses a DMA transfer to load from r0 into r1 until r2
CopyMemory_DMA:
subs r2, r2, r1
lsr r2, r2, #2
mov r4, #0x80000000
orr r4, r4, #(1 << 26)
orr r2, r2, r4
ldr r3, =REG_DMA3
stmia r3, {r0, r1, r2}
bx lr
.thumb
@ Called from C code to reinitialize working memory after a link connection failure
ReInitializeEWRAM::
ldr r0, =__ewram_lma
ldr r1, =__ewram_start
ldr r2, =__ewram_end
cmp r1, r2
beq EndReinitializeEWRAM
subs r2, r1
movs r3, #1
lsls r3, r3, #26
orrs r2, r2, r3
swi 0x0B
EndReinitializeEWRAM:
bx lr
.pool
.align 2, 0 @ Don't pad with nop.

View File

@ -5,6 +5,8 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("-------"),
.description = COMPOUND_STRING("No special ability."),
.aiRating = 0,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_STENCH] =
@ -33,6 +35,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Battle Armor"),
.description = COMPOUND_STRING("Blocks critical hits."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_STURDY] =
@ -40,6 +43,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Sturdy"),
.description = COMPOUND_STRING("Negates 1-hit KO attacks."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_DAMP] =
@ -47,6 +51,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Damp"),
.description = COMPOUND_STRING("Prevents self-destruction."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_LIMBER] =
@ -54,6 +59,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Limber"),
.description = COMPOUND_STRING("Prevents paralysis."),
.aiRating = 3,
.breakable = TRUE,
},
[ABILITY_SAND_VEIL] =
@ -61,6 +67,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Sand Veil"),
.description = COMPOUND_STRING("Ups evasion in a sandstorm."),
.aiRating = 3,
.breakable = TRUE,
},
[ABILITY_STATIC] =
@ -75,6 +82,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Volt Absorb"),
.description = COMPOUND_STRING("Turns electricity into HP."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_WATER_ABSORB] =
@ -82,6 +90,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Water Absorb"),
.description = COMPOUND_STRING("Changes water into HP."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_OBLIVIOUS] =
@ -89,6 +98,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Oblivious"),
.description = COMPOUND_STRING("Prevents attraction."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_CLOUD_NINE] =
@ -114,6 +124,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Insomnia"),
.description = COMPOUND_STRING("Prevents sleep."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_COLOR_CHANGE] =
@ -128,6 +139,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Immunity"),
.description = COMPOUND_STRING("Prevents poisoning."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_FLASH_FIRE] =
@ -135,6 +147,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Flash Fire"),
.description = COMPOUND_STRING("Powers up if hit by fire."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_SHIELD_DUST] =
@ -142,6 +155,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Shield Dust"),
.description = COMPOUND_STRING("Prevents added effects."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_OWN_TEMPO] =
@ -149,6 +163,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Own Tempo"),
.description = COMPOUND_STRING("Prevents confusion."),
.aiRating = 3,
.breakable = TRUE,
},
[ABILITY_SUCTION_CUPS] =
@ -156,6 +171,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Suction Cups"),
.description = COMPOUND_STRING("Firmly anchors the body."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_INTIMIDATE] =
@ -184,6 +200,9 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Wonder Guard"),
.description = COMPOUND_STRING("“Supereffective” hits."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.breakable = TRUE,
},
[ABILITY_LEVITATE] =
@ -191,6 +210,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Levitate"),
.description = COMPOUND_STRING("Not hit by Ground attacks."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_EFFECT_SPORE] =
@ -212,6 +232,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Clear Body"),
.description = COMPOUND_STRING("Prevents ability reduction."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_NATURAL_CURE] =
@ -230,6 +251,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Draws electrical moves."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_SERENE_GRACE] =
@ -258,6 +280,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Illuminate"),
.description = COMPOUND_STRING("Encounter rate increases."),
.aiRating = 0,
.breakable = TRUE,
},
[ABILITY_TRACE] =
@ -265,6 +288,8 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Trace"),
.description = COMPOUND_STRING("Copies special ability."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_HUGE_POWER] =
@ -286,6 +311,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Inner Focus"),
.description = COMPOUND_STRING("Prevents flinching."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_MAGMA_ARMOR] =
@ -293,6 +319,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Magma Armor"),
.description = COMPOUND_STRING("Prevents freezing."),
.aiRating = 1,
.breakable = TRUE,
},
[ABILITY_WATER_VEIL] =
@ -300,6 +327,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Water Veil"),
.description = COMPOUND_STRING("Prevents burns."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_MAGNET_PULL] =
@ -314,6 +342,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Soundproof"),
.description = COMPOUND_STRING("Avoids sound-based moves."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_RAIN_DISH] =
@ -342,6 +371,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Thick Fat"),
.description = COMPOUND_STRING("Heat-and-cold protection."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_EARLY_BIRD] =
@ -370,6 +400,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Keen Eye"),
.description = COMPOUND_STRING("Prevents loss of accuracy."),
.aiRating = 1,
.breakable = TRUE,
},
[ABILITY_HYPER_CUTTER] =
@ -377,6 +408,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Hyper Cutter"),
.description = COMPOUND_STRING("Prevents Attack reduction."),
.aiRating = 3,
.breakable = TRUE,
},
[ABILITY_PICKUP] =
@ -391,6 +423,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Truant"),
.description = COMPOUND_STRING("Moves only every two turns."),
.aiRating = -2,
.cantBeOverwritten = TRUE,
},
[ABILITY_HUSTLE] =
@ -426,6 +459,8 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Forecast"),
.description = COMPOUND_STRING("Changes with the weather."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_STICKY_HOLD] =
@ -433,6 +468,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Sticky Hold"),
.description = COMPOUND_STRING("Prevents item theft."),
.aiRating = 3,
.breakable = TRUE,
},
[ABILITY_SHED_SKIN] =
@ -454,6 +490,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Marvel Scale"),
.description = COMPOUND_STRING("Ups Defense if suffering."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_LIQUID_OOZE] =
@ -517,6 +554,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Vital Spirit"),
.description = COMPOUND_STRING("Prevents sleep."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_WHITE_SMOKE] =
@ -524,6 +562,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("White Smoke"),
.description = COMPOUND_STRING("Prevents ability reduction."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_PURE_POWER] =
@ -538,6 +577,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Shell Armor"),
.description = COMPOUND_STRING("Blocks critical hits."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_AIR_LOCK] =
@ -552,6 +592,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Tangled Feet"),
.description = COMPOUND_STRING("Ups evasion if confused."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_MOTOR_DRIVE] =
@ -559,6 +600,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Motor Drive"),
.description = COMPOUND_STRING("Electricity raises Speed."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_RIVALRY] =
@ -580,6 +622,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Snow Cloak"),
.description = COMPOUND_STRING("Ups evasion in Hail or Snow."),
.aiRating = 3,
.breakable = TRUE,
},
[ABILITY_GLUTTONY] =
@ -608,6 +651,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Heatproof"),
.description = COMPOUND_STRING("Heat and burn protection."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_SIMPLE] =
@ -615,6 +659,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Simple"),
.description = COMPOUND_STRING("Prone to wild stat changes."),
.aiRating = 8,
.breakable = TRUE,
},
[ABILITY_DRY_SKIN] =
@ -622,6 +667,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Dry Skin"),
.description = COMPOUND_STRING("Prefers moisture to heat."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_DOWNLOAD] =
@ -727,6 +773,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Leaf Guard"),
.description = COMPOUND_STRING("Blocks status in sunshine."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_KLUTZ] =
@ -776,6 +823,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Unaware"),
.description = COMPOUND_STRING("Ignores stat changes."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_TINTED_LENS] =
@ -790,6 +838,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Filter"),
.description = COMPOUND_STRING("Weakens “supereffective”."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_SLOW_START] =
@ -811,6 +860,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Storm Drain"),
.description = COMPOUND_STRING("Draws in Water moves."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_ICE_BODY] =
@ -825,6 +875,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Solid Rock"),
.description = COMPOUND_STRING("Weakens “supereffective”."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_SNOW_WARNING] =
@ -860,6 +911,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Multitype"),
.description = COMPOUND_STRING("Changes type to its Plate."),
.aiRating = 8,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_FLOWER_GIFT] =
@ -867,6 +923,9 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Flower Gift"),
.description = COMPOUND_STRING("Allies power up in sunshine."),
.aiRating = 4,
.cantBeCopied = TRUE,
.cantBeTraced = TRUE,
.breakable = TRUE,
},
[ABILITY_BAD_DREAMS] =
@ -895,6 +954,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Contrary"),
.description = COMPOUND_STRING("Inverts stat changes."),
.aiRating = 8,
.breakable = TRUE,
},
[ABILITY_UNNERVE] =
@ -937,6 +997,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Friend Guard"),
.description = COMPOUND_STRING("Lowers damage to partner."),
.aiRating = 0,
.breakable = TRUE,
},
[ABILITY_WEAK_ARMOR] =
@ -951,6 +1012,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Heavy Metal"),
.description = COMPOUND_STRING("Doubles weight."),
.aiRating = -1,
.breakable = TRUE,
},
[ABILITY_LIGHT_METAL] =
@ -958,6 +1020,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Light Metal"),
.description = COMPOUND_STRING("Halves weight."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_MULTISCALE] =
@ -965,6 +1028,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Multiscale"),
.description = COMPOUND_STRING("Halves damage at full HP."),
.aiRating = 8,
.breakable = TRUE,
},
[ABILITY_TOXIC_BOOST] =
@ -993,6 +1057,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Telepathy"),
.description = COMPOUND_STRING("Can't be damaged by an ally."),
.aiRating = 0,
.breakable = TRUE,
},
[ABILITY_MOODY] =
@ -1007,6 +1072,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Overcoat"),
.description = COMPOUND_STRING("Blocks weather and powder."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_POISON_TOUCH] =
@ -1028,6 +1094,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Big Pecks"),
.description = COMPOUND_STRING("Prevents Defense loss."),
.aiRating = 1,
.breakable = TRUE,
},
[ABILITY_SAND_RUSH] =
@ -1042,6 +1109,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Wonder Skin"),
.description = COMPOUND_STRING("May avoid status problems."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_ANALYTIC] =
@ -1056,6 +1124,9 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Illusion"),
.description = COMPOUND_STRING("Appears as a partner."),
.aiRating = 8,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_IMPOSTER] =
@ -1063,6 +1134,8 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Imposter"),
.description = COMPOUND_STRING("Transforms into the foe."),
.aiRating = 9,
.cantBeCopied = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_INFILTRATOR] =
@ -1105,6 +1178,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Magic Bounce"),
.description = COMPOUND_STRING("Reflects status moves."),
.aiRating = 9,
.breakable = TRUE,
},
[ABILITY_SAP_SIPPER] =
@ -1112,6 +1186,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Sap Sipper"),
.description = COMPOUND_STRING("Grass increases Attack."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_PRANKSTER] =
@ -1140,6 +1215,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Zen Mode"),
.description = COMPOUND_STRING("Transforms at half HP."),
.aiRating = -1,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = B_UPDATED_ABILITY_DATA >= GEN_7,
},
[ABILITY_VICTORY_STAR] =
@ -1168,6 +1247,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Aroma Veil"),
.description = COMPOUND_STRING("Prevents limiting of moves."),
.aiRating = 3,
.breakable = TRUE,
},
[ABILITY_FLOWER_VEIL] =
@ -1238,6 +1318,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Sweet Veil"),
.description = COMPOUND_STRING("Prevents party from sleep."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_STANCE_CHANGE] =
@ -1249,6 +1330,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Transforms as it battles."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_GALE_WINGS] =
@ -1274,6 +1360,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Grass Pelt"),
.description = COMPOUND_STRING("Ups Defense in grass."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_SYMBIOSIS] =
@ -1420,6 +1507,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Shields Down"),
.description = COMPOUND_STRING("Shell breaks at half HP."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_STAKEOUT] =
@ -1497,6 +1589,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Schooling"),
.description = COMPOUND_STRING("Forms a school when strong."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_DISGUISE] =
@ -1504,6 +1601,12 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Disguise"),
.description = COMPOUND_STRING("Decoy protects it once."),
.aiRating = 8,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_BATTLE_BOND] =
@ -1511,6 +1614,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Battle Bond"),
.description = COMPOUND_STRING("Changes form after a KO."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_POWER_CONSTRUCT] =
@ -1522,6 +1630,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Cells aid it when weakened."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_CORROSION] =
@ -1536,6 +1649,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Comatose"),
.description = COMPOUND_STRING("Always drowsing."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_QUEENLY_MAJESTY] =
@ -1547,6 +1665,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Protects from priority."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_INNARDS_OUT] =
@ -1575,6 +1694,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Fluffy"),
.description = COMPOUND_STRING("Tougher but flammable."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_DAZZLING] =
@ -1582,6 +1702,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Dazzling"),
.description = COMPOUND_STRING("Protects from priority."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_SOUL_HEART] =
@ -1607,6 +1728,8 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Receiver"),
.description = COMPOUND_STRING("Copies ally's ability."),
.aiRating = 0,
.cantBeCopied = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_POWER_OF_ALCHEMY] =
@ -1618,6 +1741,8 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Copies ally's ability."),
.aiRating = 0,
.cantBeCopied = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_BEAST_BOOST] =
@ -1632,6 +1757,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("RKS System"),
.description = COMPOUND_STRING("Memories change its type."),
.aiRating = 8,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_ELECTRIC_SURGE] =
@ -1764,6 +1894,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Mirror Armor"),
.description = COMPOUND_STRING("Reflect stat decreases."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_GULP_MISSILE] =
@ -1771,6 +1902,9 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Gulp Missile"),
.description = COMPOUND_STRING("If hit, spits prey from sea."),
.aiRating = 3,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_STALWART] =
@ -1792,6 +1926,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Punk Rock"),
.description = COMPOUND_STRING("Ups and resists sound."),
.aiRating = 2,
.breakable = TRUE,
},
[ABILITY_SAND_SPIT] =
@ -1806,6 +1941,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Ice Scales"),
.description = COMPOUND_STRING("Halves special damage."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_RIPEN] =
@ -1820,6 +1956,13 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Ice Face"),
.description = COMPOUND_STRING("Hail or Snow renew free hit."),
.aiRating = 4,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
.breakable = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_POWER_SPOT] =
@ -1896,6 +2039,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("All Abilities are nullified."),
.aiRating = 5,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_PASTEL_VEIL] =
@ -1903,6 +2050,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Pastel Veil"),
.description = COMPOUND_STRING("Protects team from poison."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_HUNGER_SWITCH] =
@ -1914,6 +2062,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Changes form each turn."),
.aiRating = 2,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_QUICK_DRAW] =
@ -1978,6 +2130,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("As One"),
.description = COMPOUND_STRING("Unnerve and Chilling Neigh."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_AS_ONE_SHADOW_RIDER] =
@ -1985,6 +2142,11 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("As One"),
.description = COMPOUND_STRING("Unnerve and Grim Neigh."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
},
[ABILITY_LINGERING_AROMA] =
@ -2014,6 +2176,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Fire hits up Attack."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_ANGER_SHELL] =
@ -2032,6 +2195,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Protected by pure salts."),
.aiRating = 6,
.breakable = TRUE,
},
[ABILITY_WELL_BAKED_BODY] =
@ -2043,6 +2207,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Strengthened by Fire."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_WIND_RIDER] =
@ -2050,6 +2215,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Wind Rider"),
.description = COMPOUND_STRING("Ups Attack if hit by wind."),
.aiRating = 4,
.breakable = TRUE,
},
[ABILITY_GUARD_DOG] =
@ -2057,6 +2223,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Guard Dog"),
.description = COMPOUND_STRING("Cannot be intimidated."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_ROCKY_PAYLOAD] =
@ -2082,6 +2249,12 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Zero to Hero"),
.description = COMPOUND_STRING("Changes form on switch out."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_COMMANDER] =
@ -2089,6 +2262,9 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Commander"),
.description = COMPOUND_STRING("Commands from Dondozo."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_ELECTROMORPHOSIS] =
@ -2111,6 +2287,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Sun boosts best stat."),
.aiRating = 7,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_QUARK_DRIVE] =
@ -2118,6 +2298,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Quark Drive"),
.description = COMPOUND_STRING("Elec. field ups best stat."),
.aiRating = 7,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_GOOD_AS_GOLD] =
@ -2125,6 +2309,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Good as Gold"),
.description = COMPOUND_STRING("Avoids status problems."),
.aiRating = 8,
.breakable = TRUE,
},
[ABILITY_VESSEL_OF_RUIN] =
@ -2136,6 +2321,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Lowers foes' sp. damage."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_SWORD_OF_RUIN] =
@ -2147,6 +2333,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Lowers foes' Defense."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_TABLETS_OF_RUIN] =
@ -2158,6 +2345,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Lowers foes' damage."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_BEADS_OF_RUIN] =
@ -2169,6 +2357,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Lowers foes' Sp. Defense."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_ORICHALCUM_PULSE] =
@ -2244,6 +2433,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Armor Tail"),
.description = COMPOUND_STRING("Protects from priority."),
.aiRating = 5,
.breakable = TRUE,
},
[ABILITY_EARTH_EATER] =
@ -2251,6 +2441,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Earth Eater"),
.description = COMPOUND_STRING("Eats ground to heal HP."),
.aiRating = 7,
.breakable = TRUE,
},
[ABILITY_MYCELIUM_MIGHT] =
@ -2276,6 +2467,7 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Mind's Eye"),
.description = COMPOUND_STRING("Keen Eye and Scrappy."),
.aiRating = 8,
.breakable = TRUE,
},
[ABILITY_EMBODY_ASPECT_TEAL] =
@ -2287,6 +2479,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Raises Speed."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_EMBODY_ASPECT_HEARTHFLAME] =
@ -2298,6 +2494,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Raises Attack."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_EMBODY_ASPECT_WELLSPRING] =
@ -2309,6 +2509,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Raises Sp. Def."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_EMBODY_ASPECT_CORNERSTONE] =
@ -2320,6 +2524,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Raises Defense."),
.aiRating = 6,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_TOXIC_CHAIN] =
@ -2345,6 +2553,12 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Tera Shift"),
.description = COMPOUND_STRING("Terasteralizes upon entry."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.cantBeSuppressed = TRUE,
.cantBeOverwritten = TRUE,
.failsOnImposter = TRUE,
},
[ABILITY_TERA_SHELL] =
@ -2352,6 +2566,10 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
.name = _("Tera Shell"),
.description = COMPOUND_STRING("Resistant to types at full HP."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
.breakable = TRUE,
},
[ABILITY_TERAFORM_ZERO] =
@ -2363,6 +2581,9 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Removes weather and terrain."),
.aiRating = 10,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
},
[ABILITY_POISON_PUPPETEER] =
@ -2374,5 +2595,8 @@ const struct Ability gAbilities[ABILITIES_COUNT] =
#endif
.description = COMPOUND_STRING("Confuses poisoned foes."),
.aiRating = 8,
.cantBeCopied = TRUE,
.cantBeSwapped = TRUE,
.cantBeTraced = TRUE,
},
};

View File

@ -9269,6 +9269,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/shiny.gbapal.lz");
const u8 gMonIcon_Dipplin[] = INCBIN_U8("graphics/pokemon/dipplin/icon.4bpp");
// const u8 gMonFootprint_Dipplin[] = INCBIN_U8("graphics/pokemon/dipplin/footprint.1bpp");
// const u32 gMonFrontPic_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/front.4bpp.lz");
// const u32 gMonPalette_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/normal.gbapal.lz");
// const u32 gMonBackPic_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/back.4bpp.lz");
// const u32 gMonShinyPalette_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/shiny.gbapal.lz");
// const u8 gMonIcon_Hydrapple[] = INCBIN_U8("graphics/pokemon/hydrapple/icon.4bpp");
// const u8 gMonFootprint_Hydrapple[] = INCBIN_U8("graphics/pokemon/hydrapple/footprint.1bpp");
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_APPLIN
@ -9767,6 +9774,15 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_DuraludonGigantamax[] = INCBIN_U8("graphics/pokemon/duraludon/gigantamax/icon.4bpp");
#endif //P_GIGANTAMAX_FORMS
#if P_GEN_9_CROSS_EVOS
// const u32 gMonFrontPic_Archaludon[] = INCBIN_U32("graphics/pokemon/archaludon/front.4bpp.lz");
// const u32 gMonPalette_Archaludon[] = INCBIN_U32("graphics/pokemon/archaludon/normal.gbapal.lz");
// const u32 gMonBackPic_Archaludon[] = INCBIN_U32("graphics/pokemon/archaludon/back.4bpp.lz");
// const u32 gMonShinyPalette_Archaludon[] = INCBIN_U32("graphics/pokemon/archaludon/shiny.gbapal.lz");
// const u8 gMonIcon_Archaludon[] = INCBIN_U8("graphics/pokemon/archaludon/icon.4bpp");
// const u8 gMonFootprint_Archaludon[] = INCBIN_U8("graphics/pokemon/archaludon/footprint.1bpp");
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_DREEPY
@ -10906,6 +10922,72 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
// const u32 gMonShinyPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/shiny.gbapal.lz");
#endif //P_FAMILY_OGERPON
#if P_FAMILY_GOUGING_FIRE
// const u32 gMonFrontPic_GougingFire[] = INCBIN_U32("graphics/pokemon/gouging_fire/front.4bpp.lz");
// const u32 gMonPalette_GougingFire[] = INCBIN_U32("graphics/pokemon/gouging_fire/normal.gbapal.lz");
// const u32 gMonBackPic_GougingFire[] = INCBIN_U32("graphics/pokemon/gouging_fire/back.4bpp.lz");
// const u32 gMonShinyPalette_GougingFire[] = INCBIN_U32("graphics/pokemon/gouging_fire/shiny.gbapal.lz");
// const u8 gMonIcon_GougingFire[] = INCBIN_U8("graphics/pokemon/gouging_fire/icon.4bpp");
// const u8 gMonFootprint_GougingFire[] = INCBIN_U8("graphics/pokemon/gouging_fire/footprint.1bpp");
#endif //P_FAMILY_GOUGING_FIRE
#if P_FAMILY_RAGING_BOLT
// const u32 gMonFrontPic_RagingBolt[] = INCBIN_U32("graphics/pokemon/raging_bolt/front.4bpp.lz");
// const u32 gMonPalette_RagingBolt[] = INCBIN_U32("graphics/pokemon/raging_bolt/normal.gbapal.lz");
// const u32 gMonBackPic_RagingBolt[] = INCBIN_U32("graphics/pokemon/raging_bolt/back.4bpp.lz");
// const u32 gMonShinyPalette_RagingBolt[] = INCBIN_U32("graphics/pokemon/raging_bolt/shiny.gbapal.lz");
// const u8 gMonIcon_RagingBolt[] = INCBIN_U8("graphics/pokemon/raging_bolt/icon.4bpp");
// const u8 gMonFootprint_RagingBolt[] = INCBIN_U8("graphics/pokemon/raging_bolt/footprint.1bpp");
#endif //P_FAMILY_RAGING_BOLT
#if P_FAMILY_IRON_BOULDER
// const u32 gMonFrontPic_IronBoulder[] = INCBIN_U32("graphics/pokemon/iron_boulder/front.4bpp.lz");
// const u32 gMonPalette_IronBoulder[] = INCBIN_U32("graphics/pokemon/iron_boulder/normal.gbapal.lz");
// const u32 gMonBackPic_IronBoulder[] = INCBIN_U32("graphics/pokemon/iron_boulder/back.4bpp.lz");
// const u32 gMonShinyPalette_IronBoulder[] = INCBIN_U32("graphics/pokemon/iron_boulder/shiny.gbapal.lz");
// const u8 gMonIcon_IronBoulder[] = INCBIN_U8("graphics/pokemon/iron_boulder/icon.4bpp");
// const u8 gMonFootprint_IronBoulder[] = INCBIN_U8("graphics/pokemon/iron_boulder/footprint.1bpp");
#endif //P_FAMILY_IRON_BOULDER
#if P_FAMILY_IRON_CROWN
// const u32 gMonFrontPic_IronCrown[] = INCBIN_U32("graphics/pokemon/iron_crown/front.4bpp.lz");
// const u32 gMonPalette_IronCrown[] = INCBIN_U32("graphics/pokemon/iron_crown/normal.gbapal.lz");
// const u32 gMonBackPic_IronCrown[] = INCBIN_U32("graphics/pokemon/iron_crown/back.4bpp.lz");
// const u32 gMonShinyPalette_IronCrown[] = INCBIN_U32("graphics/pokemon/iron_crown/shiny.gbapal.lz");
// const u8 gMonIcon_IronCrown[] = INCBIN_U8("graphics/pokemon/iron_crown/icon.4bpp");
// const u8 gMonFootprint_IronCrown[] = INCBIN_U8("graphics/pokemon/iron_crown/footprint.1bpp");
#endif //P_FAMILY_IRON_CROWN
#if P_FAMILY_TERAPAGOS
// const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/front.4bpp.lz");
// const u32 gMonPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/normal.gbapal.lz");
// const u32 gMonBackPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/back.4bpp.lz");
// const u32 gMonShinyPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/shiny.gbapal.lz");
// const u8 gMonIcon_TerapagosNormal[] = INCBIN_U8("graphics/pokemon/terapagos/icon.4bpp");
// const u8 gMonFootprint_Terapagos[] = INCBIN_U8("graphics/pokemon/terapagos/footprint.1bpp");
// const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/front.4bpp.lz");
// const u32 gMonPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/normal.gbapal.lz");
// const u32 gMonBackPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/back.4bpp.lz");
// const u32 gMonShinyPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/shiny.gbapal.lz");
// const u8 gMonIcon_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/icon.4bpp");
// const u32 gMonFrontPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/front.4bpp.lz");
// const u32 gMonPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/normal.gbapal.lz");
// const u32 gMonBackPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/back.4bpp.lz");
// const u32 gMonShinyPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/shiny.gbapal.lz");
// const u8 gMonIcon_TerapagosStellar[] = INCBIN_U8("graphics/pokemon/terapagos/stellar/icon.4bpp");
#endif //P_FAMILY_TERAPAGOS
#if P_FAMILY_PECHARUNT
// const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz");
// const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz");
// const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz");
// const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz");
// const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp");
// const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp");
#endif //P_FAMILY_PECHARUNT
const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz");
const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz");
const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp");

View File

@ -1092,5 +1092,14 @@ static const struct FormChange sOgerponFormChangeTable[] = {
};
#endif //P_FAMILY_OGERPON
#if P_FAMILY_TERAPAGOS
static const struct FormChange sTerapagosFormChangeTable[] = {
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_TERAPAGOS_TERASTAL}, //needs to be tied to the ability
//{FORM_CHANGE_TERASTALLIZATION, SPECIES_TERAPAGOS_STELLAR},
{FORM_CHANGE_END_BATTLE, SPECIES_TERAPAGOS_NORMAL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TERAPAGOS
#undef WHEN_LEARNED
#undef WHEN_FORGOTTEN

View File

@ -1761,3 +1761,12 @@ static const u16 sOgerponFormSpeciesIdTable[] = {
FORM_SPECIES_END,
};
#endif //P_FAMILY_OGERPON
#if P_FAMILY_TERAPAGOS
static const u16 sTerapagosFormSpeciesIdTable[] = {
SPECIES_TERAPAGOS_NORMAL,
SPECIES_TERAPAGOS_TERASTAL,
SPECIES_TERAPAGOS_STELLAR,
FORM_SPECIES_END,
};
#endif //P_FAMILY_TERAPAGOS

View File

@ -629,6 +629,7 @@ const u8 *const gItemEffectTable[ITEMS_COUNT] =
[ITEM_SYRUPY_APPLE] = gItemEffect_EvoItem,
[ITEM_UNREMARKABLE_TEACUP] = gItemEffect_EvoItem,
[ITEM_MASTERPIECE_TEACUP] = gItemEffect_EvoItem,
[ITEM_METAL_ALLOY] = gItemEffect_EvoItem,
// Berries
[ITEM_CHERI_BERRY] = gItemEffect_CheriBerry,

View File

@ -19855,6 +19855,26 @@ static const struct LevelUpMove sDipplinLevelUpLearnset[] = {
LEVEL_UP_MOVE(44, MOVE_SUBSTITUTE),
LEVEL_UP_END
};
static const struct LevelUpMove sHydrappleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FICKLE_BEAM),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 4, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE( 8, MOVE_GROWTH),
LEVEL_UP_MOVE(12, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(16, MOVE_PROTECT),
LEVEL_UP_MOVE(20, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(28, MOVE_SYRUP_BOMB),
LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(36, MOVE_RECOVER),
LEVEL_UP_MOVE(40, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(44, MOVE_SUBSTITUTE),
LEVEL_UP_MOVE(54, MOVE_POWER_WHIP),
LEVEL_UP_END
};
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_APPLIN
@ -20571,6 +20591,26 @@ static const struct LevelUpMove sDuraludonLevelUpLearnset[] = {
LEVEL_UP_MOVE(66, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
#if P_GEN_9_CROSS_EVOS
static const struct LevelUpMove sArchaludonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_ELECTRO_SHOT),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 6, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE(12, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(18, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(24, MOVE_BREAKING_SWIPE),
LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(42, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(48, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(54, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE(60, MOVE_METAL_BURST),
LEVEL_UP_MOVE(66, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_DREEPY
@ -23146,4 +23186,133 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
LEVEL_UP_MOVE(66, MOVE_WOOD_HAMMER),
LEVEL_UP_END
};
#endif
#endif //P_FAMILY_OGERPON
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 7, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(14, MOVE_HOWL),
LEVEL_UP_MOVE(21, MOVE_BITE),
LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(35, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE(42, MOVE_MORNING_SUN),
LEVEL_UP_MOVE(49, MOVE_BURNING_BULWARK),
LEVEL_UP_MOVE(56, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(63, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(70, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(77, MOVE_OUTRAGE),
LEVEL_UP_MOVE(84, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE(91, MOVE_RAGING_FURY),
LEVEL_UP_END
};
#endif //P_FAMILY_GOUGING_FIRE
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 7, MOVE_CHARGE),
LEVEL_UP_MOVE(14, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(21, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE(28, MOVE_DISCHARGE),
LEVEL_UP_MOVE(35, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(42, MOVE_CALM_MIND),
LEVEL_UP_MOVE(49, MOVE_THUNDERCLAP),
LEVEL_UP_MOVE(56, MOVE_DRAGON_HAMMER),
LEVEL_UP_MOVE(63, MOVE_RISING_VOLTAGE),
LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(77, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(84, MOVE_BODY_PRESS),
LEVEL_UP_MOVE(91, MOVE_THUNDER),
LEVEL_UP_END
};
#endif //P_FAMILY_RAGING_BOLT
#if P_FAMILY_IRON_BOULDER
static const struct LevelUpMove sIronBoulderLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(14, MOVE_SLASH),
LEVEL_UP_MOVE(21, MOVE_AGILITY),
LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(35, MOVE_COUNTER),
LEVEL_UP_MOVE(42, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(49, MOVE_SACRED_SWORD),
LEVEL_UP_MOVE(56, MOVE_MIGHTY_CLEAVE),
LEVEL_UP_MOVE(63, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(70, MOVE_MEGAHORN),
LEVEL_UP_MOVE(77, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(91, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
#endif //P_FAMILY_IRON_BOULDER
#if P_FAMILY_IRON_CROWN
static const struct LevelUpMove sIronCrownLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 7, MOVE_SMART_STRIKE),
LEVEL_UP_MOVE(14, MOVE_SLASH),
LEVEL_UP_MOVE(21, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(28, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(35, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(42, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE(49, MOVE_SACRED_SWORD),
LEVEL_UP_MOVE(56, MOVE_TACHYON_CUTTER),
LEVEL_UP_MOVE(63, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(70, MOVE_VOLT_SWITCH),
LEVEL_UP_MOVE(77, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_METAL_BURST),
LEVEL_UP_MOVE(91, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
#endif //P_FAMILY_IRON_CROWN
#if P_FAMILY_TERAPAGOS
static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(10, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(20, MOVE_HEADBUTT),
LEVEL_UP_MOVE(30, MOVE_PROTECT),
LEVEL_UP_MOVE(40, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE(60, MOVE_TERA_STARSTORM),
LEVEL_UP_MOVE(70, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(80, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(90, MOVE_GYRO_BALL),
LEVEL_UP_END
};
#endif //P_FAMILY_TERAPAGOS
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 8, MOVE_WITHDRAW),
LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND),
LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS),
LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT),
LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN),
LEVEL_UP_MOVE(56, MOVE_TOXIC),
LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(72, MOVE_RECOVER),
LEVEL_UP_END
};
#endif //P_FAMILY_PECHARUNT

View File

@ -26,6 +26,7 @@ const u16 gPokedexOrder_Alphabetical[] =
NATIONAL_DEX_ARBOLIVA,
NATIONAL_DEX_ARCANINE,
NATIONAL_DEX_ARCEUS,
NATIONAL_DEX_ARCHALUDON,
NATIONAL_DEX_ARCHEN,
NATIONAL_DEX_ARCHEOPS,
NATIONAL_DEX_ARCTIBAX,
@ -361,6 +362,7 @@ const u16 gPokedexOrder_Alphabetical[] =
NATIONAL_DEX_GOTHITA,
NATIONAL_DEX_GOTHITELLE,
NATIONAL_DEX_GOTHORITA,
NATIONAL_DEX_GOUGING_FIRE,
NATIONAL_DEX_GOURGEIST,
NATIONAL_DEX_GRAFAIAI,
NATIONAL_DEX_GRANBULL,
@ -416,6 +418,7 @@ const u16 gPokedexOrder_Alphabetical[] =
NATIONAL_DEX_HOUNDOUR,
NATIONAL_DEX_HOUNDSTONE,
NATIONAL_DEX_HUNTAIL,
NATIONAL_DEX_HYDRAPPLE,
NATIONAL_DEX_HYDREIGON,
NATIONAL_DEX_HYPNO,
@ -427,7 +430,9 @@ const u16 gPokedexOrder_Alphabetical[] =
NATIONAL_DEX_INFERNAPE,
NATIONAL_DEX_INKAY,
NATIONAL_DEX_INTELEON,
NATIONAL_DEX_IRON_BOULDER,
NATIONAL_DEX_IRON_BUNDLE,
NATIONAL_DEX_IRON_CROWN,
NATIONAL_DEX_IRON_HANDS,
NATIONAL_DEX_IRON_JUGULIS,
NATIONAL_DEX_IRON_LEAVES,
@ -658,6 +663,7 @@ const u16 gPokedexOrder_Alphabetical[] =
NATIONAL_DEX_PAWMO,
NATIONAL_DEX_PAWMOT,
NATIONAL_DEX_PAWNIARD,
NATIONAL_DEX_PECHARUNT,
NATIONAL_DEX_PELIPPER,
NATIONAL_DEX_PERRSERKER,
NATIONAL_DEX_PERSIAN,
@ -715,6 +721,7 @@ const u16 gPokedexOrder_Alphabetical[] =
NATIONAL_DEX_RABOOT,
NATIONAL_DEX_RABSCA,
NATIONAL_DEX_RAGING_BOLT,
NATIONAL_DEX_RAICHU,
NATIONAL_DEX_RAIKOU,
NATIONAL_DEX_RALTS,
@ -906,6 +913,7 @@ const u16 gPokedexOrder_Alphabetical[] =
NATIONAL_DEX_TENTACOOL,
NATIONAL_DEX_TENTACRUEL,
NATIONAL_DEX_TEPIG,
NATIONAL_DEX_TERAPAGOS,
NATIONAL_DEX_TERRAKION,
NATIONAL_DEX_THIEVUL,
NATIONAL_DEX_THROH,
@ -1078,6 +1086,7 @@ const u16 gPokedexOrder_Weight[] =
//NATIONAL_DEX_MINIOR_CORE_INDIGO,
//NATIONAL_DEX_MINIOR_CORE_VIOLET,
NATIONAL_DEX_MILCERY,
NATIONAL_DEX_PECHARUNT,
// 0.9 lbs / 0.4 kg
NATIONAL_DEX_POLTEAGEIST,
NATIONAL_DEX_CURSOLA,
@ -1397,6 +1406,7 @@ const u16 gPokedexOrder_Weight[] =
//NATIONAL_DEX_MELOETTA_PIROUETTE,
NATIONAL_DEX_PAWMO,
NATIONAL_DEX_SMOLIV,
NATIONAL_DEX_TERAPAGOS,//_NORMAL
// 14.6 lbs / 6.6 kg
NATIONAL_DEX_RALTS,
NATIONAL_DEX_WHIMSICOTT,
@ -1662,6 +1672,7 @@ const u16 gPokedexOrder_Weight[] =
NATIONAL_DEX_CORVISQUIRE,
NATIONAL_DEX_NACLI,
NATIONAL_DEX_MASCHIFF,
//NATIONAL_DEX_TERAPAGOS_TERASTAL
// 35.9 lbs / 16.3 kg
NATIONAL_DEX_WHISMUR,
NATIONAL_DEX_LILLIGANT,
@ -2281,6 +2292,7 @@ const u16 gPokedexOrder_Weight[] =
NATIONAL_DEX_LATIOS,
//NATIONAL_DEX_GUMSHOOS_TOTEM_SIZED,
NATIONAL_DEX_SANDY_SHOCKS,
NATIONAL_DEX_ARCHALUDON,
// 132.7 lbs / 60.2 kg
NATIONAL_DEX_FINIZEN,
NATIONAL_DEX_PALAFIN,//_ZERO,
@ -2377,6 +2389,7 @@ const u16 gPokedexOrder_Weight[] =
NATIONAL_DEX_COFAGRIGUS,
// 168.9 lbs / 76.6 kg
NATIONAL_DEX_GOLDUCK,
//NATIONAL_DEX_TERAPAGOS_STELLAR
// 170.6 lbs / 77.4 kg
NATIONAL_DEX_CACTURNE,
// 172.0 lbs / 78.0 kg
@ -2477,6 +2490,8 @@ const u16 gPokedexOrder_Weight[] =
// 204.8 lbs / 92.9 kg
NATIONAL_DEX_DARMANITAN,//_STANDARD_MODE,
//NATIONAL_DEX_DARMANITAN_ZEN_MODE,
// 205.0 lbs / 93.0 kg
NATIONAL_DEX_HYDRAPPLE,
// 208.6 lbs / 94.6 kg
NATIONAL_DEX_BOUFFALANT,
NATIONAL_DEX_SAMUROTT,
@ -2659,6 +2674,8 @@ const u16 gPokedexOrder_Weight[] =
NATIONAL_DEX_ARCANINE,
// 342.8 lbs / 155.5 kg
//NATIONAL_DEX_VENUSAUR_MEGA,
// 343.9 lbs / 156.0 kg
NATIONAL_DEX_IRON_CROWN,
// 352.7 lbs / 160.0 kg
NATIONAL_DEX_HYDREIGON,
NATIONAL_DEX_FARIGIRAF,
@ -2666,6 +2683,8 @@ const u16 gPokedexOrder_Weight[] =
//NATIONAL_DEX_SABLEYE_MEGA,
// 357.1 lbs / 162.0 kg
NATIONAL_DEX_MILOTIC,
// 358.2 lbs / 162.5 kg
NATIONAL_DEX_IRON_BOULDER,
// 370.4 lbs / 168.0 kg
//NATIONAL_DEX_ARCANINE_HISUIAN,
NATIONAL_DEX_LUNATONE,
@ -2859,6 +2878,8 @@ const u16 gPokedexOrder_Weight[] =
// 1014.1 lbs / 460.0 kg
NATIONAL_DEX_SNORLAX,
//NATIONAL_DEX_NECROZMA_DUSK_MANE,
// 1058.2 lbs / 480.0 kg
NATIONAL_DEX_RAGING_BOLT,
// 1080.3 lbs / 490.0 kg
//NATIONAL_DEX_HOOPA_UNBOUND,
// 1113.3 lbs / 505.0 kg
@ -2867,6 +2888,8 @@ const u16 gPokedexOrder_Weight[] =
NATIONAL_DEX_STONJOURNER,
// 1212.5 lbs / 550.0 kg
NATIONAL_DEX_METAGROSS,
// 1300.7 lbs / 590.0 kg
NATIONAL_DEX_GOUGING_FIRE,
// 1344.8 lbs / 610.0 kg
//NATIONAL_DEX_ZYGARDE_COMPLETE,
// 1433.8 lbs / 650.0 kg
@ -2965,6 +2988,7 @@ const u16 gPokedexOrder_Height[] =
NATIONAL_DEX_RELLOR,
NATIONAL_DEX_FLITTLE,
NATIONAL_DEX_SINISTCHA,
NATIONAL_DEX_TERAPAGOS,//_NORMAL
// 1'00" / 0.3m
NATIONAL_DEX_CATERPIE,
NATIONAL_DEX_WEEDLE,
@ -3129,6 +3153,8 @@ const u16 gPokedexOrder_Height[] =
//NATIONAL_DEX_TATSUGIRI_DROOPY,
//NATIONAL_DEX_TATSUGIRI_STRETCHY,
NATIONAL_DEX_GIMMIGHOUL,//_CHEST,
//NATIONAL_DEX_TERAPAGOS_TERASTAL,
NATIONAL_DEX_PECHARUNT,
// 0.4m
NATIONAL_DEX_SPRIGATITO,
NATIONAL_DEX_FUECOCO,
@ -3871,6 +3897,7 @@ const u16 gPokedexOrder_Height[] =
NATIONAL_DEX_GLIMMORA,
NATIONAL_DEX_WO_CHIEN,
NATIONAL_DEX_IRON_LEAVES,
NATIONAL_DEX_IRON_BOULDER,
// 5'03" / 1.6m
NATIONAL_DEX_BLASTOISE,
//NATIONAL_DEX_BLASTOISE_MEGA,
@ -3918,6 +3945,7 @@ const u16 gPokedexOrder_Height[] =
NATIONAL_DEX_CYCLIZAR,
NATIONAL_DEX_FLAMIGO,
NATIONAL_DEX_IRON_THORNS,
NATIONAL_DEX_IRON_CROWN,
// 5'07" / 1.7m
NATIONAL_DEX_CHARIZARD,
//NATIONAL_DEX_CHARIZARD_MEGA_X,
@ -3955,6 +3983,7 @@ const u16 gPokedexOrder_Height[] =
//NATIONAL_DEX_GOURGEIST_SUPER,
NATIONAL_DEX_VOLCANION,
NATIONAL_DEX_CRABOMINABLE,
//NATIONAL_DEX_TERAPAGOS_STELLAR
// 5'11" / 1.8m
NATIONAL_DEX_DODRIO,
NATIONAL_DEX_AERODACTYL,
@ -3993,6 +4022,7 @@ const u16 gPokedexOrder_Height[] =
NATIONAL_DEX_CLODSIRE,
NATIONAL_DEX_IRON_HANDS,
NATIONAL_DEX_OKIDOGI,
NATIONAL_DEX_HYDRAPPLE,
// 6'03" / 1.9m
NATIONAL_DEX_ARCANINE,
NATIONAL_DEX_RHYDON,
@ -4053,6 +4083,7 @@ const u16 gPokedexOrder_Height[] =
NATIONAL_DEX_HOUNDSTONE,
NATIONAL_DEX_KINGAMBIT,
NATIONAL_DEX_ROARING_MOON,
NATIONAL_DEX_ARCHALUDON,
// 6'11" / 2.1m
//NATIONAL_DEX_AERODACTYL_MEGA,
NATIONAL_DEX_SNORLAX,
@ -4198,6 +4229,7 @@ const u16 gPokedexOrder_Height[] =
NATIONAL_DEX_GROUDON,
NATIONAL_DEX_MIRAIDON,
NATIONAL_DEX_WALKING_WAKE,
NATIONAL_DEX_GOUGING_FIRE,
// 11'10" / 3.6m
//NATIONAL_DEX_KYUREM_WHITE,
NATIONAL_DEX_NAGANADEL,
@ -4229,6 +4261,7 @@ const u16 gPokedexOrder_Height[] =
//NATIONAL_DEX_ZYGARDE_50_POWER_CONSTRUCT,
// 17'01" / 5.2m
NATIONAL_DEX_LUGIA,
NATIONAL_DEX_RAGING_BOLT,
// 17'09" / 5.4m
NATIONAL_DEX_DIALGA,
// 18'01" / 5.5m

View File

@ -1938,6 +1938,54 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
ICON(Dipplin, 1),
//.footprint = gMonFootprint_Dipplin,
LEARNSETS(Dipplin),
.evolutions = EVOLUTION({EVO_MOVE, MOVE_DRAGON_CHEER, SPECIES_HYDRAPPLE}),
},
[SPECIES_HYDRAPPLE] =
{
.baseHP = 106,
.baseAttack = 80,
.baseDefense = 110,
.baseSpeed = 44,
.baseSpAttack = 120,
.baseSpDefense = 80,
.types = { TYPE_GRASS, TYPE_DRAGON },
.catchRate = 10,
.expYield = 170, //Currently unknown
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_ERRATIC,
.eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_DRAGON },
.abilities = { ABILITY_SUPERSWEET_SYRUP, ABILITY_REGENERATOR, ABILITY_STICKY_HOLD },
.bodyColor = BODY_COLOR_GREEN,
.speciesName = _("Hydrapple"),
//.cryId = CRY_HYDRAPPLE,
.natDexNum = NATIONAL_DEX_HYDRAPPLE,
.categoryName = _("Apple Hydra"),
.height = 18,
.weight = 930,
.description = COMPOUND_STRING(
"These capricious syrpents have\n"
"banded together. On the rare\n"
"occasion that their moods align,\n"
"their true power is unleashed."),
.pokemonScale = 356,
.pokemonOffset = 17,
.trainerScale = 256,
.trainerOffset = 0,
//FRONT_PIC(Hydrapple, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_Hydrapple,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(Hydrapple, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(Hydrapple),
//ICON(Hydrapple, 0),
//.footprint = gMonFootprint_Hydrapple,
LEARNSETS(Hydrapple),
},
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_APPLIN
@ -4215,6 +4263,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
//.backAnimId = BACK_ANIM_NONE,
PALETTES(Duraludon),
ICON(Duraludon, 0),
.evolutions = EVOLUTION({EVO_ITEM, ITEM_METAL_ALLOY, SPECIES_ARCHALUDON}),
},
#if P_GIGANTAMAX_FORMS
@ -4244,6 +4293,55 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.isGigantamax = TRUE,
},
#endif //P_GIGANTAMAX_FORMS
#if P_GEN_9_CROSS_EVOS
[SPECIES_ARCHALUDON] =
{
.baseHP = 90,
.baseAttack = 105,
.baseDefense = 130,
.baseSpeed = 85,
.baseSpAttack = 125,
.baseSpDefense = 65,
.types = { TYPE_STEEL, TYPE_DRAGON },
.catchRate = 10,
.expYield = 187, //Currently unknown
.evYield_Defense = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 30,
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_FAST,
.eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_DRAGON },
.abilities = { ABILITY_STAMINA, ABILITY_STURDY, ABILITY_STALWART },
.bodyColor = BODY_COLOR_WHITE,
.speciesName = _("Archaludon"),
//.cryId = CRY_ARCHALUDON,
.natDexNum = NATIONAL_DEX_ARCHALUDON,
.categoryName = _("Alloy"),
.height = 20,
.weight = 600,
.description = COMPOUND_STRING(
"It gathers static electricity\n"
"from its surroundings. The beams\n"
"it launches when down on all fours\n"
"are tremendously powerful."),
.pokemonScale = 267,
.pokemonOffset = 2,
.trainerScale = 286,
.trainerOffset = 1,
//FRONT_PIC(Archaludon, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_Archaludon,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(Archaludon, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(Archaludon),
//ICON(Archaludon, 0),
//.footprint = gMonFootprint_Archaludon,
LEARNSETS(Archaludon),
},
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_DREEPY

View File

@ -5026,7 +5026,9 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.height = 35,
.weight = 2800,
.description = COMPOUND_STRING(
"Ecology under research."),
"This ferocious creature is shrouded in\n"
"mystery. It's named after an aquatic\n"
"monster mentioned in an old journal."),
.pokemonScale = 356,
.pokemonOffset = 17,
.trainerScale = 256,
@ -5073,7 +5075,9 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.height = 15,
.weight = 1250,
.description = COMPOUND_STRING(
"Ecology under analysis."),
"According to the few eyewitness accounts\n"
"that exist, it used its shining blades\n"
"to julienne large trees and boulders."),
.pokemonScale = 356,
.pokemonOffset = 17,
.trainerScale = 256,
@ -5428,6 +5432,376 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
#endif //P_FAMILY_OGERPON
#if P_FAMILY_GOUGING_FIRE
[SPECIES_GOUGING_FIRE] =
{
.baseHP = 105,
.baseAttack = 115,
.baseDefense = 121,
.baseSpeed = 91,
.baseSpAttack = 65,
.baseSpDefense = 93,
.types = { TYPE_FIRE, TYPE_DRAGON },
.catchRate = 10,
.expYield = 261, //Currently unknown
.evYield_Defense = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 50,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE },
.bodyColor = BODY_COLOR_BROWN,
.isParadoxForm = TRUE,
.speciesName = _("GouginFire"),
//.cryId = CRY_GOUGING_FIRE,
.natDexNum = NATIONAL_DEX_GOUGING_FIRE,
.categoryName = _("Paradox"),
.height = 35,
.weight = 5900,
.description = COMPOUND_STRING(
"There are scant few reports of\n"
"this creature being sighted.\n"
"One short video shows it rampaging,\n"
"and spouting pillars of flame."),
.pokemonScale = 259,
.pokemonOffset = 0,
.trainerScale = 345,
.trainerOffset = 7,
//FRONT_PIC(GougingFire, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_GougingFire,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(GougingFire, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(GougingFire),
//ICON(GougingFire, 0),
//.footprint = gMonFootprint_GougingFire,
LEARNSETS(GougingFire),
},
#endif //P_FAMILY_GOUGING_FIRE
#if P_FAMILY_RAGING_BOLT
[SPECIES_RAGING_BOLT] =
{
.baseHP = 125,
.baseAttack = 73,
.baseDefense = 91,
.baseSpeed = 75,
.baseSpAttack = 137,
.baseSpDefense = 89,
.types = { TYPE_ELECTRIC, TYPE_DRAGON },
.catchRate = 10,
.expYield = 261, //Currently unknown
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 50,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE },
.bodyColor = BODY_COLOR_YELLOW,
.isParadoxForm = TRUE,
.speciesName = _("RagingBolt"),
//.cryId = CRY_RAGING_BOLT,
.natDexNum = NATIONAL_DEX_RAGING_BOLT,
.categoryName = _("Paradox"),
.height = 52,
.weight = 4800,
.description = COMPOUND_STRING(
"It bears resemblance to a Pokémon\n"
"that became a hot topic for a short\n"
"while after a paranomal magazine\n"
"touted it as Raikou's ancestor."),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 345,
.trainerOffset = 7,
//FRONT_PIC(RagingBolt, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_RagingBolt,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(RagingBolt, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(RagingBolt),
//ICON(RagingBolt, 0),
//.footprint = gMonFootprint_RagingBolt,
LEARNSETS(RagingBolt),
},
#endif //P_FAMILY_RAGING_BOLT
#if P_FAMILY_IRON_BOULDER
[SPECIES_IRON_BOULDER] =
{
.baseHP = 90,
.baseAttack = 120,
.baseDefense = 80,
.baseSpeed = 124,
.baseSpAttack = 68,
.baseSpDefense = 108,
.types = { TYPE_ROCK, TYPE_PSYCHIC },
.catchRate = 10,
.expYield = 261, //Currently unknown
.evYield_Speed = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 50,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE },
.bodyColor = BODY_COLOR_GRAY,
.isParadoxForm = TRUE,
.speciesName = _("IronBouldr"),
//.cryId = CRY_IRON_BOULDER,
.natDexNum = NATIONAL_DEX_IRON_BOULDER,
.categoryName = _("Paradox"),
.height = 15,
.weight = 1625,
.description = COMPOUND_STRING(
"It was named after a mysterious\n"
"object recorded in an old book.\n"
"Its body seems to be metallic."),
.pokemonScale = 256,
.pokemonOffset = 1,
.trainerScale = 336,
.trainerOffset = 4,
//FRONT_PIC(IronBoulder, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_IronBoulder,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(IronBoulder, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(IronBoulder),
//ICON(IronBoulder, 0),
//.footprint = gMonFootprint_IronBoulder,
LEARNSETS(IronBoulder),
},
#endif //P_FAMILY_IRON_BOULDER
#if P_FAMILY_IRON_CROWN
[SPECIES_IRON_CROWN] =
{
.baseHP = 90,
.baseAttack = 72,
.baseDefense = 100,
.baseSpeed = 98,
.baseSpAttack = 122,
.baseSpDefense = 108,
.types = { TYPE_STEEL, TYPE_PSYCHIC },
.catchRate = 10,
.expYield = 261, //Currently unknown
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 50,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE },
.bodyColor = BODY_COLOR_BLUE,
.isParadoxForm = TRUE,
.speciesName = _("Iron Crown"),
//.cryId = CRY_IRON_CROWN,
.natDexNum = NATIONAL_DEX_IRON_CROWN,
.categoryName = _("Paradox"),
.height = 16,
.weight = 1560,
.description = COMPOUND_STRING(
"It resembles a mysterious object\n"
"introduced in a paranormal magazine\n"
"as a cutting-edge weapon\n"
"shaped like Cobalion."),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 365,
.trainerOffset = 7,
//FRONT_PIC(IronCrown, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_IronCrown,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(IronCrown, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(IronCrown),
//ICON(IronCrown, 0),
//.footprint = gMonFootprint_IronCrown,
LEARNSETS(IronCrown),
},
#endif //P_FAMILY_IRON_CROWN
#if P_FAMILY_TERAPAGOS
#define TERAPAGOS_MISC_INFO \
.types = { TYPE_NORMAL, TYPE_NORMAL }, \
.catchRate = 255, \
.expYield = 275, \
.genderRatio = PERCENT_FEMALE(50), \
.eggCycles = 20, \
.friendship = STANDARD_FRIENDSHIP, \
.growthRate = GROWTH_SLOW, \
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, \
.bodyColor = BODY_COLOR_BLUE, \
.speciesName = _("Terapagos"), \
.natDexNum = NATIONAL_DEX_TERAPAGOS, \
.categoryName = _("Tera"), \
LEARNSETS(Terapagos), \
.formSpeciesIdTable = sTerapagosFormSpeciesIdTable, \
.formChangeTable = sTerapagosFormChangeTable, \
.isLegendary = TRUE
//.cryId = CRY_TERAPAGOS,
//.footprint = gMonFootprint_Terapagos,
[SPECIES_TERAPAGOS_NORMAL] =
{
TERAPAGOS_MISC_INFO,
.baseHP = 90,
.baseAttack = 65,
.baseDefense = 85,
.baseSpeed = 60,
.baseSpAttack = 65,
.baseSpDefense = 85,
.evYield_Defense = 1,
.abilities = { ABILITY_TERA_SHIFT, ABILITY_NONE },
.height = 2,
.weight = 65,
.description = COMPOUND_STRING(
"Terapagos protects itself using its\n"
"power to transform energy into hard\n"
"crystals. This Pokémon is the source\n"
"of the Terastal phenomenon."),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 365,
.trainerOffset = 7,
//FRONT_PIC(TerapagosNormal, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_TerapagosNormal,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(TerapagosNormal, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(TerapagosNormal),
//ICON(TerapagosNormal, 0),
},
[SPECIES_TERAPAGOS_TERASTAL] =
{
TERAPAGOS_MISC_INFO,
.baseHP = 95,
.baseAttack = 95,
.baseDefense = 110,
.baseSpeed = 85,
.baseSpAttack = 105,
.baseSpDefense = 110,
.evYield_Defense = 2,
.abilities = { ABILITY_TERA_SHELL, ABILITY_NONE },
.height = 3,
.weight = 160,
.description = COMPOUND_STRING(
"The shell is made of crystallized\n"
"Terastal energy. When struck by a move,\n"
"this shell absorbs the move's energy\n"
"and transfers it to Terapagos."),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 365,
.trainerOffset = 7,
//FRONT_PIC(TerapagosTerastal, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_TerapagosTerastal,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(TerapagosTerastal, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(TerapagosTerastal),
//ICON(TerapagosTerastal, 0),
},
[SPECIES_TERAPAGOS_STELLAR] =
{
TERAPAGOS_MISC_INFO,
.baseHP = 160,
.baseAttack = 105,
.baseDefense = 110,
.baseSpeed = 85,
.baseSpAttack = 130,
.baseSpDefense = 110,
.evYield_HP = 3,
.abilities = { ABILITY_TERAFORM_ZERO, ABILITY_NONE },
.height = 17,
.weight = 770,
.description = COMPOUND_STRING(
"An old expedition journal describes the\n"
"sight of this Pokémon buried in the,\n"
"depths of the earth as resembling a\n"
"planet floating in space."),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 365,
.trainerOffset = 7,
//FRONT_PIC(TerapagosStellar, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_TerapagosStellar,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(TerapagosStellar, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(TerapagosStellar),
//ICON(TerapagosStellar, 0),
},
#endif //P_FAMILY_TERAPAGOS
#if P_FAMILY_PECHARUNT
[SPECIES_PECHARUNT] =
{
.baseHP = 88,
.baseAttack = 88,
.baseDefense = 160,
.baseSpeed = 88,
.baseSpAttack = 88,
.baseSpDefense = 88,
.types = { TYPE_POISON, TYPE_GHOST },
.catchRate = 3,
.expYield = 261, //Currently unknown
.evYield_Defense = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 50,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED },
.abilities = { ABILITY_POISON_PUPPETEER, ABILITY_NONE },
.bodyColor = BODY_COLOR_PURPLE,
.isMythical = TRUE,
.speciesName = _("Pecharunt"),
//.cryId = CRY_PECHARUNT,
.natDexNum = NATIONAL_DEX_PECHARUNT,
.categoryName = _("Subjugation"),
.height = 3,
.weight = 3,
.description = COMPOUND_STRING(
"It feeds others toxic mochi that\n"
"draw out desires and capabilities.\n"
"Those who eat the mochi fall under\n"
"Pecharunt's control, chained to its will."),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 365,
.trainerOffset = 7,
//FRONT_PIC(Pecharunt, 64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_Pecharunt,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
//BACK_PIC(Pecharunt, 64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
//PALETTES(Pecharunt),
//ICON(Pecharunt, 0),
//.footprint = gMonFootprint_Pecharunt,
LEARNSETS(Pecharunt),
},
#endif //P_FAMILY_PECHARUNT
#ifdef __INTELLISENSE__
};
#endif
#endif

View File

@ -33821,6 +33821,10 @@ static const u16 sAppletunTeachableLearnset[] = {
static const u16 sDipplinTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
static const u16 sHydrappleTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_APPLIN
@ -34654,6 +34658,12 @@ static const u16 sDuraludonTeachableLearnset[] = {
MOVE_THUNDER_WAVE,
MOVE_UNAVAILABLE,
};
#if P_GEN_9_CROSS_EVOS
static const u16 sArchaludonTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_DREEPY
@ -39114,3 +39124,39 @@ static const u16 sOgerponTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_FAMILY_OGERPON
#if P_FAMILY_GOUGING_FIRE
static const u16 sGougingFireTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_FAMILY_GOUGING_FIRE
#if P_FAMILY_RAGING_BOLT
static const u16 sRagingBoltTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_FAMILY_RAGING_BOLT
#if P_FAMILY_IRON_BOULDER
static const u16 sIronBoulderTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_FAMILY_IRON_BOULDER
#if P_FAMILY_IRON_CROWN
static const u16 sIronCrownTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_FAMILY_IRON_CROWN
#if P_FAMILY_TERAPAGOS
static const u16 sTerapagosTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_FAMILY_TERAPAGOS
#if P_FAMILY_PECHARUNT
static const u16 sPecharuntTeachableLearnset[] = {
MOVE_UNAVAILABLE,
};
#endif //P_FAMILY_PECHARUNT

View File

@ -9567,6 +9567,7 @@ PLACEHOLDER_ANIM_SINGLE_FRAME(AppletunGigantamax);
#if P_GEN_9_CROSS_EVOS
PLACEHOLDER_ANIM_SINGLE_FRAME(Dipplin);
PLACEHOLDER_ANIM_SINGLE_FRAME(Hydrapple);
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_APPLIN
@ -9718,6 +9719,10 @@ PLACEHOLDER_ANIM_SINGLE_FRAME(Duraludon);
#if P_GIGANTAMAX_FORMS
PLACEHOLDER_ANIM_SINGLE_FRAME(DuraludonGigantamax);
#endif //P_GIGANTAMAX_FORMS
#if P_GEN_9_CROSS_EVOS
PLACEHOLDER_ANIM_SINGLE_FRAME(Archaludon);
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_DREEPY
@ -10084,6 +10089,32 @@ PLACEHOLDER_ANIM_SINGLE_FRAME(Fezandipiti);
PLACEHOLDER_ANIM_SINGLE_FRAME(Ogerpon);
#endif //P_FAMILY_OGERPON
#if P_FAMILY_GOUGING_FIRE
PLACEHOLDER_ANIM_SINGLE_FRAME(GougingFire);
#endif //P_FAMILY_GOUGING_FIRE
#if P_FAMILY_RAGING_BOLT
PLACEHOLDER_ANIM_SINGLE_FRAME(RagingBolt);
#endif //P_FAMILY_RAGING_BOLT
#if P_FAMILY_IRON_BOULDER
PLACEHOLDER_ANIM_SINGLE_FRAME(IronBoulder);
#endif //P_FAMILY_IRON_BOULDER
#if P_FAMILY_IRON_CROWN
PLACEHOLDER_ANIM_SINGLE_FRAME(IronCrown);
#endif //P_FAMILY_IRON_CROWN
#if P_FAMILY_TERAPAGOS
PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosNormal);
PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosTerastal);
PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosStellar);
#endif //P_FAMILY_TERAPAGOS
#if P_FAMILY_PECHARUNT
PLACEHOLDER_ANIM_SINGLE_FRAME(Pecharunt);
#endif //P_FAMILY_PECHARUNT
static const union AnimCmd sAnim_Egg_1[] =
{
ANIMCMD_FRAME(0, 6),
@ -12341,6 +12372,7 @@ SINGLE_ANIMATION(AppletunGigantamax);
#endif //P_GIGANTAMAX_FORMS
#if P_GEN_9_CROSS_EVOS
SINGLE_ANIMATION(Dipplin);
SINGLE_ANIMATION(Hydrapple);
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_APPLIN
#if P_FAMILY_SILICOBRA
@ -12448,6 +12480,9 @@ SINGLE_ANIMATION(Duraludon);
#if P_GIGANTAMAX_FORMS
SINGLE_ANIMATION(DuraludonGigantamax);
#endif //P_GIGANTAMAX_FORMS
#if P_GEN_9_CROSS_EVOS
SINGLE_ANIMATION(Archaludon);
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_DREEPY
SINGLE_ANIMATION(Dreepy);
@ -12731,4 +12766,24 @@ SINGLE_ANIMATION(Fezandipiti);
#if P_FAMILY_OGERPON
SINGLE_ANIMATION(Ogerpon);
#endif //P_FAMILY_OGERPON
#if P_FAMILY_GOUGING_FIRE
SINGLE_ANIMATION(GougingFire);
#endif //P_FAMILY_GOUGING_FIRE
#if P_FAMILY_RAGING_BOLT
SINGLE_ANIMATION(RagingBolt);
#endif //P_FAMILY_RAGING_BOLT
#if P_FAMILY_IRON_BOULDER
SINGLE_ANIMATION(IronBoulder);
#endif //P_FAMILY_IRON_BOULDER
#if P_FAMILY_IRON_CROWN
SINGLE_ANIMATION(IronCrown);
#endif //P_FAMILY_IRON_CROWN
#if P_FAMILY_TERAPAGOS
SINGLE_ANIMATION(TerapagosNormal);
SINGLE_ANIMATION(TerapagosTerastal);
SINGLE_ANIMATION(TerapagosStellar);
#endif //P_FAMILY_TERAPAGOS
#if P_FAMILY_PECHARUNT
SINGLE_ANIMATION(Pecharunt);
#endif //P_FAMILY_PECHARUNT
SINGLE_ANIMATION(Egg);

View File

@ -1,54 +0,0 @@
static const u8 sHardyNatureName[] = _("Hardy");
static const u8 sLonelyNatureName[] = _("Lonely");
static const u8 sBraveNatureName[] = _("Brave");
static const u8 sAdamantNatureName[] = _("Adamant");
static const u8 sNaughtyNatureName[] = _("Naughty");
static const u8 sBoldNatureName[] = _("Bold");
static const u8 sDocileNatureName[] = _("Docile");
static const u8 sRelaxedNatureName[] = _("Relaxed");
static const u8 sImpishNatureName[] = _("Impish");
static const u8 sLaxNatureName[] = _("Lax");
static const u8 sTimidNatureName[] = _("Timid");
static const u8 sHastyNatureName[] = _("Hasty");
static const u8 sSeriousNatureName[] = _("Serious");
static const u8 sJollyNatureName[] = _("Jolly");
static const u8 sNaiveNatureName[] = _("Naive");
static const u8 sModestNatureName[] = _("Modest");
static const u8 sMildNatureName[] = _("Mild");
static const u8 sQuietNatureName[] = _("Quiet");
static const u8 sBashfulNatureName[] = _("Bashful");
static const u8 sRashNatureName[] = _("Rash");
static const u8 sCalmNatureName[] = _("Calm");
static const u8 sGentleNatureName[] = _("Gentle");
static const u8 sSassyNatureName[] = _("Sassy");
static const u8 sCarefulNatureName[] = _("Careful");
static const u8 sQuirkyNatureName[] = _("Quirky");
const u8 *const gNatureNamePointers[NUM_NATURES] =
{
[NATURE_HARDY] = sHardyNatureName,
[NATURE_LONELY] = sLonelyNatureName,
[NATURE_BRAVE] = sBraveNatureName,
[NATURE_ADAMANT] = sAdamantNatureName,
[NATURE_NAUGHTY] = sNaughtyNatureName,
[NATURE_BOLD] = sBoldNatureName,
[NATURE_DOCILE] = sDocileNatureName,
[NATURE_RELAXED] = sRelaxedNatureName,
[NATURE_IMPISH] = sImpishNatureName,
[NATURE_LAX] = sLaxNatureName,
[NATURE_TIMID] = sTimidNatureName,
[NATURE_HASTY] = sHastyNatureName,
[NATURE_SERIOUS] = sSeriousNatureName,
[NATURE_JOLLY] = sJollyNatureName,
[NATURE_NAIVE] = sNaiveNatureName,
[NATURE_MODEST] = sModestNatureName,
[NATURE_MILD] = sMildNatureName,
[NATURE_QUIET] = sQuietNatureName,
[NATURE_BASHFUL] = sBashfulNatureName,
[NATURE_RASH] = sRashNatureName,
[NATURE_CALM] = sCalmNatureName,
[NATURE_GENTLE] = sGentleNatureName,
[NATURE_SASSY] = sSassyNatureName,
[NATURE_CAREFUL] = sCarefulNatureName,
[NATURE_QUIRKY] = sQuirkyNatureName,
};

View File

@ -93,11 +93,6 @@ void EnableVCountIntrAtLine150(void);
void AgbMain()
{
// Modern compilers are liberal with the stack on entry to this function,
// so RegisterRamReset may crash if it resets IWRAM.
#if !MODERN
RegisterRamReset(RESET_ALL);
#endif //MODERN
*(vu16 *)BG_PLTT = RGB_WHITE; // Set the backdrop to white on startup
InitGpuRegManager();
REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3;

View File

@ -362,6 +362,35 @@ const struct SpindaSpot gSpindaSpotGraphics[] =
#include "data/pokemon/item_effects.h"
const u8 *const gNatureNamePointers[NUM_NATURES] =
{
[NATURE_HARDY] = COMPOUND_STRING("Hardy"),
[NATURE_LONELY] = COMPOUND_STRING("Lonely"),
[NATURE_BRAVE] = COMPOUND_STRING("Brave"),
[NATURE_ADAMANT] = COMPOUND_STRING("Adamant"),
[NATURE_NAUGHTY] = COMPOUND_STRING("Naughty"),
[NATURE_BOLD] = COMPOUND_STRING("Bold"),
[NATURE_DOCILE] = COMPOUND_STRING("Docile"),
[NATURE_RELAXED] = COMPOUND_STRING("Relaxed"),
[NATURE_IMPISH] = COMPOUND_STRING("Impish"),
[NATURE_LAX] = COMPOUND_STRING("Lax"),
[NATURE_TIMID] = COMPOUND_STRING("Timid"),
[NATURE_HASTY] = COMPOUND_STRING("Hasty"),
[NATURE_SERIOUS] = COMPOUND_STRING("Serious"),
[NATURE_JOLLY] = COMPOUND_STRING("Jolly"),
[NATURE_NAIVE] = COMPOUND_STRING("Naive"),
[NATURE_MODEST] = COMPOUND_STRING("Modest"),
[NATURE_MILD] = COMPOUND_STRING("Mild"),
[NATURE_QUIET] = COMPOUND_STRING("Quiet"),
[NATURE_BASHFUL] = COMPOUND_STRING("Bashful"),
[NATURE_RASH] = COMPOUND_STRING("Rash"),
[NATURE_CALM] = COMPOUND_STRING("Calm"),
[NATURE_GENTLE] = COMPOUND_STRING("Gentle"),
[NATURE_SASSY] = COMPOUND_STRING("Sassy"),
[NATURE_CAREFUL] = COMPOUND_STRING("Careful"),
[NATURE_QUIRKY] = COMPOUND_STRING("Quirky"),
};
const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
{ // Attack Defense Speed Sp.Atk Sp. Def
[NATURE_HARDY] = { 0, 0, 0, 0, 0 },

File diff suppressed because it is too large Load Diff

View File

@ -322,7 +322,6 @@ static void SummaryScreen_DestroyAnimDelayTask(void);
// const rom data
#include "data/text/move_descriptions.h"
#include "data/text/nature_names.h"
static const struct BgTemplate sBgTemplates[] =
{

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "main.h"
#include "crt0.h"
#include "gpu_regs.h"
#include "m4a.h"
#include "load_save.h"
@ -15,6 +16,7 @@ void ReloadSave(void)
u16 imeBackup = REG_IME;
REG_IME = 0;
RegisterRamReset(RESET_EWRAM);
ReInitializeEWRAM();
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
REG_IME = imeBackup;
gMain.inBattle = FALSE;

View File

@ -49,7 +49,7 @@ DOUBLE_BATTLE_TEST("Doodle can't copy a banned ability")
DOUBLE_BATTLE_TEST("Doodle fails if user has a banned Ability")
{
GIVEN {
PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); }
PLAYER(SPECIES_CRAMORANT) { Ability(ABILITY_GULP_MISSILE); }
PLAYER(SPECIES_WYNAUT) { Ability(ABILITY_SHADOW_TAG); }
OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); }
OPPONENT(SPECIES_WOBBUFFET);
@ -59,7 +59,7 @@ DOUBLE_BATTLE_TEST("Doodle fails if user has a banned Ability")
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft);
MESSAGE("But it failed!");
} THEN {
EXPECT(playerLeft->ability == ABILITY_PROTOSYNTHESIS);
EXPECT(playerLeft->ability == ABILITY_GULP_MISSILE);
EXPECT(playerRight->ability == ABILITY_SHADOW_TAG);
}
}
@ -68,7 +68,7 @@ DOUBLE_BATTLE_TEST("Doodle fails if partner has a banned Ability")
{
GIVEN {
PLAYER(SPECIES_WYNAUT) { Ability(ABILITY_SHADOW_TAG); }
PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); }
PLAYER(SPECIES_CRAMORANT) { Ability(ABILITY_GULP_MISSILE); }
OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@ -78,6 +78,6 @@ DOUBLE_BATTLE_TEST("Doodle fails if partner has a banned Ability")
MESSAGE("But it failed!");
} THEN {
EXPECT(playerLeft->ability == ABILITY_SHADOW_TAG);
EXPECT(playerRight->ability == ABILITY_PROTOSYNTHESIS);
EXPECT(playerRight->ability == ABILITY_GULP_MISSILE);
}
}