From 633ebe6148821cd5016758e970272bf63451b4c5 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 21 Apr 2020 20:43:47 +0200 Subject: [PATCH] Schooling --- include/constants/battle_config.h | 2 ++ src/battle_util.c | 20 ++++++++++++++------ src/data/pokemon/base_stats.h | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index a1fbe57c49..4d598e73d9 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -17,6 +17,8 @@ #define SPECIES_DARMANITAN_ZEN 10002 #define SPECIES_MINIOR_CORE 0 #define SPECIES_MINIOR 10003 +#define SPECIES_WISHIWASHI SPECIES_SKARMORY +#define SPECIES_WISHIWASHI_SCHOOL SPECIES_HO_OH // Items with peculiar battle effects. Remove them if they're properly placed in constant/items.h #define ITEM_GRISEOUS_ORB 0 diff --git a/src/battle_util.c b/src/battle_util.c index 866114a994..e857fb8bf9 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2755,11 +2755,12 @@ static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer) static bool32 ShouldChangeFormHpBased(u32 battler) { - // Ability, form >, form <= - static const u16 forms[][3] = + // Ability, form >, form <=, hp divided + static const u16 forms[][4] = { - {ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN}, - {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE}, + {ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN, 2}, + {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE, 2}, + {ABILITY_SCHOOLING, SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, 4}, }; u32 i; @@ -2768,13 +2769,13 @@ static bool32 ShouldChangeFormHpBased(u32 battler) if (gBattleMons[battler].ability == forms[i][0]) { if (gBattleMons[battler].species == forms[i][2] - && gBattleMons[battler].hp > gBattleMons[battler].maxHP / 2) + && gBattleMons[battler].hp > gBattleMons[battler].maxHP / forms[i][3]) { gBattleMons[battler].species = forms[i][1]; return TRUE; } if (gBattleMons[battler].species == forms[i][1] - && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 2) + && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / forms[i][3]) { gBattleMons[battler].species = forms[i][2]; return TRUE; @@ -3093,6 +3094,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA } } break; + case ABILITY_SCHOOLING: + if (gBattleMons[battler].level < 20) + break; case ABILITY_SHIELDS_DOWN: if (ShouldChangeFormHpBased(battler)) { @@ -3249,6 +3253,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA effect++; } break; + case ABILITY_SCHOOLING: + if (gBattleMons[battler].level < 20) + break; case ABILITY_ZEN_MODE: case ABILITY_SHIELDS_DOWN: if ((effect = ShouldChangeFormHpBased(battler))) @@ -6582,6 +6589,7 @@ void UndoFormChange(u32 monId, u32 side) {SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU}, {SPECIES_DARMANITAN_ZEN, SPECIES_DARMANITAN}, {SPECIES_MINIOR, SPECIES_MINIOR_CORE}, + {SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI}, }; currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL); diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index c191da8162..3e38c2e362 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -7296,7 +7296,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY}, + .abilities = {ABILITY_SCHOOLING, ABILITY_SCHOOLING}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE,