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

Heal Bell/Aromatherapy/Sparkly Swirl improvements and fixes #6210

Merged
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
41 changes: 6 additions & 35 deletions data/battle_scripts_1.s
Original file line number Diff line number Diff line change
Expand Up @@ -956,15 +956,6 @@ BattleScript_MoveEffectIonDeluge::
waitmessage B_WAIT_TIME_LONG
return

BattleScript_EffectSparklySwirl::
call BattleScript_EffectHit_Ret
tryfaintmon BS_TARGET
healpartystatus
waitstate
updatestatusicon BS_ATTACKER_WITH_PARTNER
waitstate
goto BattleScript_MoveEnd

BattleScript_MoveEffectHaze::
printstring STRINGID_STATCHANGESGONE
waitmessage B_WAIT_TIME_LONG
Expand Down Expand Up @@ -4075,13 +4066,16 @@ BattleScript_EffectHealBell::
attackcanceler
attackstring
ppreduce
healpartystatus
waitstate
attackanimation
waitanimation
BattleScript_EffectHealBell_FromHeal::
healpartystatus
waitstate
printfromtable gPartyStatusHealStringIds
waitmessage B_WAIT_TIME_LONG
jumpifnotmove MOVE_HEAL_BELL, BattleScript_PartyHealEnd
jumpifblockedbysoundproof BS_ATTACKER_PARTNER, BattleScript_HealBellSoundproof
goto BattleScript_PartyHealEnd
BattleScript_HealBellSoundproof::
jumpifbyte CMP_NO_COMMON_BITS, cMULTISTRING_CHOOSER, B_MSG_BELL_SOUNDPROOF_ATTACKER, BattleScript_CheckHealBellMon2Unaffected
printstring STRINGID_PKMNSXBLOCKSY
waitmessage B_WAIT_TIME_LONG
Expand Down Expand Up @@ -9962,29 +9956,6 @@ BattleScript_HealOneSixthAlliesEnd:
restoretarget
goto BattleScript_MoveEnd

BattleScript_EffectCureStatusAllies::
jumpifteamhealthy BS_ATTACKER, BattleScript_MoveEnd
savetarget
copybyte gBattlerTarget, gBattlerAttacker
BattleScript_CureStatusAlliesLoop:
jumpifabsent BS_TARGET, BattleScript_CureStatusAlliesIncrement
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_CureStatusActivate
BattleScript_CureStatusAlliesIncrement:
jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_CureStatusAlliesEnd
setallytonexttarget BattleScript_CureStatusAlliesLoop
BattleScript_CureStatusAlliesEnd:
restoretarget
goto BattleScript_MoveEnd

BattleScript_CureStatusActivate:
curestatus BS_TARGET
updatestatusicon BS_TARGET
swapattackerwithtarget
printstring STRINGID_PKMNSTATUSNORMAL
waitmessage B_WAIT_TIME_LONG
swapattackerwithtarget
goto BattleScript_CureStatusAlliesIncrement

BattleScript_EffectRecycleBerriesAllies::
savetarget
copybyte gBattlerTarget, gBattlerAttacker
Expand Down
1 change: 1 addition & 0 deletions include/battle.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "battle_dynamax.h"
#include "battle_terastal.h"
#include "battle_gimmick.h"
#include "generational_changes.h"
#include "move.h"
#include "random.h" // for rng_value_t
#include "trainer_slide.h"
Expand Down
3 changes: 1 addition & 2 deletions include/battle_scripts.h
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,6 @@ extern const u8 BattleScript_EffectMeanLookSide[];
extern const u8 BattleScript_TormentEnds[];
extern const u8 BattleScript_EffectRaiseCritAlliesAnim[];
extern const u8 BattleScript_EffectHealOneSixthAllies[];
extern const u8 BattleScript_EffectCureStatusAllies[];
extern const u8 BattleScript_EffectRecycleBerriesAllies[];
extern const u8 BattleScript_RemoveGenericType[];

