Fixes Floral Healing + Tests (#3604)
This commit is contained in:
parent
913bc6c9d0
commit
4bde378c0d
@ -1461,6 +1461,11 @@
|
||||
.4byte \failInstr
|
||||
.endm
|
||||
|
||||
.macro tryhealpulse failInstr:req
|
||||
callnative BS_TryHealPulse
|
||||
.4byte \failInstr
|
||||
.endm
|
||||
|
||||
@ various command changed to more readable macros
|
||||
.macro cancelmultiturnmoves battler:req
|
||||
various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES
|
||||
@ -1652,11 +1657,6 @@
|
||||
various \battler, VARIOUS_SET_LAST_USED_ABILITY
|
||||
.endm
|
||||
|
||||
.macro tryhealpulse battler:req, failInstr:req
|
||||
various \battler, VARIOUS_TRY_HEAL_PULSE
|
||||
.4byte \failInstr
|
||||
.endm
|
||||
|
||||
.macro tryquash failInstr:req
|
||||
various BS_ATTACKER, VARIOUS_TRY_QUASH
|
||||
.4byte \failInstr
|
||||
|
||||
@ -2607,7 +2607,7 @@ BattleScript_EffectHealPulse:
|
||||
jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents
|
||||
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
|
||||
jumpifsubstituteblocks BattleScript_ButItFailed
|
||||
tryhealpulse BS_TARGET, BattleScript_AlreadyAtFullHp
|
||||
tryhealpulse BattleScript_AlreadyAtFullHp
|
||||
attackanimation
|
||||
waitanimation
|
||||
healthbarupdate BS_TARGET
|
||||
|
||||
@ -384,8 +384,9 @@
|
||||
#define MOVE_EFFECT_STEALTH_ROCK 76
|
||||
#define MOVE_EFFECT_SPIKES 77
|
||||
#define MOVE_EFFECT_TRIPLE_ARROWS 78
|
||||
#define MOVE_EFFECT_FLORAL_HEALING 79
|
||||
|
||||
#define NUM_MOVE_EFFECTS 79
|
||||
#define NUM_MOVE_EFFECTS 80
|
||||
|
||||
#define MOVE_EFFECT_AFFECTS_USER 0x4000
|
||||
#define MOVE_EFFECT_CERTAIN 0x8000
|
||||
|
||||
@ -131,124 +131,122 @@
|
||||
#define VARIOUS_SET_SIMPLE_BEAM 39
|
||||
#define VARIOUS_TRY_ENTRAINMENT 40
|
||||
#define VARIOUS_SET_LAST_USED_ABILITY 41
|
||||
#define VARIOUS_TRY_HEAL_PULSE 42
|
||||
#define VARIOUS_TRY_QUASH 43
|
||||
#define VARIOUS_INVERT_STAT_STAGES 44
|
||||
#define VARIOUS_TRY_ME_FIRST 45
|
||||
#define VARIOUS_JUMP_IF_BATTLE_END 46
|
||||
#define VARIOUS_TRY_ELECTRIFY 47
|
||||
#define VARIOUS_TRY_REFLECT_TYPE 48
|
||||
#define VARIOUS_TRY_SOAK 49
|
||||
#define VARIOUS_HANDLE_MEGA_EVO 50
|
||||
#define VARIOUS_TRY_LAST_RESORT 51
|
||||
#define VARIOUS_ARGUMENT_STATUS_EFFECT 52
|
||||
#define VARIOUS_TRY_HIT_SWITCH_TARGET 53
|
||||
#define VARIOUS_TRY_AUTOTOMIZE 54
|
||||
#define VARIOUS_TRY_COPYCAT 55
|
||||
#define VARIOUS_ABILITY_POPUP 56
|
||||
#define VARIOUS_DEFOG 57
|
||||
#define VARIOUS_JUMP_IF_TARGET_ALLY 58
|
||||
#define VARIOUS_TRY_SYNCHRONOISE 59
|
||||
#define VARIOUS_PSYCHO_SHIFT 60
|
||||
#define VARIOUS_CURE_STATUS 61
|
||||
#define VARIOUS_POWER_TRICK 62
|
||||
#define VARIOUS_AFTER_YOU 63
|
||||
#define VARIOUS_BESTOW 64
|
||||
#define VARIOUS_ARGUMENT_TO_MOVE_EFFECT 65
|
||||
#define VARIOUS_JUMP_IF_NOT_GROUNDED 66
|
||||
#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 67
|
||||
#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 68
|
||||
#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 69
|
||||
#define VARIOUS_SET_AURORA_VEIL 70
|
||||
#define VARIOUS_TRY_THIRD_TYPE 71
|
||||
#define VARIOUS_ACUPRESSURE 72
|
||||
#define VARIOUS_SET_POWDER 73
|
||||
#define VARIOUS_SPECTRAL_THIEF 74
|
||||
#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 75
|
||||
#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 76
|
||||
#define VARIOUS_JUMP_IF_ROAR_FAILS 77
|
||||
#define VARIOUS_TRY_INSTRUCT 78
|
||||
#define VARIOUS_JUMP_IF_NOT_BERRY 79
|
||||
#define VARIOUS_TRACE_ABILITY 80
|
||||
#define VARIOUS_UPDATE_NICK 81
|
||||
#define VARIOUS_TRY_ILLUSION_OFF 82
|
||||
#define VARIOUS_SET_SPRITEIGNORE0HP 83
|
||||
#define VARIOUS_HANDLE_FORM_CHANGE 84
|
||||
#define VARIOUS_GET_STAT_VALUE 85
|
||||
#define VARIOUS_JUMP_IF_FULL_HP 86
|
||||
#define VARIOUS_LOSE_TYPE 87
|
||||
#define VARIOUS_TRY_ACTIVATE_SOULHEART 88
|
||||
#define VARIOUS_TRY_ACTIVATE_RECEIVER 89
|
||||
#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 90
|
||||
#define VARIOUS_TRY_FRISK 91
|
||||
#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 92
|
||||
#define VARIOUS_TRY_FAIRY_LOCK 93
|
||||
#define VARIOUS_JUMP_IF_NO_ALLY 94
|
||||
#define VARIOUS_POISON_TYPE_IMMUNITY 95
|
||||
#define VARIOUS_JUMP_IF_NO_HOLD_EFFECT 96
|
||||
#define VARIOUS_INFATUATE_WITH_BATTLER 97
|
||||
#define VARIOUS_SET_LAST_USED_ITEM 98
|
||||
#define VARIOUS_PARALYZE_TYPE_IMMUNITY 99
|
||||
#define VARIOUS_JUMP_IF_ABSENT 100
|
||||
#define VARIOUS_DESTROY_ABILITY_POPUP 101
|
||||
#define VARIOUS_TOTEM_BOOST 102
|
||||
#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 103
|
||||
#define VARIOUS_MOVEEND_ITEM_EFFECTS 104
|
||||
#define VARIOUS_TERRAIN_SEED 105
|
||||
#define VARIOUS_MAKE_INVISIBLE 106
|
||||
#define VARIOUS_ROOM_SERVICE 107
|
||||
|
||||
#define VARIOUS_EERIE_SPELL_PP_REDUCE 108
|
||||
#define VARIOUS_JUMP_IF_TEAM_HEALTHY 109
|
||||
#define VARIOUS_TRY_HEAL_QUARTER_HP 110
|
||||
#define VARIOUS_REMOVE_TERRAIN 111
|
||||
#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 112
|
||||
#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 113
|
||||
#define VARIOUS_GET_ROTOTILLER_TARGETS 114
|
||||
#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 115
|
||||
#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 116
|
||||
#define VARIOUS_CONSUME_BERRY 117
|
||||
#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 118
|
||||
#define VARIOUS_APPLY_PLASMA_FISTS 119
|
||||
#define VARIOUS_JUMP_IF_SPECIES 120
|
||||
#define VARIOUS_UPDATE_ABILITY_POPUP 121
|
||||
#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 122
|
||||
#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 123
|
||||
#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 124
|
||||
#define VARIOUS_PHOTON_GEYSER_CHECK 125
|
||||
#define VARIOUS_SHELL_SIDE_ARM_CHECK 126
|
||||
#define VARIOUS_TRY_NO_RETREAT 127
|
||||
#define VARIOUS_TRY_TAR_SHOT 128
|
||||
#define VARIOUS_CAN_TAR_SHOT_WORK 129
|
||||
#define VARIOUS_CHECK_POLTERGEIST 130
|
||||
#define VARIOUS_SET_OCTOLOCK 131
|
||||
#define VARIOUS_CUT_1_3_HP_RAISE_STATS 132
|
||||
#define VARIOUS_TRY_END_NEUTRALIZING_GAS 133
|
||||
#define VARIOUS_JUMP_IF_UNDER_200 134
|
||||
#define VARIOUS_SET_SKY_DROP 135
|
||||
#define VARIOUS_CLEAR_SKY_DROP 136
|
||||
#define VARIOUS_SKY_DROP_YAWN 137
|
||||
#define VARIOUS_JUMP_IF_HOLD_EFFECT 138
|
||||
#define VARIOUS_CURE_CERTAIN_STATUSES 139
|
||||
#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 140
|
||||
#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 141
|
||||
#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 142
|
||||
#define VARIOUS_SAVE_BATTLER_ITEM 143
|
||||
#define VARIOUS_RESTORE_BATTLER_ITEM 144
|
||||
#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 145
|
||||
#define VARIOUS_SET_BEAK_BLAST 146
|
||||
#define VARIOUS_SWAP_SIDE_STATUSES 147
|
||||
#define VARIOUS_SWAP_STATS 148
|
||||
#define VARIOUS_TEATIME_INVUL 149
|
||||
#define VARIOUS_TEATIME_TARGETS 150
|
||||
#define VARIOUS_TRY_WIND_RIDER_POWER 151
|
||||
#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 152
|
||||
#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 153
|
||||
#define VARIOUS_STORE_HEALING_WISH 154
|
||||
#define VARIOUS_HIT_SWITCH_TARGET_FAILED 155
|
||||
#define VARIOUS_TRY_REVIVAL_BLESSING 156
|
||||
#define VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE 157
|
||||
#define VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION 158
|
||||
#define VARIOUS_TRY_QUASH 42
|
||||
#define VARIOUS_INVERT_STAT_STAGES 43
|
||||
#define VARIOUS_TRY_ME_FIRST 44
|
||||
#define VARIOUS_JUMP_IF_BATTLE_END 45
|
||||
#define VARIOUS_TRY_ELECTRIFY 46
|
||||
#define VARIOUS_TRY_REFLECT_TYPE 47
|
||||
#define VARIOUS_TRY_SOAK 48
|
||||
#define VARIOUS_HANDLE_MEGA_EVO 49
|
||||
#define VARIOUS_TRY_LAST_RESORT 50
|
||||
#define VARIOUS_ARGUMENT_STATUS_EFFECT 51
|
||||
#define VARIOUS_TRY_HIT_SWITCH_TARGET 52
|
||||
#define VARIOUS_TRY_AUTOTOMIZE 53
|
||||
#define VARIOUS_TRY_COPYCAT 54
|
||||
#define VARIOUS_ABILITY_POPUP 55
|
||||
#define VARIOUS_DEFOG 56
|
||||
#define VARIOUS_JUMP_IF_TARGET_ALLY 57
|
||||
#define VARIOUS_TRY_SYNCHRONOISE 58
|
||||
#define VARIOUS_PSYCHO_SHIFT 59
|
||||
#define VARIOUS_CURE_STATUS 60
|
||||
#define VARIOUS_POWER_TRICK 61
|
||||
#define VARIOUS_AFTER_YOU 62
|
||||
#define VARIOUS_BESTOW 63
|
||||
#define VARIOUS_ARGUMENT_TO_MOVE_EFFECT 64
|
||||
#define VARIOUS_JUMP_IF_NOT_GROUNDED 65
|
||||
#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 66
|
||||
#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 67
|
||||
#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 68
|
||||
#define VARIOUS_SET_AURORA_VEIL 69
|
||||
#define VARIOUS_TRY_THIRD_TYPE 70
|
||||
#define VARIOUS_ACUPRESSURE 71
|
||||
#define VARIOUS_SET_POWDER 72
|
||||
#define VARIOUS_SPECTRAL_THIEF 73
|
||||
#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 74
|
||||
#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 75
|
||||
#define VARIOUS_JUMP_IF_ROAR_FAILS 76
|
||||
#define VARIOUS_TRY_INSTRUCT 77
|
||||
#define VARIOUS_JUMP_IF_NOT_BERRY 78
|
||||
#define VARIOUS_TRACE_ABILITY 79
|
||||
#define VARIOUS_UPDATE_NICK 80
|
||||
#define VARIOUS_TRY_ILLUSION_OFF 81
|
||||
#define VARIOUS_SET_SPRITEIGNORE0HP 82
|
||||
#define VARIOUS_HANDLE_FORM_CHANGE 83
|
||||
#define VARIOUS_GET_STAT_VALUE 84
|
||||
#define VARIOUS_JUMP_IF_FULL_HP 85
|
||||
#define VARIOUS_LOSE_TYPE 86
|
||||
#define VARIOUS_TRY_ACTIVATE_SOULHEART 87
|
||||
#define VARIOUS_TRY_ACTIVATE_RECEIVER 88
|
||||
#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 89
|
||||
#define VARIOUS_TRY_FRISK 90
|
||||
#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 91
|
||||
#define VARIOUS_TRY_FAIRY_LOCK 92
|
||||
#define VARIOUS_JUMP_IF_NO_ALLY 93
|
||||
#define VARIOUS_POISON_TYPE_IMMUNITY 94
|
||||
#define VARIOUS_JUMP_IF_NO_HOLD_EFFECT 95
|
||||
#define VARIOUS_INFATUATE_WITH_BATTLER 96
|
||||
#define VARIOUS_SET_LAST_USED_ITEM 97
|
||||
#define VARIOUS_PARALYZE_TYPE_IMMUNITY 98
|
||||
#define VARIOUS_JUMP_IF_ABSENT 99
|
||||
#define VARIOUS_DESTROY_ABILITY_POPUP 100
|
||||
#define VARIOUS_TOTEM_BOOST 101
|
||||
#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 102
|
||||
#define VARIOUS_MOVEEND_ITEM_EFFECTS 103
|
||||
#define VARIOUS_TERRAIN_SEED 104
|
||||
#define VARIOUS_MAKE_INVISIBLE 105
|
||||
#define VARIOUS_ROOM_SERVICE 106
|
||||
#define VARIOUS_EERIE_SPELL_PP_REDUCE 107
|
||||
#define VARIOUS_JUMP_IF_TEAM_HEALTHY 108
|
||||
#define VARIOUS_TRY_HEAL_QUARTER_HP 109
|
||||
#define VARIOUS_REMOVE_TERRAIN 110
|
||||
#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 111
|
||||
#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 112
|
||||
#define VARIOUS_GET_ROTOTILLER_TARGETS 113
|
||||
#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 114
|
||||
#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 115
|
||||
#define VARIOUS_CONSUME_BERRY 116
|
||||
#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 117
|
||||
#define VARIOUS_APPLY_PLASMA_FISTS 118
|
||||
#define VARIOUS_JUMP_IF_SPECIES 119
|
||||
#define VARIOUS_UPDATE_ABILITY_POPUP 120
|
||||
#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 121
|
||||
#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 122
|
||||
#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 123
|
||||
#define VARIOUS_PHOTON_GEYSER_CHECK 124
|
||||
#define VARIOUS_SHELL_SIDE_ARM_CHECK 125
|
||||
#define VARIOUS_TRY_NO_RETREAT 126
|
||||
#define VARIOUS_TRY_TAR_SHOT 127
|
||||
#define VARIOUS_CAN_TAR_SHOT_WORK 128
|
||||
#define VARIOUS_CHECK_POLTERGEIST 129
|
||||
#define VARIOUS_SET_OCTOLOCK 130
|
||||
#define VARIOUS_CUT_1_3_HP_RAISE_STATS 131
|
||||
#define VARIOUS_TRY_END_NEUTRALIZING_GAS 132
|
||||
#define VARIOUS_JUMP_IF_UNDER_200 133
|
||||
#define VARIOUS_SET_SKY_DROP 134
|
||||
#define VARIOUS_CLEAR_SKY_DROP 135
|
||||
#define VARIOUS_SKY_DROP_YAWN 136
|
||||
#define VARIOUS_JUMP_IF_HOLD_EFFECT 137
|
||||
#define VARIOUS_CURE_CERTAIN_STATUSES 138
|
||||
#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 139
|
||||
#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 140
|
||||
#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 141
|
||||
#define VARIOUS_SAVE_BATTLER_ITEM 142
|
||||
#define VARIOUS_RESTORE_BATTLER_ITEM 143
|
||||
#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 144
|
||||
#define VARIOUS_SET_BEAK_BLAST 145
|
||||
#define VARIOUS_SWAP_SIDE_STATUSES 146
|
||||
#define VARIOUS_SWAP_STATS 147
|
||||
#define VARIOUS_TEATIME_INVUL 148
|
||||
#define VARIOUS_TEATIME_TARGETS 149
|
||||
#define VARIOUS_TRY_WIND_RIDER_POWER 150
|
||||
#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 151
|
||||
#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 152
|
||||
#define VARIOUS_STORE_HEALING_WISH 153
|
||||
#define VARIOUS_HIT_SWITCH_TARGET_FAILED 154
|
||||
#define VARIOUS_TRY_REVIVAL_BLESSING 155
|
||||
#define VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE 156
|
||||
#define VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION 157
|
||||
|
||||
// Cmd_manipulatedamage
|
||||
#define DMG_CHANGE_SIGN 0
|
||||
|
||||
@ -9324,26 +9324,6 @@ static void Cmd_various(void)
|
||||
gLastUsedAbility = gBattleMons[battler].ability;
|
||||
break;
|
||||
}
|
||||
case VARIOUS_TRY_HEAL_PULSE:
|
||||
{
|
||||
VARIOUS_ARGS(const u8 *failInstr);
|
||||
if (BATTLER_MAX_HP(battler))
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && gBattleMoves[gCurrentMove].pulseMove)
|
||||
gBattleMoveDamage = -(gBattleMons[battler].maxHP * 75 / 100);
|
||||
else
|
||||
gBattleMoveDamage = -(gBattleMons[battler].maxHP / 2);
|
||||
|
||||
if (gBattleMoveDamage == 0)
|
||||
gBattleMoveDamage = -1;
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
return;
|
||||
}
|
||||
case VARIOUS_TRY_QUASH:
|
||||
{
|
||||
VARIOUS_ARGS(const u8 *failInstr);
|
||||
@ -16349,3 +16329,26 @@ void BS_TryReflectType(void)
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
}
|
||||
|
||||
void BS_TryHealPulse(void)
|
||||
{
|
||||
NATIVE_ARGS(const u8 *failInstr);
|
||||
|
||||
if (BATTLER_MAX_HP(gBattlerTarget))
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && gBattleMoves[gCurrentMove].pulseMove)
|
||||
gBattleMoveDamage = -(gBattleMons[gBattlerTarget].maxHP * 75 / 100);
|
||||
else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && gBattleMoves[gCurrentMove].argument == MOVE_EFFECT_FLORAL_HEALING)
|
||||
gBattleMoveDamage = -(gBattleMons[gBattlerTarget].maxHP * 2 / 3);
|
||||
else
|
||||
gBattleMoveDamage = -(gBattleMons[gBattlerTarget].maxHP / 2);
|
||||
|
||||
if (gBattleMoveDamage == 0)
|
||||
gBattleMoveDamage = -1;
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
}
|
||||
|
||||
@ -10532,6 +10532,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] =
|
||||
.priority = 0,
|
||||
.split = SPLIT_STATUS,
|
||||
.zMoveEffect = Z_EFFECT_RESET_STATS,
|
||||
.argument = MOVE_EFFECT_FLORAL_HEALING,
|
||||
.magicCoatAffected = TRUE,
|
||||
},
|
||||
|
||||
|
||||
102
test/battle/move_effect/heal_pulse.c
Normal file
102
test/battle/move_effect/heal_pulse.c
Normal file
@ -0,0 +1,102 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_HEAL_PULSE].effect == EFFECT_HEAL_PULSE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Heal Pulse heals the target by 1/2 of it's maxHP")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_HEAL_PULSE); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_PULSE, opponent);
|
||||
HP_BAR(player, damage: -maxHP / 2);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Heal Pulse can heal partner")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerRight, MOVE_HEAL_PULSE, target: playerLeft); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_PULSE, playerRight);
|
||||
HP_BAR(playerLeft, damage: -maxHP / 2);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Heal Pulse is boosted by Mega Launcher")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(P_GEN_6_POKEMON == TRUE);
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }
|
||||
OPPONENT(SPECIES_CLAWITZER);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_HEAL_PULSE); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_PULSE, opponent);
|
||||
HP_BAR(player, damage: -maxHP * 75 / 100);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Heal Pulse ignores accurace checks")
|
||||
{
|
||||
GIVEN {
|
||||
PASSES_RANDOMLY(100, 100, RNG_ACCURACY);
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); Item(ITEM_BRIGHT_POWDER); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_HEAL_PULSE); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_PULSE, opponent);
|
||||
HP_BAR(player, damage: -maxHP / 2);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Heal Pulse is blocked by Substitute")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE);
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_HEAL_PULSE); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player);
|
||||
NONE_OF {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_PULSE, opponent);
|
||||
HP_BAR(player, damage: -maxHP / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Floral Healing heals the target by 2/3rd of it's maxHP if Grassy Terrain is on the field")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_FLORAL_HEALING].argument == MOVE_EFFECT_FLORAL_HEALING);
|
||||
ASSUME(gBattleMoves[MOVE_GRASSY_TERRAIN].effect == EFFECT_GRASSY_TERRAIN);
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_GRASSY_TERRAIN); MOVE(opponent, MOVE_FLORAL_HEALING); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_FLORAL_HEALING, opponent);
|
||||
HP_BAR(player, damage: -maxHP * 2 / 3);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user