Implemented Steam Engine

And I also made the BattleScript created for Anger Point a bit more neutral friendly so it can be reused on situations like this.
This commit is contained in:
LOuroboros 2020-12-10 18:27:35 -03:00
parent c9824a8dd9
commit 322918e280
5 changed files with 20 additions and 7 deletions

View file

@ -7103,12 +7103,12 @@ BattleScript_MummyActivates::
waitmessage 0x40
return
BattleScript_AngryPointActivates::
BattleScript_TargetsStatWasMaxedOut::
call BattleScript_AbilityPopUp
statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printstring STRINGID_ANGRYPOINTACTIVATES
printstring STRINGID_TARGETSSTATWASMAXEDOUT
waitmessage 0x40
return

View file

@ -250,7 +250,7 @@ extern const u8 BattleScript_GravityEnds[];
extern const u8 BattleScript_MoveStatDrain[];
extern const u8 BattleScript_MoveStatDrain_PPLoss[];
extern const u8 BattleScript_TargetAbilityStatRaiseOnMoveEnd[];
extern const u8 BattleScript_AngryPointActivates[];
extern const u8 BattleScript_TargetsStatWasMaxedOut[];
extern const u8 BattleScript_AttackerAbilityStatRaise[];
extern const u8 BattleScript_AttackerAbilityStatRaiseEnd3[];
extern const u8 BattleScript_PoisonHealActivates[];

View file

@ -452,7 +452,7 @@
#define STRINGID_PSYCHICTERRAINENDS 448
#define STRINGID_GRASSYTERRAINENDS 449
#define STRINGID_TARGETABILITYSTATRAISE 450
#define STRINGID_ANGRYPOINTACTIVATES 451
#define STRINGID_TARGETSSTATWASMAXEDOUT 451
#define STRINGID_ATTACKERABILITYSTATRAISE 452
#define STRINGID_POISONHEALHPUP 453
#define STRINGID_BADDREAMSDMG 454

View file

@ -584,7 +584,7 @@ static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared\nfr
static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared\nfrom the battlefield.");
static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield.");
static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared\nfrom the battlefield.");
static const u8 sText_AngryPointActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits attack!");
static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits {B_BUFF1}!");
static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX}\na little bit!");
static const u8 sText_BadDreamsDmg[] = _("{B_DEF_NAME_WITH_PREFIX} is tormented\nby {B_ATK_ABILITY}!");
static const u8 sText_MoldBreakerEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} breaks the mold!");
@ -1160,7 +1160,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_PSYCHICTERRAINENDS - 12] = sText_PsychicTerrainEnds,
[STRINGID_GRASSYTERRAINENDS - 12] = sText_GrassyTerrainEnds,
[STRINGID_TARGETABILITYSTATRAISE - 12] = sText_TargetAbilityRaisedStat,
[STRINGID_ANGRYPOINTACTIVATES - 12] = sText_AngryPointActivates,
[STRINGID_TARGETSSTATWASMAXEDOUT - 12] = sText_TargetsStatWasMaxedOut,
[STRINGID_ATTACKERABILITYSTATRAISE - 12] = sText_AttackerAbilityRaisedStat,
[STRINGID_POISONHEALHPUP - 12] = sText_PoisonHealHpUp,
[STRINGID_BADDREAMSDMG - 12] = sText_BadDreamsDmg,

View file

@ -4425,7 +4425,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
{
SET_STATCHANGER(STAT_ATK, 12 - gBattleMons[battler].statStages[STAT_ATK], FALSE);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_AngryPointActivates;
gBattlescriptCurrInstr = BattleScript_TargetsStatWasMaxedOut;
effect++;
}
break;
@ -4637,6 +4637,19 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
effect++;
}
break;
case ABILITY_STEAM_ENGINE:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& TARGET_TURN_DAMAGED
&& IsBattlerAlive(battler)
&& gBattleMons[battler].statStages[STAT_SPEED] != 12
&& (moveType == TYPE_FIRE || moveType == TYPE_WATER))
{
SET_STATCHANGER(STAT_SPEED, 12 - gBattleMons[battler].statStages[STAT_SPEED], FALSE);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_TargetsStatWasMaxedOut;
effect++;
}
break;
}
break;
case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker