Unified Sonic Boom & Dragon Rage

Not really in scope, but what the hell
This commit is contained in:
Nephrite 2023-12-30 15:40:50 +09:00
parent 9d68f4ab6f
commit e7de08eca2
17 changed files with 40 additions and 37 deletions

View File

@ -1810,6 +1810,10 @@
.4byte \jumpInstr .4byte \jumpInstr
.endm .endm
.macro setargtobattledamage
various BS_ATTACKER, VARIOUS_SET_ARG_TO_BATTLE_DAMAGE
.endm
.macro tryhitswitchtarget failInstr:req .macro tryhitswitchtarget failInstr:req
various BS_ATTACKER, VARIOUS_TRY_HIT_SWITCH_TARGET various BS_ATTACKER, VARIOUS_TRY_HIT_SWITCH_TARGET
.4byte \failInstr .4byte \failInstr

View File

@ -56,7 +56,7 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectOHKO @ EFFECT_OHKO .4byte BattleScript_EffectOHKO @ EFFECT_OHKO
.4byte BattleScript_EffectHit @ EFFECT_FUSION_COMBO .4byte BattleScript_EffectHit @ EFFECT_FUSION_COMBO
.4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG .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_EffectHit @ EFFECT_UNUSED_35
.4byte BattleScript_EffectHealBlock @ EFFECT_HEAL_BLOCK .4byte BattleScript_EffectHealBlock @ EFFECT_HEAL_BLOCK
.4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS .4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS
@ -132,7 +132,7 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS
.4byte BattleScript_EffectHit @ EFFECT_PURSUIT .4byte BattleScript_EffectHit @ EFFECT_PURSUIT
.4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN .4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN
.4byte BattleScript_EffectSonicboom @ EFFECT_SONICBOOM .4byte BattleScript_EffectHit @ EFFECT_UNUSED_110
.4byte BattleScript_EffectCaptivate @ EFFECT_CAPTIVATE .4byte BattleScript_EffectCaptivate @ EFFECT_CAPTIVATE
.4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN .4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN
.4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS .4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS
@ -3827,17 +3827,6 @@ BattleScript_EffectSuperFang::
damagetohalftargethp damagetohalftargethp
goto BattleScript_HitFromAtkAnimation 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:: BattleScript_EffectRecoilIfMiss::
attackcanceler attackcanceler
accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE
@ -4854,14 +4843,14 @@ BattleScript_EffectRapidSpinEnd::
goto BattleScript_EffectHit goto BattleScript_EffectHit
.endif .endif
BattleScript_EffectSonicboom:: BattleScript_EffectArgFixedDamage::
attackcanceler attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring attackstring
ppreduce ppreduce
typecalc typecalc
bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
setword gBattleMoveDamage, 20 setargtobattledamage
adjustdamage adjustdamage
goto BattleScript_HitFromAtkAnimation goto BattleScript_HitFromAtkAnimation

View File

@ -35,7 +35,7 @@
#define EFFECT_OHKO 31 #define EFFECT_OHKO 31
#define EFFECT_FUSION_COMBO 32 #define EFFECT_FUSION_COMBO 32
#define EFFECT_SUPER_FANG 33 #define EFFECT_SUPER_FANG 33
#define EFFECT_DRAGON_RAGE 34 #define EFFECT_ARG_FIXED_DAMAGE 34
#define EFFECT_UNUSED_35 35 #define EFFECT_UNUSED_35 35
#define EFFECT_HEAL_BLOCK 36 #define EFFECT_HEAL_BLOCK 36
#define EFFECT_RECOIL_IF_MISS 37 #define EFFECT_RECOIL_IF_MISS 37
@ -111,7 +111,7 @@
#define EFFECT_BATON_PASS 107 #define EFFECT_BATON_PASS 107
#define EFFECT_PURSUIT 108 #define EFFECT_PURSUIT 108
#define EFFECT_RAPID_SPIN 109 #define EFFECT_RAPID_SPIN 109
#define EFFECT_SONICBOOM 110 #define EFFECT_UNUSED_110 110
#define EFFECT_CAPTIVATE 111 #define EFFECT_CAPTIVATE 111
#define EFFECT_MORNING_SUN 112 #define EFFECT_MORNING_SUN 112
#define EFFECT_SYNTHESIS 113 #define EFFECT_SYNTHESIS 113

View File

