mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-01-13 15:13:42 +01:00
fix lash out, obstruct, and decorate
This commit is contained in:
parent
0ea6c65b83
commit
13062b5a8f
@ -1816,11 +1816,6 @@
|
|||||||
various BS_ATTACKER, VARIOUS_REMOVE_TERRAIN
|
various BS_ATTACKER, VARIOUS_REMOVE_TERRAIN
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro jumpifobstruct ptr:req
|
|
||||||
various BS_ATTACKER, VARIOUS_JUMP_IF_OBSTRUCT
|
|
||||||
.4byte \ptr
|
|
||||||
.endm
|
|
||||||
|
|
||||||
@ helpful macros
|
@ helpful macros
|
||||||
.macro setstatchanger stat:req, stages:req, down:req
|
.macro setstatchanger stat:req, stages:req, down:req
|
||||||
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7
|
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7
|
||||||
|
@ -382,6 +382,7 @@ gBattleScriptsForMoveEffects::
|
|||||||
|
|
||||||
BattleScript_EffectDecorate:
|
BattleScript_EffectDecorate:
|
||||||
attackcanceler
|
attackcanceler
|
||||||
|
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
|
||||||
attackstring
|
attackstring
|
||||||
ppreduce
|
ppreduce
|
||||||
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 12, BattleScript_DecorateBoost
|
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 12, BattleScript_DecorateBoost
|
||||||
@ -396,13 +397,13 @@ BattleScript_DecorateBoost:
|
|||||||
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_DecorateBoostSpAtk
|
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_DecorateBoostSpAtk
|
||||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DecorateBoostSpAtk
|
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DecorateBoostSpAtk
|
||||||
printfromtable gStatUpStringIds
|
printfromtable gStatUpStringIds
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
BattleScript_DecorateBoostSpAtk:
|
BattleScript_DecorateBoostSpAtk:
|
||||||
setstatchanger STAT_SPATK, 2, FALSE
|
setstatchanger STAT_SPATK, 2, FALSE
|
||||||
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd
|
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd
|
||||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd
|
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd
|
||||||
printfromtable gStatUpStringIds
|
printfromtable gStatUpStringIds
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectRemoveTerrain:
|
BattleScript_EffectRemoveTerrain:
|
||||||
@ -421,13 +422,13 @@ BattleScript_EffectRemoveTerrain:
|
|||||||
healthbarupdate BS_TARGET
|
healthbarupdate BS_TARGET
|
||||||
datahpupdate BS_TARGET
|
datahpupdate BS_TARGET
|
||||||
critmessage
|
critmessage
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
resultmessage
|
resultmessage
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
removeterrain
|
removeterrain
|
||||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 4, BattleScript_MoveEnd
|
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 4, BattleScript_MoveEnd
|
||||||
printfromtable gTerrainEndingStringIds
|
printfromtable gTerrainEndingStringIds
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||||
tryfaintmon BS_TARGET, FALSE, NULL
|
tryfaintmon BS_TARGET, FALSE, NULL
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
@ -441,8 +442,8 @@ BattleScript_EffectCoaching:
|
|||||||
setallytonexttarget EffectCoaching_CheckAllyStats
|
setallytonexttarget EffectCoaching_CheckAllyStats
|
||||||
goto BattleScript_ButItFailed
|
goto BattleScript_ButItFailed
|
||||||
EffectCoaching_CheckAllyStats:
|
EffectCoaching_CheckAllyStats:
|
||||||
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 12, BattleScript_CoachingWorks
|
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoachingWorks
|
||||||
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, 12, BattleScript_CoachingWorks
|
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoachingWorks
|
||||||
goto BattleScript_ButItFailed @ ally at max atk, def
|
goto BattleScript_ButItFailed @ ally at max atk, def
|
||||||
BattleScript_CoachingWorks:
|
BattleScript_CoachingWorks:
|
||||||
attackanimation
|
attackanimation
|
||||||
@ -453,13 +454,13 @@ BattleScript_CoachingWorks:
|
|||||||
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_CoachingBoostDef
|
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_CoachingBoostDef
|
||||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CoachingBoostDef
|
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CoachingBoostDef
|
||||||
printfromtable gStatUpStringIds
|
printfromtable gStatUpStringIds
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
BattleScript_CoachingBoostDef:
|
BattleScript_CoachingBoostDef:
|
||||||
setstatchanger STAT_DEF, 1, FALSE
|
setstatchanger STAT_DEF, 1, FALSE
|
||||||
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd
|
statbuffchange STAT_BUFF_ALLOW_PTR | STAT_BUFF_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd
|
||||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd
|
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd
|
||||||
printfromtable gStatUpStringIds
|
printfromtable gStatUpStringIds
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectJungleHealing:
|
BattleScript_EffectJungleHealing:
|
||||||
@ -478,7 +479,7 @@ JungleHealing_RestoreTargetHealth:
|
|||||||
healthbarupdate BS_TARGET
|
healthbarupdate BS_TARGET
|
||||||
datahpupdate BS_TARGET
|
datahpupdate BS_TARGET
|
||||||
printstring STRINGID_PKMNREGAINEDHEALTH
|
printstring STRINGID_PKMNREGAINEDHEALTH
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
BattleScript_JungleHealing_TryCureStatus:
|
BattleScript_JungleHealing_TryCureStatus:
|
||||||
jumpifmove MOVE_LIFE_DEW, BattleScript_JungleHealingTryRestoreAlly @ life dew only heals
|
jumpifmove MOVE_LIFE_DEW, BattleScript_JungleHealingTryRestoreAlly @ life dew only heals
|
||||||
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_JungleHealingCureStatus
|
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_JungleHealingCureStatus
|
||||||
@ -487,7 +488,7 @@ BattleScript_JungleHealingCureStatus:
|
|||||||
curestatus BS_TARGET
|
curestatus BS_TARGET
|
||||||
updatestatusicon BS_TARGET
|
updatestatusicon BS_TARGET
|
||||||
printstring STRINGID_PKMNSTATUSNORMAL
|
printstring STRINGID_PKMNSTATUSNORMAL
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
BattleScript_JungleHealingTryRestoreAlly:
|
BattleScript_JungleHealingTryRestoreAlly:
|
||||||
jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd
|
jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd
|
||||||
addbyte gBattleCommunication, 1
|
addbyte gBattleCommunication, 1
|
||||||
@ -2233,17 +2234,6 @@ BattleScript_MoveMissed::
|
|||||||
effectivenesssound
|
effectivenesssound
|
||||||
resultmessage
|
resultmessage
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
jumpifobstruct BattleScript_ObstructActivates
|
|
||||||
goto BattleScript_MoveEnd
|
|
||||||
|
|
||||||
BattleScript_ObstructActivates:
|
|
||||||
jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, MIN_STAT_STAGE, BattleScript_ObstructActivationEnd
|
|
||||||
setgraphicalstatchangevalues
|
|
||||||
playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
|
|
||||||
statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_ObstructActivationEnd
|
|
||||||
printfromtable gStatDownStringIds
|
|
||||||
waitmessage B_WAIT_TIME_LONG
|
|
||||||
BattleScript_ObstructActivationEnd:
|
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectSleep::
|
BattleScript_EffectSleep::
|
||||||
@ -3624,12 +3614,13 @@ BattleScript_EffectEerieSpell::
|
|||||||
healthbarupdate BS_TARGET
|
healthbarupdate BS_TARGET
|
||||||
datahpupdate BS_TARGET
|
datahpupdate BS_TARGET
|
||||||
critmessage
|
critmessage
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
resultmessage
|
resultmessage
|
||||||
waitmessage 0x40
|
waitmessage B_WAIT_TIME_LONG
|
||||||
tryfaintmon BS_TARGET, FALSE, NULL
|
tryfaintmon BS_TARGET, FALSE, NULL
|
||||||
eeriespellppreduce BattleScript_MoveEnd
|
eeriespellppreduce BattleScript_MoveEnd
|
||||||
printstring STRINGID_PKMNREDUCEDPP
|
printstring STRINGID_PKMNREDUCEDPP
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectSpite::
|
BattleScript_EffectSpite::
|
||||||
|
@ -143,7 +143,6 @@ struct ProtectStruct
|
|||||||
u32 usedGravityPreventedMove:1;
|
u32 usedGravityPreventedMove:1;
|
||||||
u32 powderSelfDmg:1;
|
u32 powderSelfDmg:1;
|
||||||
u32 usedThroatChopPreventedMove:1;
|
u32 usedThroatChopPreventedMove:1;
|
||||||
u32 statFell:1;
|
|
||||||
u32 statRaised:1;
|
u32 statRaised:1;
|
||||||
u32 micle:1;
|
u32 micle:1;
|
||||||
u32 custap:1; // also quick claw
|
u32 custap:1; // also quick claw
|
||||||
|
@ -183,7 +183,6 @@
|
|||||||
#define VARIOUS_JUMP_IF_TEAM_HEALTHY 111
|
#define VARIOUS_JUMP_IF_TEAM_HEALTHY 111
|
||||||
#define VARIOUS_TRY_HEAL_QUARTER_HP 112
|
#define VARIOUS_TRY_HEAL_QUARTER_HP 112
|
||||||
#define VARIOUS_REMOVE_TERRAIN 113
|
#define VARIOUS_REMOVE_TERRAIN 113
|
||||||
#define VARIOUS_JUMP_IF_OBSTRUCT 114
|
|
||||||
|
|
||||||
// Cmd_manipulatedamage
|
// Cmd_manipulatedamage
|
||||||
#define DMG_CHANGE_SIGN 0
|
#define DMG_CHANGE_SIGN 0
|
||||||
|
@ -3093,7 +3093,6 @@ void FaintClearSetData(void)
|
|||||||
gProtectStructs[gActiveBattler].usesBouncedMove = 0;
|
gProtectStructs[gActiveBattler].usesBouncedMove = 0;
|
||||||
gProtectStructs[gActiveBattler].usedGravityPreventedMove = 0;
|
gProtectStructs[gActiveBattler].usedGravityPreventedMove = 0;
|
||||||
gProtectStructs[gActiveBattler].usedThroatChopPreventedMove = 0;
|
gProtectStructs[gActiveBattler].usedThroatChopPreventedMove = 0;
|
||||||
gProtectStructs[gActiveBattler].statFell = 0;
|
|
||||||
gProtectStructs[gActiveBattler].statRaised = 0;
|
gProtectStructs[gActiveBattler].statRaised = 0;
|
||||||
|
|
||||||
gDisableStructs[gActiveBattler].isFirstTurn = 2;
|
gDisableStructs[gActiveBattler].isFirstTurn = 2;
|
||||||
|
@ -1237,16 +1237,21 @@ static const u8 sBattlePalaceNatureToFlavorTextId[NUM_NATURES] =
|
|||||||
|
|
||||||
bool32 IsBattlerProtected(u8 battlerId, u16 move)
|
bool32 IsBattlerProtected(u8 battlerId, u16 move)
|
||||||
{
|
{
|
||||||
|
// Decorate bypasses protect and detect, but not crafty shield
|
||||||
|
if (move == MOVE_DECORATE)
|
||||||
|
{
|
||||||
|
if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD)
|
||||||
|
return TRUE;
|
||||||
|
else if (gProtectStructs[battlerId].protected)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(gBattleMoves[move].flags & FLAG_PROTECT_AFFECTED))
|
if (!(gBattleMoves[move].flags & FLAG_PROTECT_AFFECTED))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else if (gBattleMoves[move].effect == MOVE_EFFECT_FEINT)
|
else if (gBattleMoves[move].effect == MOVE_EFFECT_FEINT)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else if (gProtectStructs[battlerId].protected)
|
else if (gProtectStructs[battlerId].protected)
|
||||||
{
|
|
||||||
if (move == MOVE_DECORATE && !(gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD))
|
|
||||||
return FALSE; // decorate bypasses protect and detect, but not crafty shield
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD
|
else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD
|
||||||
&& gBattleMoves[move].target & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))
|
&& gBattleMoves[move].target & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -4778,6 +4783,7 @@ static void Cmd_moveend(void)
|
|||||||
}
|
}
|
||||||
else if (gProtectStructs[gBattlerTarget].obstructed && gCurrentMove != MOVE_SUCKER_PUNCH)
|
else if (gProtectStructs[gBattlerTarget].obstructed && gCurrentMove != MOVE_SUCKER_PUNCH)
|
||||||
{
|
{
|
||||||
|
gProtectStructs[gBattlerAttacker].touchedProtectLike = 0;
|
||||||
i = gBattlerAttacker;
|
i = gBattlerAttacker;
|
||||||
gBattlerAttacker = gBattlerTarget;
|
gBattlerAttacker = gBattlerTarget;
|
||||||
gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
|
gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
|
||||||
@ -8697,19 +8703,6 @@ static void Cmd_various(void)
|
|||||||
}
|
}
|
||||||
gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
|
gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
|
||||||
break;
|
break;
|
||||||
case VARIOUS_JUMP_IF_OBSTRUCT:
|
|
||||||
// if obstruct blocked a contact move, sharply lower defense
|
|
||||||
if (IsMoveMakingContact(gCurrentMove, gBattlerAttacker) && gProtectStructs[gBattlerTarget].obstructed && !IS_MOVE_STATUS(gCurrentMove))
|
|
||||||
{
|
|
||||||
SET_STATCHANGER(STAT_DEF, 2, TRUE);
|
|
||||||
gBattleScripting.battler = gBattlerAttacker;
|
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gBattlescriptCurrInstr += 7;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gBattlescriptCurrInstr += 3;
|
gBattlescriptCurrInstr += 3;
|
||||||
|
@ -7468,7 +7468,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef)
|
|||||||
basePower *= 2;
|
basePower *= 2;
|
||||||
break;
|
break;
|
||||||
case EFFECT_LASH_OUT:
|
case EFFECT_LASH_OUT:
|
||||||
if (gProtectStructs[battlerAtk].statFell == 1)
|
if (gSpecialStatuses[battlerAtk].statFell == 1)
|
||||||
basePower *= 2;
|
basePower *= 2;
|
||||||
break;
|
break;
|
||||||
case EFFECT_EXPLOSION:
|
case EFFECT_EXPLOSION:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user