From 3d93da7133a86a73529344ddfb931799f8a14d24 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 29 Jul 2018 12:21:28 +0200 Subject: [PATCH] Add Imposter --- asm/macros/battle_script.inc | 5 +++++ data/battle_scripts_1.s | 8 ++++++++ include/battle_scripts.h | 1 + include/constants/battle_script_commands.h | 1 + include/constants/battle_string_ids.h | 1 + src/battle_message.c | 2 ++ src/battle_script_commands.c | 5 +++++ src/battle_util.c | 10 ++++++++++ 8 files changed, 33 insertions(+) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 3c13ee676e..0285b0f323 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1393,6 +1393,11 @@ various \battler, VARIOUS_TRY_ACTIVATE_FELL_STINGER .endm + .macro playmoveanimation battler move + various \battler, VARIOUS_PLAY_MOVE_ANIMATION + .2byte \move + .endm + @ helpful macros .macro setstatchanger stat, stages, down setbyte sSTATCHANGER \stat | \stages << 4 | \down << 7 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0a7d51c3a2..d80cd229bf 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -4858,6 +4858,14 @@ BattleScript_SwitchInAbilityMsg:: printfromtable gSwitchInAbilityStringIds waitmessage 0x40 end3 + +BattleScript_ImposterActivates:: + transformdataexecution + playmoveanimation BS_ATTACKER MOVE_TRANSFORM + waitanimation + printstring STRINGID_IMPOSTERTRANSFORM + waitmessage 0x40 + end3 BattleScript_RoughSkinActivates:: orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 8d57b9637b..c3ef0bfaf6 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -324,5 +324,6 @@ extern const u8 BattleScript_WeakArmorActivates[]; extern const u8 BattleScript_FellStingerRaisesStat[]; extern const u8 BattleScript_SnowWarningActivates[]; extern const u8 BattleScript_HarvestActivates[]; +extern const u8 BattleScript_ImposterActivates[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index ceeb21b196..fdf68fba60 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -81,6 +81,7 @@ #define VARIOUS_RESTORE_PP 33 #define VARIOUS_TRY_ACTIVATE_MOXIE 34 #define VARIOUS_TRY_ACTIVATE_FELL_STINGER 35 +#define VARIOUS_PLAY_MOVE_ANIMATION 36 // atk80, dmg manipulation #define ATK80_DMG_CHANGE_SIGN 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 92040daf49..008d622adb 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -485,6 +485,7 @@ #define STRINGID_TARGETABILITYSTATLOWER 482 #define STRINGID_TARGETSTATWONTGOHIGHER 483 #define STRINGID_PKMNMOVEBOUNCEDABILITY 484 +#define STRINGID_IMPOSTERTRANSFORM 485 #define BATTLESTRINGS_COUNT 496 diff --git a/src/battle_message.c b/src/battle_message.c index a8427508ba..a04f904044 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -626,6 +626,7 @@ static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ static const u8 sText_AttackerAquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired {B_LAST_ABILITY}!"); static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!"); static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX}’s\l{B_DEF_ABILITY}!"); +static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX} using {B_LAST_ABILITY}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { @@ -1103,6 +1104,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = sText_TargetAbilityLoweredStat, sText_TargetStatWontGoHigher, sText_PkmnMoveBouncedViaAbility, + sText_ImposterTransform, }; const u16 gMagicCoatBounceStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 50afec434e..189c4e6bcd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6355,6 +6355,11 @@ static void atk76_various(void) return; } break; + case VARIOUS_PLAY_MOVE_ANIMATION: + BtlController_EmitMoveAnimation(0, T1_READ_16(gBattlescriptCurrInstr + 3), gBattleScripting.animTurn, 0, 0, gBattleMons[gActiveBattler].friendship, &gDisableStructs[gActiveBattler], gMultiHitCounter); + MarkBattlerForControllerExec(gActiveBattler); + gBattlescriptCurrInstr += 5; + return; } gBattlescriptCurrInstr += 3; diff --git a/src/battle_util.c b/src/battle_util.c index c5305efafc..005b33d949 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2429,6 +2429,16 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts); } break; + case ABILITY_IMPOSTER: + if (IsBattlerAlive(BATTLE_OPPOSITE(battler)) + && !(gBattleMons[BATTLE_OPPOSITE(battler)].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE)) + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + { + gBattlerTarget = BATTLE_OPPOSITE(battler); + BattleScriptPushCursorAndCallback(BattleScript_ImposterActivates); + effect++; + } + break; case ABILITY_MOLD_BREAKER: if (!gSpecialStatuses[battler].switchInAbilityDone) {