Expand Down Expand Up @@ -644,6 +643,7 @@ extern const u8 BattleScript_EffectSleepTalk[];
extern const u8 BattleScript_EffectDestinyBond[];
extern const u8 BattleScript_EffectSpite[];
extern const u8 BattleScript_EffectHealBell[];
extern const u8 BattleScript_EffectHealBell_FromHeal[];
extern const u8 BattleScript_EffectMeanLook[];
extern const u8 BattleScript_EffectNightmare[];
extern const u8 BattleScript_EffectMinimize[];
Expand Down Expand Up @@ -822,7 +822,6 @@ extern const u8 BattleScript_MoveEffectLightScreen[];
extern const u8 BattleScript_MoveEffectReflect[];
extern const u8 BattleScript_MoveEffectLeechSeed[];
extern const u8 BattleScript_MoveEffectHaze[];
extern const u8 BattleScript_EffectSparklySwirl[];
extern const u8 BattleScript_MoveEffectIonDeluge[];
extern const u8 BattleScript_EffectHyperspaceFury[];
extern const u8 BattleScript_EffectAuraWheel[];
Expand Down
1 change: 0 additions & 1 deletion include/constants/battle_move_effects.h
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,6 @@ enum {
EFFECT_RECOIL_HP_25,
EFFECT_STUFF_CHEEKS,
EFFECT_GRAV_APPLE,
EFFECT_SPARKLY_SWIRL,
EFFECT_HYPERSPACE_FURY,
EFFECT_AURA_WHEEL,
EFFECT_PHOTON_GEYSER,
Expand Down
1 change: 1 addition & 0 deletions include/constants/generational_changes.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
enum GenConfigTag
{
GEN_CONFIG_GALE_WINGS,
GEN_CONFIG_HEAL_BELL_SOUNDPROOF,
GEN_CONFIG_COUNT
};

Expand Down
3 changes: 2 additions & 1 deletion include/generational_changes.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] =
{
[GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS,
[GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS,
[GEN_CONFIG_HEAL_BELL_SOUNDPROOF] = B_HEAL_BELL_SOUNDPROOF,
};

#if TESTING
Expand Down
11 changes: 8 additions & 3 deletions src/battle_ai_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -3160,7 +3160,9 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof)
battlerOnField1 = gBattlerPartyIndexes[battlerId];
battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))];
// Check partner's status
if ((B_HEAL_BELL_SOUNDPROOF == GEN_5 || AI_DATA->abilities[BATTLE_PARTNER(battlerId)] != ABILITY_SOUNDPROOF || !checkSoundproof)
if ((GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5
|| AI_DATA->abilities[BATTLE_PARTNER(battlerId)] != ABILITY_SOUNDPROOF
|| !checkSoundproof)
&& GetMonData(&party[battlerOnField2], MON_DATA_STATUS) != STATUS1_NONE)
return TRUE;
}
Expand All @@ -3171,7 +3173,8 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof)
}

// Check attacker's status
if ((B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8
if ((GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5
|| GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8
|| AI_DATA->abilities[battlerId] != ABILITY_SOUNDPROOF || !checkSoundproof)
&& GetMonData(&party[battlerOnField1], MON_DATA_STATUS) != STATUS1_NONE)
return TRUE;
Expand All @@ -3181,7 +3184,9 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof)
{
if (i == battlerOnField1 || i == battlerOnField2)
continue;
if (B_HEAL_BELL_SOUNDPROOF < GEN_5 && checkSoundproof && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF)
if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) < GEN_5
&& checkSoundproof
&& GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF)
continue;
if (GetMonData(&party[i], MON_DATA_STATUS) != STATUS1_NONE)
return TRUE;
Expand Down
1 change: 0 additions & 1 deletion src/battle_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#include "event_data.h"
#include "evolution_scene.h"
#include "field_weather.h"
#include "generational_changes.h"
#include "graphics.h"
#include "gpu_regs.h"
#include "international_string_util.h"
Expand Down
139 changes: 60 additions & 79 deletions src/battle_script_commands.c
Original file line number Diff line number Diff line change
Expand Up @@ -4623,7 +4623,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
break;
case MOVE_EFFECT_AROMATHERAPY:
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_EffectCureStatusAllies;
gBattlescriptCurrInstr = BattleScript_EffectHealBell_FromHeal;
break;
case MOVE_EFFECT_RECYCLE_BERRIES:
{
Expand Down Expand Up @@ -13936,106 +13936,87 @@ static void Cmd_healpartystatus(void)
{
CMD_ARGS();

u32 zero = 0;
u32 i, zero = 0;
u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker)));
u8 toHeal = 0;
struct Pokemon *party = GetBattlerParty(gBattlerAttacker);
s32 i;
bool32 isSoundMove = IsSoundMove(gCurrentMove);

