diff --git a/include/config/pokemon.h b/include/config/pokemon.h index e833399eac..abdb728ac1 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -31,6 +31,7 @@ #define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female forms, i.e. Hippopotas and Hippowdon #define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. #define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255. +#define P_CATCH_CURVE GEN_LATEST // Since Gen 6, the capture rate curve was changed to make pokeballs more effective on lower level pokemon // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 330a33e96a..aef26ce826 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -14959,7 +14959,7 @@ static void Cmd_handleballthrow(void) if (gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL] < 255) gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL]++; - if (odds > 254) // mon caught + if (odds >= 255) // mon caught { BtlController_EmitBallThrowAnim(gBattlerAttacker, BUFFER_A, BALL_3_SHAKES_SUCCESS); MarkBattlerForControllerExec(gBattlerAttacker); @@ -15004,8 +15004,16 @@ static void Cmd_handleballthrow(void) } else { - odds = Sqrt(Sqrt(16711680 / odds)); - odds = 1048560 / odds; + if (P_CATCH_CURVE >= GEN_6) + { + odds = (255 * 255 * 255) / (odds * odds * odds); + odds = 65536 / Sqrt(Sqrt(Sqrt(Sqrt(odds)))); + } + else + { + odds = Sqrt(Sqrt(16711680 / odds)); + odds = 1048560 / odds; + } for (shakes = 0; shakes < maxShakes && Random() < odds; shakes++); }