From 7623eabdeee9c0d21d1f575fed692934502d5ec3 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 29 Sep 2018 19:37:39 +0200 Subject: [PATCH] After you --- asm/macros/battle_script.inc | 5 ++++ data/battle_scripts_1.s | 13 ++++++++++ include/constants/battle_move_effects.h | 1 + include/constants/battle_script_commands.h | 1 + src/battle_script_commands.c | 30 ++++++++++++++++++++++ src/data/battle_moves.h | 2 +- 6 files changed, 51 insertions(+), 1 deletion(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 97a776f3e7..ca7f453d53 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1440,6 +1440,11 @@ .4byte \ptr .endm + .macro tryafteryou ptr + various BS_ATTACKER, VARIOUS_AFTER_YOU + .4byte \ptr + .endm + .macro invertstatstages battler various \battler, VARIOUS_INVERT_STAT_STAGES .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index c36ca54e2e..3aa4f2149d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -324,6 +324,19 @@ gBattleScriptsForMoveEffects:: @ 82D86A8 .4byte BattleScript_EffectPsychoShift .4byte BattleScript_EffectPowerTrick .4byte BattleScript_EffectFlameBurst + .4byte BattleScript_EffectAfterYou + +BattleScript_EffectAfterYou: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryafteryou BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_KINDOFFER + waitmessage 0x40 + goto BattleScript_MoveEnd BattleScript_EffectFlameBurst: setmoveeffect MOVE_EFFECT_FLAME_BURST | MOVE_EFFECT_AFFECTS_USER diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 63e51f6f04..9963a59b70 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -313,5 +313,6 @@ #define EFFECT_PSYCHO_SHIFT 307 #define EFFECT_POWER_TRICK 308 #define EFFECT_FLAME_BURST 309 +#define EFFECT_AFTER_YOU 310 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index a9e7f656d3..e6a6b8d66f 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -115,6 +115,7 @@ #define VARIOUS_PSYCHO_SHIFT 61 #define VARIOUS_CURE_STATUS 62 #define VARIOUS_POWER_TRICK 63 +#define VARIOUS_AFTER_YOU 64 // atk80, dmg manipulation #define ATK80_DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9dc47e7d94..db5f39a660 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6980,6 +6980,36 @@ static void atk76_various(void) gStatuses3[gActiveBattler] ^= STATUS3_POWER_TRICK; SWAP(gBattleMons[gActiveBattler].attack, gBattleMons[gActiveBattler].defense, i); break; + case VARIOUS_AFTER_YOU: + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) + || GetBattlerTurnOrderNum(gBattlerAttacker) == GetBattlerTurnOrderNum(gBattlerTarget) + 1) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + for (i = 0; i < gBattlersCount; i++) + data[i] = gBattlerByTurnOrder[i]; + if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 2) + { + gBattlerByTurnOrder[1] = gBattlerTarget; + gBattlerByTurnOrder[2] = data[1]; + gBattlerByTurnOrder[3] = data[3]; + } + else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3) + { + gBattlerByTurnOrder[1] = gBattlerTarget; + gBattlerByTurnOrder[2] = data[1]; + gBattlerByTurnOrder[3] = data[2]; + } + else + { + gBattlerByTurnOrder[2] = gBattlerTarget; + gBattlerByTurnOrder[3] = data[2]; + } + gBattlescriptCurrInstr += 7; + } + return; } gBattlescriptCurrInstr += 3; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index e9698a41ba..d01557f408 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -5949,7 +5949,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .split = SPLIT_STATUS, }, { // MOVE_AFTER_YOU - .effect = EFFECT_PLACEHOLDER, // Needs a custom move effect + .effect = EFFECT_AFTER_YOU, .power = 0, .type = TYPE_NORMAL, .accuracy = 0,