if (gCurrentMove == MOVE_HEAL_BELL)
if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5
|| GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8
|| !(isSoundMove && GetBattlerAbility(gBattlerAttacker) == ABILITY_SOUNDPROOF))
{
if (isSoundMove)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL;
else
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOOTHING_AROMA;
gBattleMons[gBattlerAttacker].status1 = 0;
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;
}
else
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL;
RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability);
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL_SOUNDPROOF_ATTACKER;
}

gBattleScripting.battler = partner;

if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF
|| B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8)
if (IsBattlerAlive(partner))
{
if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5
|| !(isSoundMove && GetBattlerAbility(partner) == ABILITY_SOUNDPROOF))
{
gBattleMons[gBattlerAttacker].status1 = 0;
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;
gBattleMons[partner].status1 = 0;
gBattleMons[partner].status2 &= ~STATUS2_NIGHTMARE;
}
else
{
RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability);
gBattleCommunication[MULTISTRING_CHOOSER] |= B_MSG_BELL_SOUNDPROOF_ATTACKER;
RecordAbilityBattle(partner, gBattleMons[partner].ability);
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL_SOUNDPROOF_PARTNER;
}
}

gBattleScripting.battler = partner;

if (IsBattlerAlive(partner))
{
if (GetBattlerAbility(partner) != ABILITY_SOUNDPROOF || B_HEAL_BELL_SOUNDPROOF == GEN_5)
{
gBattleMons[partner].status1 = 0;
gBattleMons[partner].status2 &= ~STATUS2_NIGHTMARE;
}
else
{
RecordAbilityBattle(partner, gBattleMons[partner].ability);
gBattleCommunication[MULTISTRING_CHOOSER] |= B_MSG_BELL_SOUNDPROOF_PARTNER;
}
}
// Because the above MULTISTRING_CHOOSER are ORd, if both are set then it will be B_MSG_BELL_BOTH_SOUNDPROOF

// Because the above MULTISTRING_CHOOSER are ORd, if both are set then it will be B_MSG_BELL_BOTH_SOUNDPROOF
for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG);
u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM);

for (i = 0; i < PARTY_SIZE; i++)
if (species != SPECIES_NONE && species != SPECIES_EGG)
{
u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG);
u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM);
u16 ability;
bool32 isAttacker = gBattlerPartyIndexes[gBattlerAttacker] == i;
bool32 isDoublesPartner = gBattlerPartyIndexes[partner] == i && IsBattlerAlive(partner);

