Add Powder
This commit is contained in:
parent
52d1e69591
commit
b9e711bbf4
@ -1581,6 +1581,10 @@
|
|||||||
.4byte \ptr
|
.4byte \ptr
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro setpowder battler:req
|
||||||
|
various \battler, VARIOUS_SET_POWDER
|
||||||
|
.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 << 4 | \down << 7
|
setbyte sSTATCHANGER \stat | \stages << 4 | \down << 7
|
||||||
|
|||||||
@ -650,6 +650,7 @@ gBattleAnims_StatusConditions::
|
|||||||
.4byte Status_Freeze
|
.4byte Status_Freeze
|
||||||
.4byte Status_Curse
|
.4byte Status_Curse
|
||||||
.4byte Status_Nightmare
|
.4byte Status_Nightmare
|
||||||
|
.4byte Status_Powder
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
gBattleAnims_General::
|
gBattleAnims_General::
|
||||||
@ -11930,6 +11931,9 @@ Status_Nightmare:
|
|||||||
clearmonbg ANIM_DEF_PARTNER
|
clearmonbg ANIM_DEF_PARTNER
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Status_Powder:
|
||||||
|
end
|
||||||
|
|
||||||
General_CastformChange:
|
General_CastformChange:
|
||||||
createvisualtask sub_815BB18, 2
|
createvisualtask sub_815BB18, 2
|
||||||
jumpreteq 1, AnimScript_82D7ECA
|
jumpreteq 1, AnimScript_82D7ECA
|
||||||
|
|||||||
@ -339,6 +339,20 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
|
|||||||
.4byte BattleScript_EffectSparklingAria
|
.4byte BattleScript_EffectSparklingAria
|
||||||
.4byte BattleScript_EffectAcupressure
|
.4byte BattleScript_EffectAcupressure
|
||||||
.4byte BattleScript_EffectAromaticMist
|
.4byte BattleScript_EffectAromaticMist
|
||||||
|
.4byte BattleScript_EffectPowder
|
||||||
|
|
||||||
|
BattleScript_EffectPowder:
|
||||||
|
attackcanceler
|
||||||
|
accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON
|
||||||
|
attackstring
|
||||||
|
ppreduce
|
||||||
|
jumpifstatus2 BS_TARGET, STATUS2_POWDER, BattleScript_ButItFailed
|
||||||
|
setpowder BS_TARGET
|
||||||
|
attackanimation
|
||||||
|
waitanimation
|
||||||
|
printstring STRINGID_COVEREDINPOWDER
|
||||||
|
waitmessage 0x40
|
||||||
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectAromaticMist:
|
BattleScript_EffectAromaticMist:
|
||||||
attackcanceler
|
attackcanceler
|
||||||
@ -5523,6 +5537,25 @@ BattleScript_DoSelfConfusionDmg::
|
|||||||
BattleScript_MoveUsedIsConfusedRet::
|
BattleScript_MoveUsedIsConfusedRet::
|
||||||
return
|
return
|
||||||
|
|
||||||
|
BattleScript_MoveUsedPowder::
|
||||||
|
bicword gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED
|
||||||
|
attackstring
|
||||||
|
ppreduce
|
||||||
|
pause 0x20
|
||||||
|
cancelmultiturnmoves BS_ATTACKER
|
||||||
|
status2animation BS_ATTACKER, STATUS2_POWDER
|
||||||
|
waitanimation
|
||||||
|
effectivenesssound
|
||||||
|
hitanimation BS_ATTACKER
|
||||||
|
waitstate
|
||||||
|
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
|
||||||
|
healthbarupdate BS_ATTACKER
|
||||||
|
datahpupdate BS_ATTACKER
|
||||||
|
printstring STRINGID_POWDEREXPLODES
|
||||||
|
waitmessage 0x40
|
||||||
|
tryfaintmon BS_ATTACKER, FALSE, NULL
|
||||||
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_MoveUsedIsConfusedNoMore::
|
BattleScript_MoveUsedIsConfusedNoMore::
|
||||||
printstring STRINGID_PKMNHEALEDCONFUSION
|
printstring STRINGID_PKMNHEALEDCONFUSION
|
||||||
waitmessage 0x40
|
waitmessage 0x40
|
||||||
|
|||||||
@ -203,6 +203,7 @@ struct ProtectStruct
|
|||||||
u32 usesBouncedMove:1;
|
u32 usesBouncedMove:1;
|
||||||
u32 usedHealBlockedMove:1;
|
u32 usedHealBlockedMove:1;
|
||||||
u32 usedGravityPreventedMove:1;
|
u32 usedGravityPreventedMove:1;
|
||||||
|
u32 powderSelfDmg:1;
|
||||||
u32 physicalDmg;
|
u32 physicalDmg;
|
||||||
u32 specialDmg;
|
u32 specialDmg;
|
||||||
u8 physicalBattlerId;
|
u8 physicalBattlerId;
|
||||||
|
|||||||
@ -286,5 +286,6 @@ extern const u8 BattleScript_MoveEffectFeint[];
|
|||||||
extern const u8 BattleScript_ProteanActivates[];
|
extern const u8 BattleScript_ProteanActivates[];
|
||||||
extern const u8 BattleScript_DazzlingProtected[];
|
extern const u8 BattleScript_DazzlingProtected[];
|
||||||
extern const u8 BattleScript_MoveUsedPsychicTerrainPrevents[];
|
extern const u8 BattleScript_MoveUsedPsychicTerrainPrevents[];
|
||||||
|
extern const u8 BattleScript_MoveUsedPowder[];
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_SCRIPTS_H
|
#endif // GUARD_BATTLE_SCRIPTS_H
|
||||||
|
|||||||
@ -116,6 +116,7 @@
|
|||||||
#define STATUS2_LOCK_CONFUSE 0x00000C00
|
#define STATUS2_LOCK_CONFUSE 0x00000C00
|
||||||
#define STATUS2_MULTIPLETURNS 0x00001000
|
#define STATUS2_MULTIPLETURNS 0x00001000
|
||||||
#define STATUS2_WRAPPED 0x00002000
|
#define STATUS2_WRAPPED 0x00002000
|
||||||
|
#define STATUS2_POWDER 0x00004000
|
||||||
#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every battler
|
#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every battler
|
||||||
#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
|
#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
|
||||||
#define STATUS2_FOCUS_ENERGY 0x00100000
|
#define STATUS2_FOCUS_ENERGY 0x00100000
|
||||||
|
|||||||
@ -327,5 +327,6 @@
|
|||||||
#define EFFECT_SPARKLING_ARIA 321
|
#define EFFECT_SPARKLING_ARIA 321
|
||||||
#define EFFECT_ACUPRESSURE 322
|
#define EFFECT_ACUPRESSURE 322
|
||||||
#define EFFECT_AROMATIC_MIST 323
|
#define EFFECT_AROMATIC_MIST 323
|
||||||
|
#define EFFECT_POWDER 324
|
||||||
|
|
||||||
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||||
|
|||||||
@ -133,6 +133,7 @@
|
|||||||
#define VARIOUS_SET_AURORA_VEIL 71
|
#define VARIOUS_SET_AURORA_VEIL 71
|
||||||
#define VARIOUS_TRY_THIRD_TYPE 72
|
#define VARIOUS_TRY_THIRD_TYPE 72
|
||||||
#define VARIOUS_ACUPRESSURE 73
|
#define VARIOUS_ACUPRESSURE 73
|
||||||
|
#define VARIOUS_SET_POWDER 74
|
||||||
|
|
||||||
// atk80, dmg manipulation
|
// atk80, dmg manipulation
|
||||||
#define ATK80_DMG_CHANGE_SIGN 0
|
#define ATK80_DMG_CHANGE_SIGN 0
|
||||||
|
|||||||
@ -514,6 +514,8 @@
|
|||||||
#define STRINGID_THIRDTYPEADDED 510
|
#define STRINGID_THIRDTYPEADDED 510
|
||||||
#define STRINGID_FELLFORFEINT 511
|
#define STRINGID_FELLFORFEINT 511
|
||||||
#define STRINGID_POKEMONCANNOTUSEMOVE 512
|
#define STRINGID_POKEMONCANNOTUSEMOVE 512
|
||||||
|
#define STRINGID_COVEREDINPOWDER 513
|
||||||
|
#define STRINGID_POWDEREXPLODES 514
|
||||||
|
|
||||||
#define BATTLESTRINGS_COUNT 525
|
#define BATTLESTRINGS_COUNT 525
|
||||||
|
|
||||||
|
|||||||
@ -651,6 +651,8 @@ static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received
|
|||||||
static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to\n{B_DEF_NAME_WITH_PREFIX}!");
|
static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to\n{B_DEF_NAME_WITH_PREFIX}!");
|
||||||
static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe feint!");
|
static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe feint!");
|
||||||
static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot\nuse {B_CURRENT_MOVE}!");
|
static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot\nuse {B_CURRENT_MOVE}!");
|
||||||
|
static const u8 sText_CoveredInPowder[] = _("{B_DEF_NAME_WITH_PREFIX} is covered in powder!");
|
||||||
|
static const u8 sText_PowderExplodes[] = _("When the flame touched the powder \non the Pokémon, it exploded!");
|
||||||
|
|
||||||
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||||
{
|
{
|
||||||
@ -1156,6 +1158,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
|||||||
sText_ThirdTypeAdded,
|
sText_ThirdTypeAdded,
|
||||||
sText_FellForFeint,
|
sText_FellForFeint,
|
||||||
sText_PokemonCannotUseMove,
|
sText_PokemonCannotUseMove,
|
||||||
|
sText_CoveredInPowder,
|
||||||
|
sText_PowderExplodes,
|
||||||
};
|
};
|
||||||
|
|
||||||
const u16 gTerrainStringIds[] =
|
const u16 gTerrainStringIds[] =
|
||||||
|
|||||||
@ -6338,6 +6338,9 @@ static void atk76_various(void)
|
|||||||
|
|
||||||
switch (gBattlescriptCurrInstr[2])
|
switch (gBattlescriptCurrInstr[2])
|
||||||
{
|
{
|
||||||
|
case VARIOUS_SET_POWDER:
|
||||||
|
gBattleMons[gActiveBattler].status2 |= STATUS2_POWDER;
|
||||||
|
break;
|
||||||
case VARIOUS_ACUPRESSURE:
|
case VARIOUS_ACUPRESSURE:
|
||||||
bits = 0;
|
bits = 0;
|
||||||
for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
|
for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
|
||||||
|
|||||||
@ -483,7 +483,8 @@ bool8 WasUnableToUseMove(u8 battler)
|
|||||||
|| gProtectStructs[battler].usedHealBlockedMove
|
|| gProtectStructs[battler].usedHealBlockedMove
|
||||||
|| gProtectStructs[battler].flag2Unknown
|
|| gProtectStructs[battler].flag2Unknown
|
||||||
|| gProtectStructs[battler].flinchImmobility
|
|| gProtectStructs[battler].flinchImmobility
|
||||||
|| gProtectStructs[battler].confusionSelfDmg)
|
|| gProtectStructs[battler].confusionSelfDmg
|
||||||
|
|| gProtectStructs[battler].powderSelfDmg)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -1306,6 +1307,7 @@ enum
|
|||||||
ENDTURN_ITEMS2,
|
ENDTURN_ITEMS2,
|
||||||
ENDTURN_ROOST,
|
ENDTURN_ROOST,
|
||||||
ENDTURN_ELECTRIFY,
|
ENDTURN_ELECTRIFY,
|
||||||
|
ENDTURN_POWDER,
|
||||||
ENDTURN_BATTLER_COUNT
|
ENDTURN_BATTLER_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1756,7 +1758,9 @@ u8 DoBattlerEndTurnEffects(void)
|
|||||||
case ENDTURN_ELECTRIFY:
|
case ENDTURN_ELECTRIFY:
|
||||||
gStatuses3[gActiveBattler] &= ~(STATUS3_ELECTRIFIED);
|
gStatuses3[gActiveBattler] &= ~(STATUS3_ELECTRIFIED);
|
||||||
gBattleStruct->turnEffectsTracker++;
|
gBattleStruct->turnEffectsTracker++;
|
||||||
break;
|
case ENDTURN_POWDER:
|
||||||
|
gBattleMons[gActiveBattler].status2 &= ~(STATUS2_POWDER);
|
||||||
|
gBattleStruct->turnEffectsTracker++;
|
||||||
case ENDTURN_BATTLER_COUNT: // done
|
case ENDTURN_BATTLER_COUNT: // done
|
||||||
gBattleStruct->turnEffectsTracker = 0;
|
gBattleStruct->turnEffectsTracker = 0;
|
||||||
gBattleStruct->turnEffectsBattlerId++;
|
gBattleStruct->turnEffectsBattlerId++;
|
||||||
@ -1982,6 +1986,7 @@ enum
|
|||||||
CANCELLER_IN_LOVE,
|
CANCELLER_IN_LOVE,
|
||||||
CANCELLER_BIDE,
|
CANCELLER_BIDE,
|
||||||
CANCELLER_THAW,
|
CANCELLER_THAW,
|
||||||
|
CANCELLER_POWDER,
|
||||||
CANCELLER_END,
|
CANCELLER_END,
|
||||||
CANCELLER_PSYCHIC_TERRAIN,
|
CANCELLER_PSYCHIC_TERRAIN,
|
||||||
CANCELLER_END2,
|
CANCELLER_END2,
|
||||||
@ -2272,6 +2277,20 @@ u8 AtkCanceller_UnableToUseMove(void)
|
|||||||
}
|
}
|
||||||
gBattleStruct->atkCancellerTracker++;
|
gBattleStruct->atkCancellerTracker++;
|
||||||
break;
|
break;
|
||||||
|
case CANCELLER_POWDER:
|
||||||
|
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_POWDER)
|
||||||
|
{
|
||||||
|
u32 moveType;
|
||||||
|
GET_MOVE_TYPE(gCurrentMove, moveType);
|
||||||
|
if (moveType == TYPE_FIRE)
|
||||||
|
{
|
||||||
|
gProtectStructs[gBattlerAttacker].powderSelfDmg = 1;
|
||||||
|
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
|
||||||
|
gBattlescriptCurrInstr = BattleScript_MoveUsedPowder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gBattleStruct->atkCancellerTracker++;
|
||||||
|
break;
|
||||||
case CANCELLER_END:
|
case CANCELLER_END:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7218,7 +7218,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
|||||||
.split = SPLIT_STATUS,
|
.split = SPLIT_STATUS,
|
||||||
},
|
},
|
||||||
{ // MOVE_POWDER
|
{ // MOVE_POWDER
|
||||||
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
|
.effect = EFFECT_POWDER,
|
||||||
.power = 0,
|
.power = 0,
|
||||||
.type = TYPE_BUG,
|
.type = TYPE_BUG,
|
||||||
.accuracy = 100,
|
.accuracy = 100,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user