mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
Merge branch 'battle_engine' of https://github.com/rh-hideout/pokeemerald-expansion into popup
This commit is contained in:
commit
d5ad14c349
@ -143,7 +143,7 @@
|
||||
.macro jumpifability param0:req, ability:req, ptr:req
|
||||
.byte 0x1e
|
||||
.byte \param0
|
||||
.byte \ability
|
||||
.2byte \ability
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
@ -371,7 +371,7 @@
|
||||
|
||||
.macro jumpifabilitypresent ability:req, ptr:req
|
||||
.byte 0x43
|
||||
.byte \ability
|
||||
.2byte \ability
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
@ -815,6 +815,7 @@ gBattleAnims_General::
|
||||
.4byte General_IllusionOff
|
||||
.4byte General_FormChange
|
||||
.4byte General_SlideOffScreen
|
||||
.4byte General_RestoreBg
|
||||
|
||||
.align 2
|
||||
gBattleAnims_Special::
|
||||
@ -8453,6 +8454,8 @@ Move_GRASSY_TERRAIN::
|
||||
delay 4
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(31, 24, 31)
|
||||
waitforvisualfinish
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
Move_MISTY_TERRAIN::
|
||||
@ -8491,6 +8494,8 @@ Move_MISTY_TERRAIN::
|
||||
delay 4
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 7, 0, RGB(31, 24, 31)
|
||||
waitforvisualfinish
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
Move_ELECTRIFY::
|
||||
@ -9374,6 +9379,8 @@ Move_ELECTRIC_TERRAIN::
|
||||
delay 2
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(28, 28, 0)
|
||||
waitforvisualfinish
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
Move_DAZZLING_GLEAM::
|
||||
@ -9451,6 +9458,7 @@ Move_BABY_DOLL_EYES::
|
||||
loadspritegfx ANIM_TAG_PINK_CLOUD
|
||||
loadspritegfx ANIM_TAG_OPENING_EYE @eye
|
||||
setalpha 8, 8
|
||||
monbg ANIM_DEF_PARTNER
|
||||
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xA 0x7FFF
|
||||
waitforvisualfinish
|
||||
launchtemplate gOpeningEyeSpriteTemplate 0x5 0x4 0x0 0x0 0x1 0x0
|
||||
@ -9463,6 +9471,7 @@ Move_BABY_DOLL_EYES::
|
||||
launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x9 0x1
|
||||
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0xA 0x0 0x7FFF
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
blendoff
|
||||
end
|
||||
|
||||
@ -11027,6 +11036,8 @@ Move_PSYCHIC_TERRAIN::
|
||||
delay 4
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(27, 0, 13)
|
||||
waitforvisualfinish
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
Move_LUNGE::
|
||||
@ -24320,6 +24331,11 @@ General_TerrainElectric:
|
||||
General_TerrainPsychic:
|
||||
end
|
||||
|
||||
General_RestoreBg:
|
||||
restorebg
|
||||
waitbgfadein
|
||||
end
|
||||
|
||||
SnatchMoveTrySwapFromSubstitute:
|
||||
createvisualtask AnimTask_IsAttackerBehindSubstitute, 2
|
||||
jumprettrue SnatchMoveSwapSubstituteForMon
|
||||
|
@ -316,8 +316,7 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
|
||||
.4byte BattleScript_EffectClearSmog
|
||||
.4byte BattleScript_EffectHitSwitchTarget
|
||||
.4byte BattleScript_EffectFinalGambit
|
||||
.4byte BattleScript_EffectTechnoBlast
|
||||
.4byte BattleScript_EffectJudgment
|
||||
.4byte BattleScript_EffectChangeTypeOnItem
|
||||
.4byte BattleScript_EffectAutotomize
|
||||
.4byte BattleScript_EffectCopycat
|
||||
.4byte BattleScript_EffectDefog
|
||||
@ -2046,8 +2045,7 @@ BattleScript_EffectPsyshock:
|
||||
BattleScript_EffectWeatherBall:
|
||||
BattleScript_EffectHiddenPower:
|
||||
BattleScript_EffectTwoTypedMove:
|
||||
BattleScript_EffectTechnoBlast:
|
||||
BattleScript_EffectJudgment:
|
||||
BattleScript_EffectChangeTypeOnItem:
|
||||
BattleScript_EffectFusionCombo:
|
||||
BattleScript_EffectRevelationDance:
|
||||
BattleScript_EffectBelch:
|
||||
@ -5426,21 +5424,25 @@ BattleScript_MagicRoomEnds::
|
||||
BattleScript_ElectricTerrainEnds::
|
||||
printstring STRINGID_ELECTRICTERRAINENDS
|
||||
waitmessage 0x40
|
||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||
end2
|
||||
|
||||
BattleScript_MistyTerrainEnds::
|
||||
printstring STRINGID_MISTYTERRAINENDS
|
||||
waitmessage 0x40
|
||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||
end2
|
||||
|
||||
BattleScript_GrassyTerrainEnds::
|
||||
printstring STRINGID_GRASSYTERRAINENDS
|
||||
waitmessage 0x40
|
||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||
end2
|
||||
|
||||
BattleScript_PsychicTerrainEnds::
|
||||
printstring STRINGID_PSYCHICTERRAINENDS
|
||||
waitmessage 0x40
|
||||
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG, NULL
|
||||
end2
|
||||
|
||||
BattleScript_MudSportEnds::
|
||||
@ -7688,3 +7690,10 @@ BattleScript_PrintPlayerForfeitedLinkBattle::
|
||||
atk57
|
||||
waitmessage 0x40
|
||||
end2
|
||||
|
||||
BattleScript_AnnounceAirLockCloudNine::
|
||||
call BattleScript_AbilityPopUp
|
||||
printstring STRINGID_AIRLOCKACTIVATES
|
||||
waitmessage 0x40
|
||||
call BattleScript_WeatherFormChanges
|
||||
end3
|
||||
|
@ -229,7 +229,7 @@ struct WishFutureKnock
|
||||
|
||||
struct AI_SavedBattleMon
|
||||
{
|
||||
u8 ability;
|
||||
u16 ability;
|
||||
u16 moves[MAX_MON_MOVES];
|
||||
u16 heldItem;
|
||||
u16 species;
|
||||
@ -254,7 +254,7 @@ struct AI_ThinkingStruct
|
||||
|
||||
struct BattleHistory
|
||||
{
|
||||
u8 abilities[MAX_BATTLERS_COUNT];
|
||||
u16 abilities[MAX_BATTLERS_COUNT];
|
||||
u8 itemEffects[MAX_BATTLERS_COUNT];
|
||||
u16 usedMoves[MAX_BATTLERS_COUNT][MAX_MON_MOVES];
|
||||
u16 moveHistory[MAX_BATTLERS_COUNT][AI_MOVE_HISTORY_COUNT]; // 3 last used moves for each battler
|
||||
@ -477,7 +477,7 @@ struct BattleStruct
|
||||
u16 lastTakenMove[MAX_BATTLERS_COUNT]; // Last move that a battler was hit with.
|
||||
u16 hpOnSwitchout[2];
|
||||
u32 savedBattleTypeFlags;
|
||||
u8 abilityPreventingSwitchout;
|
||||
u16 abilityPreventingSwitchout;
|
||||
u8 hpScale;
|
||||
u16 synchronizeMoveEffect;
|
||||
bool8 anyMonHasTransformed;
|
||||
@ -531,7 +531,7 @@ struct BattleStruct
|
||||
u8 lastMoveFailed; // as bits for each battler, for the sake of Stomping Tantrum
|
||||
u8 lastMoveTarget[MAX_BATTLERS_COUNT]; // The last target on which each mon used a move, for the sake of Instruct
|
||||
u8 debugHoldEffects[MAX_BATTLERS_COUNT]; // These override actual items' hold effects.
|
||||
u8 tracedAbility[MAX_BATTLERS_COUNT];
|
||||
u16 tracedAbility[MAX_BATTLERS_COUNT];
|
||||
u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk
|
||||
bool8 spriteIgnore0Hp;
|
||||
struct Illusion illusion[MAX_BATTLERS_COUNT];
|
||||
@ -753,7 +753,7 @@ extern s32 gBattleMoveDamage;
|
||||
extern s32 gHpDealt;
|
||||
extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u16 gLastUsedAbility;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gBattlerFainted;
|
||||
|
@ -19,7 +19,7 @@ bool32 IsBattlerAIControlled(u32 battlerId);
|
||||
void ClearBattlerMoveHistory(u8 battlerId);
|
||||
void RecordLastUsedMoveBy(u32 battlerId, u32 move);
|
||||
void RecordKnownMove(u8 battlerId, u32 move);
|
||||
void RecordAbilityBattle(u8 battlerId, u8 abilityId);
|
||||
void RecordAbilityBattle(u8 battlerId, u16 abilityId);
|
||||
void ClearBattlerAbilityHistory(u8 battlerId);
|
||||
void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
|
||||
void ClearBattlerItemEffectHistory(u8 battlerId);
|
||||
|
@ -68,6 +68,7 @@ s16 KeepPanInRange(s16 a, int oldPan);
|
||||
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
|
||||
void sub_80A4720(u16 a, u16 *b, u32 c, u8 d);
|
||||
void sub_80A477C(bool8);
|
||||
void LoadMoveBg(u16 bgId);
|
||||
|
||||
// battle_intro.c
|
||||
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
|
||||
|
@ -9,5 +9,6 @@ void LoadBattleTextboxAndBackground(void);
|
||||
void InitLinkBattleVsScreen(u8 taskId);
|
||||
void DrawBattleEntryBackground(void);
|
||||
bool8 LoadChosenBattleElement(u8 caseId);
|
||||
void DrawTerrainTypeBattleBackground(void);
|
||||
|
||||
#endif // GUARD_BATTLE_BG_H
|
||||
|
@ -211,7 +211,7 @@ void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
|
||||
void BtlController_EmitUnknownYesNoBox(u8 bufferId);
|
||||
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
|
||||
void BtlController_EmitChooseItem(u8 bufferId, u8* arg1);
|
||||
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
|
||||
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u16 abilityId, u8* arg4);
|
||||
void BtlController_EmitCmd23(u8 bufferId); // unused
|
||||
void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
|
||||
void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
|
||||
|
@ -105,7 +105,8 @@
|
||||
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
|
||||
textVar[1] = B_BUFF_ABILITY; \
|
||||
textVar[2] = abilityId; \
|
||||
textVar[3] = B_BUFF_EOS; \
|
||||
textVar[3] = (abilityId & 0xFF00) >> 8; \
|
||||
textVar[4] = B_BUFF_EOS; \
|
||||
}
|
||||
|
||||
#define PREPARE_TYPE_BUFFER(textVar, typeId) \
|
||||
@ -209,13 +210,13 @@ struct BattleMsgData
|
||||
u16 currentMove;
|
||||
u16 originallyUsedMove;
|
||||
u16 lastItem;
|
||||
u8 lastAbility;
|
||||
u16 lastAbility;
|
||||
u8 scrActive;
|
||||
u8 unk1605E;
|
||||
u8 hpScale;
|
||||
u8 itemEffectBattler;
|
||||
u8 moveType;
|
||||
u8 abilities[MAX_BATTLERS_COUNT];
|
||||
u16 abilities[MAX_BATTLERS_COUNT];
|
||||
u8 textBuffs[3][TEXT_BUFF_ARRAY_COUNT];
|
||||
};
|
||||
|
||||
|
@ -349,5 +349,6 @@ extern const u8 BattleScript_EmergencyExitNoPopUp[];
|
||||
extern const u8 BattleScript_EmergencyExitWild[];
|
||||
extern const u8 BattleScript_EmergencyExitWildNoPopUp[];
|
||||
extern const u8 BattleScript_CheekPouchActivates[];
|
||||
extern const u8 BattleScript_AnnounceAirLockCloudNine[];
|
||||
|
||||
#endif // GUARD_BATTLE_SCRIPTS_H
|
||||
|
@ -90,7 +90,7 @@ u8 AtkCanceller_UnableToUseMove2(void);
|
||||
bool8 HasNoMonsToSwitch(u8 battlerId, u8 r1, u8 r2);
|
||||
u8 TryWeatherFormChange(u8 battlerId);
|
||||
bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility);
|
||||
u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg);
|
||||
u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u16 ability, u8 special, u16 moveArg);
|
||||
u32 GetBattlerAbility(u8 battlerId);
|
||||
u32 IsAbilityOnSide(u32 battlerId, u32 ability);
|
||||
u32 IsAbilityOnOpposingSide(u32 battlerId, u32 ability);
|
||||
@ -115,7 +115,7 @@ u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move);
|
||||
u32 GetBattlerWeight(u8 battlerId);
|
||||
s32 CalculateMoveDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags);
|
||||
u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities);
|
||||
u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u8 abilityDef);
|
||||
u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef);
|
||||
u16 GetTypeModifier(u8 atkType, u8 defType);
|
||||
s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId);
|
||||
u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId);
|
||||
|
@ -77,184 +77,221 @@
|
||||
#define ABILITY_WHITE_SMOKE 73
|
||||
#define ABILITY_PURE_POWER 74
|
||||
#define ABILITY_SHELL_ARMOR 75
|
||||
#define ABILITY_CACOPHONY 76
|
||||
#define ABILITY_AIR_LOCK 77
|
||||
#define ABILITY_AIR_LOCK 76
|
||||
|
||||
#define ABILITIES_COUNT_GEN3 78
|
||||
#define ABILITIES_COUNT_GEN3 77
|
||||
|
||||
// Gen4 abilities.
|
||||
#define ABILITY_TANGLED_FEET 78
|
||||
#define ABILITY_MOTOR_DRIVE 79
|
||||
#define ABILITY_RIVALRY 80
|
||||
#define ABILITY_STEADFAST 81
|
||||
#define ABILITY_SNOW_CLOAK 82
|
||||
#define ABILITY_GLUTTONY 83
|
||||
#define ABILITY_ANGER_POINT 84
|
||||
#define ABILITY_UNBURDEN 85
|
||||
#define ABILITY_HEATPROOF 86
|
||||
#define ABILITY_SIMPLE 87
|
||||
#define ABILITY_DRY_SKIN 88
|
||||
#define ABILITY_DOWNLOAD 89
|
||||
#define ABILITY_IRON_FIST 90
|
||||
#define ABILITY_POISON_HEAL 91
|
||||
#define ABILITY_ADAPTABILITY 92
|
||||
#define ABILITY_SKILL_LINK 93
|
||||
#define ABILITY_HYDRATION 94
|
||||
#define ABILITY_SOLAR_POWER 95
|
||||
#define ABILITY_QUICK_FEET 96
|
||||
#define ABILITY_NORMALIZE 97
|
||||
#define ABILITY_SNIPER 98
|
||||
#define ABILITY_MAGIC_GUARD 99
|
||||
#define ABILITY_NO_GUARD 100
|
||||
#define ABILITY_STALL 101
|
||||
#define ABILITY_TECHNICIAN 102
|
||||
#define ABILITY_LEAF_GUARD 103
|
||||
#define ABILITY_KLUTZ 104
|
||||
#define ABILITY_MOLD_BREAKER 105
|
||||
#define ABILITY_SUPER_LUCK 106
|
||||
#define ABILITY_AFTERMATH 107
|
||||
#define ABILITY_ANTICIPATION 108
|
||||
#define ABILITY_FOREWARN 109
|
||||
#define ABILITY_UNAWARE 110
|
||||
#define ABILITY_TINTED_LENS 111
|
||||
#define ABILITY_FILTER 112
|
||||
#define ABILITY_SLOW_START 113
|
||||
#define ABILITY_SCRAPPY 114
|
||||
#define ABILITY_STORM_DRAIN 115
|
||||
#define ABILITY_ICE_BODY 116
|
||||
#define ABILITY_SOLID_ROCK 117
|
||||
#define ABILITY_SNOW_WARNING 118
|
||||
#define ABILITY_HONEY_GATHER 119
|
||||
#define ABILITY_FRISK 120
|
||||
#define ABILITY_RECKLESS 121
|
||||
#define ABILITY_MULTITYPE 122
|
||||
#define ABILITY_FLOWER_GIFT 123
|
||||
#define ABILITY_BAD_DREAMS 124
|
||||
// Gen 4
|
||||
#define ABILITY_TANGLED_FEET 77
|
||||
#define ABILITY_MOTOR_DRIVE 78
|
||||
#define ABILITY_RIVALRY 79
|
||||
#define ABILITY_STEADFAST 80
|
||||
#define ABILITY_SNOW_CLOAK 81
|
||||
#define ABILITY_GLUTTONY 82
|
||||
#define ABILITY_ANGER_POINT 83
|
||||
#define ABILITY_UNBURDEN 84
|
||||
#define ABILITY_HEATPROOF 85
|
||||
#define ABILITY_SIMPLE 86
|
||||
#define ABILITY_DRY_SKIN 87
|
||||
#define ABILITY_DOWNLOAD 88
|
||||
#define ABILITY_IRON_FIST 89
|
||||
#define ABILITY_POISON_HEAL 90
|
||||
#define ABILITY_ADAPTABILITY 91
|
||||
#define ABILITY_SKILL_LINK 92
|
||||
#define ABILITY_HYDRATION 93
|
||||
#define ABILITY_SOLAR_POWER 94
|
||||
#define ABILITY_QUICK_FEET 95
|
||||
#define ABILITY_NORMALIZE 96
|
||||
#define ABILITY_SNIPER 97
|
||||
#define ABILITY_MAGIC_GUARD 98
|
||||
#define ABILITY_NO_GUARD 99
|
||||
#define ABILITY_STALL 100
|
||||
#define ABILITY_TECHNICIAN 101
|
||||
#define ABILITY_LEAF_GUARD 102
|
||||
#define ABILITY_KLUTZ 103
|
||||
#define ABILITY_MOLD_BREAKER 104
|
||||
#define ABILITY_SUPER_LUCK 105
|
||||
#define ABILITY_AFTERMATH 106
|
||||
#define ABILITY_ANTICIPATION 107
|
||||
#define ABILITY_FOREWARN 108
|
||||
#define ABILITY_UNAWARE 109
|
||||
#define ABILITY_TINTED_LENS 110
|
||||
#define ABILITY_FILTER 111
|
||||
#define ABILITY_SLOW_START 112
|
||||
#define ABILITY_SCRAPPY 113
|
||||
#define ABILITY_STORM_DRAIN 114
|
||||
#define ABILITY_ICE_BODY 115
|
||||
#define ABILITY_SOLID_ROCK 116
|
||||
#define ABILITY_SNOW_WARNING 117
|
||||
#define ABILITY_HONEY_GATHER 118
|
||||
#define ABILITY_FRISK 119
|
||||
#define ABILITY_RECKLESS 120
|
||||
#define ABILITY_MULTITYPE 121
|
||||
#define ABILITY_FLOWER_GIFT 122
|
||||
#define ABILITY_BAD_DREAMS 123
|
||||
|
||||
#define ABILITIES_COUNT_GEN4 125
|
||||
#define ABILITIES_COUNT_GEN4 124
|
||||
|
||||
// Gen5 abilities.
|
||||
#define ABILITY_PICKPOCKET 125
|
||||
#define ABILITY_SHEER_FORCE 126
|
||||
#define ABILITY_CONTRARY 127
|
||||
#define ABILITY_UNNERVE 128
|
||||
#define ABILITY_DEFIANT 129
|
||||
#define ABILITY_DEFEATIST 130
|
||||
#define ABILITY_CURSED_BODY 131
|
||||
#define ABILITY_HEALER 132
|
||||
#define ABILITY_FRIEND_GUARD 133
|
||||
#define ABILITY_WEAK_ARMOR 134
|
||||
#define ABILITY_HEAVY_METAL 135
|
||||
#define ABILITY_LIGHT_METAL 136
|
||||
#define ABILITY_MULTISCALE 137
|
||||
#define ABILITY_TOXIC_BOOST 138
|
||||
#define ABILITY_FLARE_BOOST 139
|
||||
#define ABILITY_HARVEST 140
|
||||
#define ABILITY_TELEPATHY 141
|
||||
#define ABILITY_MOODY 142
|
||||
#define ABILITY_OVERCOAT 143
|
||||
#define ABILITY_POISON_TOUCH 144
|
||||
#define ABILITY_REGENERATOR 145
|
||||
#define ABILITY_BIG_PECKS 146
|
||||
#define ABILITY_SAND_RUSH 147
|
||||
#define ABILITY_WONDER_SKIN 148
|
||||
#define ABILITY_ANALYTIC 149
|
||||
#define ABILITY_ILLUSION 150
|
||||
#define ABILITY_IMPOSTER 151
|
||||
#define ABILITY_INFILTRATOR 152
|
||||
#define ABILITY_MUMMY 153
|
||||
#define ABILITY_MOXIE 154
|
||||
#define ABILITY_JUSTIFIED 155
|
||||
#define ABILITY_RATTLED 156
|
||||
#define ABILITY_MAGIC_BOUNCE 157
|
||||
#define ABILITY_SAP_SIPPER 158
|
||||
#define ABILITY_PRANKSTER 159
|
||||
#define ABILITY_SAND_FORCE 160
|
||||
#define ABILITY_IRON_BARBS 161
|
||||
#define ABILITY_ZEN_MODE 162
|
||||
#define ABILITY_VICTORY_STAR 163
|
||||
#define ABILITY_TURBOBLAZE 164
|
||||
#define ABILITY_TERAVOLT 165
|
||||
// Gen 5
|
||||
#define ABILITY_PICKPOCKET 124
|
||||
#define ABILITY_SHEER_FORCE 125
|
||||
#define ABILITY_CONTRARY 126
|
||||
#define ABILITY_UNNERVE 127
|
||||
#define ABILITY_DEFIANT 128
|
||||
#define ABILITY_DEFEATIST 129
|
||||
#define ABILITY_CURSED_BODY 130
|
||||
#define ABILITY_HEALER 131
|
||||
#define ABILITY_FRIEND_GUARD 132
|
||||
#define ABILITY_WEAK_ARMOR 133
|
||||
#define ABILITY_HEAVY_METAL 134
|
||||
#define ABILITY_LIGHT_METAL 135
|
||||
#define ABILITY_MULTISCALE 136
|
||||
#define ABILITY_TOXIC_BOOST 137
|
||||
#define ABILITY_FLARE_BOOST 138
|
||||
#define ABILITY_HARVEST 139
|
||||
#define ABILITY_TELEPATHY 140
|
||||
#define ABILITY_MOODY 141
|
||||
#define ABILITY_OVERCOAT 142
|
||||
#define ABILITY_POISON_TOUCH 143
|
||||
#define ABILITY_REGENERATOR 144
|
||||
#define ABILITY_BIG_PECKS 145
|
||||
#define ABILITY_SAND_RUSH 146
|
||||
#define ABILITY_WONDER_SKIN 147
|
||||
#define ABILITY_ANALYTIC 148
|
||||
#define ABILITY_ILLUSION 149
|
||||
#define ABILITY_IMPOSTER 150
|
||||
#define ABILITY_INFILTRATOR 151
|
||||
#define ABILITY_MUMMY 152
|
||||
#define ABILITY_MOXIE 153
|
||||
#define ABILITY_JUSTIFIED 154
|
||||
#define ABILITY_RATTLED 155
|
||||
#define ABILITY_MAGIC_BOUNCE 156
|
||||
#define ABILITY_SAP_SIPPER 157
|
||||
#define ABILITY_PRANKSTER 158
|
||||
#define ABILITY_SAND_FORCE 159
|
||||
#define ABILITY_IRON_BARBS 160
|
||||
#define ABILITY_ZEN_MODE 161
|
||||
#define ABILITY_VICTORY_STAR 162
|
||||
#define ABILITY_TURBOBLAZE 163
|
||||
#define ABILITY_TERAVOLT 164
|
||||
|
||||
#define ABILITIES_COUNT_GEN5 166
|
||||
#define ABILITIES_COUNT_GEN5 165
|
||||
|
||||
// Gen6 abilities.
|
||||
#define ABILITY_AROMA_VEIL 166
|
||||
#define ABILITY_FLOWER_VEIL 167
|
||||
#define ABILITY_CHEEK_POUCH 168
|
||||
#define ABILITY_PROTEAN 169
|
||||
#define ABILITY_FUR_COAT 170
|
||||
#define ABILITY_MAGICIAN 171
|
||||
#define ABILITY_BULLETPROOF 172
|
||||
#define ABILITY_COMPETITIVE 173
|
||||
#define ABILITY_STRONG_JAW 174
|
||||
#define ABILITY_REFRIGERATE 175
|
||||
#define ABILITY_SWEET_VEIL 176
|
||||
#define ABILITY_STANCE_CHANGE 177
|
||||
#define ABILITY_GALE_WINGS 178
|
||||
#define ABILITY_MEGA_LAUNCHER 179
|
||||
#define ABILITY_GRASS_PELT 180
|
||||
#define ABILITY_SYMBIOSIS 181
|
||||
#define ABILITY_TOUGH_CLAWS 182
|
||||
#define ABILITY_PIXILATE 183
|
||||
#define ABILITY_GOOEY 184
|
||||
#define ABILITY_AERILATE 185
|
||||
#define ABILITY_PARENTAL_BOND 186
|
||||
#define ABILITY_DARK_AURA 187
|
||||
#define ABILITY_FAIRY_AURA 188
|
||||
#define ABILITY_AURA_BREAK 189
|
||||
#define ABILITY_PRIMORDIAL_SEA 190
|
||||
#define ABILITY_DESOLATE_LAND 191
|
||||
#define ABILITY_DELTA_STREAM 192
|
||||
// Gen 6
|
||||
#define ABILITY_AROMA_VEIL 165
|
||||
#define ABILITY_FLOWER_VEIL 166
|
||||
#define ABILITY_CHEEK_POUCH 167
|
||||
#define ABILITY_PROTEAN 168
|
||||
#define ABILITY_FUR_COAT 169
|
||||
#define ABILITY_MAGICIAN 170
|
||||
#define ABILITY_BULLETPROOF 171
|
||||
#define ABILITY_COMPETITIVE 172
|
||||
#define ABILITY_STRONG_JAW 173
|
||||
#define ABILITY_REFRIGERATE 174
|
||||
#define ABILITY_SWEET_VEIL 175
|
||||
#define ABILITY_STANCE_CHANGE 176
|
||||
#define ABILITY_GALE_WINGS 177
|
||||
#define ABILITY_MEGA_LAUNCHER 178
|
||||
#define ABILITY_GRASS_PELT 179
|
||||
#define ABILITY_SYMBIOSIS 180
|
||||
#define ABILITY_TOUGH_CLAWS 181
|
||||
#define ABILITY_PIXILATE 182
|
||||
#define ABILITY_GOOEY 183
|
||||
#define ABILITY_AERILATE 184
|
||||
#define ABILITY_PARENTAL_BOND 185
|
||||
#define ABILITY_DARK_AURA 186
|
||||
#define ABILITY_FAIRY_AURA 187
|
||||
#define ABILITY_AURA_BREAK 188
|
||||
#define ABILITY_PRIMORDIAL_SEA 189
|
||||
#define ABILITY_DESOLATE_LAND 190
|
||||
#define ABILITY_DELTA_STREAM 191
|
||||
|
||||
#define ABILITIES_COUNT_GEN6 193
|
||||
#define ABILITIES_COUNT_GEN6 192
|
||||
|
||||
// Gen7 abilities.
|
||||
#define ABILITY_STAMINA 193
|
||||
#define ABILITY_WIMP_OUT 194
|
||||
#define ABILITY_EMERGENCY_EXIT 195
|
||||
#define ABILITY_WATER_COMPACTION 196
|
||||
#define ABILITY_MERCILESS 197
|
||||
#define ABILITY_SHIELDS_DOWN 198
|
||||
#define ABILITY_STAKEOUT 199
|
||||
#define ABILITY_WATER_BUBBLE 200
|
||||
#define ABILITY_STEELWORKER 201
|
||||
#define ABILITY_BERSERK 202
|
||||
#define ABILITY_SLUSH_RUSH 203
|
||||
#define ABILITY_LONG_REACH 204
|
||||
#define ABILITY_LIQUID_VOICE 205
|
||||
#define ABILITY_TRIAGE 206
|
||||
#define ABILITY_GALVANIZE 207
|
||||
#define ABILITY_SURGE_SURFER 208
|
||||
#define ABILITY_SCHOOLING 209
|
||||
#define ABILITY_DISGUISE 210
|
||||
#define ABILITY_BATTLE_BOND 211
|
||||
#define ABILITY_POWER_CONSTRUCT 212
|
||||
#define ABILITY_CORROSION 213
|
||||
#define ABILITY_COMATOSE 214
|
||||
#define ABILITY_QUEENLY_MAJESTY 215
|
||||
#define ABILITY_INNARDS_OUT 216
|
||||
#define ABILITY_DANCER 217
|
||||
#define ABILITY_BATTERY 218
|
||||
#define ABILITY_FLUFFY 219
|
||||
#define ABILITY_DAZZLING 220
|
||||
#define ABILITY_SOUL_HEART 221
|
||||
#define ABILITY_TANGLING_HAIR 222
|
||||
#define ABILITY_RECEIVER 223
|
||||
#define ABILITY_POWER_OF_ALCHEMY 224
|
||||
#define ABILITY_BEAST_BOOST 225
|
||||
#define ABILITY_RKS_SYSTEM 226
|
||||
#define ABILITY_ELECTRIC_SURGE 227
|
||||
#define ABILITY_PSYCHIC_SURGE 228
|
||||
#define ABILITY_MISTY_SURGE 229
|
||||
#define ABILITY_GRASSY_SURGE 230
|
||||
#define ABILITY_FULL_METAL_BODY 231
|
||||
#define ABILITY_SHADOW_SHIELD 232
|
||||
#define ABILITY_PRISM_ARMOR 233
|
||||
#define ABILITY_NEUROFORCE 234
|
||||
// Gen 7
|
||||
#define ABILITY_STAMINA 192
|
||||
#define ABILITY_WIMP_OUT 193
|
||||
#define ABILITY_EMERGENCY_EXIT 194
|
||||
#define ABILITY_WATER_COMPACTION 195
|
||||
#define ABILITY_MERCILESS 196
|
||||
#define ABILITY_SHIELDS_DOWN 197
|
||||
#define ABILITY_STAKEOUT 198
|
||||
#define ABILITY_WATER_BUBBLE 199
|
||||
#define ABILITY_STEELWORKER 200
|
||||
#define ABILITY_BERSERK 201
|
||||
#define ABILITY_SLUSH_RUSH 202
|
||||
#define ABILITY_LONG_REACH 203
|
||||
#define ABILITY_LIQUID_VOICE 204
|
||||
#define ABILITY_TRIAGE 205
|
||||
#define ABILITY_GALVANIZE 206
|
||||
#define ABILITY_SURGE_SURFER 207
|
||||
#define ABILITY_SCHOOLING 208
|
||||
#define ABILITY_DISGUISE 209
|
||||
#define ABILITY_BATTLE_BOND 210
|
||||
#define ABILITY_POWER_CONSTRUCT 211
|
||||
#define ABILITY_CORROSION 212
|
||||
#define ABILITY_COMATOSE 213
|
||||
#define ABILITY_QUEENLY_MAJESTY 214
|
||||
#define ABILITY_INNARDS_OUT 215
|
||||
#define ABILITY_DANCER 216
|
||||
#define ABILITY_BATTERY 217
|
||||
#define ABILITY_FLUFFY 218
|
||||
#define ABILITY_DAZZLING 219
|
||||
#define ABILITY_SOUL_HEART 220
|
||||
#define ABILITY_TANGLING_HAIR 221
|
||||
#define ABILITY_RECEIVER 222
|
||||
#define ABILITY_POWER_OF_ALCHEMY 223
|
||||
#define ABILITY_BEAST_BOOST 224
|
||||
#define ABILITY_RKS_SYSTEM 225
|
||||
#define ABILITY_ELECTRIC_SURGE 226
|
||||
#define ABILITY_PSYCHIC_SURGE 227
|
||||
#define ABILITY_MISTY_SURGE 228
|
||||
#define ABILITY_GRASSY_SURGE 229
|
||||
#define ABILITY_FULL_METAL_BODY 230
|
||||
#define ABILITY_SHADOW_SHIELD 231
|
||||
#define ABILITY_PRISM_ARMOR 232
|
||||
#define ABILITY_NEUROFORCE 233
|
||||
|
||||
#define ABILITIES_COUNT_GEN7 235
|
||||
#define ABILITIES_COUNT_GEN7 234
|
||||
|
||||
#define ABILITIES_COUNT ABILITIES_COUNT_GEN7
|
||||
// Gen 8
|
||||
#define ABILITY_INTREPID_SWORD 234
|
||||
#define ABILITY_DAUNTLESS_SHIELD 235
|
||||
#define ABILITY_LIBERO 236
|
||||
#define ABILITY_BALL_FETCH 237
|
||||
#define ABILITY_COTTON_DOWN 238
|
||||
#define ABILITY_PROPELLER_TAIL 239
|
||||
#define ABILITY_MIRROR_ARMOR 240
|
||||
#define ABILITY_GULP_MISSILE 241
|
||||
#define ABILITY_STALWART 242
|
||||
#define ABILITY_STEAM_ENGINE 243
|
||||
#define ABILITY_PUNK_ROCK 244
|
||||
#define ABILITY_SAND_SPIT 245
|
||||
#define ABILITY_ICE_SCALES 246
|
||||
#define ABILITY_RIPEN 247
|
||||
#define ABILITY_ICE_FACE 248
|
||||
#define ABILITY_POWER_SPOT 249
|
||||
#define ABILITY_MIMICRY 250
|
||||
#define ABILITY_SCREEN_CLEANER 251
|
||||
#define ABILITY_STEELY_SPIRIT 252
|
||||
#define ABILITY_PERISH_BODY 253
|
||||
#define ABILITY_WANDERING_SPIRIT 254
|
||||
#define ABILITY_GORILLA_TACTICS 255
|
||||
#define ABILITY_NEUTRALIZING_GAS 256
|
||||
#define ABILITY_PASTEL_VEIL 257
|
||||
#define ABILITY_HUNGER_SWITCH 258
|
||||
#define ABILITY_QUICK_DRAW 259
|
||||
#define ABILITY_UNSEEN_FIST 260
|
||||
#define ABILITY_CURIOUS_MEDICINE 261
|
||||
#define ABILITY_TRANSISTOR 262
|
||||
#define ABILITY_DRAGONS_MAW 263
|
||||
#define ABILITY_CHILLING_NEIGH 264
|
||||
#define ABILITY_GRIM_NEIGH 265
|
||||
#define ABILITY_AS_ONE_ICE_RIDER 266
|
||||
#define ABILITY_AS_ONE_SHADOW_RIDER 267
|
||||
|
||||
#define ABILITIES_COUNT_GEN8 268
|
||||
|
||||
#define ABILITIES_COUNT ABILITIES_COUNT_GEN8
|
||||
|
||||
#endif // GUARD_CONSTANTS_ABILITIES_H
|
||||
|
@ -234,6 +234,8 @@
|
||||
#define STATUS_FIELD_ION_DELUGE 0x400
|
||||
#define STATUS_FIELD_FAIRY_LOCK 0x800
|
||||
|
||||
#define STATUS_TERRAIN_ANY (STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN)
|
||||
|
||||
// Flags describing move's result
|
||||
#define MOVE_RESULT_MISSED (1 << 0)
|
||||
#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
|
||||
|
@ -525,6 +525,7 @@
|
||||
#define B_ANIM_ILLUSION_OFF 0x1C
|
||||
#define B_ANIM_FORM_CHANGE 0x1D
|
||||
#define B_ANIM_SLIDE_OFFSCREEN 0x1E // for Emergency Exit
|
||||
#define B_ANIM_RESTORE_BG 0x1F // for Terrain Endings
|
||||
|
||||
// special animations table
|
||||
#define B_ANIM_LVL_UP 0x0
|
||||
|
@ -164,5 +164,6 @@
|
||||
#define B_NEW_SURF_PARTICLE_PALETTE TRUE // If set to TRUE, it updates Surf's wave palette.
|
||||
|
||||
#define HIDE_HEALTHBOXES_DURING_ANIMS TRUE //if TRUE, hides healthboxes during move animations
|
||||
#define B_TERRAIN_BG_CHANGE TRUE // If TRUE, terrain moves permanently change the default battle background until the effect fades.
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_CONFIG_H
|
||||
|
@ -551,7 +551,30 @@
|
||||
#define STRINGID_CLOAKEDINAFREEZINGLIGHT 547
|
||||
#define STRINGID_STATWASNOTLOWERED 548
|
||||
#define STRINGID_FERVENTWISHREACHED 549
|
||||
#define STRINGID_AIRLOCKACTIVATES 550
|
||||
#define STRINGID_PRESSUREENTERS 551
|
||||
#define STRINGID_DARKAURAENTERS 552
|
||||
#define STRINGID_FAIRYAURAENTERS 553
|
||||
#define STRINGID_AURABREAKENTERS 554
|
||||
#define STRINGID_COMATOSEENTERS 555
|
||||
#define STRINGID_SCREENCLEANERENTERS 556
|
||||
|
||||
#define BATTLESTRINGS_COUNT 550
|
||||
#define BATTLESTRINGS_COUNT 557
|
||||
|
||||
//// multichoice message IDs
|
||||
// switch in ability message
|
||||
#define MULTI_SWITCHIN_MOLDBREAKER 0
|
||||
#define MULTI_SWITCHIN_TERAVOLT 1
|
||||
#define MULTI_SWITCHIN_TURBOBLAZE 2
|
||||
#define MULTI_SWITCHIN_SLOWSTART 3
|
||||
#define MULTI_SWITCHIN_UNNERVE 4
|
||||
#define MULTI_SWITCHIN_ANTICIPATION 5
|
||||
#define MULTI_SWITCHIN_FOREWARN 6
|
||||
#define MULTI_SWITCHIN_PRESSURE 7
|
||||
#define MULTI_SWITCHIN_DARKAURA 8
|
||||
#define MULTI_SWITCHIN_FAIRYAURA 9
|
||||
#define MULTI_SWITCHIN_AURABREAK 10
|
||||
#define MULTI_SWITCHIN_COMATOSE 11
|
||||
#define MULTI_SWITCHIN_SCREENCLEANER 12
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H
|
||||
|
@ -152,24 +152,24 @@ struct BattlePokemon
|
||||
/*0x17*/ u32 spDefenseIV:5;
|
||||
/*0x17*/ u32 abilityNum:2;
|
||||
/*0x18*/ s8 statStages[NUM_BATTLE_STATS];
|
||||
/*0x20*/ u8 ability;
|
||||
/*0x21*/ u8 type1;
|
||||
/*0x22*/ u8 type2;
|
||||
/*0x23*/ u8 type3;
|
||||
/*0x24*/ u8 pp[MAX_MON_MOVES];
|
||||
/*0x28*/ u16 hp;
|
||||
/*0x2A*/ u8 level;
|
||||
/*0x2B*/ u8 friendship;
|
||||
/*0x2C*/ u16 maxHP;
|
||||
/*0x2E*/ u16 item;
|
||||
/*0x30*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
|
||||
/*0x3B*/ u8 ppBonuses;
|
||||
/*0x3C*/ u8 otName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x44*/ u32 experience;
|
||||
/*0x48*/ u32 personality;
|
||||
/*0x4C*/ u32 status1;
|
||||
/*0x50*/ u32 status2;
|
||||
/*0x54*/ u32 otId;
|
||||
/*0x20*/ u16 ability;
|
||||
/*0x22*/ u8 type1;
|
||||
/*0x23*/ u8 type2;
|
||||
/*0x24*/ u8 type3;
|
||||
/*0x25*/ u8 pp[MAX_MON_MOVES];
|
||||
/*0x29*/ u16 hp;
|
||||
/*0x2B*/ u8 level;
|
||||
/*0x2C*/ u8 friendship;
|
||||
/*0x2D*/ u16 maxHP;
|
||||
/*0x2F*/ u16 item;
|
||||
/*0x31*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
|
||||
/*0x3C*/ u8 ppBonuses;
|
||||
/*0x3D*/ u8 otName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x45*/ u32 experience;
|
||||
/*0x49*/ u32 personality;
|
||||
/*0x4D*/ u32 status1;
|
||||
/*0x51*/ u32 status2;
|
||||
/*0x55*/ u32 otId;
|
||||
};
|
||||
|
||||
struct BaseStats
|
||||
@ -198,9 +198,12 @@ struct BaseStats
|
||||
/* 0x13 */ u8 growthRate;
|
||||
/* 0x14 */ u8 eggGroup1;
|
||||
/* 0x15 */ u8 eggGroup2;
|
||||
/* 0x16 */ u8 abilities[2];
|
||||
/* 0x18 */ u8 safariZoneFleeRate;
|
||||
/* 0x19 */ u8 bodyColor : 7;
|
||||
/* 0x16 */ u16 abilities[2];
|
||||
#ifdef POKEMON_EXPANSION
|
||||
u16 abilityHidden;
|
||||
#endif
|
||||
u8 safariZoneFleeRate;
|
||||
u8 bodyColor : 7;
|
||||
u8 noFlip : 1;
|
||||
};
|
||||
|
||||
@ -327,8 +330,8 @@ u8 CalculatePlayerPartyCount(void);
|
||||
u8 CalculateEnemyPartyCount(void);
|
||||
u8 GetMonsStateToDoubles(void);
|
||||
u8 GetMonsStateToDoubles_2(void);
|
||||
u8 GetAbilityBySpecies(u16 species, u8 abilityNum);
|
||||
u8 GetMonAbility(struct Pokemon *mon);
|
||||
u16 GetAbilityBySpecies(u16 species, u8 abilityNum);
|
||||
u16 GetMonAbility(struct Pokemon *mon);
|
||||
void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord);
|
||||
u8 GetSecretBaseTrainerPicIndex(void);
|
||||
u8 GetSecretBaseTrainerClass(void);
|
||||
|
@ -788,7 +788,7 @@ void RecordKnownMove(u8 battlerId, u32 move)
|
||||
}
|
||||
}
|
||||
|
||||
void RecordAbilityBattle(u8 battlerId, u8 abilityId)
|
||||
void RecordAbilityBattle(u8 battlerId, u16 abilityId)
|
||||
{
|
||||
BATTLE_HISTORY->abilities[battlerId] = abilityId;
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
|
||||
static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
{
|
||||
u8 battlerIn1, battlerIn2;
|
||||
u8 absorbingTypeAbility;
|
||||
u16 absorbingTypeAbility;
|
||||
s32 firstId;
|
||||
s32 lastId; // + 1
|
||||
struct Pokemon *party;
|
||||
@ -188,7 +188,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
u16 species;
|
||||
u8 monAbility;
|
||||
u16 monAbility;
|
||||
|
||||
if (GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||
continue;
|
||||
@ -369,7 +369,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent)
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
u16 species;
|
||||
u8 monAbility;
|
||||
u16 monAbility;
|
||||
|
||||
if (GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||
continue;
|
||||
|
@ -88,7 +88,6 @@ static void Task_PanFromInitialToTarget(u8 taskId);
|
||||
static void Task_LoopAndPlaySE(u8 taskId);
|
||||
static void Task_WaitAndPlaySE(u8 taskId);
|
||||
static void LoadDefaultBg(void);
|
||||
static void LoadMoveBg(u16 bgId);
|
||||
|
||||
// ewram
|
||||
EWRAM_DATA static const u8 *sBattleAnimScriptPtr = NULL;
|
||||
@ -3177,7 +3176,7 @@ static void Task_FadeToBg(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadMoveBg(u16 bgId)
|
||||
void LoadMoveBg(u16 bgId)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
@ -3205,6 +3204,10 @@ static void LoadDefaultBg(void)
|
||||
{
|
||||
if (IsContest())
|
||||
LoadContestBgAfterMoveAnim();
|
||||
#if B_TERRAIN_BG_CHANGE == TRUE
|
||||
else if (gFieldStatuses & STATUS_TERRAIN_ANY)
|
||||
DrawTerrainTypeBattleBackground();
|
||||
#endif
|
||||
else
|
||||
DrawMainBattleBackground();
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_bg.h"
|
||||
#include "battle_main.h"
|
||||
#include "battle_message.h"
|
||||
@ -23,6 +24,7 @@
|
||||
#include "constants/map_types.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/battle_anim.h"
|
||||
|
||||
struct BattleBackground
|
||||
{
|
||||
@ -863,7 +865,11 @@ void LoadBattleTextboxAndBackground(void)
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
|
||||
LoadBattleMenuWindowGfx();
|
||||
DrawMainBattleBackground();
|
||||
#if B_TERRAIN_BG_CHANGE == TRUE
|
||||
DrawTerrainTypeBattleBackground();
|
||||
#else
|
||||
DrawMainBattleBackground();
|
||||
#endif
|
||||
}
|
||||
|
||||
static void DrawLinkBattleParticipantPokeballs(u8 taskId, u8 multiplayerId, u8 bgId, u8 destX, u8 destY)
|
||||
@ -1413,3 +1419,26 @@ bool8 LoadChosenBattleElement(u8 caseId)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void DrawTerrainTypeBattleBackground(void)
|
||||
{
|
||||
switch (gFieldStatuses & STATUS_TERRAIN_ANY)
|
||||
{
|
||||
case STATUS_FIELD_GRASSY_TERRAIN:
|
||||
LoadMoveBg(BG_GRASSY_TERRAIN);
|
||||
break;
|
||||
case STATUS_FIELD_MISTY_TERRAIN:
|
||||
LoadMoveBg(BG_MISTY_TERRAIN);
|
||||
break;
|
||||
case STATUS_FIELD_ELECTRIC_TERRAIN:
|
||||
LoadMoveBg(BG_ELECTRIC_TERRAIN);
|
||||
break;
|
||||
case STATUS_FIELD_PSYCHIC_TERRAIN:
|
||||
LoadMoveBg(BG_PSYCHIC_TERRAIN);
|
||||
break;
|
||||
default:
|
||||
DrawMainBattleBackground();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2762,7 +2762,7 @@ static void PlayerHandleChoosePokemon(void)
|
||||
gTasks[gUnknown_03005D7C[gActiveBattler]].data[0] = gBattleResources->bufferA[gActiveBattler][1] & 0xF;
|
||||
*(&gBattleStruct->battlerPreventingSwitchout) = gBattleResources->bufferA[gActiveBattler][1] >> 4;
|
||||
*(&gBattleStruct->field_8B) = gBattleResources->bufferA[gActiveBattler][2];
|
||||
*(&gBattleStruct->abilityPreventingSwitchout) = gBattleResources->bufferA[gActiveBattler][3];
|
||||
*(&gBattleStruct->abilityPreventingSwitchout) = (gBattleResources->bufferA[gActiveBattler][3] & 0xFF) | (gBattleResources->bufferA[gActiveBattler][7] << 8);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
|
||||
gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
|
@ -1186,14 +1186,15 @@ void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8 *arg4)
|
||||
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 *arg4)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
|
||||
sBattleBuffersTransferData[1] = caseId;
|
||||
sBattleBuffersTransferData[2] = slotId;
|
||||
sBattleBuffersTransferData[3] = abilityId;
|
||||
sBattleBuffersTransferData[3] = abilityId & 0xFF;
|
||||
sBattleBuffersTransferData[7] = (abilityId >> 8) & 0xFF;
|
||||
for (i = 0; i < 3; i++)
|
||||
sBattleBuffersTransferData[4 + i] = arg4[i];
|
||||
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written.
|
||||
|
@ -1448,10 +1448,10 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data)
|
||||
{
|
||||
case LIST_ITEM_ABILITY:
|
||||
data->modifyArrows.minValue = 0;
|
||||
data->modifyArrows.maxValue = ABILITIES_COUNT_GEN7 - 1;
|
||||
data->modifyArrows.maxValue = ABILITIES_COUNT_GEN8 - 1;
|
||||
data->modifyArrows.maxDigits = 3;
|
||||
data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].ability;
|
||||
data->modifyArrows.typeOfVal = VAL_U8;
|
||||
data->modifyArrows.typeOfVal = VAL_U16;
|
||||
data->modifyArrows.currValue = gBattleMons[data->battlerId].ability;
|
||||
break;
|
||||
case LIST_ITEM_MOVES:
|
||||
|
@ -162,7 +162,7 @@ EWRAM_DATA s32 gBattleMoveDamage = 0;
|
||||
EWRAM_DATA s32 gHpDealt = 0;
|
||||
EWRAM_DATA s32 gTakenDmg[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastUsedItem = 0;
|
||||
EWRAM_DATA u8 gLastUsedAbility = 0;
|
||||
EWRAM_DATA u16 gLastUsedAbility = 0;
|
||||
EWRAM_DATA u8 gBattlerAttacker = 0;
|
||||
EWRAM_DATA u8 gBattlerTarget = 0;
|
||||
EWRAM_DATA u8 gBattlerFainted = 0;
|
||||
|
@ -53,7 +53,7 @@ static void ChooseTypeOfMoveUsedString(u8 *dst);
|
||||
static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst);
|
||||
|
||||
// EWRAM vars
|
||||
static EWRAM_DATA u8 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0};
|
||||
static EWRAM_DATA u16 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL;
|
||||
|
||||
// const rom data
|
||||
@ -678,6 +678,13 @@ static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run awa
|
||||
static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nfrom the {B_LAST_ITEM}!");
|
||||
static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin a freezing light!");
|
||||
static const u8 sText_StatWasNotLowered[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas not lowered!");
|
||||
static const u8 sText_AirLockActivates[] = _("The effects of weather\ndisappeared.");
|
||||
static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its\npressure!");
|
||||
static const u8 sText_DarkAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na dark aura!");
|
||||
static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na fairy aura!");
|
||||
static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all\nother POKéMON's auras!");
|
||||
static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!");
|
||||
static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!");
|
||||
|
||||
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||
{
|
||||
@ -1219,6 +1226,13 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||
[STRINGID_GRASSYTERRAINHEALS - 12] = sText_GrassyTerrainHeals,
|
||||
[STRINGID_ELECTRICTERRAINPREVENTS - 12] = sText_ElectricTerrainPreventsSleep,
|
||||
[STRINGID_PSYCHICTERRAINPREVENTS - 12] = sText_PsychicTerrainPreventsPriority,
|
||||
[STRINGID_AIRLOCKACTIVATES - 12] = sText_AirLockActivates,
|
||||
[STRINGID_PRESSUREENTERS - 12] = sText_PressureActivates,
|
||||
[STRINGID_DARKAURAENTERS - 12] = sText_DarkAuraActivates,
|
||||
[STRINGID_FAIRYAURAENTERS - 12] = sText_FairyAuraActivates,
|
||||
[STRINGID_AURABREAKENTERS - 12] = sText_AuraBreakActivates,
|
||||
[STRINGID_COMATOSEENTERS - 12] = sText_ComatoseActivates,
|
||||
[STRINGID_SCREENCLEANERENTERS - 12] = sText_ScreenCleanerActivates,
|
||||
};
|
||||
|
||||
const u16 gTerrainStringIds[] =
|
||||
@ -1248,9 +1262,19 @@ const u16 gDmgHazardsStringIds[] =
|
||||
|
||||
const u16 gSwitchInAbilityStringIds[] =
|
||||
{
|
||||
STRINGID_MOLDBREAKERENTERS, STRINGID_TERAVOLTENTERS, STRINGID_TURBOBLAZEENTERS,
|
||||
STRINGID_SLOWSTARTENTERS, STRINGID_UNNERVEENTERS, STRINGID_ANTICIPATIONACTIVATES,
|
||||
STRINGID_FOREWARNACTIVATES
|
||||
[MULTI_SWITCHIN_MOLDBREAKER] = STRINGID_MOLDBREAKERENTERS,
|
||||
[MULTI_SWITCHIN_TERAVOLT] = STRINGID_TERAVOLTENTERS,
|
||||
[MULTI_SWITCHIN_TURBOBLAZE] = STRINGID_TURBOBLAZEENTERS,
|
||||
[MULTI_SWITCHIN_SLOWSTART] = STRINGID_SLOWSTARTENTERS,
|
||||
[MULTI_SWITCHIN_UNNERVE] = STRINGID_UNNERVEENTERS,
|
||||
[MULTI_SWITCHIN_ANTICIPATION] = STRINGID_ANTICIPATIONACTIVATES,
|
||||
[MULTI_SWITCHIN_FOREWARN] = STRINGID_FOREWARNACTIVATES,
|
||||
[MULTI_SWITCHIN_PRESSURE] = STRINGID_PRESSUREENTERS,
|
||||
[MULTI_SWITCHIN_DARKAURA] = STRINGID_DARKAURAENTERS,
|
||||
[MULTI_SWITCHIN_FAIRYAURA] = STRINGID_FAIRYAURAENTERS,
|
||||
[MULTI_SWITCHIN_AURABREAK] = STRINGID_AURABREAKENTERS,
|
||||
[MULTI_SWITCHIN_COMATOSE] = STRINGID_COMATOSEENTERS,
|
||||
[MULTI_SWITCHIN_SCREENCLEANER] = STRINGID_SCREENCLEANERENTERS,
|
||||
};
|
||||
|
||||
const u16 gMissStringIds[] =
|
||||
@ -3408,8 +3432,8 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
|
||||
srcID += 2;
|
||||
break;
|
||||
case B_BUFF_ABILITY: // ability names
|
||||
StringAppend(dst, gAbilityNames[src[srcID + 1]]);
|
||||
srcID += 2;
|
||||
StringAppend(dst, gAbilityNames[T1_READ_16(&src[srcID + 1])]);
|
||||
srcID += 3;
|
||||
break;
|
||||
case B_BUFF_ITEM: // item name
|
||||
hword = T1_READ_16(&src[srcID + 1]);
|
||||
|
@ -811,7 +811,7 @@ static void HealMon(struct Pokemon *mon)
|
||||
|
||||
static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status)
|
||||
{
|
||||
u8 ability = GetMonAbility(mon);
|
||||
u16 ability = GetMonAbility(mon);
|
||||
bool8 ret = FALSE;
|
||||
|
||||
switch (status)
|
||||
@ -1627,7 +1627,7 @@ static bool8 CanEncounterWildMon(u8 enemyMonLevel)
|
||||
{
|
||||
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
|
||||
{
|
||||
u8 monAbility = GetMonAbility(&gPlayerParty[0]);
|
||||
u16 monAbility = GetMonAbility(&gPlayerParty[0]);
|
||||
if (monAbility == ABILITY_KEEN_EYE || monAbility == ABILITY_INTIMIDATE)
|
||||
{
|
||||
u8 playerMonLevel = GetMonData(&gPlayerParty[0], MON_DATA_LEVEL);
|
||||
|
@ -3432,7 +3432,7 @@ static void Cmd_jumpifability(void)
|
||||
{
|
||||
u32 battlerId;
|
||||
bool32 hasAbility = FALSE;
|
||||
u32 ability = gBattlescriptCurrInstr[2];
|
||||
u32 ability = T2_READ_16(gBattlescriptCurrInstr + 2);
|
||||
|
||||
switch (gBattlescriptCurrInstr[1])
|
||||
{
|
||||
@ -3462,13 +3462,13 @@ static void Cmd_jumpifability(void)
|
||||
if (hasAbility)
|
||||
{
|
||||
gLastUsedAbility = ability;
|
||||
gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 4);
|
||||
RecordAbilityBattle(battlerId, gLastUsedAbility);
|
||||
gBattlerAbility = battlerId;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlescriptCurrInstr += 7;
|
||||
gBattlescriptCurrInstr += 8;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4386,10 +4386,10 @@ static void Cmd_setroost(void)
|
||||
|
||||
static void Cmd_jumpifabilitypresent(void)
|
||||
{
|
||||
if (IsAbilityOnField(gBattlescriptCurrInstr[1]))
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
|
||||
if (IsAbilityOnField(T1_READ_16(gBattlescriptCurrInstr + 1)))
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
else
|
||||
gBattlescriptCurrInstr += 6;
|
||||
gBattlescriptCurrInstr += 7;
|
||||
}
|
||||
|
||||
static void Cmd_endselectionscript(void)
|
||||
@ -6952,7 +6952,7 @@ static void HandleTerrainMove(u32 moveEffect)
|
||||
}
|
||||
else
|
||||
{
|
||||
gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN);
|
||||
gFieldStatuses &= ~STATUS_TERRAIN_ANY;
|
||||
gFieldStatuses |= statusFlag;
|
||||
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER)
|
||||
*timer = 8;
|
||||
@ -10285,7 +10285,7 @@ static void Cmd_healpartystatus(void)
|
||||
|
||||
if (species != SPECIES_NONE && species != SPECIES_EGG)
|
||||
{
|
||||
u8 ability;
|
||||
u16 ability;
|
||||
|
||||
if (gBattlerPartyIndexes[gBattlerAttacker] == i)
|
||||
ability = gBattleMons[gBattlerAttacker].ability;
|
||||
@ -11288,7 +11288,7 @@ static void Cmd_tryswapabilities(void) // skill swap
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 abilityAtk = gBattleMons[gBattlerAttacker].ability;
|
||||
u16 abilityAtk = gBattleMons[gBattlerAttacker].ability;
|
||||
gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability;
|
||||
gBattleMons[gBattlerTarget].ability = abilityAtk;
|
||||
|
||||
@ -11543,7 +11543,7 @@ static void Cmd_pickup(void)
|
||||
{
|
||||
s32 i;
|
||||
u16 species, heldItem;
|
||||
u8 ability;
|
||||
u16 ability;
|
||||
u8 lvlDivBy10;
|
||||
|
||||
if (InBattlePike())
|
||||
|
@ -3564,7 +3564,7 @@ static u8 ForewarnChooseMove(u32 battler)
|
||||
free(data);
|
||||
}
|
||||
|
||||
u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveArg)
|
||||
u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 moveArg)
|
||||
{
|
||||
u8 effect = 0;
|
||||
u32 speciesAtk, speciesDef;
|
||||
@ -3656,7 +3656,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
case ABILITY_MOLD_BREAKER:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_MOLDBREAKER;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
@ -3665,7 +3665,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
case ABILITY_TERAVOLT:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_TERAVOLT;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
@ -3674,7 +3674,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
case ABILITY_TURBOBLAZE:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_TURBOBLAZE;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
@ -3684,7 +3684,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gDisableStructs[battler].slowStartTimer = 5;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_SLOWSTART;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
@ -3693,7 +3693,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
case ABILITY_UNNERVE:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 4;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_UNNERVE;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
@ -3723,7 +3723,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
|
||||
if (effect)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 5;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_ANTICIPATION;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
}
|
||||
@ -3741,7 +3741,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
ForewarnChooseMove(battler);
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 6;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_FOREWARN;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
@ -3784,6 +3784,60 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ABILITY_PRESSURE:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_PRESSURE;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_DARK_AURA:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_DARKAURA;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_FAIRY_AURA:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_FAIRYAURA;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_AURA_BREAK:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_AURABREAK;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_COMATOSE:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_COMATOSE;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_SCREEN_CLEANER:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = MULTI_SWITCHIN_SCREENCLEANER;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_DRIZZLE:
|
||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_RAIN, TRUE))
|
||||
{
|
||||
@ -3865,16 +3919,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
||||
break;
|
||||
case ABILITY_CLOUD_NINE:
|
||||
case ABILITY_AIR_LOCK:
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
{
|
||||
effect = TryWeatherFormChange(i);
|
||||
if (effect != 0)
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
|
||||
gBattleScripting.battler = i;
|
||||
gBattleStruct->formToChangeInto = effect - 1;
|
||||
break;
|
||||
}
|
||||
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AnnounceAirLockCloudNine);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_SCHOOLING:
|
||||
@ -7428,7 +7477,7 @@ u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 bat
|
||||
return modifier;
|
||||
}
|
||||
|
||||
u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u8 abilityDef)
|
||||
u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef)
|
||||
{
|
||||
u16 modifier = UQ_4_12(1.0);
|
||||
u8 moveType = gBattleMoves[move].type;
|
||||
|
@ -74,7 +74,6 @@ static const u8 sVitalSpiritDescription[] = _("Prevents sleep.");
|
||||
static const u8 sWhiteSmokeDescription[] = _("Prevents ability reduction.");
|
||||
static const u8 sPurePowerDescription[] = _("Raises Attack.");
|
||||
static const u8 sShellArmorDescription[] = _("Blocks critical hits.");
|
||||
static const u8 sCacophonyDescription[] = _("Avoids sound-based moves.");
|
||||
static const u8 sAirLockDescription[] = _("Negates weather effects.");
|
||||
static const u8 sTangledFeetDescription[] = _("Ups evasion if confused.");
|
||||
static const u8 sMotorDriveDescription[] = _("Electricity raises Speed.");
|
||||
@ -221,8 +220,42 @@ static const u8 sMistySurgeDescription[] = _("Field becomes misty.");
|
||||
static const u8 sGrassySurgeDescription[] = _("Field becomes grassy.");
|
||||
static const u8 sFullMetalBodyDescription[] = _("Prevents stat reduction.");
|
||||
static const u8 sNeuroforceDescription[] = _("Ups “supereffective”.");
|
||||
static const u8 sIntrepidSwordDescription[] = _("Ups Attack on entry.");
|
||||
static const u8 sDauntlessShieldDescription[] = _("Ups Defense on entry.");
|
||||
static const u8 sLiberoDescription[] = _("Changes type to move's.");
|
||||
static const u8 sBallFetchDescription[] = _("Fetches failed Poké Ball.");
|
||||
static const u8 sCottonDownDescription[] = _("Lower Speed of all when hit.");
|
||||
static const u8 sPropellerTailDescription[] = _("Ignores foe's redirection.");
|
||||
static const u8 sMirrorArmorDescription[] = _("Reflect stat decreases.");
|
||||
static const u8 sGulpMissileDescription[] = _("If hit, spits prey from sea.");
|
||||
static const u8 sStalwartDescription[] = _("Ignores foe's redirection.");
|
||||
static const u8 sSteamEngineDescription[] = _("Fire or Water hits up Speed.");
|
||||
static const u8 sPunkRockDescription[] = _("Ups and resists sound.");
|
||||
static const u8 sSandSpitDescription[] = _("Creates a sandstorm if hit.");
|
||||
static const u8 sIceScalesDescription[] = _("Halves special damage.");
|
||||
static const u8 sRipenDescription[] = _("Doubles effect of Berries.");
|
||||
static const u8 sIceFaceDescription[] = _("Take a free hit. Hail renews.");
|
||||
static const u8 sPowerSpotDescription[] = _("Powers up ally moves.");
|
||||
static const u8 sMimicryDescription[] = _("Changes type on terrain.");
|
||||
static const u8 sScreenCleanerDescription[] = _("Removes walls of light.");
|
||||
static const u8 sSteelySpiritDescription[] = _("Boosts ally's Steel moves.");
|
||||
static const u8 sPerishBodyDescription[] = _("Foe faints in 3 turns if hit.");
|
||||
static const u8 sWanderingSpiritDescription[] = _("Trade abilities on contact.");
|
||||
static const u8 sGorillaTacticsDescription[] = _("Ups Attack and locks move.");
|
||||
static const u8 sNeutralizingGasDescription[] = _("All Abilities are nullified.");
|
||||
static const u8 sPastelVeilDescription[] = _("Protects team from poison.");
|
||||
static const u8 sHungerSwitchDescription[] = _("Changes form each turn.");;
|
||||
static const u8 sQuickDrawDescription[] = _("Moves first occasionally.");
|
||||
static const u8 sUnseenFistDescription[] = _("Contact evades protection.");
|
||||
static const u8 sCuriousMedicineDescription[] = _("Remove ally's stat changes.");
|
||||
static const u8 sTransistorDescription[] = _("Ups Electric-type moves.");
|
||||
static const u8 sDragonsMawDescription[] = _("Ups Dragon-type moves.");
|
||||
static const u8 sChillingNeighDescription[] = _("KOs boost Attack stat.");
|
||||
static const u8 sGrimNeighDescription[] = _("KOs boost Sp. Atk stat.");
|
||||
static const u8 sAsOneIceRiderDescription[] = _("Unnerve and Chilling Neigh.");
|
||||
static const u8 sAsOneShadowRiderDescription[] = _("Unnerve and Grim Neigh.");
|
||||
|
||||
const u8 gAbilityNames[ABILITIES_COUNT_GEN7][ABILITY_NAME_LENGTH + 1] =
|
||||
const u8 gAbilityNames[ABILITIES_COUNT_GEN8][ABILITY_NAME_LENGTH + 1] =
|
||||
{
|
||||
[ABILITY_NONE] = _("-------"),
|
||||
[ABILITY_STENCH] = _("Stench"),
|
||||
@ -300,7 +333,6 @@ const u8 gAbilityNames[ABILITIES_COUNT_GEN7][ABILITY_NAME_LENGTH + 1] =
|
||||
[ABILITY_WHITE_SMOKE] = _("White Smoke"),
|
||||
[ABILITY_PURE_POWER] = _("Pure Power"),
|
||||
[ABILITY_SHELL_ARMOR] = _("Shell Armor"),
|
||||
[ABILITY_CACOPHONY] = _("Cacophony"),
|
||||
[ABILITY_AIR_LOCK] = _("Air Lock"),
|
||||
[ABILITY_TANGLED_FEET] = _("Tangled Feet"),
|
||||
[ABILITY_MOTOR_DRIVE] = _("Motor Drive"),
|
||||
@ -459,9 +491,43 @@ const u8 gAbilityNames[ABILITIES_COUNT_GEN7][ABILITY_NAME_LENGTH + 1] =
|
||||
[ABILITY_SHADOW_SHIELD] = _("ShadowShield"),
|
||||
[ABILITY_PRISM_ARMOR] = _("Prism Armor"),
|
||||
[ABILITY_NEUROFORCE] = _("Neuroforce"),
|
||||
[ABILITY_INTREPID_SWORD] = _("IntrepidSwor"),
|
||||
[ABILITY_DAUNTLESS_SHIELD] = _("DauntlessShi"),
|
||||
[ABILITY_LIBERO] = _("Libero"),
|
||||
[ABILITY_BALL_FETCH] = _("Ball Fetch"),
|
||||
[ABILITY_COTTON_DOWN] = _("Cotton Down"),
|
||||
[ABILITY_PROPELLER_TAIL] = _("PropellerTai"),
|
||||
[ABILITY_MIRROR_ARMOR] = _("Mirror Armor"),
|
||||
[ABILITY_GULP_MISSILE] = _("Gulp Missile"),
|
||||
[ABILITY_STALWART] = _("Stalwart"),
|
||||
[ABILITY_STEAM_ENGINE] = _("Steam Engine"),
|
||||
[ABILITY_PUNK_ROCK] = _("Punk Rock"),
|
||||
[ABILITY_SAND_SPIT] = _("Sand Spit"),
|
||||
[ABILITY_ICE_SCALES] = _("Ice Scales"),
|
||||
[ABILITY_RIPEN] = _("Ripen"),
|
||||
[ABILITY_ICE_FACE] = _("Ice Face"),
|
||||
[ABILITY_POWER_SPOT] = _("Power Spot"),
|
||||
[ABILITY_MIMICRY] = _("Mimicry"),
|
||||
[ABILITY_SCREEN_CLEANER] = _("ScreenCleane"),
|
||||
[ABILITY_STEELY_SPIRIT] = _("SteelySpirit"),
|
||||
[ABILITY_PERISH_BODY] = _("Perish Body"),
|
||||
[ABILITY_WANDERING_SPIRIT] = _("WanderingSpi"),
|
||||
[ABILITY_GORILLA_TACTICS] = _("GorillaTacti"),
|
||||
[ABILITY_NEUTRALIZING_GAS] = _("Neutralizing"),
|
||||
[ABILITY_PASTEL_VEIL] = _("Pastel Veil"),
|
||||
[ABILITY_HUNGER_SWITCH] = _("HungerSwitch"),
|
||||
[ABILITY_QUICK_DRAW] = _("Quick Draw"),
|
||||
[ABILITY_UNSEEN_FIST] = _("Unseen Fist"),
|
||||
[ABILITY_CURIOUS_MEDICINE] = _("CuriousMedic"),
|
||||
[ABILITY_TRANSISTOR] = _("Transistor"),
|
||||
[ABILITY_DRAGONS_MAW] = _("Dragon's Maw"),
|
||||
[ABILITY_CHILLING_NEIGH] = _("ChillingNeig"),
|
||||
[ABILITY_GRIM_NEIGH] = _("Grim Neigh"),
|
||||
[ABILITY_AS_ONE_ICE_RIDER] = _("As One"),
|
||||
[ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
|
||||
};
|
||||
|
||||
const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT_GEN7] =
|
||||
const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT_GEN8] =
|
||||
{
|
||||
[ABILITY_NONE] = sNoneDescription,
|
||||
[ABILITY_STENCH] = sStenchDescription,
|
||||
@ -539,7 +605,6 @@ const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT_GEN7] =
|
||||
[ABILITY_WHITE_SMOKE] = sWhiteSmokeDescription,
|
||||
[ABILITY_PURE_POWER] = sPurePowerDescription,
|
||||
[ABILITY_SHELL_ARMOR] = sShellArmorDescription,
|
||||
[ABILITY_CACOPHONY] = sCacophonyDescription,
|
||||
[ABILITY_AIR_LOCK] = sAirLockDescription,
|
||||
[ABILITY_TANGLED_FEET] = sTangledFeetDescription,
|
||||
[ABILITY_MOTOR_DRIVE] = sMotorDriveDescription,
|
||||
@ -698,4 +763,38 @@ const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT_GEN7] =
|
||||
[ABILITY_SHADOW_SHIELD] = sMultiscaleDescription,
|
||||
[ABILITY_PRISM_ARMOR] = sFilterDescription,
|
||||
[ABILITY_NEUROFORCE] = sNeuroforceDescription,
|
||||
[ABILITY_INTREPID_SWORD] = sIntrepidSwordDescription,
|
||||
[ABILITY_DAUNTLESS_SHIELD] = sDauntlessShieldDescription,
|
||||
[ABILITY_LIBERO] = sLiberoDescription,
|
||||
[ABILITY_BALL_FETCH] = sBallFetchDescription,
|
||||
[ABILITY_COTTON_DOWN] = sCottonDownDescription,
|
||||
[ABILITY_PROPELLER_TAIL] = sPropellerTailDescription,
|
||||
[ABILITY_MIRROR_ARMOR] = sMirrorArmorDescription,
|
||||
[ABILITY_GULP_MISSILE] = sGulpMissileDescription,
|
||||
[ABILITY_STALWART] = sStalwartDescription,
|
||||
[ABILITY_STEAM_ENGINE] = sSteamEngineDescription,
|
||||
[ABILITY_PUNK_ROCK] = sPunkRockDescription,
|
||||
[ABILITY_SAND_SPIT] = sSandSpitDescription,
|
||||
[ABILITY_ICE_SCALES] = sIceScalesDescription,
|
||||
[ABILITY_RIPEN] = sRipenDescription,
|
||||
[ABILITY_ICE_FACE] = sIceFaceDescription,
|
||||
[ABILITY_POWER_SPOT] = sPowerSpotDescription,
|
||||
[ABILITY_MIMICRY] = sMimicryDescription,
|
||||
[ABILITY_SCREEN_CLEANER] = sScreenCleanerDescription,
|
||||
[ABILITY_STEELY_SPIRIT] = sSteelySpiritDescription,
|
||||
[ABILITY_PERISH_BODY] = sPerishBodyDescription,
|
||||
[ABILITY_WANDERING_SPIRIT] = sWanderingSpiritDescription,
|
||||
[ABILITY_GORILLA_TACTICS] = sGorillaTacticsDescription,
|
||||
[ABILITY_NEUTRALIZING_GAS] = sNeutralizingGasDescription,
|
||||
[ABILITY_PASTEL_VEIL] = sPastelVeilDescription,
|
||||
[ABILITY_HUNGER_SWITCH] = sHungerSwitchDescription,
|
||||
[ABILITY_QUICK_DRAW] = sQuickDrawDescription,
|
||||
[ABILITY_UNSEEN_FIST] = sUnseenFistDescription,
|
||||
[ABILITY_CURIOUS_MEDICINE] = sCuriousMedicineDescription,
|
||||
[ABILITY_TRANSISTOR] = sTransistorDescription,
|
||||
[ABILITY_DRAGONS_MAW] = sDragonsMawDescription,
|
||||
[ABILITY_CHILLING_NEIGH] = sChillingNeighDescription,
|
||||
[ABILITY_GRIM_NEIGH] = sGrimNeighDescription,
|
||||
[ABILITY_AS_ONE_ICE_RIDER] = sAsOneIceRiderDescription,
|
||||
[ABILITY_AS_ONE_SHADOW_RIDER] = sAsOneShadowRiderDescription,
|
||||
};
|
||||
|
@ -872,7 +872,7 @@ u8 GetEggCyclesToSubtract(void)
|
||||
{
|
||||
if (!GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG))
|
||||
{
|
||||
u8 ability = GetMonAbility(&gPlayerParty[i]);
|
||||
u16 ability = GetMonAbility(&gPlayerParty[i]);
|
||||
if (ability == ABILITY_MAGMA_ARMOR || ability == ABILITY_FLAME_BODY)
|
||||
return 2;
|
||||
}
|
||||
|
@ -1833,7 +1833,7 @@ static bool8 Fishing_CheckForBite(struct Task *task)
|
||||
{
|
||||
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
|
||||
{
|
||||
u8 ability = GetMonAbility(&gPlayerParty[0]);
|
||||
u16 ability = GetMonAbility(&gPlayerParty[0]);
|
||||
if (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD)
|
||||
{
|
||||
if (Random() % 100 > 14)
|
||||
|
@ -141,7 +141,7 @@ bool8 SetUpFieldMove_Cut(void)
|
||||
s16 x, y;
|
||||
u8 i, j;
|
||||
u8 tileBehavior;
|
||||
u8 userAbility;
|
||||
u16 userAbility;
|
||||
bool8 cutTiles[CUT_NORMAL_AREA];
|
||||
bool8 ret;
|
||||
|
||||
|
@ -4156,7 +4156,7 @@ u8 GetMonsStateToDoubles_2(void)
|
||||
return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON;
|
||||
}
|
||||
|
||||
u8 GetAbilityBySpecies(u16 species, u8 abilityNum)
|
||||
u16 GetAbilityBySpecies(u16 species, u8 abilityNum)
|
||||
{
|
||||
if (abilityNum)
|
||||
gLastUsedAbility = gBaseStats[species].abilities[1];
|
||||
@ -4166,7 +4166,7 @@ u8 GetAbilityBySpecies(u16 species, u8 abilityNum)
|
||||
return gLastUsedAbility;
|
||||
}
|
||||
|
||||
u8 GetMonAbility(struct Pokemon *mon)
|
||||
u16 GetMonAbility(struct Pokemon *mon)
|
||||
{
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
u8 abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL);
|
||||
|
@ -3146,13 +3146,13 @@ static void PrintMonOTID(void)
|
||||
|
||||
static void PrintMonAbilityName(void)
|
||||
{
|
||||
u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
|
||||
u16 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
|
||||
PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityNames[ability], 0, 1, 0, 1);
|
||||
}
|
||||
|
||||
static void PrintMonAbilityDescription(void)
|
||||
{
|
||||
u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
|
||||
u16 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
|
||||
PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityDescriptionPointers[ability], 0, 17, 0, 0);
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ static void FeebasSeedRng(u16 seed);
|
||||
static bool8 IsWildLevelAllowedByRepel(u8 level);
|
||||
static void ApplyFluteEncounterRateMod(u32 *encRate);
|
||||
static void ApplyCleanseTagEncounterRateMod(u32 *encRate);
|
||||
static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex);
|
||||
static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u16 ability, u8 *monIndex);
|
||||
static bool8 IsAbilityAllowingEncounter(u8 level);
|
||||
|
||||
// EWRAM vars
|
||||
@ -248,7 +248,7 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon)
|
||||
// check ability for max level mon
|
||||
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
|
||||
{
|
||||
u8 ability = GetMonAbility(&gPlayerParty[0]);
|
||||
u16 ability = GetMonAbility(&gPlayerParty[0]);
|
||||
if (ability == ABILITY_HUSTLE || ability == ABILITY_VITAL_SPIRIT || ability == ABILITY_PRESSURE)
|
||||
{
|
||||
if (Random() % 2 == 0)
|
||||
@ -905,7 +905,7 @@ static bool8 IsWildLevelAllowedByRepel(u8 wildLevel)
|
||||
|
||||
static bool8 IsAbilityAllowingEncounter(u8 level)
|
||||
{
|
||||
u8 ability;
|
||||
u16 ability;
|
||||
|
||||
if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
|
||||
return TRUE;
|
||||
@ -942,7 +942,7 @@ static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex)
|
||||
static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u16 ability, u8 *monIndex)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
|
||||
return FALSE;
|
||||
|
Loading…
Reference in New Issue
Block a user