Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes Floral Healing + Tests #3604

Merged
merged 1 commit into from
Nov 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions asm/macros/battle_script.inc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion data/battle_scripts_1.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion include/constants/battle.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
234 changes: 116 additions & 118 deletions include/constants/battle_script_commands.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
43 changes: 23 additions & 20 deletions src/battle_script_commands.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
}
1 change: 1 addition & 0 deletions src/data/battle_moves.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},

Expand Down
Loading
Loading