diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2c0abf1dcc..102cdd7c8c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -303,6 +303,56 @@ gBattleScriptsForMoveEffects:: @ 82D86A8 .4byte BattleScript_EffectLastResort .4byte BattleScript_EffectRecoil33WithStatus .4byte BattleScript_EffectFlinchWithStatus + .4byte BattleScript_EffectRecoil50 + .4byte BattleScript_EffectShellSmash + +BattleScript_EffectShellSmash: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, 0xC, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, 0xC, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, 0, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, 0, BattleScript_ButItFailed +BattleScript_ShellSmashTryDef:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, ATK48_STAT_NEGATIVE | ATK48_DONT_CHECK_LOWER + setstatchanger STAT_DEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_ShellSmashTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_ShellSmashTrySpDef + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ShellSmashTrySpDef: + setstatchanger STAT_SPDEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_ShellSmashTryAttack + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_ShellSmashTryAttack + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ShellSmashTryAttack: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_ATK | BIT_SPEED, ATK48_STAT_BY_TWO + setstatchanger STAT_ATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_ShellSmashTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_ShellSmashTrySpAtk + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ShellSmashTrySpAtk: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_ShellSmashTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_ShellSmashTrySpeed + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ShellSmashTrySpeed: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_ShellSmashEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_ShellSmashEnd + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ShellSmashEnd: + goto BattleScript_MoveEnd BattleScript_EffectLastResort: attackcanceler @@ -397,7 +447,7 @@ BattleScript_CoilDoMoveAnim: attackanimation waitanimation setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0x0 + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_ACC, 0x0 setstatchanger STAT_ATK, 1, FALSE statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CoilTryDef jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CoilTryDef @@ -3388,6 +3438,10 @@ BattleScript_EffectDoubleEdge:: BattleScript_EffectRecoil33WithStatus: setmoveeffect MOVE_EFFECT_RECOIL_33_STATUS | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit + +BattleScript_EffectRecoil50: + setmoveeffect MOVE_EFFECT_RECOIL_50 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + goto BattleScript_EffectHit BattleScript_EffectTeeterDance:: attackcanceler diff --git a/include/constants/battle.h b/include/constants/battle.h index 2fedc4aa36..62fcef780b 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -311,7 +311,7 @@ #define MOVE_EFFECT_KNOCK_OFF 0x36 #define MOVE_EFFECT_DEF_SPDEF_DOWN 0x37 #define MOVE_EFFECT_RECOIL_33_STATUS 0x38 -#define MOVE_EFFECT_NOTHING_39 0x39 +#define MOVE_EFFECT_RECOIL_50 0x39 #define MOVE_EFFECT_NOTHING_3A 0x3A #define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B #define MOVE_EFFECT_NOTHING_3C 0x3C diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index f9c550318f..d8b1383754 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -292,5 +292,7 @@ #define EFFECT_LAST_RESORT 286 #define EFFECT_RECOIL_33_STATUS 287 #define EFFECT_FLINCH_STATUS 288 +#define EFFECT_RECOIL_50 289 +#define EFFECT_SHELL_SMASH 290 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index f457fdb86d..c63e1e6d4d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2606,6 +2606,14 @@ void SetMoveEffect(bool8 primary, u8 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; + case MOVE_EFFECT_RECOIL_50: // Head Smash + gBattleMoveDamage = gHpDealt / 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil; + break; case MOVE_EFFECT_RECOIL_33_STATUS: // Flare Blitz - can burn, Volt Tackle - can paralyze gBattleScripting.savedDmg = gHpDealt / 3; if (gBattleScripting.savedDmg == 0) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 6c9498ad02..d9370da997 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -5493,7 +5493,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] = .split = SPLIT_STATUS, }, { // MOVE_HEAD_SMASH - .effect = EFFECT_PLACEHOLDER, // Needs a custom move effect (1/2 recoil instead of 1/3 recoil) + .effect = EFFECT_RECOIL_50, .power = 150, .type = TYPE_ROCK, .accuracy = 80, @@ -5961,7 +5961,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] = .split = SPLIT_STATUS, }, { // MOVE_ROUND - .effect = EFFECT_ROUND, // Needs a custom move effect + .effect = EFFECT_ROUND, .power = 60, .type = TYPE_NORMAL, .accuracy = 100, @@ -6057,7 +6057,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] = .split = SPLIT_SPECIAL, }, { // MOVE_SHELL_SMASH - .effect = EFFECT_PLACEHOLDER, // Needs a custom move effect + .effect = EFFECT_SHELL_SMASH, .power = 0, .type = TYPE_NORMAL, .accuracy = 0,