From 10317033092d3b42dd9c8280563a50ddecd6add6 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Wed, 6 Oct 2021 16:00:02 -0400 Subject: [PATCH] magician base functionality --- data/battle_scripts_1.s | 6 ++++++ include/battle_scripts.h | 1 + src/battle_script_commands.c | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0615e1239..8118c4ff5 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8426,3 +8426,9 @@ BattleScript_DarkTypePreventsPrankster:: waitmessage B_WAIT_TIME_LONG orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT goto BattleScript_MoveEnd + +BattleScript_MagicianActivates:: + call BattleScript_AbilityPopUp + call BattleScript_ItemSteal + return + diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 203be6519..9e4c058eb 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -389,5 +389,6 @@ extern const u8 BattleScript_DarkTypePreventsPrankster[]; extern const u8 BattleScript_GulpMissileGorging[]; extern const u8 BattleScript_GulpMissileGulping[]; extern const u8 BattleScript_BattleBondActivatesOnMoveEndAttacker[]; +extern const u8 BattleScript_MagicianActivates[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 12f7763e3..04d636426 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5071,6 +5071,26 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; + case MOVEEND_MAGICIAN: + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MAGICIAN + && gCurrentMove != MOVE_FLING && gCurrentMove != MOVE_NATURAL_GIFT + && gBattleMons[gBattlerAttacker].item == ITEM_NONE + && IsBattlerAlive(gBattlerAttacker) + && TARGET_TURN_DAMAGED + && CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) + && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && (GetBattlerAbility(gBattlerTarget) != ABILITY_STICKY_HOLD || !IsBattlerAlive(gBattlerTarget))) + { + StealTargetItem(gBattlerAttacker, gBattlerTarget); + gBattleScripting.battler = gBattlerAbility = gBattlerAttacker; + gEffectBattler = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MagicianActivates; + effect = TRUE; + } + gBattleScripting.moveendState++; + break; case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokemon. // Set a flag if move hits either target (for throat spray that can't check damage) if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)