if (species != SPECIES_NONE && species != SPECIES_EGG)
if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5
|| (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 && isAttacker))
ability = ABILITY_NONE;
else if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) > GEN_5 && !isAttacker && !isDoublesPartner)
ability = ABILITY_NONE;
else if (isAttacker)
ability = GetBattlerAbility(gBattlerAttacker);
else if (isDoublesPartner)
ability = GetBattlerAbility(partner);
else
{
u16 ability;
bool32 isAttacker = gBattlerPartyIndexes[gBattlerAttacker] == i;
bool32 isDoublesPartner = gBattlerPartyIndexes[partner] == i && IsBattlerAlive(partner);

if (B_HEAL_BELL_SOUNDPROOF == GEN_5 || (isAttacker && B_HEAL_BELL_SOUNDPROOF >= GEN_8))
ability = ABILITY_NONE;
else if (B_HEAL_BELL_SOUNDPROOF > GEN_5 && !isAttacker && !isDoublesPartner)
ability = ABILITY_NONE;
else if (isAttacker)
ability = GetBattlerAbility(gBattlerAttacker);
else if (isDoublesPartner)
ability = GetBattlerAbility(partner);
else
ability = GetAbilityBySpecies(species, abilityNum);
#if TESTING
if (gTestRunnerEnabled)
{
ability = GetAbilityBySpecies(species, abilityNum);
#if TESTING
if (gTestRunnerEnabled)
{
u32 side = GetBattlerSide(gBattlerAttacker);
if (TestRunner_Battle_GetForcedAbility(side, i))
ability = TestRunner_Battle_GetForcedAbility(side, i);
}
#endif
}

if (ability != ABILITY_SOUNDPROOF)
{
toHeal |= (1 << i);
TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), i);
u32 side = GetBattlerSide(gBattlerAttacker);
if (TestRunner_Battle_GetForcedAbility(side, i))
ability = TestRunner_Battle_GetForcedAbility(side, i);
}
#endif
}
}
}
else // Aromatherapy
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOOTHING_AROMA;
toHeal = (1 << PARTY_SIZE) - 1;

for (i = 0; i < PARTY_SIZE; i++)
{
TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), i);
}

gBattleMons[gBattlerAttacker].status1 = 0;
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;

if (IsDoubleBattle()
&& !(gAbsentBattlerFlags & (1u <<partner)))
{
gBattleMons[partner].status1 = 0;
gBattleMons[partner].status2 &= ~STATUS2_NIGHTMARE;
if (!(isSoundMove && ability == ABILITY_SOUNDPROOF))
{
toHeal |= (1 << i);
TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), i);
}
}

}

if (toHeal)
Expand Down
6 changes: 0 additions & 6 deletions src/data/battle_move_effects.h
Original file line number Diff line number Diff line change
Expand Up @@ -1895,12 +1895,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
.battleTvScore = 0, // TODO: Assign points
},

[EFFECT_SPARKLY_SWIRL] =
{
.battleScript = BattleScript_EffectSparklySwirl,
.battleTvScore = 0, // TODO: Assign points
},

[EFFECT_HYPERSPACE_FURY] =
{
.battleScript = BattleScript_EffectHyperspaceFury,
Expand Down
12 changes: 6 additions & 6 deletions src/data/moves_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -17068,7 +17068,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.description = COMPOUND_STRING(
"Wrap foe with whirlwind of\n"
"scent. Heals party's status."),
.effect = EFFECT_SPARKLY_SWIRL, // Temprorary
.effect = EFFECT_HIT,
.power = B_UPDATED_MOVE_DATA >= GEN_8 ? 120 : 90,
.type = TYPE_FAIRY,
.accuracy = B_UPDATED_MOVE_DATA >= GEN_8 ? 85 : 100,
Expand All @@ -17078,11 +17078,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
.metronomeBanned = TRUE,
// .additionalEffects = ADDITIONAL_EFFECTS({
// .moveEffect = 0, // MOVE_EFFECT_AROMATHERAPY, Added 0 for Sheer Force boost
// .chance = 100,
// .sheerForceBoost = SHEER_FORCE_NO_BOOST,
// }),
.additionalEffects = ADDITIONAL_EFFECTS({
.moveEffect = MOVE_EFFECT_AROMATHERAPY,
.chance = 100,
.sheerForceBoost = SHEER_FORCE_NO_BOOST,
}),
.battleAnimScript = gBattleAnimMove_SparklySwirl,
},

Expand Down
Loading