Gravity fix

Brings down Pokémon in the middle of a two-turn flying move (only Bounce and Fly at the moment); says the appropriate message for all mons brought to the ground via Gravity
This commit is contained in:
Papa Cancer 2019-02-22 22:48:28 +00:00
parent a001faeced
commit d704b9cd5b
6 changed files with 30 additions and 7 deletions

View File

@ -1589,6 +1589,10 @@
various BS_ATTACKER, VARIOUS_SPECTRAL_THIEF
.endm
.macro bringdownairbornebattler battler:req
various \battler, VARIOUS_GRAVITY_ON_AIRBORNE_MONS
.endm
@ helpful macros
.macro setstatchanger stat:req, stages:req, down:req
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7

View File

@ -1601,7 +1601,20 @@ BattleScript_EffectGravity:
waitanimation
printstring STRINGID_GRAVITYINTENSIFIED
waitmessage 0x40
goto BattleScript_MoveEnd
selectfirstvalidtarget
BattleScript_GravityLoop:
movevaluescleanup
jumpifstatus3 BS_TARGET, STATUS3_ON_AIR | STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS, BattleScript_GravityLoopDrop
goto BattleScript_GravityLoopEnd
BattleScript_GravityLoopDrop:
bringdownairbornebattler BS_TARGET
printstring STRINGID_GRAVITYGROUNDING
waitmessage 0x40
BattleScript_GravityLoopEnd:
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_GravityLoop
end
BattleScript_EffectRoost:
attackcanceler

View File

@ -136,6 +136,7 @@
#define VARIOUS_ACUPRESSURE 73
#define VARIOUS_SET_POWDER 74
#define VARIOUS_SPECTRAL_THIEF 75
#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 76
// atk80, dmg manipulation
#define ATK80_DMG_CHANGE_SIGN 0

View File

@ -518,7 +518,8 @@
#define STRINGID_POWDEREXPLODES 514
#define STRINGID_BELCHCANTSELECT 515
#define STRINGID_SPECTRALTHIEFSTEAL 516
#define STRINGID_GRAVITYGROUNDING 517
#define BATTLESTRINGS_COUNT 528
#define BATTLESTRINGS_COUNT 529
#endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H

View File

@ -626,7 +626,7 @@ static const u8 sText_TerrainBecomesElectric[] = _("An electric current runs acr
static const u8 sText_TerrainBecomesPsychic[] = _("The battlefield got weird!");
static const u8 sText_TargetElectrified[] = _("The opposing {B_ATK_NAME_WITH_PREFIX}'s moves\nhave been electrified!");
static const u8 sText_AssaultVestDoesntAllow[] = _("The effects of the {B_LAST_ITEM} prevent status\nmoves from being used!\p");
static const u8 sText_GravityPreventsUsage[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE}\nbecause of gravity!\p");
static const u8 sText_GravityPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE}\nbecause of gravity!\p");
static const u8 sText_HealBlockPreventsUsage[] = _("The opposing {B_ATK_NAME_WITH_PREFIX} was\nprevented from healing!\p");
static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is reacting\nto {B_ATK_TRAINER_NAME}'s Mega Ring!");
static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega\nEvolved into Mega {B_BUFF1}!");
@ -643,6 +643,7 @@ static const u8 sText_CoveredInPowder[] = _("{B_DEF_NAME_WITH_PREFIX} is covered
static const u8 sText_PowderExplodes[] = _("When the flame touched the powder\non the Pokémon, it exploded!");
static const u8 sText_BelchCantUse[] = _("Belch cannot be used!\p");
static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's\nboosted stats!");
static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} can't stay airborne\nbecause of gravity!");
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
{
@ -1151,6 +1152,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_POKEMONCANNOTUSEMOVE - 12] = sText_PokemonCannotUseMove,
[STRINGID_COVEREDINPOWDER - 12] = sText_CoveredInPowder,
[STRINGID_POWDEREXPLODES - 12] = sText_PowderExplodes,
[STRINGID_GRAVITYGROUNDING - 12] = sText_GravityGrounding,
};
const u16 gTerrainStringIds[] =

View File

@ -5828,10 +5828,6 @@ static void atk69_setgravity(void)
gFieldStatuses |= STATUS_FIELD_GRAVITY;
gFieldTimers.gravityTimer = 5;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
gStatuses3[i] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR);
gBattlescriptCurrInstr += 5;
}
}
@ -6371,6 +6367,12 @@ static void atk76_various(void)
switch (gBattlescriptCurrInstr[2])
{
case VARIOUS_GRAVITY_ON_AIRBORNE_MONS:
if (gStatuses3[gActiveBattler] & STATUS3_ON_AIR)
CancelMultiTurnMoves(gActiveBattler);
gStatuses3[gActiveBattler] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR);
break;
case VARIOUS_SPECTRAL_THIEF:
// Raise stats
for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)