mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
fix trainer theft, update config option
This commit is contained in:
commit
39cbc21925
@ -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
|
||||
|
||||
|
@ -1327,13 +1327,19 @@
|
||||
.2byte \count
|
||||
.endm
|
||||
|
||||
@ Prepares to start a wild battle against a species at Level level holding item. Running this command will not affect
|
||||
@ normal wild battles. You start the prepared battle with dowildbattle.
|
||||
.macro setwildbattle species:req, level:req, item:req
|
||||
@ Prepares to start a wild battle against a species at Level level holding item.
|
||||
@ If species2 is something other than SPECIES_NONE, then the battle is a double battle with another pokemon
|
||||
@ with species species2 at Level level2 holding item2.
|
||||
@ Running this command will not affect normal wild battles. You start the prepared battle with dowildbattle.
|
||||
@ If the player only has one pokemon, a scripted double battle will be buggy.
|
||||
.macro setwildbattle species:req, level:req, item:req, species2=SPECIES_NONE, level2=0, item2=ITEM_NONE
|
||||
.byte 0xb6
|
||||
.2byte \species
|
||||
.byte \level
|
||||
.2byte \item
|
||||
.2byte \species2
|
||||
.byte \level2
|
||||
.2byte \item2
|
||||
.endm
|
||||
|
||||
@ Starts a wild battle against the Pokemon generated by setwildbattle. Blocks script execution until the battle finishes.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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:
|
||||
@ -7689,6 +7687,13 @@ BattleScript_PrintPlayerForfeitedLinkBattle::
|
||||
waitmessage 0x40
|
||||
end2
|
||||
|
||||
BattleScript_AnnounceAirLockCloudNine::
|
||||
call BattleScript_AbilityPopUp
|
||||
printstring STRINGID_AIRLOCKACTIVATES
|
||||
waitmessage 0x40
|
||||
call BattleScript_WeatherFormChanges
|
||||
end3
|
||||
|
||||
BattleScript_Pickpocket::
|
||||
call BattleScript_AbilityPopUp
|
||||
setmoveeffect MOVE_EFFECT_STEAL_ITEM
|
||||
@ -7698,4 +7703,3 @@ BattleScript_Pickpocket::
|
||||
swapattackerwithtarget
|
||||
activateitemeffects BS_TARGET
|
||||
return
|
||||
|
||||
|
@ -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;
|
||||
@ -530,7 +530,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);
|
||||
|
@ -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,6 +349,7 @@ 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[];
|
||||
extern const u8 BattleScript_Pickpocket[];
|
||||
|
||||
#endif // GUARD_BATTLE_SCRIPTS_H
|
||||
|
@ -24,6 +24,7 @@ void BattleSetup_StartBattlePikeWildBattle(void);
|
||||
void BattleSetup_StartRoamerBattle(void);
|
||||
void StartWallyTutorialBattle(void);
|
||||
void BattleSetup_StartScriptedWildBattle(void);
|
||||
void BattleSetup_StartScriptedDoubleWildBattle(void);
|
||||
void BattleSetup_StartLatiBattle(void);
|
||||
void BattleSetup_StartLegendaryBattle(void);
|
||||
void StartGroudonKyogreBattle(void);
|
||||
|
@ -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
|
||||
|
@ -3,26 +3,38 @@
|
||||
|
||||
// Species with peculiar battle effects.
|
||||
#ifndef POKEMON_EXPANSION
|
||||
#define SPECIES_DIALGA 0
|
||||
#define SPECIES_PALKIA 0
|
||||
#define SPECIES_GIRATINA 0
|
||||
#define SPECIES_CHERRIM 0
|
||||
#define SPECIES_ARCEUS 0
|
||||
#define SPECIES_SILVALLY 0
|
||||
#define SPECIES_GENESECT 0
|
||||
#define SPECIES_AEGISLASH 0
|
||||
#define SPECIES_AEGISLASH_BLADE 10000
|
||||
#define SPECIES_MIMIKYU 0
|
||||
#define SPECIES_MIMIKYU_BUSTED 10001
|
||||
#define SPECIES_DARMANITAN 0
|
||||
#define SPECIES_DARMANITAN_ZEN 10002
|
||||
#define SPECIES_MINIOR_CORE 0
|
||||
#define SPECIES_MINIOR 10003
|
||||
#define SPECIES_WISHIWASHI 0
|
||||
#define SPECIES_WISHIWASHI_SCHOOL 10004
|
||||
#define SPECIES_ZYGARDE 0 // 50%
|
||||
#define SPECIES_ZYGARDE_10 10005 // 10 %
|
||||
#define SPECIES_ZYGARDE_COMPLETE 10006 // 100 %
|
||||
#define SPECIES_DIALGA 0
|
||||
#define SPECIES_PALKIA 0
|
||||
#define SPECIES_GIRATINA 0
|
||||
#define SPECIES_CHERRIM 0
|
||||
#define SPECIES_ARCEUS 0
|
||||
#define SPECIES_SILVALLY 0
|
||||
#define SPECIES_GENESECT 0
|
||||
#define SPECIES_AEGISLASH 0
|
||||
#define SPECIES_AEGISLASH_BLADE 10000
|
||||
#define SPECIES_MIMIKYU 0
|
||||
#define SPECIES_MIMIKYU_BUSTED 10001
|
||||
#define SPECIES_DARMANITAN 0
|
||||
#define SPECIES_DARMANITAN_ZEN_MODE 10002
|
||||
#define SPECIES_MINIOR_CORE_RED 0
|
||||
#define SPECIES_MINIOR 10003
|
||||
#define SPECIES_MINIOR_CORE_BLUE 0
|
||||
#define SPECIES_MINIOR_METEOR_BLUE 10004
|
||||
#define SPECIES_MINIOR_CORE_GREEN 0
|
||||
#define SPECIES_MINIOR_METEOR_GREEN 10005
|
||||
#define SPECIES_MINIOR_CORE_INDIGO 0
|
||||
#define SPECIES_MINIOR_METEOR_INDIGO 10006
|
||||
#define SPECIES_MINIOR_CORE_ORANGE 0
|
||||
#define SPECIES_MINIOR_METEOR_ORANGE 10007
|
||||
#define SPECIES_MINIOR_CORE_VIOLET 0
|
||||
#define SPECIES_MINIOR_METEOR_VIOLET 10008
|
||||
#define SPECIES_MINIOR_CORE_YELLOW 0
|
||||
#define SPECIES_MINIOR_METEOR_YELLOW 10009
|
||||
#define SPECIES_WISHIWASHI 0
|
||||
#define SPECIES_WISHIWASHI_SCHOOL 10010
|
||||
#define SPECIES_ZYGARDE 0 // 50%
|
||||
#define SPECIES_ZYGARDE_10 10011 // 10 %
|
||||
#define SPECIES_ZYGARDE_COMPLETE 10012 // 100 %
|
||||
#endif
|
||||
|
||||
// Items with peculiar battle effects.
|
||||
@ -133,7 +145,7 @@
|
||||
#define B_PARALYZE_ELECTRIC GEN_6 // In Gen6+, Electric-type Pokémon can't be paralyzed.
|
||||
#define B_POWDER_GRASS GEN_6 // In Gen6+, Grass-type Pokémon are immune to powder and spore moves.
|
||||
#define B_STEEL_RESISTANCES GEN_6 // In Gen6+, Steel-type Pokémon are no longer resistant to Dark and Ghost moves.
|
||||
#define B_TRAINERS_STEAL_ITEMS TRUE // If TRUE, trainer with thief/pickpocket will temporarily steal your items
|
||||
#define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items.
|
||||
|
||||
// Animation Settings
|
||||
#define B_NEW_SWORD_PARTICLE TRUE // If set to TRUE, it updates Swords Dance's particle.
|
||||
|
@ -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
|
||||
|
@ -359,7 +359,7 @@
|
||||
|
||||
#define MOVES_COUNT_GEN3 355
|
||||
|
||||
// Gen4 moves.
|
||||
// Gen 4 moves.
|
||||
#define MOVE_ROOST 355
|
||||
#define MOVE_GRAVITY 356
|
||||
#define MOVE_MIRACLE_EYE 357
|
||||
@ -476,7 +476,7 @@
|
||||
|
||||
#define MOVES_COUNT_GEN4 468
|
||||
|
||||
// Gen5 moves.
|
||||
// Gen 5 moves.
|
||||
#define MOVE_HONE_CLAWS 468
|
||||
#define MOVE_WIDE_GUARD 469
|
||||
#define MOVE_GUARD_SPLIT 470
|
||||
@ -572,7 +572,7 @@
|
||||
|
||||
#define MOVES_COUNT_GEN5 560
|
||||
|
||||
// Gen6 moves.
|
||||
// Gen 6 moves.
|
||||
#define MOVE_FLYING_PRESS 560
|
||||
#define MOVE_MAT_BLOCK 561
|
||||
#define MOVE_BELCH 562
|
||||
@ -631,6 +631,7 @@
|
||||
#define MOVE_THOUSAND_WAVES 615
|
||||
#define MOVE_LANDS_WRATH 616
|
||||
#define MOVE_LIGHT_OF_RUIN 617
|
||||
// ORAS Moves
|
||||
#define MOVE_ORIGIN_PULSE 618
|
||||
#define MOVE_PRECIPICE_BLADES 619
|
||||
#define MOVE_DRAGON_ASCENT 620
|
||||
@ -638,7 +639,7 @@
|
||||
|
||||
#define MOVES_COUNT_GEN6 622
|
||||
|
||||
// Gen7 moves.
|
||||
// Gen 7 moves.
|
||||
#define MOVE_SHORE_UP 622
|
||||
#define MOVE_FIRST_IMPRESSION 623
|
||||
#define MOVE_BANEFUL_BUNKER 624
|
||||
@ -690,52 +691,90 @@
|
||||
#define MOVE_ZING_ZAP 670
|
||||
#define MOVE_NATURES_MADNESS 671
|
||||
#define MOVE_MULTI_ATTACK 672
|
||||
// USUM Moves
|
||||
#define MOVE_MIND_BLOWN 673
|
||||
#define MOVE_PLASMA_FISTS 674
|
||||
#define MOVE_PHOTON_GEYSER 675
|
||||
#define MOVE_DOUBLE_IRON_BASH 676
|
||||
// LGPE Moves
|
||||
#define MOVE_ZIPPY_ZAP 676
|
||||
#define MOVE_SPLISHY_SPLASH 677
|
||||
#define MOVE_FLOATY_FALL 678
|
||||
#define MOVE_PIKA_PAPOW 679
|
||||
#define MOVE_BOUNCY_BUBBLE 680
|
||||
#define MOVE_BUZZY_BUZZ 681
|
||||
#define MOVE_SIZZLY_SLIDE 682
|
||||
#define MOVE_GLITZY_GLOW 683
|
||||
#define MOVE_BADDY_BAD 684
|
||||
#define MOVE_SAPPY_SEED 685
|
||||
#define MOVE_FREEZY_FROST 686
|
||||
#define MOVE_SPARKLY_SWIRL 687
|
||||
#define MOVE_VEEVEE_VOLLEY 688
|
||||
#define MOVE_DOUBLE_IRON_BASH 689
|
||||
|
||||
#define MOVES_COUNT_GEN7 677
|
||||
#define MOVES_COUNT_GEN7 690
|
||||
|
||||
// Gen 8 moves.
|
||||
#define MOVE_DYNAMAX_CANNON (MOVES_COUNT_GEN7 + 0)
|
||||
#define MOVE_SNIPE_SHOT (MOVES_COUNT_GEN7 + 1)
|
||||
#define MOVE_JAW_LOCK (MOVES_COUNT_GEN7 + 2)
|
||||
#define MOVE_STUFF_CHEEKS (MOVES_COUNT_GEN7 + 3)
|
||||
#define MOVE_NO_RETREAT (MOVES_COUNT_GEN7 + 4)
|
||||
#define MOVE_TAR_SHOT (MOVES_COUNT_GEN7 + 5)
|
||||
#define MOVE_MAGIC_POWDER (MOVES_COUNT_GEN7 + 6)
|
||||
#define MOVE_DRAGON_DARTS (MOVES_COUNT_GEN7 + 7)
|
||||
#define MOVE_TEATIME (MOVES_COUNT_GEN7 + 8)
|
||||
#define MOVE_OCTOLOCK (MOVES_COUNT_GEN7 + 9)
|
||||
#define MOVE_BOLT_BEAK (MOVES_COUNT_GEN7 + 10)
|
||||
#define MOVE_FISHIOUS_REND (MOVES_COUNT_GEN7 + 11)
|
||||
#define MOVE_COURT_CHANGE (MOVES_COUNT_GEN7 + 12)
|
||||
#define MOVE_CLANGOROUS_SOUL (MOVES_COUNT_GEN7 + 13)
|
||||
#define MOVE_BODY_PRESS (MOVES_COUNT_GEN7 + 14)
|
||||
#define MOVE_DECORATE (MOVES_COUNT_GEN7 + 15)
|
||||
#define MOVE_DRUM_BEATING (MOVES_COUNT_GEN7 + 16)
|
||||
#define MOVE_SNAP_TRAP (MOVES_COUNT_GEN7 + 17)
|
||||
#define MOVE_PYRO_BALL (MOVES_COUNT_GEN7 + 18)
|
||||
#define MOVE_BEHEMOTH_BLADE (MOVES_COUNT_GEN7 + 19)
|
||||
#define MOVE_BEHEMOTH_BASH (MOVES_COUNT_GEN7 + 20)
|
||||
#define MOVE_AURA_WHEEL (MOVES_COUNT_GEN7 + 21)
|
||||
#define MOVE_BREAKING_SWIPE (MOVES_COUNT_GEN7 + 22)
|
||||
#define MOVE_BRANCH_POKE (MOVES_COUNT_GEN7 + 23)
|
||||
#define MOVE_OVERDRIVE (MOVES_COUNT_GEN7 + 24)
|
||||
#define MOVE_APPLE_ACID (MOVES_COUNT_GEN7 + 25)
|
||||
#define MOVE_GRAV_APPLE (MOVES_COUNT_GEN7 + 26)
|
||||
#define MOVE_SPIRIT_BREAK (MOVES_COUNT_GEN7 + 27)
|
||||
#define MOVE_STRANGE_STEAM (MOVES_COUNT_GEN7 + 28)
|
||||
#define MOVE_LIFE_DEW (MOVES_COUNT_GEN7 + 29)
|
||||
#define MOVE_OBSTRUCT (MOVES_COUNT_GEN7 + 30)
|
||||
#define MOVE_FALSE_SURRENDER (MOVES_COUNT_GEN7 + 31)
|
||||
#define MOVE_METEOR_ASSAULT (MOVES_COUNT_GEN7 + 32)
|
||||
#define MOVE_ETERNABEAM (MOVES_COUNT_GEN7 + 33)
|
||||
#define MOVE_STEEL_BEAM (MOVES_COUNT_GEN7 + 34)
|
||||
#define MOVE_DYNAMAX_CANNON 690
|
||||
#define MOVE_SNIPE_SHOT 691
|
||||
#define MOVE_JAW_LOCK 692
|
||||
#define MOVE_STUFF_CHEEKS 693
|
||||
#define MOVE_NO_RETREAT 694
|
||||
#define MOVE_TAR_SHOT 695
|
||||
#define MOVE_MAGIC_POWDER 696
|
||||
#define MOVE_DRAGON_DARTS 697
|
||||
#define MOVE_TEATIME 698
|
||||
#define MOVE_OCTOLOCK 699
|
||||
#define MOVE_BOLT_BEAK 700
|
||||
#define MOVE_FISHIOUS_REND 701
|
||||
#define MOVE_COURT_CHANGE 702
|
||||
#define MOVE_CLANGOROUS_SOUL 703
|
||||
#define MOVE_BODY_PRESS 704
|
||||
#define MOVE_DECORATE 705
|
||||
#define MOVE_DRUM_BEATING 706
|
||||
#define MOVE_SNAP_TRAP 707
|
||||
#define MOVE_PYRO_BALL 708
|
||||
#define MOVE_BEHEMOTH_BLADE 709
|
||||
#define MOVE_BEHEMOTH_BASH 710
|
||||
#define MOVE_AURA_WHEEL 711
|
||||
#define MOVE_BREAKING_SWIPE 712
|
||||
#define MOVE_BRANCH_POKE 713
|
||||
#define MOVE_OVERDRIVE 714
|
||||
#define MOVE_APPLE_ACID 715
|
||||
#define MOVE_GRAV_APPLE 716
|
||||
#define MOVE_SPIRIT_BREAK 717
|
||||
#define MOVE_STRANGE_STEAM 718
|
||||
#define MOVE_LIFE_DEW 719
|
||||
#define MOVE_OBSTRUCT 720
|
||||
#define MOVE_FALSE_SURRENDER 721
|
||||
#define MOVE_METEOR_ASSAULT 722
|
||||
#define MOVE_ETERNABEAM 723
|
||||
#define MOVE_STEEL_BEAM 724
|
||||
// Isle of Armor Moves
|
||||
#define MOVE_EXPANDING_FORCE 725
|
||||
#define MOVE_STEEL_ROLLER 726
|
||||
#define MOVE_SCALE_SHOT 727
|
||||
#define MOVE_METEOR_BEAM 728
|
||||
#define MOVE_SHELL_SIDE_ARM 729
|
||||
#define MOVE_MISTY_EXPLOSION 730
|
||||
#define MOVE_GRASSY_GLIDE 731
|
||||
#define MOVE_RISING_VOLTAGE 732
|
||||
#define MOVE_TERRAIN_PULSE 733
|
||||
#define MOVE_SKITTER_SMACK 734
|
||||
#define MOVE_BURNING_JEALOUSY 735
|
||||
#define MOVE_LASH_OUT 736
|
||||
#define MOVE_POLTERGEIST 737
|
||||
#define MOVE_CORROSIVE_GAS 738
|
||||
#define MOVE_COACHING 739
|
||||
#define MOVE_FLIP_TURN 740
|
||||
#define MOVE_TRIPLE_AXEL 741
|
||||
#define MOVE_DUAL_WINGBEAT 742
|
||||
#define MOVE_SCORCHING_SANDS 743
|
||||
#define MOVE_JUNGLE_HEALING 744
|
||||
#define MOVE_WICKED_BLOW 745
|
||||
#define MOVE_SURGING_STRIKES 746
|
||||
|
||||
#define MOVES_COUNT_GEN8 (MOVES_COUNT_GEN7 + 35)
|
||||
#define MOVES_COUNT_GEN8 747
|
||||
|
||||
#define MOVES_COUNT MOVES_COUNT_GEN8
|
||||
#define MOVES_COUNT MOVES_COUNT_GEN8
|
||||
|
||||
#endif // GUARD_CONSTANTS_MOVES_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);
|
||||
|
@ -4,6 +4,7 @@
|
||||
u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
|
||||
u8 ScriptGiveEgg(u16);
|
||||
void CreateScriptedWildMon(u16, u8, u16);
|
||||
void CreateScriptedDoubleWildMon(u16, u8, u16, u16, u8, u16);
|
||||
void ScriptSetMonMoveSlot(u8, u16, u8);
|
||||
void ReducePlayerPartyToSelectedMons(void);
|
||||
void HealPlayerParty(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;
|
||||
|
@ -65,6 +65,20 @@ static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] =
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
//// GEN 4
|
||||
// power trick
|
||||
const struct SpriteTemplate gPowerTrickSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_POWER_TRICK,
|
||||
.paletteTag = ANIM_TAG_POWER_TRICK,
|
||||
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gAffineAnims_SpinningBone,
|
||||
.callback = SpriteCB_SpriteOnMonForDuration
|
||||
};
|
||||
|
||||
|
||||
//// GEN 5
|
||||
//wide guard
|
||||
const struct SpriteTemplate gWideGuardBlueConversionTemplate =
|
||||
|
@ -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,15 +1448,15 @@ 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:
|
||||
data->modifyArrows.minValue = 0;
|
||||
data->modifyArrows.maxValue = MOVES_COUNT_GEN7 - 1;
|
||||
data->modifyArrows.maxValue = MOVES_COUNT_GEN8 - 1;
|
||||
data->modifyArrows.maxDigits = 3;
|
||||
if (data->currentSecondaryListItemId == 4)
|
||||
{
|
||||
|
@ -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;
|
||||
@ -4819,7 +4819,7 @@ static void HandleEndTurn_FinishBattle(void)
|
||||
sub_8186444();
|
||||
BeginFastPaletteFade(3);
|
||||
FadeOutMapMusic(5);
|
||||
#if B_TRAINERS_STEAL_ITEMS
|
||||
#if B_TRAINERS_KNOCK_OFF_ITEMS
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
TryRestoreStolenItems();
|
||||
#endif
|
||||
@ -4841,7 +4841,7 @@ static void HandleEndTurn_FinishBattle(void)
|
||||
static void FreeResetData_ReturnToOvOrDoEvolutions(void)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
{
|
||||
ResetSpriteData();
|
||||
if (gLeveledUpInBattle && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT))
|
||||
{
|
||||
|
@ -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[] =
|
||||
@ -3409,7 +3433,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
|
||||
break;
|
||||
case B_BUFF_ABILITY: // ability names
|
||||
StringAppend(dst, gAbilityNames[src[srcID + 1]]);
|
||||
srcID += 2;
|
||||
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);
|
||||
|
@ -2371,7 +2371,7 @@ static void CheckSetUnburden(u8 battlerId)
|
||||
|
||||
//slight difference in thief/pickpocket requires this
|
||||
static void StealTargetItem(void)
|
||||
{
|
||||
{
|
||||
gLastUsedItem = gBattleStruct->changedItems[gBattlerAttacker] = gBattleMons[gBattlerTarget].item;
|
||||
gBattleMons[gBattlerTarget].item = 0;
|
||||
|
||||
@ -2392,7 +2392,7 @@ static void StealTargetItem(void)
|
||||
|
||||
gBattleStruct->choicedMove[gBattlerTarget] = 0;
|
||||
|
||||
#if B_TRAINERS_STEAL_ITEMS
|
||||
#if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
|
||||
gBattleStruct->itemStolen[gBattlerPartyIndexes[gBattlerTarget]] = gLastUsedItem;
|
||||
#endif
|
||||
@ -3421,7 +3421,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])
|
||||
{
|
||||
@ -3451,13 +3451,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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4375,10 +4375,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)
|
||||
@ -5025,12 +5025,12 @@ static void Cmd_moveend(void)
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
u8 battler = battlers[i];
|
||||
|
||||
//attacker is mon who made contact, battler is mon with pickpocket
|
||||
if (battler != gBattlerAttacker //cannot pickpocket yourself
|
||||
&& GetBattlerAbility(battler) == ABILITY_PICKPOCKET //'target' must have pickpocket ability
|
||||
&& GetBattlerAbility(battler) == ABILITY_PICKPOCKET //'target' must have pickpocket ability
|
||||
&& BATTLER_DAMAGED(battler) //obviously battler needs to have been damaged as well
|
||||
&& !DoesSubstituteBlockMove(gCurrentMove, gBattlerAttacker, battler) //subsitute unaffected
|
||||
&& IsBattlerAlive(battler) //battler must be alive to be pickpocketed
|
||||
&& IsBattlerAlive(battler) //battler must be alive to pickpocket
|
||||
&& gBattleMons[battler].item == ITEM_NONE //pickpocketer can't have an item already
|
||||
&& CanStealItem(battler, gBattleMons[gBattlerAttacker].item)) //cannot steal plates, mega stones, etc
|
||||
{
|
||||
@ -10313,7 +10313,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;
|
||||
@ -11058,7 +11058,7 @@ static void Cmd_tryswapitems(void) // trick
|
||||
| BATTLE_TYPE_FRONTIER
|
||||
| BATTLE_TYPE_SECRET_BASE
|
||||
| BATTLE_TYPE_x2000000
|
||||
#if B_TRAINERS_STEAL_ITEMS
|
||||
#if B_TRAINERS_KNOCK_OFF_ITEMS
|
||||
| BATTLE_TYPE_TRAINER
|
||||
#endif
|
||||
))))
|
||||
@ -11126,7 +11126,7 @@ static void Cmd_tryswapitems(void) // trick
|
||||
PREPARE_ITEM_BUFFER(gBattleTextBuff1, *newItemAtk)
|
||||
PREPARE_ITEM_BUFFER(gBattleTextBuff2, oldItemAtk)
|
||||
|
||||
#if B_TRAINERS_STEAL_ITEMS
|
||||
#if B_TRAINERS_KNOCK_OFF_ITEMS
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
|
||||
@ -11330,7 +11330,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;
|
||||
|
||||
@ -11585,7 +11585,7 @@ static void Cmd_pickup(void)
|
||||
{
|
||||
s32 i;
|
||||
u16 species, heldItem;
|
||||
u8 ability;
|
||||
u16 ability;
|
||||
u8 lvlDivBy10;
|
||||
|
||||
if (InBattlePike())
|
||||
|
@ -499,6 +499,18 @@ void BattleSetup_StartScriptedWildBattle(void)
|
||||
TryUpdateGymLeaderRematchFromWild();
|
||||
}
|
||||
|
||||
void BattleSetup_StartScriptedDoubleWildBattle(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
gMain.savedCallback = CB2_EndScriptedWildBattle;
|
||||
gBattleTypeFlags = BATTLE_TYPE_DOUBLE;
|
||||
CreateBattleStartTask(GetWildBattleTransition(), 0);
|
||||
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
|
||||
IncrementGameStat(GAME_STAT_WILD_BATTLES);
|
||||
IncrementDailyWildBattles();
|
||||
TryUpdateGymLeaderRematchFromWild();
|
||||
}
|
||||
|
||||
void BattleSetup_StartLatiBattle(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
|
@ -1318,6 +1318,7 @@ static bool32 IsGravityPreventingMove(u32 move)
|
||||
case MOVE_SKY_DROP:
|
||||
case MOVE_SPLASH:
|
||||
case MOVE_TELEKINESIS:
|
||||
case MOVE_FLOATY_FALL:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
@ -3472,8 +3473,14 @@ static bool32 ShouldChangeFormHpBased(u32 battler)
|
||||
// Ability, form >, form <=, hp divided
|
||||
static const u16 forms[][4] =
|
||||
{
|
||||
{ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE, 2},
|
||||
{ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN_MODE, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, 2},
|
||||
{ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, 2},
|
||||
{ABILITY_SCHOOLING, SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, 4},
|
||||
};
|
||||
u32 i;
|
||||
@ -3557,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;
|
||||
@ -3649,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++;
|
||||
@ -3658,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++;
|
||||
@ -3667,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++;
|
||||
@ -3677,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++;
|
||||
@ -3686,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++;
|
||||
@ -3716,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);
|
||||
}
|
||||
@ -3734,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++;
|
||||
@ -3777,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))
|
||||
{
|
||||
@ -3858,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:
|
||||
@ -6915,6 +6971,10 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b
|
||||
if (gDisableStructs[battlerDef].isFirstTurn == 2) // just switched in
|
||||
MulModifier(&modifier, UQ_4_12(2.0));
|
||||
break;
|
||||
case ABILITY_GUTS:
|
||||
if (gBattleMons[battlerAtk].status1 & STATUS1_ANY && IS_MOVE_PHYSICAL(move))
|
||||
MulModifier(&modifier, UQ_4_12(1.5));
|
||||
break;
|
||||
}
|
||||
|
||||
// target's abilities
|
||||
@ -7417,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;
|
||||
@ -7615,8 +7675,14 @@ void UndoFormChange(u32 monId, u32 side)
|
||||
{
|
||||
{SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH},
|
||||
{SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU},
|
||||
{SPECIES_DARMANITAN_ZEN, SPECIES_DARMANITAN},
|
||||
{SPECIES_MINIOR, SPECIES_MINIOR_CORE},
|
||||
{SPECIES_DARMANITAN_ZEN_MODE, SPECIES_DARMANITAN},
|
||||
{SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED},
|
||||
{SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE},
|
||||
{SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN},
|
||||
{SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO},
|
||||
{SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE},
|
||||
{SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET},
|
||||
{SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW},
|
||||
{SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI},
|
||||
};
|
||||
|
||||
@ -7831,14 +7897,14 @@ bool8 CanStealItem(u8 battlerId, u16 item)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
|
||||
return FALSE;
|
||||
|
||||
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT
|
||||
&& !(gBattleTypeFlags &
|
||||
(BATTLE_TYPE_EREADER_TRAINER
|
||||
| BATTLE_TYPE_FRONTIER
|
||||
| BATTLE_TYPE_LINK
|
||||
| BATTLE_TYPE_x2000000
|
||||
| BATTLE_TYPE_SECRET_BASE
|
||||
#if B_TRAINERS_STEAL_ITEMS
|
||||
#if B_TRAINERS_KNOCK_OFF_ITEMS
|
||||
| BATTLE_TYPE_TRAINER
|
||||
#endif
|
||||
)))
|
||||
@ -7851,11 +7917,11 @@ bool8 CanStealItem(u8 battlerId, u16 item)
|
||||
| BATTLE_TYPE_LINK
|
||||
| BATTLE_TYPE_x2000000
|
||||
| BATTLE_TYPE_SECRET_BASE))
|
||||
&& (gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]))
|
||||
&& (gWishFutureKnock.knockedOffMons[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
return CanBattlerGetOrLoseItem(battlerId, item);
|
||||
}
|
||||
|
||||
|
@ -8923,8 +8923,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL, // restores 75% HP instead of 50% HP
|
||||
.argument = 75,
|
||||
.split = SPLIT_SPECIAL,
|
||||
.argument = 75, // restores 75% HP instead of 50% HP
|
||||
},
|
||||
|
||||
[MOVE_CRAFTY_SHIELD] =
|
||||
@ -10319,15 +10319,271 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_ZIPPY_ZAP] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 80,
|
||||
.pp = 10,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.power = 50,
|
||||
.pp = 15,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_ALWAYS_CRIT,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 100,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 2,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_SPLISHY_SPLASH] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_PARALYZE_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_FLOATY_FALL] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_FLYING,
|
||||
.accuracy = 95,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_PIKA_PAPOW] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_RETURN,
|
||||
.power = 1,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 0,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_BOUNCY_BUBBLE] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 60,
|
||||
.pp = 20,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.argument = 100, // restores 100% HP instead of 50% HP
|
||||
#else
|
||||
.power = 90,
|
||||
.pp = 15,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_ABSORB,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 100,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_BUZZY_BUZZ] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 60,
|
||||
.pp = 20,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.power = 90,
|
||||
.pp = 15,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_PARALYZE_HIT,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 100,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_SIZZLY_SLIDE] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 60,
|
||||
.pp = 20,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.power = 90,
|
||||
.pp = 15,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_BURN_HIT,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_GLITZY_GLOW] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 80,
|
||||
.accuracy = 95,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.power = 90,
|
||||
.accuracy = 100,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (Light Screen + Hit)
|
||||
.type = TYPE_PSYCHIC,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_BADDY_BAD] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 80,
|
||||
.accuracy = 95,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.power = 90,
|
||||
.accuracy = 100,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (Reflect + Hit)
|
||||
.type = TYPE_DARK,
|
||||
.pp = 15,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_SAPPY_SEED] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 100,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.power = 90,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (Leech Seed + Hit)
|
||||
.type = TYPE_GRASS,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_FREEZY_FROST] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 100,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.power = 90,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (Haze + Hit)
|
||||
.type = TYPE_ICE,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_SPARKLY_SWIRL] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 120,
|
||||
.accuracy = 85,
|
||||
.pp = 5,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.power = 90,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (Heal Bell + Hit)
|
||||
.type = TYPE_FAIRY,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_VEEVEE_VOLLEY] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_RETURN,
|
||||
.power = 1,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 0,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_DOUBLE_IRON_BASH] =
|
||||
{
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (EFFECT_FLINCH_HIT + EFFECT_DOUBLE_HIT)
|
||||
.power = 60,
|
||||
.type = TYPE_STEEL,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_MINIMIZE | FLAG_IRON_FIST_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -10823,4 +11079,311 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_EXPANDING_FORCE] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 80,
|
||||
.type = TYPE_PSYCHIC,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_STEEL_ROLLER] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 130,
|
||||
.type = TYPE_STEEL,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_SCALE_SHOT] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (EFFECT_MULTI_HIT + ABILITY_WEAK_ARMOR,
|
||||
.power = 25,
|
||||
.type = TYPE_DRAGON,
|
||||
.accuracy = 90,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_METEOR_BEAM] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 120,
|
||||
.type = TYPE_ROCK,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_SHELL_SIDE_ARM] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 90,
|
||||
.type = TYPE_POISON,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_MISTY_EXPLOSION] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 100,
|
||||
.type = TYPE_FAIRY,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_GRASSY_GLIDE] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 70,
|
||||
.type = TYPE_GRASS,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_RISING_VOLTAGE] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 70,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_TERRAIN_PULSE] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 50,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_SKITTER_SMACK] =
|
||||
{
|
||||
.effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
|
||||
.power = 70,
|
||||
.type = TYPE_BUG,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_BURNING_JEALOUSY] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 70,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_LASH_OUT] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 75,
|
||||
.type = TYPE_DARK,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_POLTERGEIST] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 110,
|
||||
.type = TYPE_GHOST,
|
||||
.accuracy = 90,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_CORROSIVE_GAS] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 0,
|
||||
.type = TYPE_POISON,
|
||||
.accuracy = 100,
|
||||
.pp = 40,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
|
||||
[MOVE_COACHING] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 0,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 0,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_ALLY,
|
||||
.priority = 0,
|
||||
.flags = 0,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
|
||||
[MOVE_FLIP_TURN] =
|
||||
{
|
||||
.effect = EFFECT_HIT_ESCAPE,
|
||||
.power = 60,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_TRIPLE_AXEL] =
|
||||
{
|
||||
.effect = EFFECT_TRIPLE_KICK, //TODO: Increase damage by 20 instead of 10
|
||||
.power = 20,
|
||||
.type = TYPE_ICE,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_DUAL_WINGBEAT] =
|
||||
{
|
||||
.effect = EFFECT_DOUBLE_HIT,
|
||||
.power = 40,
|
||||
.type = TYPE_FLYING,
|
||||
.accuracy = 90,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_SCORCHING_SANDS] =
|
||||
{
|
||||
.effect = EFFECT_SCALD,
|
||||
.power = 70,
|
||||
.type = TYPE_GROUND,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
[MOVE_JUNGLE_HEALING] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.power = 0,
|
||||
.type = TYPE_GRASS,
|
||||
.accuracy = 0,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 0,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
|
||||
[MOVE_WICKED_BLOW] =
|
||||
{
|
||||
.effect = EFFECT_ALWAYS_CRIT,
|
||||
.power = 80,
|
||||
.type = TYPE_DARK,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
[MOVE_SURGING_STRIKES] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (Multi hit + Always Crit)
|
||||
.power = 25,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
};
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -2618,9 +2618,65 @@ static const u8 sPLASMA_FISTSDescription[] = _(
|
||||
"Normal moves become Electric.");
|
||||
|
||||
static const u8 sPHOTON_GEYSERDescription[] = _(
|
||||
"The foe's highest offensive\n"
|
||||
"User's highest attack stat\n"
|
||||
"determines its category.");
|
||||
|
||||
static const u8 sZIPPY_ZAPDescription[] = _(
|
||||
"Electric bursts always go\n"
|
||||
"first and land a critical hit.");
|
||||
|
||||
static const u8 sSPLISHY_SPLASHDescription[] = _(
|
||||
"A huge electrified wave that\n"
|
||||
"may paralyze the foe.");
|
||||
|
||||
static const u8 sFLOATY_FALLDescription[] = _(
|
||||
"Floats in air and dives at\n"
|
||||
"angle. May cause flinching.");
|
||||
|
||||
static const u8 sPIKA_PAPOWDescription[] = _(
|
||||
"Pikachu's love increases its\n"
|
||||
"power. It never misses.");
|
||||
|
||||
static const u8 sBOUNCY_BUBBLEDescription[] = _(
|
||||
"An attack that absorbs\n"
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
"all the damage inflicted.");
|
||||
#else
|
||||
"half the damage inflicted.");
|
||||
#endif
|
||||
|
||||
static const u8 sBUZZY_BUZZDescription[] = _(
|
||||
"Shoots a jolt of electricity\n"
|
||||
"that always paralyzes.");
|
||||
|
||||
static const u8 sSIZZLY_SLIDEDescription[] = _(
|
||||
"User cloaked in fire charges.\n"
|
||||
"Leaves the foe with a burn.");
|
||||
|
||||
static const u8 sGLITZY_GLOWDescription[] = _(
|
||||
"Telekinetic force that sets\n"
|
||||
"wall, lowering Sp. Atk damage.");
|
||||
|
||||
static const u8 sBADDY_BADDescription[] = _(
|
||||
"Acting badly, attacks. Sets\n"
|
||||
"wall, lowering Attack damage.");
|
||||
|
||||
static const u8 sSAPPY_SEEDDescription[] = _(
|
||||
"Giant stalk scatters seeds\n"
|
||||
"that drain HP every turn.");
|
||||
|
||||
static const u8 sFREEZY_FROSTDescription[] = _(
|
||||
"Crystal from cold haze hits.\n"
|
||||
"Eliminates all stat changes.");
|
||||
|
||||
static const u8 sSPARKLY_SWIRLDescription[] = _(
|
||||
"Wrap foe with whirlwind of\n"
|
||||
"scent. Heals party's status.");
|
||||
|
||||
static const u8 sVEEVEE_VOLLEYDescription[] = _(
|
||||
"Eevee's love increases its\n"
|
||||
"power. It never misses.");
|
||||
|
||||
static const u8 sDOUBLE_IRON_BASHDescription[] = _(
|
||||
"The user spins and hits with\n"
|
||||
"its arms. May cause flinch.");
|
||||
@ -2766,10 +2822,97 @@ static const u8 sSTEEL_BEAMDescription[] = _(
|
||||
"Fires a beam of steel from\n"
|
||||
"its body. It hurts the user.");
|
||||
|
||||
static const u8 sEXPANDING_FORCEDescription[] = _(
|
||||
"Power goes up and damages\n"
|
||||
"all foes on Psychic Terrain.");
|
||||
|
||||
static const u8 sSTEEL_ROLLERDescription[] = _(
|
||||
"Destroys terrain. Fails if\n"
|
||||
"ground isn't terrain.");
|
||||
|
||||
static const u8 sSCALE_SHOTDescription[] = _(
|
||||
"Shoots scales 2 to 5 times.\n"
|
||||
"Ups Speed, lowers defense.");
|
||||
|
||||
static const u8 sMETEOR_BEAMDescription[] = _(
|
||||
"A 2-turn move that raises\n"
|
||||
"Sp. Attack before attacking.");
|
||||
|
||||
static const u8 sSHELL_SIDE_ARMDescription[] = _(
|
||||
"Uses higher of physical and\n"
|
||||
"special damage. May poison.");
|
||||
|
||||
static const u8 sMISTY_EXPLOSIONDescription[] = _(
|
||||
"Hit everything and faint.\n"
|
||||
"Powers up on Misty Terrain.");
|
||||
|
||||
static const u8 sGRASSY_GLIDEDescription[] = _(
|
||||
"Gliding on ground, hits. Goes\n"
|
||||
"first on Grassy Terrain.");
|
||||
|
||||
static const u8 sRISING_VOLTAGEDescription[] = _(
|
||||
"This move's power doubles\n"
|
||||
"when on Electric Terrain.");
|
||||
|
||||
static const u8 sTERRAIN_PULSEDescription[] = _(
|
||||
"Type and power changes\n"
|
||||
"depending on the terrain.");
|
||||
|
||||
static const u8 sSKITTER_SMACKDescription[] = _(
|
||||
"User skitters behind foe to\n"
|
||||
"attack. Lowers foe's Sp. Atk.");
|
||||
|
||||
static const u8 sBURNING_JEALOUSYDescription[] = _(
|
||||
"Foes that have stats upped\n"
|
||||
"during the turn get burned.");
|
||||
|
||||
static const u8 sLASH_OUTDescription[] = _(
|
||||
"If stats lowered during this\n"
|
||||
"turn, power is doubled.");
|
||||
|
||||
static const u8 sPOLTERGEISTDescription[] = _(
|
||||
"Control foe's item to attack.\n"
|
||||
"Fails if foe has no item.");
|
||||
|
||||
static const u8 sCORROSIVE_GASDescription[] = _(
|
||||
"Highly acidic gas melts items\n"
|
||||
"held by surrounding Pokémon.");
|
||||
|
||||
static const u8 sCOACHINGDescription[] = _(
|
||||
"Properly coaches allies to\n"
|
||||
"up their Attack and Defense.");
|
||||
|
||||
static const u8 sFLIP_TURNDescription[] = _(
|
||||
"Attacks and rushes back to\n"
|
||||
"switch with a party Pokémon.");
|
||||
|
||||
static const u8 sTRIPLE_AXELDescription[] = _(
|
||||
"A 3-kick attack that gets\n"
|
||||
"more powerful with each hit.");
|
||||
|
||||
static const u8 sDUAL_WINGBEATDescription[] = _(
|
||||
"User slams the target with\n"
|
||||
"wings and hits twice in a row.");
|
||||
|
||||
static const u8 sSCORCHING_SANDSDescription[] = _(
|
||||
"Throws scorching sand at\n"
|
||||
"the target. May leave a burn.");
|
||||
|
||||
static const u8 sJUNGLE_HEALINGDescription[] = _(
|
||||
"Heals HP and status of\n"
|
||||
"itself and allies in battle.");
|
||||
|
||||
static const u8 sWICKED_BLOWDescription[] = _(
|
||||
"Mastering the Dark style,\n"
|
||||
"strikes with a critical hit.");
|
||||
|
||||
static const u8 sSURGING_STRIKESDescription[] = _(
|
||||
"Mastering the Water style,\n"
|
||||
"strikes with 3 critical hits.");
|
||||
|
||||
static const u8 sNotDoneYetDescription[] = _(
|
||||
"Not done yet.");
|
||||
|
||||
|
||||
// MOVE_NONE is ignored in this table. Make sure to always subtract 1 before getting the right pointer.
|
||||
const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] =
|
||||
{
|
||||
@ -3448,7 +3591,21 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] =
|
||||
[MOVE_MIND_BLOWN - 1] = sMIND_BLOWNDescription,
|
||||
[MOVE_PLASMA_FISTS - 1] = sPLASMA_FISTSDescription,
|
||||
[MOVE_PHOTON_GEYSER - 1] = sPHOTON_GEYSERDescription,
|
||||
[MOVE_ZIPPY_ZAP - 1] = sZIPPY_ZAPDescription,
|
||||
[MOVE_SPLISHY_SPLASH - 1] = sSPLISHY_SPLASHDescription,
|
||||
[MOVE_FLOATY_FALL - 1] = sFLOATY_FALLDescription,
|
||||
[MOVE_PIKA_PAPOW - 1] = sPIKA_PAPOWDescription,
|
||||
[MOVE_BOUNCY_BUBBLE - 1] = sBOUNCY_BUBBLEDescription,
|
||||
[MOVE_BUZZY_BUZZ - 1] = sBUZZY_BUZZDescription,
|
||||
[MOVE_SIZZLY_SLIDE - 1] = sSIZZLY_SLIDEDescription,
|
||||
[MOVE_GLITZY_GLOW - 1] = sGLITZY_GLOWDescription,
|
||||
[MOVE_BADDY_BAD - 1] = sBADDY_BADDescription,
|
||||
[MOVE_SAPPY_SEED - 1] = sSAPPY_SEEDDescription,
|
||||
[MOVE_FREEZY_FROST - 1] = sFREEZY_FROSTDescription,
|
||||
[MOVE_SPARKLY_SWIRL - 1] = sSPARKLY_SWIRLDescription,
|
||||
[MOVE_VEEVEE_VOLLEY - 1] = sVEEVEE_VOLLEYDescription,
|
||||
[MOVE_DOUBLE_IRON_BASH - 1] = sDOUBLE_IRON_BASHDescription,
|
||||
|
||||
//GEN 8
|
||||
[MOVE_DYNAMAX_CANNON - 1] = sDYNAMAX_CANNONDescription,
|
||||
[MOVE_SNIPE_SHOT - 1] = sSNIPE_SHOTDescription,
|
||||
@ -3485,4 +3642,27 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] =
|
||||
[MOVE_METEOR_ASSAULT - 1] = sMETEOR_ASSAULTDescription,
|
||||
[MOVE_ETERNABEAM - 1] = sETERNABEAMDescription,
|
||||
[MOVE_STEEL_BEAM - 1] = sSTEEL_BEAMDescription,
|
||||
[MOVE_EXPANDING_FORCE - 1] = sEXPANDING_FORCEDescription,
|
||||
[MOVE_STEEL_ROLLER - 1] = sSTEEL_ROLLERDescription,
|
||||
[MOVE_SCALE_SHOT - 1] = sSCALE_SHOTDescription,
|
||||
[MOVE_METEOR_BEAM - 1] = sMETEOR_BEAMDescription,
|
||||
[MOVE_SHELL_SIDE_ARM - 1] = sSHELL_SIDE_ARMDescription,
|
||||
[MOVE_MISTY_EXPLOSION - 1] = sMISTY_EXPLOSIONDescription,
|
||||
[MOVE_GRASSY_GLIDE - 1] = sGRASSY_GLIDEDescription,
|
||||
[MOVE_RISING_VOLTAGE - 1] = sRISING_VOLTAGEDescription,
|
||||
[MOVE_TERRAIN_PULSE - 1] = sTERRAIN_PULSEDescription,
|
||||
[MOVE_SKITTER_SMACK - 1] = sSKITTER_SMACKDescription,
|
||||
[MOVE_BURNING_JEALOUSY - 1] = sBURNING_JEALOUSYDescription,
|
||||
[MOVE_LASH_OUT - 1] = sLASH_OUTDescription,
|
||||
[MOVE_POLTERGEIST - 1] = sPOLTERGEISTDescription,
|
||||
[MOVE_CORROSIVE_GAS - 1] = sCORROSIVE_GASDescription,
|
||||
[MOVE_COACHING - 1] = sCOACHINGDescription,
|
||||
[MOVE_FLIP_TURN - 1] = sFLIP_TURNDescription,
|
||||
[MOVE_TRIPLE_AXEL - 1] = sTRIPLE_AXELDescription,
|
||||
[MOVE_DUAL_WINGBEAT - 1] = sDUAL_WINGBEATDescription,
|
||||
[MOVE_SCORCHING_SANDS - 1] = sSCORCHING_SANDSDescription,
|
||||
[MOVE_JUNGLE_HEALING - 1] = sJUNGLE_HEALINGDescription,
|
||||
[MOVE_WICKED_BLOW - 1] = sWICKED_BLOWDescription,
|
||||
[MOVE_SURGING_STRIKES - 1] = sSURGING_STRIKESDescription,
|
||||
|
||||
};
|
||||
|
@ -676,7 +676,20 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] =
|
||||
[MOVE_MIND_BLOWN] = _("Mind Blown"),
|
||||
[MOVE_PLASMA_FISTS] = _("Plasma Fists"),
|
||||
[MOVE_PHOTON_GEYSER] = _("PhotonGeyser"),
|
||||
[MOVE_DOUBLE_IRON_BASH] = _("D. Iron Bash"),
|
||||
[MOVE_ZIPPY_ZAP] = _("Zippy Zap"),
|
||||
[MOVE_SPLISHY_SPLASH] = _("SplishSplash"),
|
||||
[MOVE_FLOATY_FALL] = _("Floaty Fall"),
|
||||
[MOVE_PIKA_PAPOW] = _("Pika Papow"),
|
||||
[MOVE_BOUNCY_BUBBLE] = _("BouncyBubble"),
|
||||
[MOVE_BUZZY_BUZZ] = _("Buzzy Buzz"),
|
||||
[MOVE_SIZZLY_SLIDE] = _("Sizzly Slide"),
|
||||
[MOVE_GLITZY_GLOW] = _("Glitzy Glow"),
|
||||
[MOVE_BADDY_BAD] = _("Baddy Bad"),
|
||||
[MOVE_SAPPY_SEED] = _("Sappy Seed"),
|
||||
[MOVE_FREEZY_FROST] = _("Freezy Frost"),
|
||||
[MOVE_SPARKLY_SWIRL] = _("SparklySwirl"),
|
||||
[MOVE_VEEVEE_VOLLEY] = _("VeeveeVolley"),
|
||||
[MOVE_DOUBLE_IRON_BASH] = _("DublIronBash"),
|
||||
//GEN 8
|
||||
[MOVE_DYNAMAX_CANNON] = _("Dyna Cannon"),
|
||||
[MOVE_SNIPE_SHOT] = _("Snipe Shot"),
|
||||
@ -713,4 +726,26 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] =
|
||||
[MOVE_METEOR_ASSAULT] = _("Meteor Ass."),
|
||||
[MOVE_ETERNABEAM] = _("Eternabeam"),
|
||||
[MOVE_STEEL_BEAM] = _("Steel Beam"),
|
||||
[MOVE_EXPANDING_FORCE] = _("Expand Force"),
|
||||
[MOVE_STEEL_ROLLER] = _("Steel Roller"),
|
||||
[MOVE_SCALE_SHOT] = _("Scale Shot"),
|
||||
[MOVE_METEOR_BEAM] = _("Meteor Beam"),
|
||||
[MOVE_SHELL_SIDE_ARM] = _("ShellSideArm"),
|
||||
[MOVE_MISTY_EXPLOSION] = _("Misty Explos"),
|
||||
[MOVE_GRASSY_GLIDE] = _("Grassy Glide"),
|
||||
[MOVE_RISING_VOLTAGE] = _("Rising Volts"),
|
||||
[MOVE_TERRAIN_PULSE] = _("TerrainPulse"),
|
||||
[MOVE_SKITTER_SMACK] = _("SkitterSmack"),
|
||||
[MOVE_BURNING_JEALOUSY] = _("BurnJealousy"),
|
||||
[MOVE_LASH_OUT] = _("Lash Out"),
|
||||
[MOVE_POLTERGEIST] = _("Poltergeist"),
|
||||
[MOVE_CORROSIVE_GAS] = _("CorrosiveGas"),
|
||||
[MOVE_COACHING] = _("Coaching"),
|
||||
[MOVE_FLIP_TURN] = _("Flip Turn"),
|
||||
[MOVE_TRIPLE_AXEL] = _("Triple Axel"),
|
||||
[MOVE_DUAL_WINGBEAT] = _("DualWingbeat"),
|
||||
[MOVE_SCORCHING_SANDS] = _("Scorch Sands"),
|
||||
[MOVE_JUNGLE_HEALING] = _("Jungle Heal"),
|
||||
[MOVE_WICKED_BLOW] = _("Wicked Blow"),
|
||||
[MOVE_SURGING_STRIKES] = _("SurgeStrikes"),
|
||||
};
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
29
src/scrcmd.c
29
src/scrcmd.c
@ -62,6 +62,7 @@ static EWRAM_DATA u16 sMovingNpcMapId = 0;
|
||||
static EWRAM_DATA u16 sFieldEffectScriptId = 0;
|
||||
|
||||
static u8 gBrailleWindowId;
|
||||
static bool8 gIsScriptedWildDouble;
|
||||
|
||||
extern const SpecialFunc gSpecials[];
|
||||
extern const u8 *gStdScripts[];
|
||||
@ -1870,15 +1871,37 @@ bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx)
|
||||
u16 species = ScriptReadHalfword(ctx);
|
||||
u8 level = ScriptReadByte(ctx);
|
||||
u16 item = ScriptReadHalfword(ctx);
|
||||
u16 species2 = ScriptReadHalfword(ctx);
|
||||
u8 level2 = ScriptReadByte(ctx);
|
||||
u16 item2 = ScriptReadHalfword(ctx);
|
||||
|
||||
if(species2 == SPECIES_NONE)
|
||||
{
|
||||
CreateScriptedWildMon(species, level, item);
|
||||
gIsScriptedWildDouble = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
CreateScriptedDoubleWildMon(species, level, item, species2, level2, item2);
|
||||
gIsScriptedWildDouble = TRUE;
|
||||
}
|
||||
|
||||
CreateScriptedWildMon(species, level, item);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx)
|
||||
{
|
||||
BattleSetup_StartScriptedWildBattle();
|
||||
ScriptContext1_Stop();
|
||||
if(gIsScriptedWildDouble == FALSE)
|
||||
{
|
||||
BattleSetup_StartScriptedWildBattle();
|
||||
ScriptContext1_Stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
BattleSetup_StartScriptedDoubleWildBattle();
|
||||
ScriptContext1_Stop();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -147,6 +147,29 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item)
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
|
||||
}
|
||||
}
|
||||
void CreateScriptedDoubleWildMon(u16 species1, u8 level1, u16 item1, u16 species2, u8 level2, u16 item2)
|
||||
{
|
||||
u8 heldItem1[2];
|
||||
u8 heldItem2[2];
|
||||
|
||||
ZeroEnemyPartyMons();
|
||||
|
||||
CreateMon(&gEnemyParty[0], species1, level1, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
if (item1)
|
||||
{
|
||||
heldItem1[0] = item1;
|
||||
heldItem1[1] = item1 >> 8;
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem1);
|
||||
}
|
||||
|
||||
CreateMon(&gEnemyParty[3], species2, level2, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
if (item2)
|
||||
{
|
||||
heldItem2[0] = item2;
|
||||
heldItem2[1] = item2 >> 8;
|
||||
SetMonData(&gEnemyParty[3], MON_DATA_HELD_ITEM, heldItem2);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
|
||||
{
|
||||
|
@ -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