Two turn moves tweaks (#4150)

* Two turn move tweaks

Fixed comment bug and added CheckIfCanFireTwoTurnMoveNow function

* Renamed `tryfiretwoturnmovenowcheckeffect` macro
This commit is contained in:
Nephrite 2024-02-07 23:42:05 +09:00 committed by GitHub
parent 02e4154f0c
commit 8d4c3a8acb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 39 additions and 14 deletions

View File

@ -1061,13 +1061,21 @@
setsemiinvulnerablebit TRUE
.endm
.macro jumpifweathercheckchargeeffects battler:req, checkChargeTurnEffects:req, jumpInstr:req
.macro tryfiretwoturnmovenowbyeffect battler:req, checkChargeTurnEffects:req, jumpInstr:req
.byte 0xc6
.byte \battler
.byte \checkChargeTurnEffects
.4byte \jumpInstr
.endm
.macro tryfiretwoturnmovewithoutcharging battler:req, jumpInstr:req
tryfiretwoturnmovenowbyeffect \battler, TRUE, \jumpInstr
.endm
.macro tryfiretwoturnmoveaftercharging battler:req, jumpInstr:req
tryfiretwoturnmovenowbyeffect \battler, FALSE, \jumpInstr
.endm
.macro setminimize
.byte 0xc7
.endm

View File

@ -3718,9 +3718,9 @@ BattleScript_PowerHerbActivation:
BattleScript_EffectTwoTurnsAttack::
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
jumpifweathercheckchargeeffects BS_ATTACKER, TRUE, BattleScript_EffectHit
tryfiretwoturnmovewithoutcharging BS_ATTACKER, BattleScript_EffectHit @ e.g. Solar Beam
call BattleScript_FirstChargingTurn
jumpifweathercheckchargeeffects BS_ATTACKER, FALSE, BattleScript_TwoTurnMovesSecondTurn
tryfiretwoturnmoveaftercharging BS_ATTACKER, BattleScript_TwoTurnMovesSecondTurn @ e.g. Electro Shot
jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_TwoTurnMovesSecondPowerHerbActivates
goto BattleScript_MoveEnd
@ -3766,7 +3766,8 @@ BattleScript_GeomancyEnd::
BattleScript_FirstChargingTurn::
attackcanceler
.if B_UPDATED_MOVE_DATA >= GEN_5 @ before Gen 5, charge moves did not print an attack string on the charge turn
@ before Gen 5, charge moves did not print an attack string on the charge turn
.if B_UPDATED_MOVE_DATA >= GEN_5
flushtextbox
attackstring
waitmessage B_WAIT_TIME_LONG
@ -3784,7 +3785,8 @@ BattleScript_TwoTurnMovesSecondPowerHerbActivates:
call BattleScript_PowerHerbActivation
call BattleScript_TwoTurnMovesSecondTurnRet
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
.if B_UPDATED_MOVE_DATA < GEN_5 @ before Gen 5, charge moves did not print an attack string on the charge turn
@ before Gen 5, charge moves did not print an attack string on the charge turn
.if B_UPDATED_MOVE_DATA < GEN_5
attackstring
.endif
goto BattleScript_HitFromCritCalc

View File

@ -556,7 +556,7 @@ static void Cmd_selectfirstvalidtarget(void);
static void Cmd_trysetfutureattack(void);
static void Cmd_trydobeatup(void);
static void Cmd_setsemiinvulnerablebit(void);
static void Cmd_jumpifweathercheckchargeeffects(void);
static void Cmd_tryfiretwoturnmovenowbyeffect(void);
static void Cmd_setminimize(void);
static void Cmd_sethail(void);
static void Cmd_trymemento(void);
@ -815,7 +815,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_trysetfutureattack, //0xC3
Cmd_trydobeatup, //0xC4
Cmd_setsemiinvulnerablebit, //0xC5
Cmd_jumpifweathercheckchargeeffects, //0xC6
Cmd_tryfiretwoturnmovenowbyeffect, //0xC6
Cmd_setminimize, //0xC7
Cmd_sethail, //0xC8
Cmd_trymemento, //0xC9
@ -13668,16 +13668,31 @@ static void Cmd_setsemiinvulnerablebit(void)
gBattlescriptCurrInstr = cmd->nextInstr;
}
static void Cmd_jumpifweathercheckchargeeffects(void)
static bool32 CheckIfCanFireTwoTurnMoveNow(u8 battler, bool8 checkChargeTurnEffects)
{
// Semi-invulnerable moves cannot skip their charge turn (except with Power Herb)
if (gBattleMoveEffects[gMovesInfo[gCurrentMove].effect].semiInvulnerableEffect == TRUE)
return FALSE;
// If this move has charge turn effects, it must charge, activate them, then try to fire
if (checkChargeTurnEffects && MoveHasChargeTurnMoveEffect(gCurrentMove))
return FALSE;
// Insert custom conditions here
// Certain two-turn moves may fire on the first turn in the right weather (Solar Beam, Electro Shot)
// By default, all two-turn moves have the option of adding weather to their argument
if (IsBattlerWeatherAffected(battler, HIHALF(gMovesInfo[gCurrentMove].argument)))
return TRUE;
return FALSE;
}
static void Cmd_tryfiretwoturnmovenowbyeffect(void)
{
CMD_ARGS(u8 battler, bool8 checkChargeTurnEffects, const u8 *jumpInstr);
/* If this is NOT semi-invulnerable move and we don't have charge turn effects
yet to fire, we can fire the move right away so long as the weather matches
the argument and the battler is affected by it (not blocked by Cloud Nine etc) */
if (gBattleMoveEffects[gMovesInfo[gCurrentMove].effect].semiInvulnerableEffect == FALSE
&& !(cmd->checkChargeTurnEffects && MoveHasChargeTurnMoveEffect(gCurrentMove))
&& IsBattlerWeatherAffected(cmd->battler, HIHALF(gMovesInfo[gCurrentMove].argument)))
if (CheckIfCanFireTwoTurnMoveNow(cmd->battler, cmd->checkChargeTurnEffects) == TRUE)
{
gBattleScripting.animTurn = 1;
gBattlescriptCurrInstr = cmd->jumpInstr;