@ -140,7 +140,7 @@
#define VARIOUS_TRY_SOAK 48 #define VARIOUS_TRY_SOAK 48
#define VARIOUS_HANDLE_MEGA_EVO 49 #define VARIOUS_HANDLE_MEGA_EVO 49
#define VARIOUS_TRY_LAST_RESORT 50 #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_HIT_SWITCH_TARGET 52
#define VARIOUS_TRY_AUTOTOMIZE 53 #define VARIOUS_TRY_AUTOTOMIZE 53
#define VARIOUS_ABILITY_POPUP 54 #define VARIOUS_ABILITY_POPUP 54

View File

@ -1381,7 +1381,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
//case EFFECT_BIDE: //case EFFECT_BIDE:
//case EFFECT_COUNTER: //case EFFECT_COUNTER:
case EFFECT_PRESENT: case EFFECT_PRESENT:
case EFFECT_SONICBOOM: case EFFECT_ARG_FIXED_DAMAGE:
//case EFFECT_MIRROR_COAT: //case EFFECT_MIRROR_COAT:
case EFFECT_FOCUS_PUNCH: case EFFECT_FOCUS_PUNCH:
//case EFFECT_ENDEAVOR: //case EFFECT_ENDEAVOR:

View File

@ -768,11 +768,8 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
case EFFECT_PSYWAVE: case EFFECT_PSYWAVE:
dmg = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); dmg = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
break; break;
case EFFECT_DRAGON_RAGE: case EFFECT_ARG_FIXED_DAMAGE:
dmg = 40 * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); dmg = gBattleMoves[move].argument * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
break;
case EFFECT_SONICBOOM:
dmg = 20 * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
break; break;
case EFFECT_MULTI_HIT: case EFFECT_MULTI_HIT:
dmg *= (aiData->abilities[battlerAtk] == ABILITY_SKILL_LINK dmg *= (aiData->abilities[battlerAtk] == ABILITY_SKILL_LINK

View File

@ -436,11 +436,10 @@ static u8 GetMaxPowerTier(u16 move)
case EFFECT_TERRAIN_PULSE: case EFFECT_TERRAIN_PULSE:
case EFFECT_PUNISHMENT: case EFFECT_PUNISHMENT:
case EFFECT_TRUMP_CARD: case EFFECT_TRUMP_CARD:
case EFFECT_SONICBOOM: case EFFECT_ARG_FIXED_DAMAGE:
case EFFECT_SPIT_UP: case EFFECT_SPIT_UP:
case EFFECT_NATURAL_GIFT: case EFFECT_NATURAL_GIFT:
case EFFECT_MIRROR_COAT: case EFFECT_MIRROR_COAT:
case EFFECT_DRAGON_RAGE:
case EFFECT_FINAL_GAMBIT: case EFFECT_FINAL_GAMBIT:
//case EFFECT_DRAGON_DARTS: //case EFFECT_DRAGON_DARTS:
return MAX_POWER_TIER_2; return MAX_POWER_TIER_2;

View File

@ -9597,6 +9597,12 @@ static void Cmd_various(void)
gBattlescriptCurrInstr = cmd->failInstr; gBattlescriptCurrInstr = cmd->failInstr;
return; return;
} }
case VARIOUS_SET_ARG_TO_BATTLE_DAMAGE:
{
VARIOUS_ARGS();
gBattleMoveDamage = gBattleMoves[gCurrentMove].argument;
break;
}
case VARIOUS_TRY_HIT_SWITCH_TARGET: case VARIOUS_TRY_HIT_SWITCH_TARGET:
{ {
VARIOUS_ARGS(const u8 *failInstr); VARIOUS_ARGS(const u8 *failInstr);

View File

@ -120,7 +120,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_OHKO] = 7, [EFFECT_OHKO] = 7,
// [EFFECT_RAZOR_WIND] = 1, // [EFFECT_RAZOR_WIND] = 1,
[EFFECT_SUPER_FANG] = 5, [EFFECT_SUPER_FANG] = 5,
[EFFECT_DRAGON_RAGE] = 2,
// [EFFECT_HIGH_CRITICAL] = 1, // [EFFECT_HIGH_CRITICAL] = 1,
// [EFFECT_DOUBLE_HIT] = 1, // [EFFECT_DOUBLE_HIT] = 1,
[EFFECT_RECOIL_IF_MISS] = 1, [EFFECT_RECOIL_IF_MISS] = 1,
@ -193,7 +192,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_BATON_PASS] = 7, [EFFECT_BATON_PASS] = 7,
[EFFECT_PURSUIT] = 2, [EFFECT_PURSUIT] = 2,
[EFFECT_RAPID_SPIN] = 2, [EFFECT_RAPID_SPIN] = 2,
[EFFECT_SONICBOOM] = 1, [EFFECT_ARG_FIXED_DAMAGE] = 1,
[EFFECT_MORNING_SUN] = 4, [EFFECT_MORNING_SUN] = 4,
[EFFECT_SYNTHESIS] = 4, [EFFECT_SYNTHESIS] = 4,
[EFFECT_MOONLIGHT] = 4, [EFFECT_MOONLIGHT] = 4,

