From e7de08eca26aa2b689a39bc2ebe2f8ff9968504e Mon Sep 17 00:00:00 2001 From: Nephrite Date: Sat, 30 Dec 2023 15:40:50 +0900 Subject: [PATCH] Unified Sonic Boom & Dragon Rage Not really in scope, but what the hell --- asm/macros/battle_script.inc | 4 ++++ data/battle_scripts_1.s | 19 ++++--------------- include/constants/battle_move_effects.h | 4 ++-- include/constants/battle_script_commands.h | 2 +- src/battle_ai_main.c | 2 +- src/battle_ai_util.c | 7 ++----- src/battle_dynamax.c | 3 +-- src/battle_script_commands.c | 6 ++++++ src/battle_tv.c | 3 +-- src/data/battle_moves.h | 6 ++++-- test/battle/hold_effect/attack_up.c | 3 ++- test/battle/hold_effect/critical_hit_up.c | 3 ++- test/battle/hold_effect/defense_up.c | 3 ++- test/battle/hold_effect/micle_berry.c | 3 ++- test/battle/hold_effect/special_attack_up.c | 3 ++- test/battle/hold_effect/special_defense_up.c | 3 ++- test/battle/hold_effect/speed_up.c | 3 ++- 17 files changed, 40 insertions(+), 37 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 80abdafa61..69461579a3 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1810,6 +1810,10 @@ .4byte \jumpInstr .endm + .macro setargtobattledamage + various BS_ATTACKER, VARIOUS_SET_ARG_TO_BATTLE_DAMAGE + .endm + .macro tryhitswitchtarget failInstr:req various BS_ATTACKER, VARIOUS_TRY_HIT_SWITCH_TARGET .4byte \failInstr diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 65f2ebdeeb..f41db18368 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -56,7 +56,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectOHKO @ EFFECT_OHKO .4byte BattleScript_EffectHit @ EFFECT_FUSION_COMBO .4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG - .4byte BattleScript_EffectDragonRage @ EFFECT_DRAGON_RAGE + .4byte BattleScript_EffectArgFixedDamage @ EFFECT_ARG_FIXED_DAMAGE .4byte BattleScript_EffectHit @ EFFECT_UNUSED_35 .4byte BattleScript_EffectHealBlock @ EFFECT_HEAL_BLOCK .4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS @@ -132,7 +132,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS .4byte BattleScript_EffectHit @ EFFECT_PURSUIT .4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN - .4byte BattleScript_EffectSonicboom @ EFFECT_SONICBOOM + .4byte BattleScript_EffectHit @ EFFECT_UNUSED_110 .4byte BattleScript_EffectCaptivate @ EFFECT_CAPTIVATE .4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN .4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS @@ -3827,17 +3827,6 @@ BattleScript_EffectSuperFang:: damagetohalftargethp goto BattleScript_HitFromAtkAnimation -BattleScript_EffectDragonRage:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - typecalc - bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE - setword gBattleMoveDamage, 40 - adjustdamage - goto BattleScript_HitFromAtkAnimation - BattleScript_EffectRecoilIfMiss:: attackcanceler accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE @@ -4854,14 +4843,14 @@ BattleScript_EffectRapidSpinEnd:: goto BattleScript_EffectHit .endif -BattleScript_EffectSonicboom:: +BattleScript_EffectArgFixedDamage:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce typecalc bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE - setword gBattleMoveDamage, 20 + setargtobattledamage adjustdamage goto BattleScript_HitFromAtkAnimation diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index fc4e22cd4d..493659e3be 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -35,7 +35,7 @@ #define EFFECT_OHKO 31 #define EFFECT_FUSION_COMBO 32 #define EFFECT_SUPER_FANG 33 -#define EFFECT_DRAGON_RAGE 34 +#define EFFECT_ARG_FIXED_DAMAGE 34 #define EFFECT_UNUSED_35 35 #define EFFECT_HEAL_BLOCK 36 #define EFFECT_RECOIL_IF_MISS 37 @@ -111,7 +111,7 @@ #define EFFECT_BATON_PASS 107 #define EFFECT_PURSUIT 108 #define EFFECT_RAPID_SPIN 109 -#define EFFECT_SONICBOOM 110 +#define EFFECT_UNUSED_110 110 #define EFFECT_CAPTIVATE 111 #define EFFECT_MORNING_SUN 112 #define EFFECT_SYNTHESIS 113 diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 4ca21a47f4..8d79dabe1c 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -140,7 +140,7 @@ #define VARIOUS_TRY_SOAK 48 #define VARIOUS_HANDLE_MEGA_EVO 49 #define VARIOUS_TRY_LAST_RESORT 50 -#define VARIOUS_UNUSED_51 51 +#define VARIOUS_SET_ARG_TO_BATTLE_DAMAGE 51 #define VARIOUS_TRY_HIT_SWITCH_TARGET 52 #define VARIOUS_TRY_AUTOTOMIZE 53 #define VARIOUS_ABILITY_POPUP 54 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 971538b153..0759bf080d 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1381,7 +1381,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) //case EFFECT_BIDE: //case EFFECT_COUNTER: case EFFECT_PRESENT: - case EFFECT_SONICBOOM: + case EFFECT_ARG_FIXED_DAMAGE: //case EFFECT_MIRROR_COAT: case EFFECT_FOCUS_PUNCH: //case EFFECT_ENDEAVOR: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index d05eebeddc..ca9ba95169 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -768,11 +768,8 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes case EFFECT_PSYWAVE: dmg = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); break; - case EFFECT_DRAGON_RAGE: - dmg = 40 * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); - break; - case EFFECT_SONICBOOM: - dmg = 20 * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); + case EFFECT_ARG_FIXED_DAMAGE: + dmg = gBattleMoves[move].argument * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); break; case EFFECT_MULTI_HIT: dmg *= (aiData->abilities[battlerAtk] == ABILITY_SKILL_LINK diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index a44bb3aeb9..7c5495bea3 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -436,11 +436,10 @@ static u8 GetMaxPowerTier(u16 move) case EFFECT_TERRAIN_PULSE: case EFFECT_PUNISHMENT: case EFFECT_TRUMP_CARD: - case EFFECT_SONICBOOM: + case EFFECT_ARG_FIXED_DAMAGE: case EFFECT_SPIT_UP: case EFFECT_NATURAL_GIFT: case EFFECT_MIRROR_COAT: - case EFFECT_DRAGON_RAGE: case EFFECT_FINAL_GAMBIT: //case EFFECT_DRAGON_DARTS: return MAX_POWER_TIER_2; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 26e4d00570..90ccb02237 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9597,6 +9597,12 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->failInstr; return; } + case VARIOUS_SET_ARG_TO_BATTLE_DAMAGE: + { + VARIOUS_ARGS(); + gBattleMoveDamage = gBattleMoves[gCurrentMove].argument; + break; + } case VARIOUS_TRY_HIT_SWITCH_TARGET: { VARIOUS_ARGS(const u8 *failInstr); diff --git a/src/battle_tv.c b/src/battle_tv.c index 5a29a354aa..3829eedcc9 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -120,7 +120,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_OHKO] = 7, // [EFFECT_RAZOR_WIND] = 1, [EFFECT_SUPER_FANG] = 5, - [EFFECT_DRAGON_RAGE] = 2, // [EFFECT_HIGH_CRITICAL] = 1, // [EFFECT_DOUBLE_HIT] = 1, [EFFECT_RECOIL_IF_MISS] = 1, @@ -193,7 +192,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_BATON_PASS] = 7, [EFFECT_PURSUIT] = 2, [EFFECT_RAPID_SPIN] = 2, - [EFFECT_SONICBOOM] = 1, + [EFFECT_ARG_FIXED_DAMAGE] = 1, [EFFECT_MORNING_SUN] = 4, [EFFECT_SYNTHESIS] = 4, [EFFECT_MOONLIGHT] = 4, diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index fe0792a820..0202cbc878 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -795,7 +795,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_SONIC_BOOM] = { - .effect = EFFECT_SONICBOOM, + .effect = EFFECT_ARG_FIXED_DAMAGE, .power = 1, .type = TYPE_NORMAL, .accuracy = 90, @@ -803,6 +803,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = BATTLE_CATEGORY_SPECIAL, + .argument = 20, }, [MOVE_DISABLE] = @@ -1350,7 +1351,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = [MOVE_DRAGON_RAGE] = { - .effect = EFFECT_DRAGON_RAGE, + .effect = EFFECT_ARG_FIXED_DAMAGE, .power = 1, .type = TYPE_DRAGON, .accuracy = 100, @@ -1359,6 +1360,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = BATTLE_CATEGORY_SPECIAL, .ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_4) || (B_UPDATED_MOVE_FLAGS < GEN_3), + .argument = 40, }, [MOVE_FIRE_SPIN] = diff --git a/test/battle/hold_effect/attack_up.c b/test/battle/hold_effect/attack_up.c index c07c7c7c17..b1a1bef481 100644 --- a/test/battle/hold_effect/attack_up.c +++ b/test/battle/hold_effect/attack_up.c @@ -4,7 +4,8 @@ ASSUMPTIONS { ASSUME(gItems[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP); - ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_ARG_FIXED_DAMAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].argument == 40); } SINGLE_BATTLE_TEST("Liechi Berry raises the holder's Attack by one stage when HP drops to 1/4 or below") diff --git a/test/battle/hold_effect/critical_hit_up.c b/test/battle/hold_effect/critical_hit_up.c index b714bdb30d..57bc1e7b3b 100644 --- a/test/battle/hold_effect/critical_hit_up.c +++ b/test/battle/hold_effect/critical_hit_up.c @@ -4,7 +4,8 @@ ASSUMPTIONS { ASSUME(gItems[ITEM_LANSAT_BERRY].holdEffect == HOLD_EFFECT_CRITICAL_UP); - ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_ARG_FIXED_DAMAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].argument == 40); } SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two stages when HP drops to 1/4 or below") diff --git a/test/battle/hold_effect/defense_up.c b/test/battle/hold_effect/defense_up.c index 485472512a..61ca1dc91e 100644 --- a/test/battle/hold_effect/defense_up.c +++ b/test/battle/hold_effect/defense_up.c @@ -4,7 +4,8 @@ ASSUMPTIONS { ASSUME(gItems[ITEM_GANLON_BERRY].holdEffect == HOLD_EFFECT_DEFENSE_UP); - ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_ARG_FIXED_DAMAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].argument == 40); } SINGLE_BATTLE_TEST("Ganlon Berry raises the holder's Defense by one stage when HP drops to 1/4 or below") diff --git a/test/battle/hold_effect/micle_berry.c b/test/battle/hold_effect/micle_berry.c index 79c40f68cc..05f846dca3 100644 --- a/test/battle/hold_effect/micle_berry.c +++ b/test/battle/hold_effect/micle_berry.c @@ -4,7 +4,8 @@ ASSUMPTIONS { ASSUME(gItems[ITEM_MICLE_BERRY].holdEffect == HOLD_EFFECT_MICLE_BERRY); - ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_ARG_FIXED_DAMAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].argument == 40); } SINGLE_BATTLE_TEST("Micle Berry raises the holder's accuracy by 1.2 when HP drops to 1/4 or below") diff --git a/test/battle/hold_effect/special_attack_up.c b/test/battle/hold_effect/special_attack_up.c index 6ff5b4f07d..48953abf47 100644 --- a/test/battle/hold_effect/special_attack_up.c +++ b/test/battle/hold_effect/special_attack_up.c @@ -4,7 +4,8 @@ ASSUMPTIONS { ASSUME(gItems[ITEM_PETAYA_BERRY].holdEffect == HOLD_EFFECT_SP_ATTACK_UP); - ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_ARG_FIXED_DAMAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].argument == 40); } SINGLE_BATTLE_TEST("Petaya Berry raises the holder's Sp. Atk by one stage when HP drops to 1/4 or below") diff --git a/test/battle/hold_effect/special_defense_up.c b/test/battle/hold_effect/special_defense_up.c index db08c1404e..bdcfd31fdf 100644 --- a/test/battle/hold_effect/special_defense_up.c +++ b/test/battle/hold_effect/special_defense_up.c @@ -4,7 +4,8 @@ ASSUMPTIONS { ASSUME(gItems[ITEM_APICOT_BERRY].holdEffect == HOLD_EFFECT_SP_DEFENSE_UP); - ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_ARG_FIXED_DAMAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].argument == 40); } SINGLE_BATTLE_TEST("Apicot Berry raises the holder's Sp. Def by one stage when HP drops to 1/4 or below") diff --git a/test/battle/hold_effect/speed_up.c b/test/battle/hold_effect/speed_up.c index 1e5d4d7e40..2b64f3fe3d 100644 --- a/test/battle/hold_effect/speed_up.c +++ b/test/battle/hold_effect/speed_up.c @@ -4,7 +4,8 @@ ASSUMPTIONS { ASSUME(gItems[ITEM_SALAC_BERRY].holdEffect == HOLD_EFFECT_SPEED_UP); - ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_DRAGON_RAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].effect == EFFECT_ARG_FIXED_DAMAGE); + ASSUME(gBattleMoves[MOVE_DRAGON_RAGE].argument == 40); } SINGLE_BATTLE_TEST("Salac Berry raises the holder's Speed by one stage when HP drops to 1/4 or below")