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
.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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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,

View file

@ -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] =

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")