View File

@ -795,7 +795,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
[MOVE_SONIC_BOOM] = [MOVE_SONIC_BOOM] =
{ {
.effect = EFFECT_SONICBOOM, .effect = EFFECT_ARG_FIXED_DAMAGE,
.power = 1, .power = 1,
.type = TYPE_NORMAL, .type = TYPE_NORMAL,
.accuracy = 90, .accuracy = 90,
@ -803,6 +803,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED, .target = MOVE_TARGET_SELECTED,
.priority = 0, .priority = 0,
.category = BATTLE_CATEGORY_SPECIAL, .category = BATTLE_CATEGORY_SPECIAL,
.argument = 20,
}, },
[MOVE_DISABLE] = [MOVE_DISABLE] =
@ -1350,7 +1351,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
[MOVE_DRAGON_RAGE] = [MOVE_DRAGON_RAGE] =
{ {
.effect = EFFECT_DRAGON_RAGE, .effect = EFFECT_ARG_FIXED_DAMAGE,
.power = 1, .power = 1,
.type = TYPE_DRAGON, .type = TYPE_DRAGON,
.accuracy = 100, .accuracy = 100,
@ -1359,6 +1360,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
.priority = 0, .priority = 0,
.category = BATTLE_CATEGORY_SPECIAL, .category = BATTLE_CATEGORY_SPECIAL,
.ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_4) || (B_UPDATED_MOVE_FLAGS < GEN_3), .ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_4) || (B_UPDATED_MOVE_FLAGS < GEN_3),
.argument = 40,
}, },
[MOVE_FIRE_SPIN] = [MOVE_FIRE_SPIN] =

View File

@ -4,7 +4,8 @@
ASSUMPTIONS ASSUMPTIONS
{ {
ASSUME(gItems[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP); 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") SINGLE_BATTLE_TEST("Liechi Berry raises the holder's Attack by one stage when HP drops to 1/4 or below")

View File

@ -4,7 +4,8 @@
ASSUMPTIONS ASSUMPTIONS
{ {
ASSUME(gItems[ITEM_LANSAT_BERRY].holdEffect == HOLD_EFFECT_CRITICAL_UP); 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") SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two stages when HP drops to 1/4 or below")

View File

@ -4,7 +4,8 @@
ASSUMPTIONS ASSUMPTIONS
{ {
ASSUME(gItems[ITEM_GANLON_BERRY].holdEffect == HOLD_EFFECT_DEFENSE_UP); 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") SINGLE_BATTLE_TEST("Ganlon Berry raises the holder's Defense by one stage when HP drops to 1/4 or below")

View File

@ -4,7 +4,8 @@
ASSUMPTIONS ASSUMPTIONS
{ {
ASSUME(gItems[ITEM_MICLE_BERRY].holdEffect == HOLD_EFFECT_MICLE_BERRY); 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") SINGLE_BATTLE_TEST("Micle Berry raises the holder's accuracy by 1.2 when HP drops to 1/4 or below")

View File

@ -4,7 +4,8 @@
ASSUMPTIONS ASSUMPTIONS
{ {
ASSUME(gItems[ITEM_PETAYA_BERRY].holdEffect == HOLD_EFFECT_SP_ATTACK_UP); 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") SINGLE_BATTLE_TEST("Petaya Berry raises the holder's Sp. Atk by one stage when HP drops to 1/4 or below")

View File

@ -4,7 +4,8 @@
ASSUMPTIONS ASSUMPTIONS
{ {
ASSUME(gItems[ITEM_APICOT_BERRY].holdEffect == HOLD_EFFECT_SP_DEFENSE_UP); 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") SINGLE_BATTLE_TEST("Apicot Berry raises the holder's Sp. Def by one stage when HP drops to 1/4 or below")

View File

@ -4,7 +4,8 @@
ASSUMPTIONS ASSUMPTIONS
{ {
ASSUME(gItems[ITEM_SALAC_BERRY].holdEffect == HOLD_EFFECT_SPEED_UP); 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") SINGLE_BATTLE_TEST("Salac Berry raises the holder's Speed by one stage when HP drops to 1/4 or below")