diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index f4b1881087..a1fbe57c49 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -53,28 +53,30 @@ #define GEN_8 5 // Calculation settings -#define B_CRIT_CHANCE GEN_6 // Chances of a critical hit landing. See atk04_critcalc. -#define B_CRIT_MULTIPLIER GEN_6 // Starting from gen6, critical hits multiply damage by 1.5 instead of 2. -#define B_EXP_CATCH GEN_6 // Starting from gen6, pokemon get experience from catching. -#define B_TRAINER_EXP_MULTIPLIER GEN_6 // Gen7 no longer gives a 1.5 multiplier to exp gain in trainer battles. -#define B_BURN_DAMAGE GEN_6 // In Gen7, burn damage is 1/16th of max HP instead of 1/8th. -#define B_PARALYSIS_SPEED GEN_6 // In Gen7, speed is decreased by 50% instead of 75%. +#define B_CRIT_CHANCE GEN_6 // Chances of a critical hit landing. See CalcCritChanceStage. +#define B_CRIT_MULTIPLIER GEN_6 // In Gen6+, critical hits multiply damage by 1.5 instead of 2. +#define B_EXP_CATCH GEN_6 // In Gen6+, Pokémon get experience from catching. +#define B_TRAINER_EXP_MULTIPLIER GEN_6 // In Gen7+, trainer battles no longer give a 1.5 multiplier to exp gain. +#define B_BURN_DAMAGE GEN_6 // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th. +#define B_PARALYSIS_SPEED GEN_6 // In Gen7+, speed is decreased by 50% instead of 75%. +#define B_TERRAIN_TYPE_BOOST GEN_6 // In Gen8+, speed is boosted by 30% instead of 50%. // Move settings -#define B_FELL_STINGER_STAT_RAISE GEN_6 // Gen6 Atk+2, Gen7 Atk+3. -#define B_SOUND_SUBSTITUTE GEN_6 // Starting from Gen6 sound moves bypass Substitute. -#define B_TOXIC_NEVER_MISS GEN_6 // Starting from Gen6, if Toxic is used by a Poison type, it will never miss. -#define B_PAYBACK_SWITCH_BOOST GEN_6 // Starting from Gen5, if the opponent switches out, Payback's damage will no longer be doubled. +#define B_FELL_STINGER_STAT_RAISE GEN_6 // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint. +#define B_SOUND_SUBSTITUTE GEN_6 // In Gen6+, sound moves bypass Substitute. +#define B_TOXIC_NEVER_MISS GEN_6 // In Gen6+, if Toxic is used by a Poison type, it will never miss. +#define B_PAYBACK_SWITCH_BOOST GEN_6 // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled. +#define B_KINGS_SHIELD_LOWER_ATK GEN_6 // In Gen7+, it lowers Atk by 1 stage instead of 2 of oponents that hit it. // Ability settings -#define B_ABILITY_POP_UP GEN_6 // Starting from gen5, the pokemon abilities are displayed in a pop-up, when they activate in battle. -#define B_ABILITY_WEATHER GEN_6 // Up to gen5 - weather induced by abilities such as Drought or Drizzle lasted till the battle's end or weather change by a move. From Gen6 onwards, weather caused by abilities lasts the same amount of turns as induced from a move. -#define B_GALE_WINGS GEN_6 // Gen7 requires full hp. -#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7, Aegislash's form change does not happen, if the pokemon cannot use a move, because of confusion, paralysis, etc. In gen6, the form change occurs despite not being able to move. -#define B_GHOSTS_ESCAPE GEN_6 // From Gen6 onwards, ghosts can escape even when blocked by abilities such as Shadow Tag. -#define B_MOODY_ACC_EVASION GEN_6 // In Gen8, Moody CANNOT raise Accuray and Evasion any more +#define B_ABILITY_POP_UP GEN_6 // In Gen5+, the Pokémon abilities are displayed in a pop-up, when they activate in battle. +#define B_ABILITY_WEATHER GEN_6 // In Gen5+, weather caused by abilities lasts the same amount of turns as induced from a move. Before, they lasted till the battle's end or weather change by a move. +#define B_GALE_WINGS GEN_6 // In Gen7+ requires full HP to trigger. +#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Aegislash's form change does not happen, if the Pokémon cannot use a move, because of confusion, paralysis, etc. In gen6, the form change occurs despite not being able to move. +#define B_GHOSTS_ESCAPE GEN_6 // In Gen6+, ghosts can escape even when blocked by abilities such as Shadow Tag. +#define B_MOODY_ACC_EVASION GEN_6 // In Gen8+, Moody CANNOT raise Accuray and Evasion any more. // Other -#define B_FAST_INTRO TRUE // If set to TRUE, battle intro texts print at the same time as animation of a pokemon, as opposing to waiting for the animation to end. +#define B_FAST_INTRO TRUE // If set to TRUE, battle intro texts print at the same time as animation of a Pokémon, as opposing to waiting for the animation to end. #endif // GUARD_CONSTANTS_BATTLE_CONFIG_H diff --git a/include/constants/moves.h b/include/constants/moves.h index dcfc74861e..38a82e2895 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -601,7 +601,7 @@ #define MOVE_MOONBLAST 585 #define MOVE_BOOMBURST 586 #define MOVE_FAIRY_LOCK 587 -#define MOVE_KING_S_SHIELD 588 +#define MOVE_KINGS_SHIELD 588 #define MOVE_PLAY_NICE 589 #define MOVE_CONFIDE 590 #define MOVE_DIAMOND_STORM 591 diff --git a/src/battle_main.c b/src/battle_main.c index 626f91062d..723e33a7a6 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4311,7 +4311,7 @@ s8 GetMovePriority(u32 battlerId, u16 move) priority = gBattleMoves[move].priority; if (GetBattlerAbility(battlerId) == ABILITY_GALE_WINGS && gBattleMoves[move].type == TYPE_FLYING - && (B_GALE_WINGS == GEN_6 || BATTLER_MAX_HP(battlerId))) + && (B_GALE_WINGS <= GEN_6 || BATTLER_MAX_HP(battlerId))) { priority++; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index af3ee4932f..09148d6633 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -780,7 +780,7 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_HYPERSPACE_HOLE] = FORBIDDEN_METRONOME, [MOVE_ICE_BURN] = FORBIDDEN_METRONOME, [MOVE_INSTRUCT] = FORBIDDEN_METRONOME, - [MOVE_KING_S_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_KINGS_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_LIGHT_OF_RUIN] = FORBIDDEN_METRONOME, [MOVE_MAT_BLOCK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_ME_FIRST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK, @@ -1031,7 +1031,7 @@ static bool32 TryAegiFormChange(void) gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH_BLADE; break; case SPECIES_AEGISLASH_BLADE: // Blade -> Shield - if (gCurrentMove != MOVE_KING_S_SHIELD) + if (gCurrentMove != MOVE_KINGS_SHIELD) return FALSE; gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH; break; @@ -1467,7 +1467,7 @@ static void Cmd_ppreduce(void) } // The chance is 1/N for each stage. -#if B_CRIT_CHANCE == GEN_7 +#if B_CRIT_CHANCE >= GEN_7 static const u8 sCriticalHitChance[] = {24, 8, 2, 1, 1}; #elif B_CRIT_CHANCE == GEN_6 static const u8 sCriticalHitChance[] = {16, 8, 2, 1, 1}; @@ -3536,7 +3536,7 @@ static void Cmd_getexp(void) gBattleMoveDamage += gExpShareExp; if (holdEffect == HOLD_EFFECT_LUCKY_EGG) gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && B_TRAINER_EXP_MULTIPLIER != GEN_7) + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && B_TRAINER_EXP_MULTIPLIER <= GEN_7) gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterMonId])) @@ -4471,7 +4471,7 @@ static void Cmd_moveend(void) i = gBattlerAttacker; gBattlerAttacker = gBattlerTarget; gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable - gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_2; + gBattleScripting.moveEffect = (B_KINGS_SHIELD_LOWER_ATK >= GEN_8) ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_ATK_MINUS_2; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; effect = 1; @@ -7259,7 +7259,7 @@ static void Cmd_various(void) { if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] >= 11) SET_STATCHANGER(STAT_ATK, 1, FALSE); - else if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] <= 9 && B_FELL_STINGER_STAT_RAISE == GEN_7) + else if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] <= 9 && B_FELL_STINGER_STAT_RAISE >= GEN_7) SET_STATCHANGER(STAT_ATK, 3, FALSE); else SET_STATCHANGER(STAT_ATK, 2, FALSE); @@ -7639,7 +7639,7 @@ static void Cmd_various(void) break; } if (gLastMoves[gBattlerTarget] == 0 || gLastMoves[gBattlerTarget] == 0xFFFF || sMoveEffectsForbiddenToInstruct[i] != FORBIDDEN_INSTRUCT_END - || gLastMoves[gBattlerTarget] == MOVE_STRUGGLE || gLastMoves[gBattlerTarget] == MOVE_KING_S_SHIELD) + || gLastMoves[gBattlerTarget] == MOVE_STRUGGLE || gLastMoves[gBattlerTarget] == MOVE_KINGS_SHIELD) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); } @@ -7978,7 +7978,7 @@ static void Cmd_setprotectlike(void) gProtectStructs[gBattlerAttacker].spikyShielded = 1; gBattleCommunication[MULTISTRING_CHOOSER] = 0; } - else if (gCurrentMove == MOVE_KING_S_SHIELD) + else if (gCurrentMove == MOVE_KINGS_SHIELD) { gProtectStructs[gBattlerAttacker].kingsShielded = 1; gBattleCommunication[MULTISTRING_CHOOSER] = 0; diff --git a/src/battle_util.c b/src/battle_util.c index db14d4a668..28be831eca 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5825,13 +5825,13 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (gStatuses3[battlerAtk] & STATUS3_ME_FIRST) MulModifier(&modifier, UQ_4_12(1.5)); if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && moveType == TYPE_GRASS && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) - MulModifier(&modifier, UQ_4_12(1.5)); + MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5)); if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN && moveType == TYPE_DRAGON && IsBattlerGrounded(battlerDef) && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) MulModifier(&modifier, UQ_4_12(0.5)); if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && moveType == TYPE_ELECTRIC && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) - MulModifier(&modifier, UQ_4_12(1.5)); + MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5)); if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN && moveType == TYPE_PSYCHIC && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE)) - MulModifier(&modifier, UQ_4_12(1.5)); + MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5)); return ApplyModifier(modifier, basePower); } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 7f310e2a47..da321ecbfb 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -8252,7 +8252,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .split = SPLIT_STATUS, }, - [MOVE_KING_S_SHIELD] = + [MOVE_KINGS_SHIELD] = { .effect = EFFECT_PROTECT, .power = 0, diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index d049837b4e..7b6dc90688 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -4693,7 +4693,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = .comboMoves = {0} }, - [MOVE_KING_S_SHIELD] = + [MOVE_KINGS_SHIELD] = { .effect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index 4832365afc..9e36f9d3bc 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -3131,7 +3131,7 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = [MOVE_MOONBLAST - 1] = sMOONBLASTDescription, [MOVE_BOOMBURST - 1] = sBOOMBURSTDescription, [MOVE_FAIRY_LOCK - 1] = sFAIRY_LOCKDescription, - [MOVE_KING_S_SHIELD - 1] = sKINGS_SHIELDDescription, + [MOVE_KINGS_SHIELD - 1] = sKINGS_SHIELDDescription, [MOVE_PLAY_NICE - 1] = sPLAY_NICEDescription, [MOVE_CONFIDE - 1] = sCONFIDEDescription, [MOVE_DIAMOND_STORM - 1] = sDIAMOND_STORMDescription, diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index a1e8db6514..99e6f7ae4f 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -588,7 +588,7 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_MOONBLAST] = _("Moonblast"), [MOVE_BOOMBURST] = _("Boomburst"), [MOVE_FAIRY_LOCK] = _("Fairy Lock"), - [MOVE_KING_S_SHIELD] = _("Kings Shield"), + [MOVE_KINGS_SHIELD] = _("Kings Shield"), [MOVE_PLAY_NICE] = _("Play Nice"), [MOVE_CONFIDE] = _("Confide"), [MOVE_DIAMOND_STORM] = _("DiamondStorm"),