mirror of
https://github.com/rh-hideout/pokeemerald-expansion.git
synced 2026-03-21 18:04:50 -05:00
Merge pull request #37 from HashtagMarky/biv-expansion-ow
enum Species && Documentation
This commit is contained in:
commit
974892a213
|
|
@ -12353,8 +12353,8 @@ BitePlayer:
|
|||
return
|
||||
BiteOpponent:
|
||||
playsewithpan SE_M_BITE, SOUND_PAN_TARGET
|
||||
create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=33, y=-48, animation=0, x_velocity=0/256, y_velocity=819/256, half_duration=10
|
||||
create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=33, y=16, animation=4, x_velocity=0/256, y_velocity=-819/256, half_duration=10
|
||||
create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=-33, y=-48, animation=0, x_velocity=0/256, y_velocity=819/256, half_duration=10
|
||||
create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=-33, y=16, animation=4, x_velocity=0/256, y_velocity=-819/256, half_duration=10
|
||||
return
|
||||
|
||||
gBattleAnimMove_NoRetreat::
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
#include "constants/game_stat.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/generational_changes.h"
|
||||
#include "constants/config_changes.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "asm/macros/battle_script.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ As level and species are potentially taken from the Wild Encounter Header, there
|
|||
|
||||
No matter how much of a Manual OWE is defined, it is considered a high priority OWE, and treated as a regular object event in all ways other than ones outlined above. They will always spawn, regardless of level or abilties of player Pokémon. However, they cannot be special spawns.
|
||||
|
||||
> Flags are set when removed.
|
||||
> When a manual OWE is removed, for whatever reason, it's flag is also set. Because of this, we recommend giving them temporary flags so they can be reset on leaving the map.
|
||||
|
||||
### Special Spawns
|
||||
Special spawns can be one of three types, in decreasing priority: A Roamer, Feebas, or Mass Outbreak Encounter. Generated OWEs can have any of these, however, Manual OWEs can only have the Feebas Special Spawn. These work exactly as they would normally;
|
||||
|
|
@ -42,7 +42,7 @@ There are three configs that can be used to restrict the despawning of Generated
|
|||
None of these three configs can prevent the forceful despawning of OWEs to free up limited resources, as is explained in the next section.
|
||||
|
||||
## High Priority and Low Priority OWEs
|
||||
Low Priority OWEs may not be spawned or even be destroyed in certain situations. There are palettes and object tiles checks to prevent these from spawning if it would fail, as well as similar checks for number of event objects, palettes and object tiles. These checks will despawn the oldest of Low Priority OWEs when other objects event are attempting to be spawned and Low Priority OWEs are using these resources. Low Priority OWEs may also be destroyed by NPC object events colliding with them due to their movements or the OWE being in the way of a trainer interaction. High priority OWEs are treated as regular objects and will not be destroyed in the ways outlined above, but may cause the destruction of Generated OWEs and will not face spawning restrictions.
|
||||
Low Priority OWEs may not be spawned or even be destroyed in certain situations. There are checks to prevent these from spawning if it would fail, including for the number of event objects, palettes and object tiles. There are also similar checks, when spawning object events other than Low Priotity OWEs. These checks will despawn the oldest of Low Priority OWEs when other objects event are attempting to be spawned and Low Priority OWEs are using these resources. Low Priority OWEs may also be destroyed by NPC object events colliding with them due to their movements or the OWE being in the way of a trainer interaction. High priority OWEs are treated as regular objects and will not be destroyed in the ways outlined above, but may cause the destruction of Generated OWEs and will not face spawning restrictions.
|
||||
These despawn conditions will overwrite the restrictive despawns mentioned above.
|
||||
|
||||
## Encountering an OWE
|
||||
|
|
@ -50,7 +50,7 @@ Any collision between the player and the OWE will start an encounter. An encount
|
|||
|
||||
If the `WE_OWE_APPROACH_FOR_BATTLE` config is `TRUE`, the OWE will take steps to be right next to the player before the battle begins. Otherwise, the objects will be frozen and the battle will start immediately.
|
||||
|
||||
A player on land is able to interact with an OWE in the water.
|
||||
A player on land is able to interact with an OWE in the water, only by pressing the A button.
|
||||
|
||||
## Repel and Lure Behaviours
|
||||
Repels will prevent the spawning of generated OWEs that are a lower level than the player's lead Pokemon. Lower level generated OWEs that have already been spawned will be immediately despawned when a repel is used. Existing generated OWEs can also be despawned if the player switches a higher level Pokemon to the front of the party if a repel is already active.
|
||||
|
|
|
|||
19
graphics/items/icon_palettes/mystery_tm_hm.pal
Normal file
19
graphics/items/icon_palettes/mystery_tm_hm.pal
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
180 180 180
|
||||
49 49 49
|
||||
74 74 98
|
||||
200 243 230
|
||||
176 227 212
|
||||
156 210 194
|
||||
144 200 184
|
||||
136 189 173
|
||||
122 177 161
|
||||
104 160 144
|
||||
123 123 148
|
||||
123 123 123
|
||||
98 98 123
|
||||
255 255 255
|
||||
239 251 248
|
||||
82 82 82
|
||||
|
|
@ -8,7 +8,7 @@ struct ApprenticeTrainer
|
|||
u8 name[NUM_LANGUAGES - 1][PLAYER_NAME_LENGTH + 1]; // For all languages except the unused one.
|
||||
u16 otId;
|
||||
u8 facilityClass;
|
||||
u16 species[APPRENTICE_SPECIES_COUNT];
|
||||
enum Species species[APPRENTICE_SPECIES_COUNT];
|
||||
u8 id;
|
||||
u16 speechLost[EASY_CHAT_BATTLE_WORDS_COUNT];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
#include "battle_dynamax.h"
|
||||
#include "battle_terastal.h"
|
||||
#include "battle_gimmick.h"
|
||||
#include "generational_changes.h"
|
||||
#include "config_changes.h"
|
||||
#include "item.h"
|
||||
#include "move.h"
|
||||
#include "random.h" // for rng_value_t
|
||||
|
|
@ -176,7 +176,7 @@ struct AI_SavedBattleMon
|
|||
|
||||
struct AiPartyMon
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
enum Item item;
|
||||
enum HoldEffect heldEffect;
|
||||
enum Ability ability;
|
||||
|
|
@ -303,16 +303,16 @@ struct BattleResults
|
|||
u8 playerMonWasDamaged:1; // 0x5
|
||||
u8 caughtMonBall:4; // 0x5
|
||||
u8 shinyWildMon:1; // 0x5
|
||||
u16 playerMon1Species; // 0x6
|
||||
enum Species playerMon1Species; // 0x6
|
||||
u8 playerMon1Name[POKEMON_NAME_LENGTH + 1]; // 0x8
|
||||
u8 battleTurnCounter; // 0x13
|
||||
u8 playerMon2Name[POKEMON_NAME_LENGTH + 1]; // 0x14
|
||||
u8 pokeblockThrows; // 0x1F
|
||||
u16 lastOpponentSpecies; // 0x20
|
||||
enum Species lastOpponentSpecies; // 0x20
|
||||
u16 lastUsedMovePlayer; // 0x22
|
||||
u16 lastUsedMoveOpponent; // 0x24
|
||||
u16 playerMon2Species; // 0x26
|
||||
u16 caughtMonSpecies; // 0x28
|
||||
enum Species playerMon2Species; // 0x26
|
||||
enum Species caughtMonSpecies; // 0x28
|
||||
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A
|
||||
u8 filler35; // 0x35
|
||||
u8 catchAttempts[POKEBALL_COUNT]; // 0x36
|
||||
|
|
@ -654,7 +654,7 @@ struct BattleStruct
|
|||
u8 ballSpriteIds[2]; // item gfx, window gfx
|
||||
u8 moveInfoSpriteId; // move info, window gfx
|
||||
// When using a move which hits multiple opponents which is then bounced by a target, we need to make sure, the move hits both opponents, the one with bounce, and the one without.
|
||||
u16 beatUpSpecies[PARTY_SIZE]; // Species for Gen5+ Beat Up, otherwise party indexes
|
||||
enum Species beatUpSpecies[PARTY_SIZE]; // Species for Gen5+ Beat Up, otherwise party indexes
|
||||
u8 attackerBeforeBounce:2;
|
||||
u8 beatUpSlot:3;
|
||||
u8 pledgeMove:1;
|
||||
|
|
@ -678,7 +678,7 @@ struct BattleStruct
|
|||
u16 additionalEffectsCounter:4; // A counter for the additionalEffects applied by the current move in Cmd_setadditionaleffects
|
||||
u8 pursuitStoredSwitch; // Stored id for the Pursuit target's switch
|
||||
s32 battlerExpReward;
|
||||
u16 prevTurnSpecies[MAX_BATTLERS_COUNT]; // Stores species the AI has in play at start of turn
|
||||
enum Species prevTurnSpecies[MAX_BATTLERS_COUNT]; // Stores species the AI has in play at start of turn
|
||||
s16 passiveHpUpdate[MAX_BATTLERS_COUNT]; // non-move damage and healing
|
||||
s16 moveDamage[MAX_BATTLERS_COUNT];
|
||||
u16 moveResultFlags[MAX_BATTLERS_COUNT];
|
||||
|
|
@ -844,7 +844,7 @@ struct BattleSpriteInfo
|
|||
u16 behindSubstitute:1; // 0x4
|
||||
u16 flag_x8:1; // 0x8
|
||||
u16 hpNumbersNoBars:1; // 0x10
|
||||
u16 transformSpecies;
|
||||
enum Species transformSpecies;
|
||||
};
|
||||
|
||||
struct BattleAnimationInfo
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ void SetBattlerData(enum BattlerId battlerId);
|
|||
void SetBattlerAiData(enum BattlerId battler, struct AiLogicData *aiData);
|
||||
void RestoreBattlerData(enum BattlerId battlerId);
|
||||
enum Move GetAIChosenMove(enum BattlerId battlerId);
|
||||
u32 GetTotalBaseStat(u32 species);
|
||||
u32 GetTotalBaseStat(enum Species species);
|
||||
bool32 IsTruantMonVulnerable(enum BattlerId battlerAI, enum BattlerId opposingBattler);
|
||||
bool32 AI_BattlerAtMaxHp(enum BattlerId battler);
|
||||
u32 GetHealthPercentage(enum BattlerId battler);
|
||||
|
|
@ -322,7 +322,6 @@ bool32 IsBattlerPredictedToSwitch(enum BattlerId battler);
|
|||
enum Move GetIncomingMove(enum BattlerId battler, enum BattlerId opposingBattler, struct AiLogicData *aiData);
|
||||
enum Move GetIncomingMoveSpeedCheck(enum BattlerId battler, enum BattlerId opposingBattler, struct AiLogicData *aiData);
|
||||
bool32 AI_OpponentCanFaintAiWithMod(enum BattlerId battler, u32 healAmount);
|
||||
void SetBattlerFieldStatusForSwitchin(enum BattlerId battler);
|
||||
bool32 ShouldInstructPartner(enum BattlerId partner, enum Move move);
|
||||
bool32 CanMoveBeBouncedBack(enum BattlerId battler, enum Move move);
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT];
|
|||
extern u8 gAnimMoveTurn;
|
||||
extern enum BattlerId gBattleAnimAttacker;
|
||||
extern enum BattlerId gBattleAnimTarget;
|
||||
extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
|
||||
extern enum Species gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
|
||||
extern u8 gAnimCustomPanning;
|
||||
extern u16 gAnimMoveIndex;
|
||||
|
||||
|
|
@ -168,7 +168,7 @@ u32 GetBattleMonSpritePalettesMask(u8 playerLeft, u8 playerRight, u8 opponentLef
|
|||
u8 GetSpritePalIdxByBattler(enum BattlerId battler);
|
||||
s16 CloneBattlerSpriteWithBlend(enum AnimBattler animBattler);
|
||||
void DestroySpriteWithActiveSheet(struct Sprite *sprite);
|
||||
u8 CreateInvisibleSpriteCopy(int battler, u8 spriteId, int species);
|
||||
u8 CreateInvisibleSpriteCopy(enum BattlerId battler, u8 spriteId, enum Species species);
|
||||
void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData *data, const void *src, bool32 largeScreen);
|
||||
void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset);
|
||||
void UpdateAnimBg3ScreenSize(bool8 largeScreenSize);
|
||||
|
|
@ -191,7 +191,7 @@ void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union Aff
|
|||
bool8 RunAffineAnimFromTaskData(struct Task *task);
|
||||
void AnimThrowProjectile(struct Sprite *sprite);
|
||||
void GetBgDataForTransform(struct BattleAnimBgData *out, enum BattlerId battler);
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool8 isShiny, enum BattlerId battler);
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(enum Species species, bool32 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool32 isShiny, enum BattlerId battler);
|
||||
void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite);
|
||||
void Trade_MoveSelectedMonToTarget(struct Sprite *sprite);
|
||||
void DestroyAnimVisualTaskAndDisableBlend(u8 taskId);
|
||||
|
|
@ -422,7 +422,7 @@ u8 SmokescreenImpact(s16 x, s16 y, bool8 persist);
|
|||
|
||||
u32 UnpackSelectedBattlePalettes(s16 selector);
|
||||
|
||||
u8 GetBattlerSpriteFinal_Y(enum BattlerId battler, u16 species, bool8 a3);
|
||||
u8 GetBattlerSpriteFinal_Y(enum BattlerId battler, enum Species species, bool32 a3);
|
||||
|
||||
extern const struct OamData gOamData_AffineOff_ObjNormal_8x16;
|
||||
extern const struct OamData gOamData_AffineNormal_ObjBlend_16x16;
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ struct ChooseMoveStruct
|
|||
enum Move moves[MAX_MON_MOVES];
|
||||
u8 currentPp[MAX_MON_MOVES];
|
||||
u8 maxPp[MAX_MON_MOVES];
|
||||
u16 species;
|
||||
enum Species species;
|
||||
enum Type monTypes[3];
|
||||
struct ZMoveData zmove;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 ta
|
|||
void InitAndLaunchSpecialAnimation(enum BattlerId activeBattlerId, enum BattlerId attacker, enum BattlerId target, u8 tableId);
|
||||
bool8 IsBattleSEPlaying(enum BattlerId battler);
|
||||
void BattleLoadMonSpriteGfx(struct Pokemon *mon, enum BattlerId battler);
|
||||
void DecompressGhostFrontPic(u32 battler);
|
||||
void BattleGfxSfxDummy2(u16 species);
|
||||
void DecompressGhostFrontPic(enum BattlerId battler);
|
||||
void BattleGfxSfxDummy2(enum Species species);
|
||||
void DecompressTrainerFrontPic(u16 frontPicId, enum BattlerId battler);
|
||||
void DecompressTrainerBackPic(enum TrainerPicID backPicId, enum BattlerId battler);
|
||||
void FreeTrainerFrontPicPalette(u16 frontPicId);
|
||||
|
|
@ -36,7 +36,7 @@ void SetBattlerSpriteAffineMode(u8 affineMode);
|
|||
void CreateEnemyShadowSprite(enum BattlerId battler);
|
||||
void LoadAndCreateEnemyShadowSprites(void);
|
||||
void SpriteCB_SetInvisible(struct Sprite *sprite);
|
||||
void SetBattlerShadowSpriteCallback(enum BattlerId battler, u16 species);
|
||||
void SetBattlerShadowSpriteCallback(enum BattlerId battler, enum Species species);
|
||||
void HideBattlerShadowSprite(enum BattlerId battler);
|
||||
void FillAroundBattleWindows(void);
|
||||
void ClearTemporarySpeciesSpriteData(enum BattlerId battler, bool32 dontClearTransform, bool32 dontClearSubstitute);
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
// For displaying a multi battle partner's Pokémon in the party menu
|
||||
struct MultiPartnerMenuPokemon
|
||||
{
|
||||
/*0x00*/ u16 species;
|
||||
/*0x02*/ u16 heldItem;
|
||||
/*0x00*/ enum Species species;
|
||||
/*0x02*/ enum Item heldItem;
|
||||
/*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
|
||||
/*0x0F*/ u8 level;
|
||||
/*0x10*/ u16 hp;
|
||||
|
|
@ -109,7 +109,7 @@ void SetTypeBeforeUsingMove(enum Move move, enum BattlerId battler);
|
|||
bool32 IsWildMonSmart(void);
|
||||
u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags);
|
||||
void ModifyPersonalityForNature(u32 *personality, u32 newNature);
|
||||
u32 GeneratePersonalityForGender(u32 gender, u32 species);
|
||||
u32 GeneratePersonalityForGender(u32 gender, enum Species species);
|
||||
void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMon *partyEntry);
|
||||
bool32 CanPlayerForfeitNormalTrainerBattle(void);
|
||||
bool32 DidPlayerForfeitNormalTrainerBattle(void);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ void CallBattlePyramidFunction(void);
|
|||
u16 LocalIdToPyramidTrainerId(u8 localId);
|
||||
bool8 GetBattlePyramidTrainerFlag(u8 eventId);
|
||||
void MarkApproachingPyramidTrainersAsBattled(void);
|
||||
void GenerateBattlePyramidWildMon(u32 forceSpecies);
|
||||
void GenerateBattlePyramidWildMon(enum Species forceSpecies);
|
||||
u8 GetPyramidRunMultiplier(void);
|
||||
u8 CurrentBattlePyramidLocation(void);
|
||||
bool8 InBattlePyramid_(void);
|
||||
|
|
|
|||
|
|
@ -121,6 +121,8 @@ struct BattleContext
|
|||
enum HoldEffect holdEffectAtk;
|
||||
enum HoldEffect holdEffectDef;
|
||||
|
||||
u8 aiTurnOrder[MAX_BATTLERS_COUNT];
|
||||
|
||||
// Flags
|
||||
u32 isCrit:1;
|
||||
u32 randomFactor:1;
|
||||
|
|
@ -258,7 +260,7 @@ s32 CalculateMoveDamageVars(struct BattleContext *ctx);
|
|||
s32 DoFixedDamageMoveCalc(struct BattleContext *ctx);
|
||||
s32 ApplyModifiersAfterDmgRoll(struct BattleContext *ctx, s32 dmg);
|
||||
uq4_12_t CalcTypeEffectivenessMultiplier(struct BattleContext *ctx);
|
||||
uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(enum Move move, u16 speciesDef, enum Ability abilityDef);
|
||||
uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(enum Move move, enum Species speciesDef, enum Ability abilityDef);
|
||||
uq4_12_t GetTypeModifier(enum Type atkType, enum Type defType);
|
||||
uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, enum Type moveType);
|
||||
void UpdateMoveResultFlags(uq4_12_t modifier, u16 *resultFlags);
|
||||
|
|
@ -271,14 +273,14 @@ void ActivateUltraBurst(enum BattlerId battler);
|
|||
bool32 IsBattlerMegaEvolved(enum BattlerId battler);
|
||||
bool32 IsBattlerPrimalReverted(enum BattlerId battler);
|
||||
bool32 IsBattlerUltraBursted(enum BattlerId battler);
|
||||
u32 GetBattleFormChangeTargetSpecies(enum BattlerId battler, enum FormChanges method, enum Ability ability);
|
||||
enum Species GetBattleFormChangeTargetSpecies(enum BattlerId battler, enum FormChanges method, enum Ability ability);
|
||||
bool32 TryRevertPartyMonFormChange(u32 partyIndex);
|
||||
bool32 TryBattleFormChange(enum BattlerId battler, enum FormChanges method, enum Ability ability);
|
||||
bool32 DoBattlersShareType(enum BattlerId battler1, enum BattlerId battler2);
|
||||
bool32 CanBattlerGetOrLoseItem(enum BattlerId fromBattler, enum BattlerId battler, enum Item itemId);
|
||||
u32 GetBattlerVisualSpecies(enum BattlerId battler);
|
||||
enum Species GetBattlerVisualSpecies(enum BattlerId battler);
|
||||
bool32 TryClearIllusion(enum BattlerId battler, enum Ability ability);
|
||||
u32 GetIllusionMonSpecies(enum BattlerId battler);
|
||||
enum Species GetIllusionMonSpecies(enum BattlerId battler);
|
||||
struct Pokemon *GetIllusionMonPtr(enum BattlerId battler);
|
||||
void ClearIllusionMon(enum BattlerId battler);
|
||||
u32 GetIllusionMonPartyId(struct Pokemon *party, struct Pokemon *mon, struct Pokemon *partnerMon, enum BattlerId battler);
|
||||
|
|
@ -289,7 +291,7 @@ uq4_12_t GetBadgeBoostModifier(void);
|
|||
enum DamageCategory GetBattleMoveCategory(enum Move move);
|
||||
void SetDynamicMoveCategory(enum BattlerId battlerAtk, enum BattlerId battlerDef, enum Move move);
|
||||
bool32 CanFling(enum BattlerId battlerAtk, enum Ability abilityAtk);
|
||||
bool32 IsTelekinesisBannedSpecies(u16 species);
|
||||
bool32 IsTelekinesisBannedSpecies(enum Species species);
|
||||
bool32 IsHealBlockPreventingMove(enum BattlerId battler, enum Move move);
|
||||
bool32 IsGravityPreventingMove(enum Move move);
|
||||
bool32 IsBelchPreventingMove(enum BattlerId battler, enum Move move);
|
||||
|
|
@ -422,6 +424,7 @@ bool32 CanUseMoveConsecutively(enum BattlerId battler);
|
|||
void TryResetConsecutiveUseCounter(enum BattlerId battler);
|
||||
void SetOrClearRageVolatile(void);
|
||||
enum BattlerId GetTargetBySlot(enum BattlerId battlerAtk, enum BattlerId battlerDef);
|
||||
bool32 IsNaturalEnemy(u32 speciesAttacker, u32 speciesTarget);
|
||||
bool32 IsNaturalEnemy(enum Species speciesAttacker, enum Species speciesTarget);
|
||||
enum Stat GetDownloadStat(enum BattlerId battler);
|
||||
|
||||
#endif // GUARD_BATTLE_UTIL_H
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
struct SignatureZMove
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
enum Item item;
|
||||
enum Move move;
|
||||
enum Move zmove;
|
||||
|
|
@ -18,7 +18,7 @@ void ActivateZMove(enum BattlerId battler);
|
|||
bool32 IsViableZMove(enum BattlerId battler, enum Move move);
|
||||
bool32 TryChangeZTrigger(enum BattlerId battler, u32 moveIndex);
|
||||
enum Move GetTypeBasedZMove(enum Move move);
|
||||
enum Move GetSignatureZMove(enum Move move, u32 species, enum Item item);
|
||||
enum Move GetSignatureZMove(enum Move move, enum Species species, enum Item item);
|
||||
bool32 MoveSelectionDisplayZMove(enum Move zmove, enum BattlerId battler);
|
||||
void SetZEffect(void);
|
||||
void AssignUsableZMoves(enum BattlerId battler, enum Move *moves);
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@
|
|||
#define B_TAILWIND_TURNS GEN_LATEST // In Gen5+, Tailwind lasts 4 turns instead of 3.
|
||||
#define B_SLEEP_TURNS GEN_LATEST // In Gen5+, sleep lasts for 2-4 turns instead of 2-5 turns.
|
||||
#define B_TAUNT_TURNS GEN_LATEST // In Gen5+, Taunt lasts 3 turns if the user acts before the target, or 4 turns if the target acted before the user. In Gen3, taunt lasts 2 turns and in Gen 4, 3-5 turns.
|
||||
#define B_ENCORE_TURNS GEN_LATEST // In Gen5+, Encore lasts 3 turns if the target hasn't yet moved this turn, or 4 turns if it has. In Gen4, it lasts 3-7 turns. In Gen2-3, 2-6 turns.
|
||||
#define B_SPORT_TURNS GEN_LATEST // In Gen6+, Water/Mud Sport last 5 turns, even if the user switches out.
|
||||
#define B_MEGA_EVO_TURN_ORDER GEN_LATEST // In Gen7, a Pokémon's Speed after Mega Evolution is used to determine turn order, not its Speed before.
|
||||
#define B_RECALC_TURN_AFTER_ACTIONS GEN_LATEST // In Gen8+, switching/using a move affects the current turn's order of actions, better known as dynamic speed.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef GUARD_GENERATIONAL_CHANGES_H
|
||||
#define GUARD_GENERATIONAL_CHANGES_H
|
||||
#ifndef GUARD_CONFIG_CHANGES_H
|
||||
#define GUARD_CONFIG_CHANGES_H
|
||||
|
||||
#include "constants/generational_changes.h"
|
||||
#include "constants/config_changes.h"
|
||||
#include "config/battle.h"
|
||||
#include "config/pokerus.h"
|
||||
#include "config/ai.h"
|
||||
|
|
@ -30,4 +30,4 @@ void TestInitConfigData(void);
|
|||
void TestFreeConfigData(void);
|
||||
#endif
|
||||
|
||||
#endif // GUARD_GENERATIONAL_CHANGES_H
|
||||
#endif // GUARD_CONFIG_CHANGES_H
|
||||
|
|
@ -4,8 +4,6 @@
|
|||
|
||||
#define PARTNER_NONE 0
|
||||
#define PARTNER_STEVEN 1
|
||||
#define PARTNER_DUMMY 2
|
||||
#define PARTNER_COUNT 3
|
||||
//Tests need PARTNER_COUNT to be at least 3 so we add a dummy partner
|
||||
#define PARTNER_COUNT 2
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_PARTNERS_H
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef GUARD_CONSTANTS_GENERATIONAL_CHANGES_H
|
||||
#define GUARD_CONSTANTS_GENERATIONAL_CHANGES_H
|
||||
#ifndef GUARD_CONSTANTS_CONFIG_CHANGES_H
|
||||
#define GUARD_CONSTANTS_CONFIG_CHANGES_H
|
||||
|
||||
/* Config definitions */
|
||||
#define BATTLE_CONFIG_DEFINITIONS(F) \
|
||||
|
|
@ -55,6 +55,7 @@
|
|||
F(B_TAILWIND_TURNS, tailwindTurns, (u32, GEN_COUNT - 1)) \
|
||||
F(B_SLEEP_TURNS, sleepTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||
F(B_TAUNT_TURNS, tauntTurns, (u32, GEN_COUNT - 1)) \
|
||||
F(B_ENCORE_TURNS, encoreTurns, (u32, GEN_COUNT - 1)) \
|
||||
F(B_SPORT_TURNS, sportTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||
F(B_MEGA_EVO_TURN_ORDER, megaEvoTurnOrder, (u32, GEN_COUNT - 1)) \
|
||||
F(B_RECALC_TURN_AFTER_ACTIONS, recalcTurnAfterActions, (u32, GEN_COUNT - 1)) \
|
||||
|
|
@ -246,4 +247,4 @@ enum ConfigTag
|
|||
CONFIG_COUNT
|
||||
};
|
||||
|
||||
#endif // GUARD_CONSTANTS_GENERATIONAL_CHANGES_H
|
||||
#endif // GUARD_CONSTANTS_CONFIG_CHANGES_H
|
||||
|
|
@ -6,6 +6,9 @@ enum DifficultyLevel
|
|||
DIFFICULTY_EASY,
|
||||
DIFFICULTY_NORMAL, //If you rename this, the word "Normal" in fprint_trainers must be replaced with the new difficulty name.
|
||||
DIFFICULTY_HARD,
|
||||
#if TESTING
|
||||
DIFFICULTY_TEST,
|
||||
#endif
|
||||
DIFFICULTY_COUNT,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -104,7 +104,6 @@ enum Language
|
|||
#define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used
|
||||
#define NUM_CONTEST_WINNERS 13
|
||||
#define UNION_ROOM_KB_ROW_COUNT 10
|
||||
#define GIFT_RIBBONS_COUNT 11
|
||||
#define SAVED_TRENDS_COUNT 5
|
||||
#define PYRAMID_BAG_ITEMS_COUNT 10
|
||||
#define ROAMER_COUNT 1 // Number of maximum concurrent active roamers
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -87,7 +87,7 @@ enum {
|
|||
|
||||
struct ContestPokemon
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 nickname[POKEMON_NAME_LENGTH + 1];
|
||||
u8 trainerName[PLAYER_NAME_LENGTH + 1];
|
||||
u8 trainerGfxId;
|
||||
|
|
@ -124,8 +124,8 @@ struct ContestTempSave
|
|||
|
||||
struct ContestMoveAnimData
|
||||
{
|
||||
u16 species;
|
||||
u16 targetSpecies;
|
||||
enum Species species;
|
||||
enum Species targetSpecies;
|
||||
bool8 hasTargetAnim:1;
|
||||
u8 isShiny:1;
|
||||
u8 targetIsShiny:1;
|
||||
|
|
@ -355,7 +355,7 @@ void SetContestants(enum ContestCategories contestType, u8 rank);
|
|||
void SetLinkAIContestants(enum ContestCategories contestType, u8 rank, bool32 isPostgame);
|
||||
u8 GetContestEntryEligibility(struct Pokemon *pkmn);
|
||||
void CalculateRound1Points(enum ContestCategories contestCategory);
|
||||
bool8 IsSpeciesNotUnown(u16 species);
|
||||
bool8 IsSpeciesNotUnown(enum Species species);
|
||||
bool8 Contest_IsMonsTurnDisabled(u8 contestant);
|
||||
void SaveLinkContestResults(void);
|
||||
void SortContestants(bool8 useRanking);
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ struct TrainerMon
|
|||
const u8 *ev;
|
||||
u32 iv;
|
||||
enum Move moves[MAX_MON_MOVES];
|
||||
u16 species;
|
||||
u16 heldItem;
|
||||
enum Species species;
|
||||
enum Item heldItem;
|
||||
enum Ability ability;
|
||||
u8 lvl;
|
||||
enum PokeBall ball:8;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define GUARD_DAYCARE_H
|
||||
|
||||
#include "constants/daycare.h"
|
||||
#include "constants/species.h"
|
||||
|
||||
struct RecordMixingDaycareMail
|
||||
{
|
||||
|
|
@ -21,10 +22,10 @@ void GetDaycareCost(void);
|
|||
u8 GetNumLevelsGainedFromDaycare(void);
|
||||
void TriggerPendingDaycareEgg(void);
|
||||
void RejectEggFromDayCare(void);
|
||||
void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation);
|
||||
void CreateEgg(struct Pokemon *mon, enum Species species, bool8 setHotSpringsLocation);
|
||||
void GiveEggFromDaycare(void);
|
||||
bool8 ShouldEggHatch(void);
|
||||
u16 GetSelectedMonNicknameAndSpecies(void);
|
||||
enum Species GetSelectedMonNicknameAndSpecies(void);
|
||||
void GetDaycareMonNicknames(void);
|
||||
u8 GetDaycareState(void);
|
||||
u8 GetDaycareCompatibilityScore(struct DayCare *daycare);
|
||||
|
|
@ -32,8 +33,8 @@ void SetDaycareCompatibilityString(void);
|
|||
bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio);
|
||||
void ShowDaycareLevelMenu(void);
|
||||
void ChooseSendDaycareMon(void);
|
||||
u8 GetEggMovesBySpecies(u16 species, u16 *eggMoves);
|
||||
bool8 SpeciesCanLearnEggMove(u16 species, enum Move move);
|
||||
u8 GetEggMovesBySpecies(enum Species species, u16 *eggMoves);
|
||||
bool8 SpeciesCanLearnEggMove(enum Species species, enum Move move);
|
||||
void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycareMon);
|
||||
u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves);
|
||||
|
||||
|
|
|
|||
|
|
@ -76,11 +76,11 @@ bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet *src
|
|||
|
||||
void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer);
|
||||
|
||||
void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, s32 species, u32 personality);
|
||||
void HandleLoadSpecialPokePicIsEgg(bool32 isFrontPic, void *dest, s32 species, u32 personality, bool32 isEgg);
|
||||
void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, enum Species species, u32 personality);
|
||||
void HandleLoadSpecialPokePicIsEgg(bool32 isFrontPic, void *dest, enum Species species, u32 personality, bool32 isEgg);
|
||||
|
||||
void LoadSpecialPokePic(void *dest, s32 species, u32 personality, bool8 isFrontPic);
|
||||
void LoadSpecialPokePicIsEgg(void *dest, s32 species, u32 personality, bool8 isFrontPic, bool32 isEgg);
|
||||
void LoadSpecialPokePic(void *dest, enum Species species, u32 personality, bool8 isFrontPic);
|
||||
void LoadSpecialPokePicIsEgg(void *dest, enum Species species, u32 personality, bool8 isFrontPic, bool32 isEgg);
|
||||
|
||||
u32 GetDecompressedDataSize(const u32 *ptr);
|
||||
bool32 IsCompressedData(const u32 *ptr);
|
||||
|
|
|
|||
|
|
@ -79,6 +79,6 @@ u32 CalculateDexNavShinyRolls(void);
|
|||
void IncrementDexNavChain(void);
|
||||
bool32 OnStep_DexNavSearch(void);
|
||||
|
||||
extern u16 gDexNavSpecies;
|
||||
extern enum Species gDexNavSpecies;
|
||||
|
||||
#endif // GUARD_DEXNAV_H
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sp
|
|||
void ObjectEventClearHeldMovement(struct ObjectEvent *objectEvent);
|
||||
void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *objectEvent);
|
||||
struct Pokemon *GetFirstLiveMon(void);
|
||||
u16 GetOverworldWeatherSpecies(u16 species);
|
||||
enum Species GetOverworldWeatherSpecies(enum Species species);
|
||||
void UpdateFollowingPokemon(void);
|
||||
void RemoveFollowingPokemon(void);
|
||||
struct ObjectEvent *GetFollowerObject(void);
|
||||
|
|
@ -272,8 +272,8 @@ const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 local
|
|||
u16 LoadSheetGraphicsInfo(const struct ObjectEventGraphicsInfo *info, u16 uuid, struct Sprite *sprite);
|
||||
u8 TrySpawnObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY);
|
||||
bool8 GetFollowerInfo(u32 *species, bool32 *shiny, bool32 *female);
|
||||
const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u32 species, bool32 shiny, bool32 female);
|
||||
u32 LoadDynamicFollowerPalette(u32 species, bool32 shiny, bool32 female);
|
||||
const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(enum Species species, bool32 shiny, bool32 female);
|
||||
u32 LoadDynamicFollowerPalette(enum Species species, bool32 shiny, bool32 female);
|
||||
u16 GetObjectEventFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup);
|
||||
void CopyObjectGraphicsInfoToSpriteTemplate(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables);
|
||||
bool8 AreElevationsCompatible(u8, u8);
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ void LoadEvoSparkleSpriteAndPal(void);
|
|||
u8 EvolutionSparkles_SpiralUpward(u16 palNum);
|
||||
u8 EvolutionSparkles_ArcDown(void);
|
||||
u8 EvolutionSparkles_CircleInward(void);
|
||||
u8 EvolutionSparkles_SprayAndFlash(u16 species);
|
||||
u8 EvolutionSparkles_SprayAndFlash_Trade(u16 species);
|
||||
u8 EvolutionSparkles_SprayAndFlash(enum Species species);
|
||||
u8 EvolutionSparkles_SprayAndFlash_Trade(enum Species species);
|
||||
u8 CycleEvolutionMonSprite(u8 preEvoSpriteId, u8 postEvoSpriteId);
|
||||
|
||||
#endif // GUARD_EVOLUTION_GRAPHICS_H
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
#ifndef GUARD_EVOLUTION_SCENE_H
|
||||
#define GUARD_EVOLUTION_SCENE_H
|
||||
|
||||
void BeginEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId);
|
||||
void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId);
|
||||
void TradeEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId);
|
||||
#include "constants/species.h"
|
||||
|
||||
void BeginEvolutionScene(struct Pokemon *mon, enum Species postEvoSpecies, bool32 canStopEvo, u8 partyId);
|
||||
void EvolutionScene(struct Pokemon *mon, enum Species postEvoSpecies, bool32 canStopEvo, u8 partyId);
|
||||
void TradeEvolutionScene(struct Pokemon *mon, enum Species postEvoSpecies, u8 preEvoSpriteId, u8 partyId);
|
||||
|
||||
extern void (*gCB2_AfterEvolution)(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ void SpriteCB_AshLaunch(struct Sprite *sprite);
|
|||
|
||||
void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b);
|
||||
void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId);
|
||||
u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority);
|
||||
u8 CreateMonSprite_PicBox(enum Species species, s16 x, s16 y, u8 subpriority);
|
||||
void StartEscapeRopeFieldEffect(void);
|
||||
void FieldEffectFreeGraphicsResources(struct Sprite *sprite);
|
||||
bool8 IsRockClimbActive(void);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef GUARD_FIELD_SPECIALS_H
|
||||
#define GUARD_FIELD_SPECIALS_H
|
||||
|
||||
#include "constants/species.h"
|
||||
|
||||
extern bool8 gBikeCyclingChallenge;
|
||||
extern u8 gBikeCollisions;
|
||||
extern u16 gScrollableMultichoice_ScrollOffset;
|
||||
|
|
@ -35,7 +37,7 @@ void SetPCBoxToSendMon(u8 boxId);
|
|||
void PreparePartyForSkyBattle(void);
|
||||
void GetObjectPosition(u16*, u16*, u32, u32);
|
||||
bool32 CheckObjectAtXY(u32, u32);
|
||||
bool32 CheckPartyHasSpecies(u32);
|
||||
bool32 CheckPartyHasSpecies(enum Species);
|
||||
bool8 CutMoveRuinValleyCheck(void);
|
||||
void CutMoveOpenDottedHoleDoor(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef GUARD_FRONTIER_UTIL_H
|
||||
#define GUARD_FRONTIER_UTIL_H
|
||||
|
||||
#include "constants/species.h"
|
||||
|
||||
void CallFrontierUtilFunc(void);
|
||||
u8 GetFrontierBrainStatus(void);
|
||||
void CopyFrontierTrainerText(u8 whichText, u16 trainerId);
|
||||
|
|
@ -18,7 +20,7 @@ void CopyFrontierBrainTrainerName(u8 *dst);
|
|||
bool8 IsFrontierBrainFemale(void);
|
||||
void SetFrontierBrainObjEventGfx_2(void);
|
||||
void CreateFrontierBrainPokemon(void);
|
||||
u16 GetFrontierBrainMonSpecies(u8 monId);
|
||||
enum Species GetFrontierBrainMonSpecies(u8 monId);
|
||||
void SetFrontierBrainObjEventGfx(u8 facility);
|
||||
u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId);
|
||||
u8 GetFrontierBrainMonNature(u8 monId);
|
||||
|
|
|
|||
|
|
@ -331,7 +331,7 @@ struct BerryCrush
|
|||
|
||||
struct ApprenticeMon
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
enum Move moves[MAX_MON_MOVES];
|
||||
enum Item item;
|
||||
};
|
||||
|
|
@ -356,8 +356,8 @@ struct Apprentice
|
|||
|
||||
struct BattleTowerPokemon
|
||||
{
|
||||
u16 species;
|
||||
u16 heldItem;
|
||||
enum Species species;
|
||||
enum Item heldItem;
|
||||
enum Move moves[MAX_MON_MOVES];
|
||||
u8 level;
|
||||
u8 ppBonuses;
|
||||
|
|
@ -399,8 +399,8 @@ struct EmeraldBattleTowerRecord
|
|||
|
||||
struct BattleTowerInterview
|
||||
{
|
||||
u16 playerSpecies;
|
||||
u16 opponentSpecies;
|
||||
enum Species playerSpecies;
|
||||
enum Species opponentSpecies;
|
||||
u8 opponentName[PLAYER_NAME_LENGTH + 1];
|
||||
u8 opponentMonNickname[VANILLA_POKEMON_NAME_LENGTH + 1];
|
||||
u8 opponentLanguage;
|
||||
|
|
@ -630,8 +630,8 @@ struct SecretBaseParty
|
|||
{
|
||||
u32 personality[PARTY_SIZE];
|
||||
enum Move moves[PARTY_SIZE * MAX_MON_MOVES];
|
||||
u16 species[PARTY_SIZE];
|
||||
u16 heldItems[PARTY_SIZE];
|
||||
enum Species species[PARTY_SIZE];
|
||||
enum Item heldItems[PARTY_SIZE];
|
||||
u8 levels[PARTY_SIZE];
|
||||
u8 EVs[PARTY_SIZE];
|
||||
};
|
||||
|
|
@ -691,7 +691,7 @@ struct Roamer
|
|||
{
|
||||
/*0x00*/ u32 ivs;
|
||||
/*0x04*/ u32 personality;
|
||||
/*0x08*/ u16 species;
|
||||
/*0x08*/ enum Species species;
|
||||
/*0x0A*/ u16 hp;
|
||||
/*0x0C*/ u8 level;
|
||||
/*0x0D*/ u8 statusA;
|
||||
|
|
@ -838,7 +838,7 @@ struct ContestWinner
|
|||
{
|
||||
u32 personality;
|
||||
u32 trainerId;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 contestCategory;
|
||||
u8 monName[VANILLA_POKEMON_NAME_LENGTH + 1];
|
||||
u8 trainerName[PLAYER_NAME_LENGTH + 1];
|
||||
|
|
@ -852,7 +852,7 @@ struct Mail
|
|||
/*0x00*/ u16 words[MAIL_WORDS_COUNT];
|
||||
/*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x1A*/ u8 trainerId[TRAINER_ID_LENGTH];
|
||||
/*0x1E*/ u16 species;
|
||||
/*0x1E*/ enum Species species;
|
||||
/*0x20*/ enum Item itemId;
|
||||
};
|
||||
|
||||
|
|
@ -998,7 +998,7 @@ struct WonderNews
|
|||
struct WonderCard
|
||||
{
|
||||
u16 flagId; // Event flag (sReceivedGiftFlags) + WONDER_CARD_FLAG_OFFSET
|
||||
u16 iconSpecies;
|
||||
enum Species iconSpecies;
|
||||
u32 idNumber;
|
||||
u8 type:2; // CARD_TYPE_*
|
||||
u8 bgType:4;
|
||||
|
|
@ -1017,7 +1017,7 @@ struct WonderCardMetadata
|
|||
u16 battlesWon;
|
||||
u16 battlesLost;
|
||||
u16 numTrades;
|
||||
u16 iconSpecies;
|
||||
enum Species iconSpecies;
|
||||
u16 stampData[2][MAX_STAMP_CARD_STAMPS]; // First element is STAMP_SPECIES, second is STAMP_ID
|
||||
};
|
||||
|
||||
|
|
@ -1144,7 +1144,7 @@ struct SaveBlock1
|
|||
/*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT];
|
||||
/*0x27CA*/ //u8 padding4[2];
|
||||
/*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT];
|
||||
/*0x2B90*/ u16 outbreakPokemonSpecies;
|
||||
/*0x2B90*/ enum Species outbreakPokemonSpecies;
|
||||
/*0x2B92*/ u8 outbreakLocationMapNum;
|
||||
/*0x2B93*/ u8 outbreakLocationMapGroup;
|
||||
/*0x2B94*/ u8 outbreakPokemonLevel;
|
||||
|
|
@ -1169,7 +1169,8 @@ struct SaveBlock1
|
|||
#if FREE_LINK_BATTLE_RECORDS == FALSE
|
||||
/*0x3150*/ struct LinkBattleRecords linkBattleRecords;
|
||||
#endif //FREE_LINK_BATTLE_RECORDS
|
||||
/*0x31A8*/ u8 giftRibbons[GIFT_RIBBONS_COUNT];
|
||||
/*0x31A8*/ u8 giftRibbons[NUM_GIFT_RIBBONS];
|
||||
u8 padding[4];
|
||||
/*0x31B3*/ struct ExternalEventData externalEventData;
|
||||
/*0x31C7*/ struct ExternalEventFlags externalEventFlags;
|
||||
/*0x31DC*/ struct Roamer roamer[ROAMER_COUNT];
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x02*/ enum Species species;
|
||||
/*0x04*/ u16 words[6];
|
||||
/*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x18*/ u8 language;
|
||||
|
|
@ -43,7 +43,7 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x02*/ enum Species species;
|
||||
/*0x04*/ u16 words[6];
|
||||
/*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x18*/ u8 language;
|
||||
|
|
@ -54,7 +54,7 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x02*/ enum Species species;
|
||||
/*0x04*/ u8 friendshipHighNybble:4;
|
||||
u8 questionAsked:4;
|
||||
/*0x05*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
|
|
@ -71,7 +71,7 @@ typedef union // size = 0x24
|
|||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 words[2];
|
||||
/*0x06*/ u16 species;
|
||||
/*0x06*/ enum Species species;
|
||||
/*0x08*/ u8 filler_08[3];
|
||||
/*0x0B*/ u8 name[12];
|
||||
/*0x17*/ u8 language;
|
||||
|
|
@ -81,13 +81,13 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x02*/ enum Species species;
|
||||
/*0x04*/ u8 pokemonName[VANILLA_POKEMON_NAME_LENGTH + 1];
|
||||
/*0x0F*/ u8 trainerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x17*/ u8 unused[3];
|
||||
/*0x1A*/ u8 random;
|
||||
/*0x1B*/ u8 random2;
|
||||
/*0x1C*/ u16 randomSpecies;
|
||||
/*0x1C*/ enum Species randomSpecies;
|
||||
/*0x1E*/ u8 language;
|
||||
/*0x1F*/ u8 pokemonNameLanguage;
|
||||
} nameRaterShow;
|
||||
|
|
@ -96,7 +96,7 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 species;
|
||||
/*0x02*/ enum Species species;
|
||||
/*0x04*/ u16 words[2];
|
||||
/*0x08*/ u8 pokemonNickname[VANILLA_POKEMON_NAME_LENGTH + 1];
|
||||
/*0x13*/ u8 contestCategory:3;
|
||||
|
|
@ -114,9 +114,9 @@ typedef union // size = 0x24
|
|||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x0A*/ u16 species;
|
||||
/*0x0A*/ enum Species species;
|
||||
/*0x0C*/ u8 opponentName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x14*/ u16 defeatedSpecies;
|
||||
/*0x14*/ enum Species defeatedSpecies;
|
||||
/*0x16*/ u16 numFights;
|
||||
/*0x18*/ u16 words[1];
|
||||
/*0x1A*/ u8 btLevel;
|
||||
|
|
@ -131,14 +131,14 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 losingSpecies;
|
||||
/*0x02*/ enum Species losingSpecies;
|
||||
/*0x04*/ u8 losingTrainerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x0C*/ u8 loserAppealFlag;
|
||||
/*0x0D*/ u8 round1Placing;
|
||||
/*0x0E*/ u8 round2Placing;
|
||||
/*0x0F*/ u8 winnerAppealFlag;
|
||||
/*0x10*/ enum Move move;
|
||||
/*0x12*/ u16 winningSpecies;
|
||||
/*0x12*/ enum Species winningSpecies;
|
||||
/*0x14*/ u8 winningTrainerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x1C*/ u8 category;
|
||||
/*0x1D*/ u8 winningTrainerLanguage;
|
||||
|
|
@ -164,11 +164,11 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 speciesOpponent;
|
||||
/*0x02*/ enum Species speciesOpponent;
|
||||
/*0x04*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x0C*/ u8 linkOpponentName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x14*/ enum Move move;
|
||||
/*0x16*/ u16 speciesPlayer;
|
||||
/*0x16*/ enum Species speciesPlayer;
|
||||
/*0x18*/ u8 battleType;
|
||||
/*0x19*/ u8 language;
|
||||
/*0x1A*/ u8 linkOpponentLanguage;
|
||||
|
|
@ -211,7 +211,7 @@ typedef union // size = 0x24
|
|||
/*0x03*/ u8 language2;
|
||||
/*0x04*/ u8 nickname[VANILLA_POKEMON_NAME_LENGTH + 1];
|
||||
/*0x0F*/ u8 ball;
|
||||
/*0x10*/ u16 species;
|
||||
/*0x10*/ enum Species species;
|
||||
/*0x12*/ u8 nBallsUsed;
|
||||
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x1B*/ //u8 padding;
|
||||
|
|
@ -237,8 +237,8 @@ typedef union // size = 0x24
|
|||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 language;
|
||||
/*0x03*/ u8 filler_03[9];
|
||||
/*0x0C*/ u16 species;
|
||||
/*0x0E*/ u16 species2;
|
||||
/*0x0C*/ enum Species species;
|
||||
/*0x0E*/ enum Species species2;
|
||||
/*0x10*/ u8 nBallsUsed;
|
||||
/*0x11*/ u8 outcome;
|
||||
/*0x12*/ mapsec_u8_t location;
|
||||
|
|
@ -252,7 +252,7 @@ typedef union // size = 0x24
|
|||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u8 nBites;
|
||||
/*0x03*/ u8 nFails;
|
||||
/*0x04*/ u16 species;
|
||||
/*0x04*/ enum Species species;
|
||||
/*0x06*/ u8 language;
|
||||
/*0x07*/ u8 filler_07[12];
|
||||
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
|
|
@ -266,7 +266,7 @@ typedef union // size = 0x24
|
|||
/*0x02*/ u16 numPokeCaught;
|
||||
/*0x04*/ u16 caughtPoke;
|
||||
/*0x06*/ u16 steps;
|
||||
/*0x08*/ u16 species;
|
||||
/*0x08*/ enum Species species;
|
||||
/*0x0A*/ mapsec_u8_t location;
|
||||
/*0x0B*/ u8 language;
|
||||
/*0x0C*/ u8 filler_0C[7];
|
||||
|
|
@ -335,12 +335,12 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 lastOpponentSpecies;
|
||||
/*0x02*/ enum Species lastOpponentSpecies;
|
||||
/*0x04*/ mapsec_u8_t location;
|
||||
/*0x05*/ u8 outcome;
|
||||
/*0x06*/ u16 caughtMonBall;
|
||||
/*0x08*/ u16 balls;
|
||||
/*0x0A*/ u16 poke1Species;
|
||||
/*0x0A*/ enum Species poke1Species;
|
||||
/*0x0C*/ u16 lastUsedMove;
|
||||
/*0x0E*/ u8 language;
|
||||
/*0x0F*/ u8 filler_0f[4];
|
||||
|
|
@ -355,7 +355,7 @@ typedef union // size = 0x24
|
|||
/*0x02*/ u8 avgLevel;
|
||||
/*0x03*/ u8 numDecorations;
|
||||
/*0x04*/ u8 decorations[4];
|
||||
/*0x08*/ u16 species;
|
||||
/*0x08*/ enum Species species;
|
||||
/*0x0A*/ enum Move move;
|
||||
/*0x0C*/ u8 language;
|
||||
/*0x0D*/ u8 filler_0d[6];
|
||||
|
|
@ -380,8 +380,8 @@ typedef union // size = 0x24
|
|||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ enum Move move;
|
||||
/*0x04*/ u16 foeSpecies;
|
||||
/*0x06*/ u16 species;
|
||||
/*0x04*/ enum Species foeSpecies;
|
||||
/*0x06*/ enum Species species;
|
||||
/*0x08*/ u16 otherMoves[3];
|
||||
/*0x0E*/ u16 betterMove;
|
||||
/*0x10*/ u8 nOtherMoves;
|
||||
|
|
@ -421,10 +421,10 @@ typedef union // size = 0x24
|
|||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 winStreak;
|
||||
/*0x04*/ u16 species1;
|
||||
/*0x06*/ u16 species2;
|
||||
/*0x08*/ u16 species3;
|
||||
/*0x0A*/ u16 species4;
|
||||
/*0x04*/ enum Species species1;
|
||||
/*0x06*/ enum Species species2;
|
||||
/*0x08*/ enum Species species3;
|
||||
/*0x0A*/ enum Species species4;
|
||||
/*0x0C*/ u8 language;
|
||||
/*0x0D*/ u8 facilityAndMode;
|
||||
/*0x0E*/ u8 filler_0e[5];
|
||||
|
|
@ -478,7 +478,7 @@ typedef union // size = 0x24
|
|||
/*0x02*/ u8 unused1;
|
||||
/*0x03*/ u8 unused3;
|
||||
/*0x04*/ enum Move moves[MAX_MON_MOVES];
|
||||
/*0x0C*/ u16 species;
|
||||
/*0x0C*/ enum Species species;
|
||||
/*0x0E*/ u16 unused2;
|
||||
/*0x10*/ u8 locationMapNum;
|
||||
/*0x11*/ u8 locationMapGroup;
|
||||
|
|
|
|||
|
|
@ -1525,6 +1525,7 @@ extern const u16 gItemIconPalette_GhostTMHM[];
|
|||
extern const u16 gItemIconPalette_DragonTMHM[];
|
||||
extern const u16 gItemIconPalette_DarkTMHM[];
|
||||
extern const u16 gItemIconPalette_SteelTMHM[];
|
||||
extern const u16 gItemIconPalette_MysteryTMHM[];
|
||||
extern const u16 gItemIconPalette_FairyTMHM[];
|
||||
// Charms
|
||||
extern const u32 gItemIcon_OvalCharm[];
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int lett
|
|||
int GetMaxWidthInMenuTable(const struct MenuAction *actions, int numActions);
|
||||
int GetMaxWidthInSubsetOfMenuTable(const struct MenuAction *actions, const u8 *actionIds, int numActions);
|
||||
int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu);
|
||||
void CopyMonCategoryText(u16 species, u8 *dest);
|
||||
void CopyMonCategoryText(enum Species species, u8 *dest);
|
||||
u8 *GetStringClearToWidth(u8 *dest, int fontId, const u8 *str, int totalStringWidth);
|
||||
void PadNameString(u8 *dest, u8 padChar);
|
||||
void ConvertInternationalPlayerNameStripChar(u8 *str, u8 removeChar);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "librfu.h"
|
||||
#include "link.h"
|
||||
#include "AgbRfu_LinkManager.h"
|
||||
#include "constants/species.h"
|
||||
|
||||
#define RFUCMD_MASK 0xFF00
|
||||
|
||||
|
|
@ -103,7 +104,7 @@ struct __attribute__((packed, aligned(2))) RfuGameData
|
|||
{
|
||||
struct RfuGameCompatibilityData compatibility;
|
||||
u8 partnerInfo[RFU_CHILD_MAX];
|
||||
u16 tradeSpecies;
|
||||
enum Species tradeSpecies;
|
||||
u8 activity:7;
|
||||
u8 startedActivity:1;
|
||||
u8 playerGender:1;
|
||||
|
|
@ -294,7 +295,7 @@ void UpdateGameData_SetActivity(u8 activity, u32 partnerInfo, bool32 startedActi
|
|||
void CreateTask_RfuReconnectWithParent(const u8 *name, u16 trainerId);
|
||||
void SetHostRfuWonderFlags(bool32 hasNews, bool32 hasCard);
|
||||
void ResetHostRfuGameData(void);
|
||||
void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level);
|
||||
void SetTradeBoardRegisteredMonInfo(u32 type, enum Species species, u32 level);
|
||||
void InitializeRfuLinkManager_EnterUnionRoom(void);
|
||||
void TryConnectToUnionRoomParent(const u8 *name, struct RfuGameData *parent, u8 activity);
|
||||
bool32 IsUnionRoomListenTaskActive(void);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ void ClearAllMail(void);
|
|||
void ClearMail(struct Mail *mail);
|
||||
bool8 MonHasMail(struct Pokemon *mon);
|
||||
u8 GiveMailToMonByItemId(struct Pokemon *mon, enum Item itemId);
|
||||
u16 SpeciesToMailSpecies(u16 species, u32 personality);
|
||||
u16 SpeciesToMailSpecies(enum Species species, u32 personality);
|
||||
u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer);
|
||||
u8 GiveMailToMon(struct Pokemon *mon, struct Mail *mail);
|
||||
void TakeMailFromMon(struct Pokemon *mon);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef GUARD_MOVES_H
|
||||
#define GUARD_MOVES_H
|
||||
|
||||
#include "generational_changes.h"
|
||||
#include "config_changes.h"
|
||||
#include "contest_effect.h"
|
||||
#include "constants/battle.h"
|
||||
#include "constants/battle_factory.h"
|
||||
|
|
@ -164,7 +164,7 @@ struct MoveInfo
|
|||
};
|
||||
} twoTurnAttack;
|
||||
struct {
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u16 power:9;
|
||||
u16 numOfHits:7;
|
||||
} speciesPowerOverride;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define GUARD_NAMING_SCREEN_H
|
||||
|
||||
#include "main.h"
|
||||
#include "constants/species.h"
|
||||
|
||||
enum {
|
||||
NAMING_SCREEN_PLAYER,
|
||||
|
|
@ -15,6 +16,6 @@ enum {
|
|||
|
||||
extern void BattleMainCB2(void);
|
||||
|
||||
void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback);
|
||||
void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpeciesOrPlayerGender, u16 monGender, u32 monPersonality, MainCallback returnCallback);
|
||||
|
||||
#endif // GUARD_NAMING_SCREEN_H
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ enum GeneratedMonOrigin
|
|||
GIFTMON_ORIGIN
|
||||
};
|
||||
|
||||
u32 GetSynchronizedNature(enum GeneratedMonOrigin origin, u32 species);
|
||||
u32 GetSynchronizedGender(enum GeneratedMonOrigin origin, u32 species);
|
||||
u32 GetSynchronizedNature(enum GeneratedMonOrigin origin, enum Species species);
|
||||
u32 GetSynchronizedGender(enum GeneratedMonOrigin origin, enum Species species);
|
||||
|
||||
#endif // GUARD_OW_SYNCHRONIZE_H
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ extern const struct PokeBallSprite gPokeBalls[];
|
|||
#define POKEBALL_PLAYER_SLIDEIN 0xFD
|
||||
|
||||
u8 DoPokeballSendOutAnimation(enum BattlerId battler, s16 pan, u8 kindOfThrow);
|
||||
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriority, u8 delay, u32 fadePalettes, u16 species);
|
||||
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriority, u8 delay, u32 fadePalettes, enum Species species);
|
||||
u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes);
|
||||
void StartHealthboxSlideIn(enum BattlerId battler);
|
||||
void DoHitAnimHealthboxEffect(enum BattlerId battler);
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ u16 GetNationalPokedexCount(u8 caseID);
|
|||
u32 GetRegionalPokedexCount(u8 caseID);
|
||||
u16 GetHoennPokedexCount(u8 caseID);
|
||||
u16 GetKantoPokedexCount(u8 caseID);
|
||||
u8 DisplayCaughtMonDexPage(u16 species, bool32 isShiny, u32 personality);
|
||||
u32 Pokedex_CreateCaughtMonSprite(u32 species, s32 x, s32 y);
|
||||
u8 DisplayCaughtMonDexPage(enum Species species, bool32 isShiny, u32 personality);
|
||||
u32 Pokedex_CreateCaughtMonSprite(enum Species species, s32 x, s32 y);
|
||||
s8 GetSetPokedexFlag(enum NationalDexOrder nationalDexNo, u8 caseID);
|
||||
void DrawFootprint(u8 windowId, u16 species);
|
||||
void DrawFootprint(u8 windowId, enum Species species);
|
||||
u16 CreateMonSpriteFromNationalDexNumber(enum NationalDexOrder nationalNum, s16 x, s16 y, u16 paletteSlot);
|
||||
bool16 HasAllRegionalMons(void);
|
||||
bool16 HasAllHoennMons(void);
|
||||
|
|
@ -20,7 +20,7 @@ bool16 HasAllKantoMons(void);
|
|||
void ResetPokedexScrollPositions(void);
|
||||
bool16 HasAllMons(void);
|
||||
void CB2_OpenPokedex(void);
|
||||
void PrintMonMeasurements(u16 species, u32 owned);
|
||||
void PrintMonMeasurements(enum Species species, u32 owned);
|
||||
u8* ConvertMonHeightToString(u32 height);
|
||||
u8* ConvertMonWeightToString(u32 weight);
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ enum PokedexAreaScreenState
|
|||
DEX_UPDATE_AREA_SCREEN
|
||||
};
|
||||
|
||||
void DisplayPokedexAreaScreen(u16 species, u8 *screenSwitchState, enum TimeOfDay timeOfDay, enum PokedexAreaScreenState areaState);
|
||||
void ShowPokedexAreaScreen(u16 species, u8 *screenSwitchState);
|
||||
void DisplayPokedexAreaScreen(enum Species species, u8 *screenSwitchState, enum TimeOfDay timeOfDay, enum PokedexAreaScreenState areaState);
|
||||
void ShowPokedexAreaScreen(enum Species species, u8 *screenSwitchState);
|
||||
|
||||
#endif // GUARD_POKEDEX_AREA_SCREEN_H
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ extern u8 gDexCryScreenState;
|
|||
|
||||
bool8 LoadCryWaveformWindow(struct CryScreenWindow *window, u8 windowId);
|
||||
void UpdateCryWaveformWindow(u8 windowId);
|
||||
void CryScreenPlayButton(u16 species);
|
||||
void CryScreenPlayButton(enum Species species);
|
||||
bool8 LoadCryMeter(struct CryScreenWindow *window, u8 windowId);
|
||||
void FreeCryScreen(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@ struct Volatiles
|
|||
|
||||
struct BattlePokemon
|
||||
{
|
||||
/*0x00*/ u16 species;
|
||||
/*0x00*/ enum Species species;
|
||||
/*0x02*/ u16 attack;
|
||||
/*0x04*/ u16 defense;
|
||||
/*0x06*/ u16 speed;
|
||||
|
|
@ -384,7 +384,7 @@ struct Evolution
|
|||
{
|
||||
u16 method;
|
||||
u16 param;
|
||||
u16 targetSpecies;
|
||||
enum Species targetSpecies;
|
||||
const struct EvolutionParam *params;
|
||||
};
|
||||
|
||||
|
|
@ -625,7 +625,7 @@ struct LevelUpMove
|
|||
struct FormChange
|
||||
{
|
||||
u16 method;
|
||||
u16 targetSpecies;
|
||||
enum Species targetSpecies;
|
||||
u16 param1;
|
||||
u16 param2;
|
||||
u16 param3;
|
||||
|
|
@ -635,7 +635,7 @@ struct FormChange
|
|||
struct FormChangeContext
|
||||
{
|
||||
enum FormChanges method:16;
|
||||
u16 currentSpecies;
|
||||
enum Species currentSpecies;
|
||||
u16 partyItemUsed;
|
||||
u16 multichoiceSelection;
|
||||
u16 heldItem;
|
||||
|
|
@ -732,17 +732,17 @@ void ZeroBoxMonData(struct BoxPokemon *boxMon);
|
|||
void ZeroMonData(struct Pokemon *mon);
|
||||
void ZeroPlayerPartyMons(void);
|
||||
void ZeroEnemyPartyMons(void);
|
||||
u32 GetMonPersonality(u16 species, u8 gender, u8 nature, u8 unownLetter);
|
||||
u32 GetMonPersonality(enum Species species, u8 gender, u8 nature, u8 unownLetter);
|
||||
bool32 ComputePlayerShinyOdds(u32 personality, u32 value);
|
||||
void CreateMon(struct Pokemon *mon, u16 species, u8 level, u32 personality, struct OriginalTrainerId);
|
||||
void CreateRandomMon(struct Pokemon *mon, u16 species, u8 level);
|
||||
void CreateRandomMonWithIVs(struct Pokemon *mon, u16 species, u8 level, u8 fixedIv);
|
||||
void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u32 personality, struct OriginalTrainerId);
|
||||
void CreateMonWithIVs(struct Pokemon *mon, u16 species, u8 level, u32 personality, struct OriginalTrainerId trainerId, u8 fixedIV);
|
||||
void CreateMon(struct Pokemon *mon, enum Species species, u8 level, u32 personality, struct OriginalTrainerId);
|
||||
void CreateRandomMon(struct Pokemon *mon, enum Species species, u8 level);
|
||||
void CreateRandomMonWithIVs(struct Pokemon *mon, enum Species species, u8 level, u8 fixedIv);
|
||||
void CreateBoxMon(struct BoxPokemon *boxMon, enum Species species, u8 level, u32 personality, struct OriginalTrainerId);
|
||||
void CreateMonWithIVs(struct Pokemon *mon, enum Species species, u8 level, u32 personality, struct OriginalTrainerId trainerId, u8 fixedIV);
|
||||
void SetBoxMonIVs(struct BoxPokemon *mon, u8 fixedIV);
|
||||
void SetBoxMonPerfectIVs(struct BoxPokemon *mon, u32 numPerfect);
|
||||
void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level);
|
||||
void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality);
|
||||
void CreateMaleMon(struct Pokemon *mon, enum Species species, u8 level);
|
||||
void CreateMonWithIVsPersonality(struct Pokemon *mon, enum Species species, u8 level, u32 ivs, u32 personality);
|
||||
void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src);
|
||||
void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50);
|
||||
void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId);
|
||||
|
|
@ -772,10 +772,10 @@ u8 CountAliveMonsInBattle(u8 caseId, enum BattlerId battler);
|
|||
u8 GetDefaultMoveTarget(enum BattlerId battler);
|
||||
u8 GetMonGender(struct Pokemon *mon);
|
||||
u8 GetBoxMonGender(struct BoxPokemon *boxMon);
|
||||
u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality);
|
||||
bool32 IsPersonalityFemale(u16 species, u32 personality);
|
||||
u8 GetGenderFromSpeciesAndPersonality(enum Species species, u32 personality);
|
||||
bool32 IsPersonalityFemale(enum Species species, u32 personality);
|
||||
u32 GetUnownSpeciesId(u32 personality);
|
||||
void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, enum BattlerPosition battlerPosition);
|
||||
void SetMultiuseSpriteTemplateToPokemon(enum Species speciesTag, enum BattlerPosition battlerPosition);
|
||||
void SetMultiuseSpriteTemplateToTrainerBack(enum TrainerPicID trainerPicId, enum BattlerPosition battlerPosition);
|
||||
void SetMultiuseSpriteTemplateToTrainerFront(enum TrainerPicID trainerPicId, enum BattlerPosition battlerPosition);
|
||||
|
||||
|
|
@ -801,33 +801,33 @@ u8 CalculateEnemyPartyCount(void);
|
|||
u8 CalculateEnemyPartyCountInSide(enum BattlerId battler);
|
||||
u8 GetMonsStateToDoubles(void);
|
||||
u8 GetMonsStateToDoubles_2(void);
|
||||
enum Ability GetAbilityBySpecies(u16 species, u8 abilityNum);
|
||||
enum Ability GetAbilityBySpecies(enum Species species, u8 abilityNum);
|
||||
enum Ability GetMonAbility(struct Pokemon *mon);
|
||||
void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord);
|
||||
enum TrainerPicID GetSecretBaseTrainerPicIndex(void);
|
||||
enum TrainerClassID GetSecretBaseTrainerClass(void);
|
||||
bool8 IsPlayerPartyAndPokemonStorageFull(void);
|
||||
bool8 IsPokemonStorageFull(void);
|
||||
const u8 *GetSpeciesName(u16 species);
|
||||
const u8 *GetSpeciesCategory(u16 species);
|
||||
const u8 *GetSpeciesPokedexDescription(u16 species);
|
||||
u32 GetSpeciesHeight(u16 species);
|
||||
u32 GetSpeciesWeight(u16 species);
|
||||
enum Type GetSpeciesType(u16 species, u8 slot);
|
||||
enum Ability GetSpeciesAbility(u16 species, u8 slot);
|
||||
u32 GetSpeciesBaseHP(u16 species);
|
||||
u32 GetSpeciesBaseAttack(u16 species);
|
||||
u32 GetSpeciesBaseDefense(u16 species);
|
||||
u32 GetSpeciesBaseSpAttack(u16 species);
|
||||
u32 GetSpeciesBaseSpDefense(u16 species);
|
||||
u32 GetSpeciesBaseSpeed(u16 species);
|
||||
u32 GetSpeciesBaseStat(u16 species, u32 statIndex);
|
||||
const struct LevelUpMove *GetSpeciesLevelUpLearnset(u16 species);
|
||||
const u16 *GetSpeciesTeachableLearnset(u16 species);
|
||||
const u16 *GetSpeciesEggMoves(u16 species);
|
||||
const struct Evolution *GetSpeciesEvolutions(u16 species);
|
||||
const u16 *GetSpeciesFormTable(u16 species);
|
||||
const struct FormChange *GetSpeciesFormChanges(u16 species);
|
||||
const u8 *GetSpeciesName(enum Species species);
|
||||
const u8 *GetSpeciesCategory(enum Species species);
|
||||
const u8 *GetSpeciesPokedexDescription(enum Species species);
|
||||
u32 GetSpeciesHeight(enum Species species);
|
||||
u32 GetSpeciesWeight(enum Species species);
|
||||
enum Type GetSpeciesType(enum Species species, u8 slot);
|
||||
enum Ability GetSpeciesAbility(enum Species species, u8 slot);
|
||||
u32 GetSpeciesBaseHP(enum Species species);
|
||||
u32 GetSpeciesBaseAttack(enum Species species);
|
||||
u32 GetSpeciesBaseDefense(enum Species species);
|
||||
u32 GetSpeciesBaseSpAttack(enum Species species);
|
||||
u32 GetSpeciesBaseSpDefense(enum Species species);
|
||||
u32 GetSpeciesBaseSpeed(enum Species species);
|
||||
u32 GetSpeciesBaseStat(enum Species species, u32 statIndex);
|
||||
const struct LevelUpMove *GetSpeciesLevelUpLearnset(enum Species species);
|
||||
const u16 *GetSpeciesTeachableLearnset(enum Species species);
|
||||
const u16 *GetSpeciesEggMoves(enum Species species);
|
||||
const struct Evolution *GetSpeciesEvolutions(enum Species species);
|
||||
const u16 *GetSpeciesFormTable(enum Species species);
|
||||
const struct FormChange *GetSpeciesFormChanges(enum Species species);
|
||||
u8 CalculatePPWithBonus(enum Move move, u8 ppBonuses, u8 moveIndex);
|
||||
void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
|
||||
void RemoveBoxMonPPBonus(struct BoxPokemon *mon, u8 moveIndex);
|
||||
|
|
@ -841,23 +841,23 @@ u8 GetItemEffectParamOffset(enum BattlerId battler, enum Item itemId, u8 effectB
|
|||
u8 *UseStatIncreaseItem(enum Item itemId);
|
||||
u8 GetNature(struct Pokemon *mon);
|
||||
u8 GetNatureFromPersonality(u32 personality);
|
||||
u32 GetGMaxTargetSpecies(u32 species);
|
||||
enum Species GetGMaxTargetSpecies(enum Species species);
|
||||
bool32 DoesMonMeetAdditionalConditions(struct Pokemon *mon, const struct EvolutionParam *params, struct Pokemon *tradePartner, u32 partyId, bool32 *canStopEvo, enum EvoState evoState);
|
||||
u32 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner, bool32 *canStopEvo, enum EvoState evoState);
|
||||
enum Species GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner, bool32 *canStopEvo, enum EvoState evoState);
|
||||
bool8 IsMonPastEvolutionLevel(struct Pokemon *mon);
|
||||
u16 NationalPokedexNumToSpecies(enum NationalDexOrder nationalNum);
|
||||
enum Species NationalPokedexNumToSpecies(enum NationalDexOrder nationalNum);
|
||||
u32 NationalToRegionalOrder(enum NationalDexOrder nationalNum);
|
||||
enum KantoDexOrder NationalToKantoOrder(enum NationalDexOrder nationalNum);
|
||||
enum HoennDexOrder NationalToHoennOrder(enum NationalDexOrder nationalNum);
|
||||
enum NationalDexOrder SpeciesToNationalPokedexNum(u16 species);
|
||||
u32 SpeciesToRegionalPokedexNum(u16 species);
|
||||
enum KantoDexOrder SpeciesToKantoPokedexNum(u16 species);
|
||||
enum HoennDexOrder SpeciesToHoennPokedexNum(u16 species);
|
||||
enum NationalDexOrder SpeciesToNationalPokedexNum(enum Species species);
|
||||
u32 SpeciesToRegionalPokedexNum(enum Species species);
|
||||
enum KantoDexOrder SpeciesToKantoPokedexNum(enum Species species);
|
||||
enum HoennDexOrder SpeciesToHoennPokedexNum(enum Species species);
|
||||
enum NationalDexOrder RegionalToNationalOrder(u32 regionNum);
|
||||
enum NationalDexOrder KantoToNationalOrder(enum KantoDexOrder kantoNum);
|
||||
enum NationalDexOrder HoennToNationalOrder(enum HoennDexOrder hoennNum);
|
||||
void DrawSpindaSpots(u32 personality, u8 *dest, bool32 isSecondFrame);
|
||||
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
|
||||
void EvolutionRenameMon(struct Pokemon *mon, enum Species oldSpecies, enum Species newSpecies);
|
||||
u8 GetPlayerFlankId(void);
|
||||
u16 GetLinkTrainerFlankId(u8 linkPlayerId);
|
||||
s32 GetBattlerMultiplayerId(u16 id);
|
||||
|
|
@ -865,27 +865,27 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId);
|
|||
u16 ModifyStatByNature(u8 nature, u16 stat, enum Stat statIndex);
|
||||
void AdjustFriendship(struct Pokemon *mon, u8 event);
|
||||
u8 CalculateFriendshipBonuses(struct Pokemon *mon, u32 modifier, enum HoldEffect itemHoldEffect);
|
||||
void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies);
|
||||
void MonGainEVs(struct Pokemon *mon, enum Species defeatedSpecies);
|
||||
u16 GetMonEVCount(struct Pokemon *mon);
|
||||
bool8 TryIncrementMonLevel(struct Pokemon *mon);
|
||||
u8 CanLearnTeachableMove(u16 species, enum Move move);
|
||||
u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves);
|
||||
u16 SpeciesToPokedexNum(u16 species);
|
||||
bool32 IsSpeciesInRegionalDex(u16 species);
|
||||
bool32 IsSpeciesInKantoDex(u16 species);
|
||||
bool32 IsSpeciesInHoennDex(u16 species);
|
||||
u8 CanLearnTeachableMove(enum Species species, enum Move move);
|
||||
u8 GetLevelUpMovesBySpecies(enum Species species, u16 *moves);
|
||||
u16 SpeciesToPokedexNum(enum Species species);
|
||||
bool32 IsSpeciesInRegionalDex(enum Species species);
|
||||
bool32 IsSpeciesInKantoDex(enum Species species);
|
||||
bool32 IsSpeciesInHoennDex(enum Species species);
|
||||
u16 GetBattleBGM(void);
|
||||
void PlayBattleBGM(void);
|
||||
void PlayMapChosenOrBattleBGM(u16 songId);
|
||||
void CreateTask_PlayMapChosenOrBattleBGM(u16 songId);
|
||||
const u16 *GetMonFrontSpritePal(struct Pokemon *mon);
|
||||
const u16 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, bool32 isShiny, u32 personality);
|
||||
const u16 *GetMonSpritePalFromSpeciesAndPersonalityIsEgg(u16 species, bool32 isShiny, u32 personality, bool32 isEgg);
|
||||
const u16 *GetMonSpritePalFromSpecies(u16 species, bool32 isShiny, bool32 isFemale);
|
||||
const u16 *GetMonSpritePalFromSpeciesIsEgg(u16 species, bool32 isShiny, bool32 isFemale, bool32 isEgg);
|
||||
const u16 *GetMonSpritePalFromSpeciesAndPersonality(enum Species species, bool32 isShiny, u32 personality);
|
||||
const u16 *GetMonSpritePalFromSpeciesAndPersonalityIsEgg(enum Species species, bool32 isShiny, u32 personality, bool32 isEgg);
|
||||
const u16 *GetMonSpritePalFromSpecies(enum Species species, bool32 isShiny, bool32 isFemale);
|
||||
const u16 *GetMonSpritePalFromSpeciesIsEgg(enum Species species, bool32 isShiny, bool32 isFemale, bool32 isEgg);
|
||||
bool32 IsMoveHM(enum Move move);
|
||||
bool32 CannotForgetMove(enum Move move);
|
||||
bool8 IsMonSpriteNotFlipped(u16 species);
|
||||
bool8 IsMonSpriteNotFlipped(enum Species species);
|
||||
s8 GetMonFlavorRelation(struct Pokemon *mon, enum Flavor flavor);
|
||||
s8 GetFlavorRelationByPersonality(u32 personality, enum Flavor flavor);
|
||||
bool8 IsTradedMon(struct Pokemon *mon);
|
||||
|
|
@ -896,28 +896,28 @@ void SetMonPreventsSwitchingString(void);
|
|||
void SetWildMonHeldItem(void);
|
||||
bool8 IsMonShiny(struct Pokemon *mon);
|
||||
const u8 *GetTrainerPartnerName(void);
|
||||
void BattleAnimateFrontSprite(struct Sprite *sprite, u16 species, bool8 noCry, u8 panMode);
|
||||
void DoMonFrontSpriteAnimation(struct Sprite *sprite, u16 species, bool8 noCry, u8 panModeAnimFlag);
|
||||
void PokemonSummaryDoMonAnimation(struct Sprite *sprite, u16 species, bool8 oneFrame);
|
||||
void BattleAnimateFrontSprite(struct Sprite *sprite, enum Species species, bool8 noCry, u8 panMode);
|
||||
void DoMonFrontSpriteAnimation(struct Sprite *sprite, enum Species species, bool8 noCry, u8 panModeAnimFlag);
|
||||
void PokemonSummaryDoMonAnimation(struct Sprite *sprite, enum Species species, bool8 oneFrame);
|
||||
void StopPokemonAnimationDelayTask(void);
|
||||
void BattleAnimateBackSprite(struct Sprite *sprite, u16 species);
|
||||
void BattleAnimateBackSprite(struct Sprite *sprite, enum Species species);
|
||||
u8 GetOpposingLinkMultiBattlerId(bool8 rightSide, u8 multiplayerId);
|
||||
enum TrainerPicID FacilityClassToPicIndex(u16 facilityClass);
|
||||
enum TrainerPicID PlayerGenderToFrontTrainerPicId(enum Gender playerGender);
|
||||
void HandleSetPokedexFlag(enum NationalDexOrder nationalNum, u8 caseId, u32 personality);
|
||||
void HandleSetPokedexFlagFromMon(struct Pokemon *mon, u32 caseId);
|
||||
bool8 HasTwoFramesAnimation(u16 species);
|
||||
bool8 HasTwoFramesAnimation(enum Species species);
|
||||
struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode);
|
||||
void DestroyMonSpritesGfxManager(u8 managerId);
|
||||
u8 *MonSpritesGfxManager_GetSpritePtr(u8 managerId, u8 spriteNum);
|
||||
u16 GetFormSpeciesId(u16 speciesId, u8 formId);
|
||||
u16 GetFormSpeciesId(enum Species speciesId, u8 formId);
|
||||
u8 GetFormIdFromFormSpeciesId(u16 formSpeciesId);
|
||||
u32 GetFormChangeTargetSpecies_Internal(struct FormChangeContext ctx);
|
||||
bool32 DoesSpeciesHaveFormChangeMethod(u16 species, enum FormChanges method);
|
||||
enum Species GetFormChangeTargetSpecies_Internal(struct FormChangeContext ctx);
|
||||
bool32 DoesSpeciesHaveFormChangeMethod(enum Species species, enum FormChanges method);
|
||||
u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove);
|
||||
void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv);
|
||||
void TrySpecialOverworldEvo(void);
|
||||
bool32 SpeciesHasGenderDifferences(u16 species);
|
||||
bool32 SpeciesHasGenderDifferences(enum Species species);
|
||||
bool32 TryFormChange(struct Pokemon *mon, enum FormChanges method);
|
||||
bool32 TryBoxMonFormChange(struct BoxPokemon *boxMon, enum FormChanges method);
|
||||
void TryToSetBattleFormChangeMoves(struct Pokemon *mon, enum FormChanges method);
|
||||
|
|
@ -925,33 +925,33 @@ u32 GetMonFriendshipScore(struct Pokemon *pokemon);
|
|||
u32 GetMonAffectionHearts(struct Pokemon *pokemon);
|
||||
void UpdateMonPersonality(struct BoxPokemon *boxMon, u32 personality);
|
||||
u8 CalculatePartyCount(struct Pokemon *party);
|
||||
u16 SanitizeSpeciesId(u16 species);
|
||||
bool32 IsSpeciesEnabled(u16 species);
|
||||
enum PokemonCry GetCryIdBySpecies(u16 species);
|
||||
u16 GetSpeciesPreEvolution(u16 species);
|
||||
u16 SanitizeSpeciesId(enum Species species);
|
||||
bool32 IsSpeciesEnabled(enum Species species);
|
||||
enum PokemonCry GetCryIdBySpecies(enum Species species);
|
||||
u16 GetSpeciesPreEvolution(enum Species species);
|
||||
void HealPokemon(struct Pokemon *mon);
|
||||
void HealBoxPokemon(struct BoxPokemon *boxMon);
|
||||
void UpdateDaysPassedSinceFormChange(u16 days);
|
||||
void TrySetDayLimitToFormChange(struct Pokemon *mon);
|
||||
enum Type CheckDynamicMoveType(struct Pokemon *mon, enum Move move, enum BattlerId battler, enum MonState state);
|
||||
uq4_12_t GetDynamaxLevelHPMultiplier(u32 dynamaxLevel, bool32 inverseMultiplier);
|
||||
u32 GetRegionalFormByRegion(u32 species, u32 region);
|
||||
bool32 IsSpeciesForeignRegionalForm(u32 species, u32 currentRegion);
|
||||
u32 GetRegionalFormByRegion(enum Species species, u32 region);
|
||||
bool32 IsSpeciesForeignRegionalForm(enum Species species, u32 currentRegion);
|
||||
enum Type GetTeraTypeFromPersonality(struct Pokemon *mon);
|
||||
bool8 ShouldSkipFriendshipChange(void);
|
||||
struct Pokemon *GetSavedPlayerPartyMon(u32 index);
|
||||
u8 *GetSavedPlayerPartyCount(void);
|
||||
void SavePlayerPartyMon(u32 index, struct Pokemon *mon);
|
||||
bool32 IsSpeciesOfType(u32 species, enum Type type);
|
||||
bool32 IsSpeciesOfType(enum Species species, enum Type type);
|
||||
struct BoxPokemon *GetSelectedBoxMonFromPcOrParty(void);
|
||||
u32 GiveScriptedMonToPlayer(struct Pokemon *mon, u8 slot);
|
||||
void ChangePokemonNicknameWithCallback(void (*callback)(void));
|
||||
bool32 HasShedinjaHPHandling(u32 species);
|
||||
u32 OWE_GetMovementTypeFromSpecies(u32 speciesId);
|
||||
u32 OWE_GetViewDistanceFromSpecies(u32 speciesId);
|
||||
u32 OWE_GetViewWidthFromSpecies(u32 speciesId);
|
||||
u32 OWE_GetViewActiveDistanceFromSpecies(u32 speciesId);
|
||||
enum SpeedOWE OWE_GetIdleSpeedFromSpecies(u32 speciesId);
|
||||
enum SpeedOWE OWE_GetActiveSpeedFromSpecies(u32 speciesId);
|
||||
bool32 HasShedinjaHPHandling(enum Species species);
|
||||
u32 OWE_GetMovementTypeFromSpecies(enum Species speciesId);
|
||||
u32 OWE_GetViewDistanceFromSpecies(enum Species speciesId);
|
||||
u32 OWE_GetViewWidthFromSpecies(enum Species speciesId);
|
||||
u32 OWE_GetViewActiveDistanceFromSpecies(enum Species speciesId);
|
||||
enum SpeedOWE OWE_GetIdleSpeedFromSpecies(enum Species speciesId);
|
||||
enum SpeedOWE OWE_GetActiveSpeedFromSpecies(enum Species);
|
||||
|
||||
#endif // GUARD_POKEMON_H
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ enum AnimFunctionIDs
|
|||
ANIM_COUNT,
|
||||
};
|
||||
|
||||
enum BackAnim GetSpeciesBackAnimSet(u16 species);
|
||||
enum BackAnim GetSpeciesBackAnimSet(enum Species species);
|
||||
void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, enum AnimFunctionIDs frontAnimId);
|
||||
void StartMonSummaryAnimation(struct Sprite *sprite, enum AnimFunctionIDs frontAnimId);
|
||||
void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, enum BackAnim backAnimSet);
|
||||
|
|
|
|||
|
|
@ -3,31 +3,31 @@
|
|||
|
||||
extern const struct SpritePalette gMonIconPaletteTable[];
|
||||
|
||||
const u8 *GetMonIconTiles(u16 species, u32 personality);
|
||||
const u8 *GetMonIconTilesIsEgg(u16 species, u32 personality, bool32 isEgg);
|
||||
const u8 *GetMonIconTiles(enum Species species, u32 personality);
|
||||
const u8 *GetMonIconTilesIsEgg(enum Species species, u32 personality, bool32 isEgg);
|
||||
void TryLoadAllMonIconPalettesAtOffset(u16 offset);
|
||||
u8 GetValidMonIconPalIndex(u16 species);
|
||||
const u8 *GetMonIconPtr(u16 species, u32 personality);
|
||||
const u8 *GetMonIconPtrIsEgg(u16 species, u32 personality, bool32 isEgg);
|
||||
const u16 *GetValidMonIconPalettePtr(u16 species);
|
||||
u16 GetIconSpecies(u16 species, u32 personality);
|
||||
u8 GetValidMonIconPalIndex(enum Species species);
|
||||
const u8 *GetMonIconPtr(enum Species species, u32 personality);
|
||||
const u8 *GetMonIconPtrIsEgg(enum Species species, u32 personality, bool32 isEgg);
|
||||
const u16 *GetValidMonIconPalettePtr(enum Species species);
|
||||
enum Species GetIconSpecies(enum Species species, u32 personality);
|
||||
u16 GetUnownLetterByPersonality(u32 personality);
|
||||
u16 GetIconSpeciesNoPersonality(u16 species);
|
||||
enum Species GetIconSpeciesNoPersonality(enum Species species);
|
||||
void LoadMonIconPalettes(void);
|
||||
void LoadMonIconPalette(u16 species);
|
||||
void LoadMonIconPalette(enum Species species);
|
||||
void FreeMonIconPalettes(void);
|
||||
u8 CreateMonIconNoPersonality(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority);
|
||||
u8 CreateMonIconNoPersonalityIsEgg(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 isEgg);
|
||||
void FreeMonIconPalette(u16 species);
|
||||
u8 CreateMonIconNoPersonality(enum Species species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority);
|
||||
u8 CreateMonIconNoPersonalityIsEgg(enum Species species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 isEgg);
|
||||
void FreeMonIconPalette(enum Species species);
|
||||
void FreeAndDestroyMonIconSprite(struct Sprite *sprite);
|
||||
u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality);
|
||||
u8 CreateMonIconIsEgg(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 isEgg);
|
||||
u8 CreateMonIcon(enum Species species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality);
|
||||
u8 CreateMonIconIsEgg(enum Species species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 isEgg);
|
||||
u8 UpdateMonIconFrame(struct Sprite *sprite);
|
||||
void LoadMonIconPalette(u16 species);
|
||||
void LoadMonIconPalettePersonality(u16 species, u32 personality);
|
||||
void LoadMonIconPalette(enum Species species);
|
||||
void LoadMonIconPalettePersonality(enum Species species, u32 personality);
|
||||
void SpriteCB_MonIcon(struct Sprite *sprite);
|
||||
void SetPartyHPBarSprite(struct Sprite *sprite, u8 animNum);
|
||||
u8 GetMonIconPaletteIndexFromSpecies(u16 species);
|
||||
void SafeFreeMonIconPalette(u16 species);
|
||||
u8 GetMonIconPaletteIndexFromSpecies(enum Species species);
|
||||
void SafeFreeMonIconPalette(enum Species species);
|
||||
|
||||
#endif // GUARD_POKEMON_ICON_H
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include "main.h"
|
||||
|
||||
void StartPokemonJump(u16 partyId, MainCallback exitCallback);
|
||||
bool32 IsSpeciesAllowedInPokemonJump(u16 species);
|
||||
bool32 IsSpeciesAllowedInPokemonJump(enum Species species);
|
||||
void IsPokemonJumpSpeciesInParty(void);
|
||||
void ResetPokemonJumpRecords(void);
|
||||
void ShowPokemonJumpRecords(void);
|
||||
|
|
|
|||
|
|
@ -161,6 +161,7 @@ enum RandomTag
|
|||
RNG_SHED_SKIN,
|
||||
RNG_SLEEP_TURNS,
|
||||
RNG_TAUNT_TURNS,
|
||||
RNG_ENCORE_TURNS,
|
||||
RNG_SPEED_TIE,
|
||||
RNG_STATIC,
|
||||
RNG_STENCH,
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ bool8 TryStartRoamerEncounter(void);
|
|||
void UpdateRoamerHPStatus(struct Pokemon *mon);
|
||||
void SetRoamerInactive(u32 roamerIndex);
|
||||
void GetRoamerLocation(u32 roamerIndex, u8 *mapGroup, u8 *mapNum);
|
||||
bool8 TryAddRoamer(u16 species, u8 level);
|
||||
bool8 TryAddRoamer(enum Species species, u8 level);
|
||||
void MoveAllRoamersToOtherLocationSets(void);
|
||||
void MoveAllRoamers(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8
|
|||
void DrawMultichoiceMenuInternal(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 cursorPos, const struct MenuAction *actions, int count);
|
||||
bool8 ScriptMenu_YesNo(u8 left, u8 top);
|
||||
bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount);
|
||||
bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y);
|
||||
bool8 ScriptMenu_ShowPokemonPic(enum Species species, u8 x, u8 y);
|
||||
bool8 (*ScriptMenu_HidePokemonPic(void))(void);
|
||||
int ConvertPixelWidthToTileWidth(int width);
|
||||
u8 CreateWindowFromRect(u8 x, u8 y, u8 width, u8 height);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
#ifndef GUARD_SCRIPT_POKEMON_UTIL_H
|
||||
#define GUARD_SCRIPT_POKEMON_UTIL_H
|
||||
|
||||
u32 ScriptGiveMon(u16 species, u8 level, enum Item item);
|
||||
u8 ScriptGiveEgg(u16 species);
|
||||
void CreateScriptedWildMon(u16 species, u8 level, enum Item item);
|
||||
void CreateScriptedDoubleWildMon(u16 species, u8 level, enum Item item, u16 species2, u8 level2, enum Item item2);
|
||||
u32 ScriptGiveMon(enum Species species, u8 level, enum Item item);
|
||||
u8 ScriptGiveEgg(enum Species species);
|
||||
void CreateScriptedWildMon(enum Species species, u8 level, enum Item item);
|
||||
void CreateScriptedDoubleWildMon(enum Species species, u8 level, enum Item item, enum Species species2, u8 level2, enum Item item2);
|
||||
void ScriptSetMonMoveSlot(u8 monIndex, enum Move move, u8 slot);
|
||||
void ReducePlayerPartyToSelectedMons(void);
|
||||
void HealPlayerParty(void);
|
||||
|
|
|
|||
|
|
@ -24,13 +24,13 @@ bool8 IsBGMPausedOrStopped(void);
|
|||
void FadeInBGM(u8 speed);
|
||||
void FadeOutBGM(u8 speed);
|
||||
bool8 IsBGMStopped(void);
|
||||
void PlayCry_Normal(u16 species, s8 pan);
|
||||
void PlayCry_NormalNoDucking(u16 species, s8 pan, s8 volume, u8 priority);
|
||||
void PlayCry_ByMode(u16 species, s8 pan, u8 mode);
|
||||
void PlayCry_ReleaseDouble(u16 species, s8 pan, u8 mode);
|
||||
void PlayCry_Script(u16 species, u8 mode);
|
||||
void PlayCry_DuckNoRestore(u16 species, s8 pan, u8 mode);
|
||||
void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode);
|
||||
void PlayCry_Normal(enum Species species, s8 pan);
|
||||
void PlayCry_NormalNoDucking(enum Species species, s8 pan, s8 volume, u8 priority);
|
||||
void PlayCry_ByMode(enum Species species, s8 pan, u8 mode);
|
||||
void PlayCry_ReleaseDouble(enum Species species, s8 pan, u8 mode);
|
||||
void PlayCry_Script(enum Species species, u8 mode);
|
||||
void PlayCry_DuckNoRestore(enum Species species, s8 pan, u8 mode);
|
||||
void PlayCryInternal(enum Species species, s8 pan, s8 volume, u8 priority, u8 mode);
|
||||
bool8 IsCryFinished(void);
|
||||
void StopCryAndClearCrySongs(void);
|
||||
void StopCry(void);
|
||||
|
|
|
|||
|
|
@ -550,7 +550,7 @@
|
|||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "data.h"
|
||||
#include "generational_changes.h"
|
||||
#include "config_changes.h"
|
||||
#include "item.h"
|
||||
#include "random.h"
|
||||
#include "recorded_battle.h"
|
||||
|
|
@ -1058,8 +1058,8 @@ void TieBreakScore(u32 sourceLine, enum RandomTag rngTag, enum ScoreTieResolutio
|
|||
void TieBreakTarget(u32 sourceLine, enum TargetTieResolution targetTieRes, u32 value);
|
||||
void ClearFlagAfterTest(void);
|
||||
void ClearVarAfterTest(void);
|
||||
void OpenPokemon(u32 sourceLine, enum BattleTrainer trainer, u32 species);
|
||||
void OpenPokemonMulti(u32 sourceLine, enum BattleTrainer trainer, u32 species);
|
||||
void OpenPokemon(u32 sourceLine, enum BattleTrainer trainer, enum Species species);
|
||||
void OpenPokemonMulti(u32 sourceLine, enum BattleTrainer trainer, enum Species species);
|
||||
void ClosePokemon(u32 sourceLine);
|
||||
|
||||
void RNGSeed_(u32 sourceLine, rng_value_t seed);
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate;
|
|||
s32 GetGameProgressForLinkTrade(void);
|
||||
void CB2_StartCreateTradeMenu(void);
|
||||
void CB2_LinkTrade(void);
|
||||
int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isModernFatefulEncounter);
|
||||
int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, enum Type requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter);
|
||||
int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, enum Species species2, enum Species species, bool8 isModernFatefulEncounter);
|
||||
int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, enum Species playerSpecies2, enum Species partnerSpecies, enum Type requestedType, enum Species playerSpecies, bool8 isModernFatefulEncounter);
|
||||
int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx);
|
||||
void InitTradeSequenceBgGpuRegs(void);
|
||||
void LinkTradeDrawWindow(void);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define GUARD_TRAINER_CARD_H
|
||||
|
||||
#include "constants/trainer_card.h"
|
||||
#include "constants/species.h"
|
||||
|
||||
struct TrainerCard
|
||||
{
|
||||
|
|
@ -39,7 +40,7 @@ struct TrainerCard
|
|||
/*0x4E*/ u8 monIconTint; // FRLG only
|
||||
/*0x4F*/ u8 unionRoomClass;
|
||||
/*0x50*/ u8 stickers[TRAINER_CARD_STICKER_TYPES]; // FRLG only
|
||||
/*0x54*/ u16 monSpecies[PARTY_SIZE]; // FRLG only
|
||||
/*0x54*/ enum Species monSpecies[PARTY_SIZE]; // FRLG only
|
||||
// Note: Link players use linkHasAllFrontierSymbols, not the field below,
|
||||
// which they use for a Wonder Card flag id instead (see CreateTrainerCardInBuffer)
|
||||
/*0x60*/ bool16 hasAllFrontierSymbols;
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
#define F_MON_PIC_NO_AFFINE (1 << 7)
|
||||
|
||||
bool16 ResetAllPicSprites(void);
|
||||
u16 CreateMonPicSprite_Affine(u16 species, bool8 isShiny, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
|
||||
u16 CreateMonPicSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
|
||||
u16 CreateMonPicSprite_Affine(enum Species species, bool8 isShiny, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
|
||||
u16 CreateMonPicSprite(enum Species species, bool8 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
|
||||
u16 FreeAndDestroyMonPicSprite(u16 spriteId);
|
||||
u16 FreeAndDestroyMonPicSpriteNoPalette(u16 spriteId);
|
||||
u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
|
||||
|
|
@ -17,6 +17,6 @@ u16 FreeAndDestroyTrainerPicSprite(u16 spriteId);
|
|||
u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
|
||||
u16 PlayerGenderToFrontTrainerPicId_Debug(enum Gender gender, bool8 getClass);
|
||||
void CopyTrainerBackspriteFramesToDest(enum TrainerPicID trainerPicId, u8 *dest);
|
||||
u16 CreateTrainerCardMonIconSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
|
||||
u16 CreateTrainerCardMonIconSprite(enum Species species, bool8 isShiny, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
|
||||
|
||||
#endif // GUARD_TRAINER_POKEMON_SPRITES_H
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
#ifndef GUARD_TV_H
|
||||
#define GUARD_TV_H
|
||||
|
||||
#include "constants/species.h"
|
||||
|
||||
extern u8 *const gTVStringVarPtrs[3];
|
||||
|
||||
void ClearTVShowData(void);
|
||||
void TryPutBreakingNewsOnAir(void);
|
||||
void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIndex, const u16 *movePtr, u16 betterMove);
|
||||
void TryPutBattleSeminarOnAir(enum Species foeSpecies, enum Species species, u8 moveIndex, const u16 *movePtr, enum Move betterMove);
|
||||
void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facilityAndMode);
|
||||
void DoTVShow(void);
|
||||
void DoTVShowInSearchOfTrainers(void);
|
||||
|
|
@ -39,11 +41,11 @@ void IncrementDailyBerryBlender(void);
|
|||
void SanitizeTVShowsForRuby(TVShow *shows);
|
||||
void TryPutSafariFanClubOnAir(u8 monsCaught, u8 pokeblocksUsed);
|
||||
bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, enum Flavor flavor, u8 color, u8 sheen, u8 language);
|
||||
void SetPokemonAnglerSpecies(u16 species);
|
||||
void SetPokemonAnglerSpecies(enum Species species);
|
||||
void UpdateTVShowsPerDay(u16 days);
|
||||
void TryPutPokemonTodayOnAir(void);
|
||||
void TryPutSecretBaseVisitOnAir(void);
|
||||
void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, enum Move move, u16 speciesPlayer, u16 speciesOpponent);
|
||||
void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, enum Move move, enum Species speciesPlayer, enum Species speciesOpponent);
|
||||
void BravoTrainerPokemonProfile_BeforeInterview1(enum Move move);
|
||||
void InterviewBefore(void);
|
||||
void InterviewAfter(void);
|
||||
|
|
|
|||
|
|
@ -138,9 +138,9 @@ struct UnionRoomTrade
|
|||
u16 type;
|
||||
u32 playerPersonality;
|
||||
u8 offerPlayerId;
|
||||
u16 playerSpecies;
|
||||
enum Species playerSpecies;
|
||||
u16 playerLevel;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u16 level;
|
||||
u32 personality;
|
||||
};
|
||||
|
|
@ -148,7 +148,7 @@ struct UnionRoomTrade
|
|||
extern u8 gPlayerCurrActivity;
|
||||
extern struct RfuGameCompatibilityData gRfuPartnerCompatibilityData;
|
||||
|
||||
extern u16 gUnionRoomOfferedSpecies;
|
||||
extern enum Species gUnionRoomOfferedSpecies;
|
||||
extern enum Type gUnionRoomRequestedMonType;
|
||||
|
||||
u8 CreateTask_CreateTradeMenu(void);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ struct WildPokemon
|
|||
{
|
||||
u8 minLevel;
|
||||
u8 maxLevel;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
};
|
||||
|
||||
struct WildPokemonInfo
|
||||
|
|
@ -67,7 +67,7 @@ bool8 IsAbilityAllowingEncounter(u8 level);
|
|||
bool8 TryDoDoubleWildBattle(void);
|
||||
bool8 StandardWildEncounter_Debug(void);
|
||||
u32 CalculateChainFishingShinyRolls(void);
|
||||
void CreateWildMon(u16 species, u8 level);
|
||||
void CreateWildMon(enum Species species, u8 level);
|
||||
bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, enum WildPokemonArea area, u8 flags);
|
||||
bool8 SetUpMassOutbreakEncounter(u8 flags);
|
||||
bool8 DoMassOutbreakEncounterTest(void);
|
||||
|
|
|
|||
|
|
@ -314,7 +314,7 @@ static u16 GetRandomAlternateMove(u8 monId)
|
|||
u8 i, j;
|
||||
u8 id;
|
||||
u8 numLearnsetMoves;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
const struct LevelUpMove *learnset;
|
||||
bool32 needTMs = FALSE;
|
||||
enum Move move = MOVE_NONE;
|
||||
|
|
@ -434,7 +434,7 @@ static bool8 TrySetMove(u8 monId, enum Move move)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void GetLatestLearnedMoves(u16 species, u16 *moves)
|
||||
static void GetLatestLearnedMoves(enum Species species, u16 *moves)
|
||||
{
|
||||
u8 i, j;
|
||||
u8 level, numLearnsetMoves;
|
||||
|
|
@ -564,7 +564,7 @@ static void CreateApprenticeMenu(u8 menu)
|
|||
top = 6;
|
||||
for (i = 0; i < MULTI_PARTY_SIZE; i++)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u32 speciesTableId;
|
||||
|
||||
speciesTableId = APPRENTICE_SPECIES_ID(i);
|
||||
|
|
|
|||
|
|
@ -290,8 +290,8 @@ void BattleAI_SetupFlags(void)
|
|||
// The check is here because wild natural enemies are not symmetrical.
|
||||
if (B_WILD_NATURAL_ENEMIES && IsDoubleBattle())
|
||||
{
|
||||
u32 speciesLeft = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES);
|
||||
u32 speciesRight = GetMonData(&gEnemyParty[1], MON_DATA_SPECIES);
|
||||
enum Species speciesLeft = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES);
|
||||
enum Species speciesRight = GetMonData(&gEnemyParty[1], MON_DATA_SPECIES);
|
||||
if (IsNaturalEnemy(speciesLeft, speciesRight))
|
||||
gAiThinkingStruct->aiFlags[B_BATTLER_1] |= AI_FLAG_ATTACKS_PARTNER;
|
||||
if (IsNaturalEnemy(speciesRight, speciesLeft))
|
||||
|
|
@ -760,7 +760,7 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData)
|
|||
enum Ability GetPartyMonAbility(struct Pokemon *mon)
|
||||
{
|
||||
// Doesn't have any special handling yet
|
||||
u32 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Ability ability = GetSpeciesAbility(species, GetMonData(mon, MON_DATA_ABILITY_NUM));
|
||||
return ability;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,11 +35,17 @@ struct IncomingHealInfo
|
|||
static bool32 CanUseSuperEffectiveMoveAgainstOpponents(enum BattlerId battler);
|
||||
static bool32 FindMonWithFlagsAndSuperEffective(enum BattlerId battler, u16 flags, u32 moduloPercent);
|
||||
static u32 GetSwitchinHazardsDamage(enum BattlerId battler);
|
||||
static u32 GetSwitchinSingleUseItemHealing(enum BattlerId battler, enum BattlerId opposingBattler, s32 currentHP);
|
||||
static bool32 AI_CanSwitchinAbilityTrapOpponent(enum Ability ability, enum BattlerId opposingBattler);
|
||||
static u32 GetBattlerTypeMatchup(enum BattlerId opposingBattler, enum BattlerId battler);
|
||||
static u32 GetSwitchinHitsToKO(s32 damageTaken, enum BattlerId battler, const struct IncomingHealInfo *healInfo, u32 originalHp);
|
||||
static void GetIncomingHealInfo(enum BattlerId battler, struct IncomingHealInfo *healInfo);
|
||||
static u32 GetWishHealAmountForBattler(enum BattlerId battler);
|
||||
static void SetBattlerStatusForSwitchin(enum BattlerId battler);
|
||||
static void SetBattlerStatStagesForSwitchin(enum BattlerId battler, enum BattlerId opposingBattler, u32 fieldStatus);
|
||||
static void SetBattlerHPChangeForSwitch(enum BattlerId battler, enum BattlerId opposingBattler);
|
||||
static void SetBattlerVolatilesForSwitchin(enum BattlerId battler, u32 weather, u32 fieldStatus);
|
||||
bool32 IsSwitchinTSpikesAffected(enum BattlerId battler);
|
||||
|
||||
static void InitializeSwitchinCandidate(enum BattlerId switchinBattler, u32 monIndex, struct Pokemon *mon)
|
||||
{
|
||||
|
|
@ -48,15 +54,19 @@ static void InitializeSwitchinCandidate(enum BattlerId switchinBattler, u32 monI
|
|||
// Setup switchin battler data
|
||||
gAiThinkingStruct->saved[switchinBattler].saved = TRUE;
|
||||
SetBattlerAiData(switchinBattler, gAiLogicData);
|
||||
SetBattlerFieldStatusForSwitchin(switchinBattler);
|
||||
u32 switchinWeather = AI_GetSwitchinWeather(switchinBattler);
|
||||
u32 switchinFieldStatus = AI_GetSwitchinFieldStatus(switchinBattler);
|
||||
SetBattlerVolatilesForSwitchin(switchinBattler, switchinWeather, switchinFieldStatus);
|
||||
SetBattlerStatusForSwitchin(switchinBattler);
|
||||
gBattlerPartyIndexes[switchinBattler] = monIndex;
|
||||
for (enum BattlerId battlerIndex = 0; battlerIndex < gBattlersCount; battlerIndex++)
|
||||
{
|
||||
if (switchinBattler == battlerIndex || !IsBattlerAlive(battlerIndex))
|
||||
continue;
|
||||
|
||||
CalcBattlerAiMovesData(gAiLogicData, switchinBattler, battlerIndex, AI_GetSwitchinWeather(switchinBattler), AI_GetSwitchinFieldStatus(switchinBattler));
|
||||
CalcBattlerAiMovesData(gAiLogicData, battlerIndex, switchinBattler, AI_GetSwitchinWeather(switchinBattler), AI_GetSwitchinFieldStatus(switchinBattler));
|
||||
SetBattlerStatStagesForSwitchin(switchinBattler, battlerIndex, switchinFieldStatus);
|
||||
SetBattlerHPChangeForSwitch(switchinBattler, battlerIndex);
|
||||
CalcBattlerAiMovesData(gAiLogicData, switchinBattler, battlerIndex, switchinWeather, switchinFieldStatus);
|
||||
CalcBattlerAiMovesData(gAiLogicData, battlerIndex, switchinBattler, switchinWeather, switchinFieldStatus);
|
||||
}
|
||||
|
||||
gBattlerPartyIndexes[switchinBattler] = storeCurrBattlerPartyIndex;
|
||||
|
|
@ -218,6 +228,35 @@ static bool32 AreStatsRaised(enum BattlerId battler)
|
|||
return (buffedStatsValue > STAY_IN_STATS_RAISED);
|
||||
}
|
||||
|
||||
bool32 IsSwitchinTSpikesAffected(enum BattlerId battler)
|
||||
{
|
||||
enum Ability ability = gAiLogicData->abilities[battler];
|
||||
enum HoldEffect heldItemEffect = gAiLogicData->holdEffects[battler];
|
||||
enum BattlerId opposingBattler = GetOppositeBattler(battler);
|
||||
bool32 ignoreItem = ((gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) || ability == ABILITY_KLUTZ);
|
||||
if (gBattleMons[battler].status1 & STATUS1_ANY)
|
||||
return FALSE;
|
||||
if (IS_BATTLER_ANY_TYPE(battler, TYPE_POISON, TYPE_STEEL))
|
||||
return FALSE;
|
||||
if (ability == ABILITY_IMMUNITY || IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL))
|
||||
return FALSE;
|
||||
if ((heldItemEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS || heldItemEffect == HOLD_EFFECT_CURE_PSN || heldItemEffect == HOLD_EFFECT_CURE_STATUS) && !ignoreItem)
|
||||
return FALSE;
|
||||
if (!AI_IsBattlerGrounded(battler))
|
||||
return FALSE;
|
||||
if (IsMistyTerrainAffected(battler, ability, heldItemEffect, gFieldStatuses))
|
||||
return FALSE;
|
||||
if (IsLeafGuardProtected(battler, ability))
|
||||
return FALSE;
|
||||
if (IsShieldsDownProtected(battler, ability))
|
||||
return FALSE;
|
||||
if (IsFlowerVeilProtected(battler))
|
||||
return FALSE;
|
||||
if (IsSafeguardProtected(opposingBattler, battler, gAiLogicData->abilities[opposingBattler]))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static inline bool32 SetSwitchinAndSwitch(enum BattlerId battler, u32 switchinId)
|
||||
{
|
||||
gBattleStruct->AI_monToSwitchIntoId[battler] = switchinId;
|
||||
|
|
@ -1042,7 +1081,7 @@ static bool32 FindMonWithFlagsAndSuperEffective(enum BattlerId battler, u16 flag
|
|||
|
||||
for (u32 monIndex = firstId; monIndex < lastId; monIndex++)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
enum Ability monAbility;
|
||||
uq4_12_t typeMultiplier;
|
||||
u16 moveFlags = 0;
|
||||
|
|
@ -1488,6 +1527,51 @@ bool32 IsSwitchinValid(enum BattlerId battler)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static u32 GetSwitchinSingleUseItemHealing(enum BattlerId battler, enum BattlerId opposingBattler, s32 currentHP)
|
||||
{
|
||||
enum Item aiItem = gAiLogicData->items[battler];
|
||||
u32 maxHP = gBattleMons[battler].maxHP;
|
||||
s32 itemHeal = 0;
|
||||
|
||||
// Check if we're at a single use healing item threshold
|
||||
if (currentHP <= 0
|
||||
|| gAiLogicData->abilities[battler] == ABILITY_KLUTZ
|
||||
|| (gAiLogicData->abilities[opposingBattler] == ABILITY_UNNERVE && GetItemPocket(aiItem) == POCKET_BERRIES))
|
||||
return itemHeal;
|
||||
|
||||
switch (GetItemHoldEffect(aiItem))
|
||||
{
|
||||
case HOLD_EFFECT_RESTORE_HP:
|
||||
if (currentHP < maxHP / 2)
|
||||
itemHeal = GetItemHoldEffectParam(aiItem);
|
||||
break;
|
||||
case HOLD_EFFECT_RESTORE_PCT_HP:
|
||||
if (currentHP < maxHP / 2)
|
||||
{
|
||||
itemHeal = maxHP / GetItemHoldEffectParam(aiItem);
|
||||
if (itemHeal == 0)
|
||||
itemHeal = 1;
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_CONFUSE_SPICY:
|
||||
case HOLD_EFFECT_CONFUSE_DRY:
|
||||
case HOLD_EFFECT_CONFUSE_SWEET:
|
||||
case HOLD_EFFECT_CONFUSE_BITTER:
|
||||
case HOLD_EFFECT_CONFUSE_SOUR:
|
||||
if (currentHP < maxHP / CONFUSE_BERRY_HP_FRACTION)
|
||||
{
|
||||
itemHeal = maxHP / GetItemHoldEffectParam(aiItem);
|
||||
if (itemHeal == 0)
|
||||
itemHeal = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return itemHeal;
|
||||
}
|
||||
|
||||
// Gets hazard damage
|
||||
static u32 GetSwitchinHazardsDamage(enum BattlerId battler)
|
||||
{
|
||||
|
|
@ -1681,7 +1765,6 @@ static u32 GetSwitchinRecurringDamage(enum BattlerId battler)
|
|||
static u32 GetSwitchinStatusDamage(enum BattlerId battler)
|
||||
{
|
||||
u8 tSpikesLayers = gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount;
|
||||
enum HoldEffect heldItemEffect = gAiLogicData->holdEffects[battler];
|
||||
u32 status = gBattleMons[battler].status1;
|
||||
enum Ability ability = gAiLogicData->abilities[battler];
|
||||
u32 maxHP = gBattleMons[battler].maxHP;
|
||||
|
|
@ -1729,13 +1812,7 @@ static u32 GetSwitchinStatusDamage(enum BattlerId battler)
|
|||
|
||||
// Apply hypothetical poisoning from Toxic Spikes, which means the first turn of damage already added in GetSwitchinHazardsDamage
|
||||
// Do this last to skip one iteration of Poison / Toxic damage, and start counting Toxic damage one turn later.
|
||||
if (tSpikesLayers != 0 && (!IS_BATTLER_ANY_TYPE(battler, TYPE_POISON, TYPE_STEEL)
|
||||
&& ability != ABILITY_IMMUNITY && ability != ABILITY_POISON_HEAL && ability != ABILITY_PASTEL_VEIL
|
||||
&& status == 0
|
||||
&& !(heldItemEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS
|
||||
&& (((gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) || ability == ABILITY_KLUTZ)))
|
||||
&& heldItemEffect != HOLD_EFFECT_CURE_PSN && heldItemEffect != HOLD_EFFECT_CURE_STATUS
|
||||
&& AI_IsBattlerGrounded(battler)))
|
||||
if (tSpikesLayers != 0 && IsSwitchinTSpikesAffected(battler))
|
||||
{
|
||||
if (tSpikesLayers == 1)
|
||||
{
|
||||
|
|
@ -1777,7 +1854,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, enum BattlerId battler, const st
|
|||
u32 statusDamage = GetSwitchinStatusDamage(battler);
|
||||
u32 hitsToKO = 0;
|
||||
u16 maxHP = gBattleMons[battler].maxHP, item = gAiLogicData->items[battler], heldItemEffect = GetItemHoldEffect(item);
|
||||
u8 weatherDuration = gBattleStruct->weatherDuration, holdEffectParam = GetItemHoldEffectParam(item);
|
||||
u8 weatherDuration = gBattleStruct->weatherDuration;
|
||||
enum BattlerId opposingBattler = GetOppositeBattler(battler);
|
||||
enum Ability opposingAbility = gAiLogicData->abilities[opposingBattler], ability = gAiLogicData->abilities[battler];
|
||||
bool32 usedSingleUseHealingItem = FALSE, opponentCanBreakMold = IsMoldBreakerTypeAbility(opposingBattler, opposingAbility);
|
||||
|
|
@ -1811,37 +1888,9 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, enum BattlerId battler, const st
|
|||
currentHP = currentHP - weatherImpact;
|
||||
|
||||
// Check if we're at a single use healing item threshold
|
||||
if (currentHP > 0 && gAiLogicData->abilities[battler] != ABILITY_KLUTZ && usedSingleUseHealingItem == FALSE
|
||||
&& !(opposingAbility == ABILITY_UNNERVE && GetItemPocket(item) == POCKET_BERRIES))
|
||||
if (usedSingleUseHealingItem == FALSE)
|
||||
{
|
||||
switch (heldItemEffect)
|
||||
{
|
||||
case HOLD_EFFECT_RESTORE_HP:
|
||||
if (currentHP < maxHP / 2)
|
||||
singleUseItemHeal = holdEffectParam;
|
||||
break;
|
||||
case HOLD_EFFECT_RESTORE_PCT_HP:
|
||||
if (currentHP < maxHP / 2)
|
||||
{
|
||||
singleUseItemHeal = maxHP / holdEffectParam;
|
||||
if (singleUseItemHeal == 0)
|
||||
singleUseItemHeal = 1;
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_CONFUSE_SPICY:
|
||||
case HOLD_EFFECT_CONFUSE_DRY:
|
||||
case HOLD_EFFECT_CONFUSE_SWEET:
|
||||
case HOLD_EFFECT_CONFUSE_BITTER:
|
||||
case HOLD_EFFECT_CONFUSE_SOUR:
|
||||
if (currentHP < maxHP / CONFUSE_BERRY_HP_FRACTION)
|
||||
{
|
||||
singleUseItemHeal = maxHP / holdEffectParam;
|
||||
if (singleUseItemHeal == 0)
|
||||
singleUseItemHeal = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
singleUseItemHeal = GetSwitchinSingleUseItemHealing(battler, opposingBattler, currentHP);
|
||||
// If we used one, apply it without overcapping our maxHP
|
||||
if (singleUseItemHeal > 0)
|
||||
{
|
||||
|
|
@ -2611,3 +2660,194 @@ u32 AI_SelectRevivalBlessingMon(enum BattlerId battler)
|
|||
|
||||
return bestMonId;
|
||||
}
|
||||
|
||||
static void SetBattlerStatusForSwitchin(enum BattlerId battler)
|
||||
{
|
||||
u32 tSpikesLayers = gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount;
|
||||
if (tSpikesLayers != 0 && IsSwitchinTSpikesAffected(battler))
|
||||
{
|
||||
if (tSpikesLayers == 1)
|
||||
gBattleMons[battler].status1 = STATUS1_POISON;
|
||||
if (tSpikesLayers == 2)
|
||||
{
|
||||
gBattleMons[battler].status1 = STATUS1_TOXIC_POISON;
|
||||
gBattleMons[battler].status1 += STATUS1_TOXIC_TURN(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SetBattlerStatStagesForSwitchin(enum BattlerId battler, enum BattlerId opposingBattler, u32 fieldStatus)
|
||||
{
|
||||
u32 aiAbility = gAiLogicData->abilities[battler];
|
||||
enum Item aiItem = gAiLogicData->items[battler];
|
||||
bool32 isStickyWebsAffected = (IsHazardOnSide(GetBattlerSide(battler), HAZARDS_STICKY_WEB) && IsBattlerAffectedByHazards(battler, GetItemHoldEffect(aiItem), FALSE) && IsBattlerGrounded(battler, gAiLogicData->abilities[battler], GetItemHoldEffect(aiItem)));
|
||||
bool32 opponentStatDrop = FALSE;
|
||||
|
||||
// Ability stat changes
|
||||
switch(aiAbility)
|
||||
{
|
||||
case ABILITY_INTREPID_SWORD:
|
||||
gBattleMons[battler].statStages[STAT_ATK] += 1;
|
||||
break;
|
||||
case ABILITY_DAUNTLESS_SHIELD:
|
||||
gBattleMons[battler].statStages[STAT_DEF] += 1;
|
||||
break;
|
||||
case ABILITY_SUPREME_OVERLORD:
|
||||
break;
|
||||
case ABILITY_DOWNLOAD:
|
||||
gBattleMons[battler].statStages[GetDownloadStat(battler)] += 1;
|
||||
break;
|
||||
case ABILITY_INTIMIDATE:
|
||||
if (CanLowerStat(battler, opposingBattler, gAiLogicData, STAT_ATK))
|
||||
{
|
||||
if (gAiLogicData->abilities[opposingBattler] == ABILITY_CONTRARY)
|
||||
{
|
||||
gBattleMons[opposingBattler].statStages[STAT_ATK] += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
opponentStatDrop = TRUE;
|
||||
gBattleMons[opposingBattler].statStages[STAT_ATK] -= 1;
|
||||
if (gAiLogicData->abilities[opposingBattler] == ABILITY_DEFIANT)
|
||||
gBattleMons[opposingBattler].statStages[STAT_ATK] += 2;
|
||||
if (gAiLogicData->abilities[opposingBattler] == ABILITY_COMPETITIVE)
|
||||
gBattleMons[opposingBattler].statStages[STAT_SPATK] += 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ABILITY_SUPERSWEET_SYRUP:
|
||||
if (CanLowerStat(battler, opposingBattler, gAiLogicData, STAT_EVASION))
|
||||
{
|
||||
if (gAiLogicData->abilities[opposingBattler] == ABILITY_CONTRARY)
|
||||
{
|
||||
gBattleMons[opposingBattler].statStages[STAT_EVASION] += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
opponentStatDrop = TRUE;
|
||||
gBattleMons[opposingBattler].statStages[STAT_EVASION] -= 1;
|
||||
if (gAiLogicData->abilities[opposingBattler] == ABILITY_DEFIANT)
|
||||
gBattleMons[opposingBattler].statStages[STAT_ATK] += 2;
|
||||
if (gAiLogicData->abilities[opposingBattler] == ABILITY_COMPETITIVE)
|
||||
gBattleMons[opposingBattler].statStages[STAT_SPATK] += 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ABILITY_WIND_RIDER:
|
||||
if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_TAILWIND)
|
||||
gBattleMons[battler].statStages[STAT_ATK] += 1;
|
||||
break;
|
||||
case ABILITY_DEFIANT:
|
||||
if (isStickyWebsAffected)
|
||||
gBattleMons[battler].statStages[STAT_ATK] += 2;
|
||||
break;
|
||||
case ABILITY_COMPETITIVE:
|
||||
if (isStickyWebsAffected)
|
||||
gBattleMons[battler].statStages[STAT_SPATK] += 2;
|
||||
break;
|
||||
case ABILITY_CONTRARY:
|
||||
if (isStickyWebsAffected)
|
||||
gBattleMons[battler].statStages[STAT_SPEED] += 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Item stat changes
|
||||
switch(GetItemHoldEffect(aiItem))
|
||||
{
|
||||
case HOLD_EFFECT_TERRAIN_SEED:
|
||||
u32 seedParam = GetItemHoldEffectParam(aiItem);
|
||||
if ((seedParam == HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN && (fieldStatus & STATUS_FIELD_ELECTRIC_TERRAIN))
|
||||
|| (seedParam == HOLD_EFFECT_PARAM_GRASSY_TERRAIN && (fieldStatus & STATUS_FIELD_GRASSY_TERRAIN))
|
||||
|| (seedParam == HOLD_EFFECT_PARAM_MISTY_TERRAIN && (fieldStatus & STATUS_FIELD_MISTY_TERRAIN))
|
||||
|| (seedParam == HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN && (fieldStatus & STATUS_FIELD_PSYCHIC_TERRAIN)))
|
||||
gBattleMons[battler].statStages[STAT_DEF] += 1;
|
||||
break;
|
||||
case HOLD_EFFECT_ATTACK_UP:
|
||||
if (HasEnoughHpToEatBerry(battler, aiAbility, GetItemHoldEffectParam(aiItem), aiItem))
|
||||
gBattleMons[battler].statStages[STAT_ATK] += 1;
|
||||
break;
|
||||
case HOLD_EFFECT_DEFENSE_UP:
|
||||
if (HasEnoughHpToEatBerry(battler, aiAbility, GetItemHoldEffectParam(aiItem), aiItem))
|
||||
gBattleMons[battler].statStages[STAT_DEF] += 1;
|
||||
break;
|
||||
case HOLD_EFFECT_SPEED_UP:
|
||||
if (HasEnoughHpToEatBerry(battler, aiAbility, GetItemHoldEffectParam(aiItem), aiItem))
|
||||
gBattleMons[battler].statStages[STAT_SPEED] += 1;
|
||||
break;
|
||||
case HOLD_EFFECT_SP_ATTACK_UP:
|
||||
if (HasEnoughHpToEatBerry(battler, aiAbility, GetItemHoldEffectParam(aiItem), aiItem))
|
||||
gBattleMons[battler].statStages[STAT_SPATK] += 1;
|
||||
break;
|
||||
case HOLD_EFFECT_SP_DEFENSE_UP:
|
||||
if (HasEnoughHpToEatBerry(battler, aiAbility, GetItemHoldEffectParam(aiItem), aiItem))
|
||||
gBattleMons[battler].statStages[STAT_SPDEF] += 1;
|
||||
break;
|
||||
case HOLD_EFFECT_ROOM_SERVICE:
|
||||
if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM)
|
||||
gBattleMons[battler].statStages[STAT_SPEED] -= 1;
|
||||
case HOLD_EFFECT_MIRROR_HERB:
|
||||
if (opponentStatDrop && gAiLogicData->abilities[opposingBattler] == ABILITY_DEFIANT)
|
||||
gBattleMons[battler].statStages[STAT_ATK] += 2;
|
||||
if (opponentStatDrop && gAiLogicData->abilities[opposingBattler] == ABILITY_COMPETITIVE)
|
||||
gBattleMons[battler].statStages[STAT_SPATK] += 2;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Hazard stat changes
|
||||
if (isStickyWebsAffected && GetItemHoldEffect(aiItem) != HOLD_EFFECT_WHITE_HERB)
|
||||
gBattleMons[battler].statStages[STAT_SPEED] -= 1;
|
||||
}
|
||||
|
||||
static void SetBattlerHPChangeForSwitch(enum BattlerId battler, enum BattlerId opposingBattler)
|
||||
{
|
||||
s32 maxHP = gBattleMons[battler].maxHP;
|
||||
s32 currentHP = gBattleMons[battler].hp - GetSwitchinHazardsDamage(battler);
|
||||
s32 itemHeal = GetSwitchinSingleUseItemHealing(battler, opposingBattler, currentHP);
|
||||
|
||||
if (itemHeal > 0)
|
||||
{
|
||||
if ((currentHP + itemHeal) > maxHP)
|
||||
currentHP = maxHP;
|
||||
else
|
||||
currentHP = currentHP + itemHeal;
|
||||
}
|
||||
gBattleMons[battler].hp = currentHP;
|
||||
}
|
||||
|
||||
// Set potential field effect from ability for switch in
|
||||
static void SetBattlerVolatilesForSwitchin(enum BattlerId battler, u32 weather, u32 fieldStatus)
|
||||
{
|
||||
enum Item aiItem = gAiLogicData->items[battler];
|
||||
switch (gAiLogicData->abilities[battler])
|
||||
{
|
||||
case ABILITY_VESSEL_OF_RUIN:
|
||||
gBattleMons[battler].volatiles.vesselOfRuin = TRUE;
|
||||
break;
|
||||
case ABILITY_SWORD_OF_RUIN:
|
||||
gBattleMons[battler].volatiles.swordOfRuin = TRUE;
|
||||
break;
|
||||
case ABILITY_TABLETS_OF_RUIN:
|
||||
gBattleMons[battler].volatiles.tabletsOfRuin = TRUE;
|
||||
break;
|
||||
case ABILITY_BEADS_OF_RUIN:
|
||||
gBattleMons[battler].volatiles.beadsOfRuin = TRUE;
|
||||
break;
|
||||
case ABILITY_QUARK_DRIVE:
|
||||
if ((fieldStatus & STATUS_FIELD_ELECTRIC_TERRAIN) || GetItemHoldEffect(aiItem) == HOLD_EFFECT_BOOSTER_ENERGY)
|
||||
gBattleMons[battler].volatiles.boosterEnergyActivated = TRUE;
|
||||
break;
|
||||
case ABILITY_PROTOSYNTHESIS:
|
||||
if (((weather & B_WEATHER_SUN) && HasWeatherEffect()) || GetItemHoldEffect(aiItem) == HOLD_EFFECT_BOOSTER_ENERGY)
|
||||
gBattleMons[battler].volatiles.boosterEnergyActivated = TRUE;
|
||||
break;
|
||||
case ABILITY_WIND_POWER:
|
||||
if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_TAILWIND)
|
||||
gBattleMons[battler].volatiles.chargeTimer = 2;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include "constants/moves.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
static void AI_SetBattlerTurnOrder(u8 *aiTurnOrder);
|
||||
static u32 GetAIEffectGroup(enum BattleMoveEffects effect);
|
||||
static u32 GetAIEffectGroupFromMove(enum BattlerId battler, enum Move move);
|
||||
|
||||
|
|
@ -298,7 +299,7 @@ bool32 ShouldRecordStatusMove(enum Move move)
|
|||
return RandomPercentage(RNG_AI_ASSUME_ALL_STATUS, ASSUME_ALL_STATUS_ODDS) && IsBattleMoveStatus(move);
|
||||
}
|
||||
|
||||
static bool32 ShouldFailForIllusion(u32 illusionSpecies, enum BattlerId battlerId)
|
||||
static bool32 ShouldFailForIllusion(enum Species illusionSpecies, enum BattlerId battlerId)
|
||||
{
|
||||
u32 learnsetMoveIndex;
|
||||
const struct LevelUpMove *learnset;
|
||||
|
|
@ -338,7 +339,7 @@ void SetBattlerData(enum BattlerId battlerId)
|
|||
{
|
||||
if (!BattlerHasAi(battlerId) && gAiThinkingStruct->saved[battlerId].saved)
|
||||
{
|
||||
u32 species, illusionSpecies;
|
||||
enum Species species, illusionSpecies;
|
||||
enum BattleSide side = GetBattlerSide(battlerId);
|
||||
|
||||
// Simulate Illusion
|
||||
|
|
@ -449,7 +450,7 @@ bool32 IsBattlerTrapped(enum BattlerId battlerAtk, enum BattlerId battlerDef)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
u32 GetTotalBaseStat(u32 species)
|
||||
u32 GetTotalBaseStat(enum Species species)
|
||||
{
|
||||
return GetSpeciesBaseHP(species)
|
||||
+ GetSpeciesBaseAttack(species)
|
||||
|
|
@ -889,6 +890,7 @@ struct SimulatedDamage AI_CalcDamage(enum Move move, enum BattlerId battlerAtk,
|
|||
ctx.abilityDef = AI_GetMoldBreakerSanitizedAbility(battlerAtk, ctx.abilityAtk, aiData->abilities[battlerDef], ctx.holdEffectDef, move);
|
||||
ctx.isCrit = ShouldCalcCritDamage(&ctx);
|
||||
ctx.typeEffectivenessModifier = CalcTypeEffectivenessMultiplier(&ctx);
|
||||
AI_SetBattlerTurnOrder(ctx.aiTurnOrder);
|
||||
|
||||
u32 movePower = GetMovePower(move);
|
||||
|
||||
|
|
@ -1873,6 +1875,7 @@ u32 AI_GetSwitchinWeather(enum BattlerId battler)
|
|||
case ABILITY_DRIZZLE:
|
||||
return B_WEATHER_RAIN_NORMAL;
|
||||
case ABILITY_DROUGHT:
|
||||
case ABILITY_ORICHALCUM_PULSE:
|
||||
return B_WEATHER_SUN_NORMAL;
|
||||
case ABILITY_SAND_STREAM:
|
||||
return B_WEATHER_SANDSTORM;
|
||||
|
|
@ -4531,28 +4534,6 @@ void FreeRestoreAiLogicData(struct AiLogicData *savedAiLogicData)
|
|||
Free(savedAiLogicData);
|
||||
}
|
||||
|
||||
// Set potential field effect from ability for switch in
|
||||
void SetBattlerFieldStatusForSwitchin(enum BattlerId battler)
|
||||
{
|
||||
switch (gAiLogicData->abilities[battler])
|
||||
{
|
||||
case ABILITY_VESSEL_OF_RUIN:
|
||||
gBattleMons[battler].volatiles.vesselOfRuin = TRUE;
|
||||
break;
|
||||
case ABILITY_SWORD_OF_RUIN:
|
||||
gBattleMons[battler].volatiles.swordOfRuin = TRUE;
|
||||
break;
|
||||
case ABILITY_TABLETS_OF_RUIN:
|
||||
gBattleMons[battler].volatiles.tabletsOfRuin = TRUE;
|
||||
break;
|
||||
case ABILITY_BEADS_OF_RUIN:
|
||||
gBattleMons[battler].volatiles.beadsOfRuin = TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// party logic
|
||||
s32 CountUsablePartyMons(enum BattlerId battlerId)
|
||||
{
|
||||
|
|
@ -6443,3 +6424,23 @@ bool32 IsPartyMonPlannedToBeSwitchedInByPartner(u32 partyIndex, enum BattlerId b
|
|||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void AI_SetBattlerTurnOrder(u8 *aiTurnOrder)
|
||||
{
|
||||
for (u32 battler = 0; battler < gBattlersCount; battler++)
|
||||
aiTurnOrder[battler] = battler;
|
||||
|
||||
for (u32 i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
for (u32 j = 0; j < gBattlersCount; j++)
|
||||
{
|
||||
if (AI_WhoStrikesFirst(aiTurnOrder[i], aiTurnOrder[j], MOVE_NONE, MOVE_NONE, DONT_CONSIDER_PRIORITY) == AI_IS_FASTER)
|
||||
{
|
||||
u32 temp = aiTurnOrder[i];
|
||||
aiTurnOrder[i] = aiTurnOrder[j];
|
||||
aiTurnOrder[j] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ EWRAM_DATA static u8 sAnimBackgroundFadeState = 0;
|
|||
EWRAM_DATA u16 gAnimMoveIndex = 0;
|
||||
EWRAM_DATA enum BattlerId gBattleAnimAttacker = 0;
|
||||
EWRAM_DATA enum BattlerId gBattleAnimTarget = 0;
|
||||
EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA enum Species gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {SPECIES_NONE};
|
||||
EWRAM_DATA u8 gAnimCustomPanning = 0;
|
||||
EWRAM_DATA static bool8 sAnimHideHpBoxes = FALSE;
|
||||
|
||||
|
|
|
|||
|
|
@ -907,7 +907,7 @@ void AnimTask_MetallicShine(u8 taskId)
|
|||
{
|
||||
CMD_ARGS(permanent, useColor, color);
|
||||
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 spriteId;
|
||||
u8 newSpriteId;
|
||||
u16 paletteNum;
|
||||
|
|
|
|||
|
|
@ -3372,7 +3372,7 @@ void AnimTask_RolePlaySilhouette(u8 taskId)
|
|||
{
|
||||
bool8 isBackPic, isShiny;
|
||||
u32 personality;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
s16 xOffset;
|
||||
u32 priority;
|
||||
u8 spriteId;
|
||||
|
|
@ -5259,7 +5259,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
|
|||
{
|
||||
u8 spriteId, spriteId2;
|
||||
int personality;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 subpriority;
|
||||
bool8 isBackPic, isShiny;
|
||||
s16 x;
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ static const struct SpriteSheet sSpriteSheets_MoveEffectMons[] =
|
|||
u8 GetBattlerSpriteCoord(enum BattlerId battler, u8 coordType)
|
||||
{
|
||||
u8 retVal;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
struct Pokemon *mon, *illusionMon;
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
|
||||
|
|
@ -130,7 +130,7 @@ u8 GetBattlerSpriteCoord(enum BattlerId battler, u8 coordType)
|
|||
return retVal;
|
||||
}
|
||||
|
||||
u8 GetBattlerYDelta(enum BattlerId battler, u16 species)
|
||||
u8 GetBattlerYDelta(enum BattlerId battler, enum Species species)
|
||||
{
|
||||
u32 personality;
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
|
|
@ -168,7 +168,7 @@ u8 GetBattlerYDelta(enum BattlerId battler, u16 species)
|
|||
return ret;
|
||||
}
|
||||
|
||||
u8 GetBattlerElevation(enum BattlerId battler, u16 species)
|
||||
u8 GetBattlerElevation(enum BattlerId battler, enum Species species)
|
||||
{
|
||||
u8 ret = 0;
|
||||
if (!IsOnPlayerSide(battler))
|
||||
|
|
@ -182,7 +182,7 @@ u8 GetBattlerElevation(enum BattlerId battler, u16 species)
|
|||
return ret;
|
||||
}
|
||||
|
||||
u8 GetBattlerSpriteFinal_Y(enum BattlerId battler, u16 species, bool8 a3)
|
||||
u8 GetBattlerSpriteFinal_Y(enum BattlerId battler, enum Species species, bool32 a3)
|
||||
{
|
||||
u16 offset;
|
||||
u8 y;
|
||||
|
|
@ -209,7 +209,7 @@ u8 GetBattlerSpriteFinal_Y(enum BattlerId battler, u16 species, bool8 a3)
|
|||
|
||||
u8 GetBattlerSpriteCoord2(enum BattlerId battler, u8 coordType)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
|
||||
if (coordType == BATTLER_COORD_Y_PIC_OFFSET || coordType == BATTLER_COORD_Y_PIC_OFFSET_DEFAULT)
|
||||
|
|
@ -257,7 +257,7 @@ u8 GetSubstituteSpriteDefault_Y(enum BattlerId battler)
|
|||
|
||||
u8 GetBattlerYCoordWithElevation(enum BattlerId battler)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 y;
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
|
||||
|
|
@ -1870,7 +1870,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
|
|||
{
|
||||
struct BattleSpriteInfo *spriteInfo;
|
||||
enum BattlerId battler = gSprites[spriteId].data[0];
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
|
|
@ -2040,7 +2040,7 @@ u8 GetBattlerSpriteBGPriorityRank(enum BattlerId battler)
|
|||
}
|
||||
|
||||
// Create Pokémon sprite to be used for a move animation effect (e.g. Role Play / Snatch)
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool8 isShiny, enum BattlerId battler)
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(enum Species species, bool32 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool32 isShiny, enum BattlerId battler)
|
||||
{
|
||||
u8 spriteId;
|
||||
u16 sheet = LoadSpriteSheet(&sSpriteSheets_MoveEffectMons[id]);
|
||||
|
|
@ -2088,7 +2088,7 @@ void DestroySpriteAndFreeResources_(struct Sprite *sprite)
|
|||
|
||||
s16 GetBattlerSpriteCoordAttr(enum BattlerId battler, u8 attr)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u32 personality;
|
||||
int ret;
|
||||
u8 size;
|
||||
|
|
@ -2244,7 +2244,7 @@ void SetToPartnerPositions(enum BattlerId battler, bool8 respectMonPicOffsets, s
|
|||
*y = returnY;
|
||||
}
|
||||
|
||||
u8 CreateInvisibleSpriteCopy(int battler, u8 spriteId, int species)
|
||||
u8 CreateInvisibleSpriteCopy(enum BattlerId battler, u8 spriteId, enum Species species)
|
||||
{
|
||||
u8 newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
|
||||
gSprites[newSpriteId] = gSprites[spriteId];
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId)
|
|||
|
||||
void SoundTask_PlayCryHighPitch(u8 taskId)
|
||||
{
|
||||
u16 species = 0;
|
||||
enum Species species = 0;
|
||||
s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
|
||||
enum AnimBattler animBattler = gBattleAnimArgs[0];
|
||||
if (IsContest())
|
||||
|
|
@ -186,7 +186,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
|
|||
|
||||
void SoundTask_PlayDoubleCry(u8 taskId)
|
||||
{
|
||||
u16 species = 0;
|
||||
enum Species species = 0;
|
||||
s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
|
||||
enum AnimBattler animBattler = gBattleAnimArgs[0];
|
||||
if (IsContest())
|
||||
|
|
@ -252,7 +252,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
|
|||
|
||||
static void SoundTask_PlayDoubleCry_Step(u8 taskId)
|
||||
{
|
||||
u16 species = gTasks[taskId].data[1];
|
||||
enum Species species = gTasks[taskId].data[1];
|
||||
s8 pan = gTasks[taskId].data[2];
|
||||
|
||||
if (gTasks[taskId].data[9] < 2)
|
||||
|
|
@ -295,7 +295,7 @@ void SoundTask_WaitForCry(u8 taskId)
|
|||
|
||||
void SoundTask_PlayNormalCry(u8 taskId)
|
||||
{
|
||||
u16 species = (GetIllusionMonSpecies(gBattleAnimAttacker) != SPECIES_NONE) ? GetIllusionMonSpecies(gBattleAnimAttacker) : gAnimBattlerSpecies[gBattleAnimAttacker];
|
||||
enum Species species = (GetIllusionMonSpecies(gBattleAnimAttacker) != SPECIES_NONE) ? GetIllusionMonSpecies(gBattleAnimAttacker) : gAnimBattlerSpecies[gBattleAnimAttacker];
|
||||
PlayCry_ByMode(species, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER), CRY_MODE_NORMAL);
|
||||
gTasks[taskId].func = SoundTask_WaitForCry;
|
||||
}
|
||||
|
|
@ -307,7 +307,7 @@ void SoundTask_PlayNormalCry(u8 taskId)
|
|||
|
||||
void SoundTask_PlayCryWithEcho(u8 taskId)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
s8 pan;
|
||||
|
||||
gTasks[taskId].tLastCry = gBattleAnimArgs[0];
|
||||
|
|
@ -329,14 +329,14 @@ void SoundTask_PlayCryWithEcho(u8 taskId)
|
|||
|
||||
void SoundTask_PlayDynamaxCry(u8 taskId)
|
||||
{
|
||||
u16 species = (GetIllusionMonSpecies(gBattleAnimAttacker) != SPECIES_NONE) ? GetIllusionMonSpecies(gBattleAnimAttacker) : gAnimBattlerSpecies[gBattleAnimAttacker];
|
||||
enum Species species = (GetIllusionMonSpecies(gBattleAnimAttacker) != SPECIES_NONE) ? GetIllusionMonSpecies(gBattleAnimAttacker) : gAnimBattlerSpecies[gBattleAnimAttacker];
|
||||
PlayCry_ByMode(species, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER), CRY_MODE_DYNAMAX);
|
||||
gTasks[taskId].func = SoundTask_WaitForCry;
|
||||
}
|
||||
|
||||
static void SoundTask_PlayCryWithEcho_Step(u8 taskId)
|
||||
{
|
||||
u16 species = gTasks[taskId].tSpecies;
|
||||
enum Species species = gTasks[taskId].tSpecies;
|
||||
s8 pan = gTasks[taskId].tPan;
|
||||
|
||||
// Note the cases are not in order of execution
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ struct AnimStatsChangeData
|
|||
enum BattlerId battler2;
|
||||
bool8 hidBattler2;
|
||||
s16 data[8];
|
||||
u16 species;
|
||||
enum Species species;
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct AnimStatsChangeData *sAnimStatsChangeData = {0};
|
||||
|
|
@ -248,7 +248,7 @@ static void AnimMonTrace(struct Sprite *sprite)
|
|||
// Only used by Curse for non-Ghost mons
|
||||
void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
int spriteId, newSpriteId;
|
||||
u16 var0;
|
||||
u32 bg1Cnt;
|
||||
|
|
@ -770,7 +770,7 @@ void AnimTask_SetAllNonAttackersInvisiblity(u8 taskId)
|
|||
|
||||
void StartMonScrollingBgMask(u8 taskId, int UNUSED unused, u16 scrollSpeed, enum BattlerId battler, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u16 *palette)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 spriteId, spriteId2;
|
||||
u32 bg1Cnt;
|
||||
struct BattleAnimBgData animBgData;
|
||||
|
|
|
|||
|
|
@ -846,7 +846,7 @@ static void OakOldManHandlePlaySE(enum BattlerId battler)
|
|||
|
||||
static void OakOldManHandleFaintingCry(enum BattlerId battler)
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES);
|
||||
|
||||
PlayCry_Normal(species, 25);
|
||||
OakOldManBufferExecCompleted(battler);
|
||||
|
|
|
|||
|
|
@ -1424,7 +1424,7 @@ static void Task_GiveExpToMon(u8 taskId)
|
|||
if (GetBattlerCoordsIndex(battler) == BATTLE_COORDS_DOUBLES || monId != gBattlerPartyIndexes[battler]) // Give exp without moving the expbar.
|
||||
{
|
||||
struct Pokemon *mon = &gPlayerParty[monId];
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u8 level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
u32 currExp = GetMonData(mon, MON_DATA_EXP);
|
||||
u32 nextLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level + 1];
|
||||
|
|
@ -1471,7 +1471,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
|
|||
enum BattlerId battler = gTasks[taskId].tExpTask_battler;
|
||||
struct Pokemon *mon = &gPlayerParty[monIndex];
|
||||
u8 level = GetMonData(mon, MON_DATA_LEVEL);
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 exp = GetMonData(mon, MON_DATA_EXP);
|
||||
u32 currLvlExp = gExperienceTables[gSpeciesInfo[species].growthRate][level];
|
||||
u32 expToNextLvl;
|
||||
|
|
@ -1487,7 +1487,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
|
|||
static void Task_GiveExpWithExpBar(u8 taskId)
|
||||
{
|
||||
u32 level, expAfterGain;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u32 oldMaxHP;
|
||||
s32 currExp, expOnNextLvl, newExpPoints;
|
||||
|
||||
|
|
@ -1710,7 +1710,7 @@ static void MoveSelectionDisplayPpNumber(enum BattlerId battler)
|
|||
static void MoveSelectionDisplayMoveType(enum BattlerId battler)
|
||||
{
|
||||
u8 *txtPtr, *end;
|
||||
u32 speciesId = gBattleMons[battler].species;
|
||||
enum Species speciesId = gBattleMons[battler].species;
|
||||
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
|
||||
txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
|
||||
enum Move move = moveInfo->moves[gMoveSelectionCursor[battler]];
|
||||
|
|
|
|||
|
|
@ -343,7 +343,7 @@ static void SafariHandleChoosePokemon(enum BattlerId battler)
|
|||
// Player is not a pokemon, so it can't really faint in the Safari anyway.
|
||||
static void SafariHandleFaintingCry(enum BattlerId battler)
|
||||
{
|
||||
u16 species = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES);
|
||||
|
||||
PlayCry_Normal(species, 25);
|
||||
BtlController_Complete(battler);
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@ static void WallyHandleChooseItem(enum BattlerId battler)
|
|||
// Wally's Pokémon during the tutorial is never intended to faint, so that's probably why it's different here.
|
||||
static void WallyHandleFaintingCry(enum BattlerId battler)
|
||||
{
|
||||
u16 species = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES);
|
||||
|
||||
PlayCry_Normal(species, 25);
|
||||
BtlController_Complete(battler);
|
||||
|
|
|
|||
|
|
@ -385,7 +385,7 @@ static void InitBtlControllersInternal(void)
|
|||
|
||||
bool32 IsValidForBattle(struct Pokemon *mon)
|
||||
{
|
||||
u32 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
|
||||
return (species != SPECIES_NONE
|
||||
&& species != SPECIES_EGG
|
||||
&& GetMonData(mon, MON_DATA_HP) != 0
|
||||
|
|
@ -394,7 +394,7 @@ bool32 IsValidForBattle(struct Pokemon *mon)
|
|||
|
||||
bool32 IsValidForBattleButDead(struct Pokemon *mon)
|
||||
{
|
||||
u32 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
|
||||
return (species != SPECIES_NONE
|
||||
&& species != SPECIES_EGG
|
||||
&& GetMonData(mon, MON_DATA_IS_EGG) == FALSE);
|
||||
|
|
@ -1993,7 +1993,7 @@ static bool8 ShouldDoSlideInAnim(enum BattlerId battler)
|
|||
|
||||
void StartSendOutAnim(enum BattlerId battler, bool32 dontClearTransform, bool32 dontClearSubstituteBit, bool32 doSlideIn)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
struct Pokemon *mon = GetBattlerMon(battler);
|
||||
u32 sendoutType;
|
||||
|
||||
|
|
@ -2337,7 +2337,7 @@ void BtlController_HandleLoadMonSprite(enum BattlerId battler)
|
|||
{
|
||||
u32 y;
|
||||
struct Pokemon *mon = GetBattlerMon(battler);
|
||||
u16 species = GetBattlerVisualSpecies(battler);
|
||||
enum Species species = GetBattlerVisualSpecies(battler);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_GHOST && GetBattlerSide(battler) == B_SIDE_OPPONENT)
|
||||
{
|
||||
|
|
@ -3059,7 +3059,7 @@ static void AnimateMonAfterKnockout(enum BattlerId battler)
|
|||
|
||||
static void LaunchKOAnimation(enum BattlerId battlerId, u16 animId, bool32 isFront)
|
||||
{
|
||||
u32 species = GetBattlerVisualSpecies(battlerId);
|
||||
enum Species species = GetBattlerVisualSpecies(battlerId);
|
||||
u32 spriteId = gBattlerSpriteIds[battlerId];
|
||||
|
||||
gBattleStruct->battlerKOAnimsRunning++;
|
||||
|
|
@ -3081,7 +3081,7 @@ static void LaunchKOAnimation(enum BattlerId battlerId, u16 animId, bool32 isFro
|
|||
|
||||
static u32 ReturnAnimIdForBattler(bool32 wasPlayerSideKnockedOut, u32 specificBattler)
|
||||
{
|
||||
u32 species = GetBattlerVisualSpecies(specificBattler);
|
||||
enum Species species = GetBattlerVisualSpecies(specificBattler);
|
||||
if (wasPlayerSideKnockedOut)
|
||||
return gSpeciesInfo[species].frontAnimId;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1068,7 +1068,7 @@ static void Task_ShowAiParty(u8 taskId)
|
|||
aiMons = gAiPartyData->mons[GetBattlerSide(data->aiBattlerId)];
|
||||
for (i = 0; i < gAiPartyData->count[GetBattlerSide(data->aiBattlerId)]; i++)
|
||||
{
|
||||
u16 species = SPECIES_NONE; // Question mark
|
||||
enum Species species = SPECIES_NONE; // Question mark
|
||||
if (aiMons[i].wasSentInBattle && aiMons[i].species)
|
||||
species = aiMons[i].species;
|
||||
data->spriteIds.aiPartyIcons[i] = CreateMonIcon(species, SpriteCallbackDummy, (i * 41) + 15, 7, 1, 0);
|
||||
|
|
|
|||
|
|
@ -1911,7 +1911,7 @@ static void InitDomeTrainers(void)
|
|||
{
|
||||
int i, j, k;
|
||||
int monLevel;
|
||||
int species[FRONTIER_PARTY_SIZE];
|
||||
enum Species species[FRONTIER_PARTY_SIZE];
|
||||
int monTypesBits, monTypesCount;
|
||||
int trainerId;
|
||||
int monId;
|
||||
|
|
@ -1919,9 +1919,9 @@ static void InitDomeTrainers(void)
|
|||
int *statValues;
|
||||
u8 ivs = 0;
|
||||
|
||||
species[0] = 0;
|
||||
species[1] = 0;
|
||||
species[2] = 0;
|
||||
species[0] = SPECIES_NONE;
|
||||
species[1] = SPECIES_NONE;
|
||||
species[2] = SPECIES_NONE;
|
||||
rankingScores = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT);
|
||||
statValues = AllocZeroed(sizeof(int) * NUM_STATS);
|
||||
|
||||
|
|
@ -4017,7 +4017,7 @@ static bool32 IsDomeStatusMoveEffect(enum Move move)
|
|||
static bool32 IsDomeRareMove(enum Move move)
|
||||
{
|
||||
u16 i, j;
|
||||
u16 species = 0;
|
||||
enum Species species = SPECIES_NONE;
|
||||
for (i = 0; i < NUM_SPECIES; i++)
|
||||
{
|
||||
if (!IsSpeciesEnabled(i))
|
||||
|
|
@ -5125,7 +5125,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
|||
for (k = 0; k < FRONTIER_PARTY_SIZE; k++)
|
||||
{
|
||||
u32 personality = 0;
|
||||
u32 targetSpecies = 0;
|
||||
enum Species targetSpecies = SPECIES_NONE;
|
||||
enum Ability targetAbility = ABILITY_NONE;
|
||||
uq4_12_t typeMultiplier = 0;
|
||||
do
|
||||
|
|
@ -5724,7 +5724,7 @@ static void InitRandomTourneyTreeResults(void)
|
|||
{
|
||||
int i, j, k;
|
||||
int monLevel;
|
||||
int species[FRONTIER_PARTY_SIZE];
|
||||
enum Species species[FRONTIER_PARTY_SIZE];
|
||||
int monTypesBits;
|
||||
int trainerId;
|
||||
int monId;
|
||||
|
|
@ -5735,9 +5735,9 @@ static void InitRandomTourneyTreeResults(void)
|
|||
int *statValues;
|
||||
u8 ivs = 0;
|
||||
|
||||
species[0] = 0;
|
||||
species[1] = 0;
|
||||
species[2] = 0;
|
||||
species[0] = SPECIES_NONE;
|
||||
species[1] = SPECIES_NONE;
|
||||
species[2] = SPECIES_NONE;
|
||||
if ((gSaveBlock2Ptr->frontier.domeLvlMode != -gSaveBlock2Ptr->frontier.domeBattleMode) && gSaveBlock2Ptr->frontier.challengeStatus != CHALLENGE_STATUS_SAVING)
|
||||
return;
|
||||
|
||||
|
|
@ -5894,7 +5894,7 @@ static void DecideRoundWinners(u8 roundId)
|
|||
int i;
|
||||
int moveSlot, monId1, monId2;
|
||||
int tournamentId1, tournamentId2;
|
||||
int species;
|
||||
enum Species species;
|
||||
int points1 = 0, points2 = 0;
|
||||
|
||||
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ static enum MaxPowerTier GetMaxPowerTier(enum Move move);
|
|||
|
||||
struct GMaxMove
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
enum Type moveType;
|
||||
u16 gmaxMove;
|
||||
};
|
||||
|
|
@ -72,7 +72,7 @@ static const struct GMaxMove sGMaxMoveTable[] =
|
|||
// Returns whether a battler can Dynamax.
|
||||
bool32 CanDynamax(enum BattlerId battler)
|
||||
{
|
||||
u16 species = GetBattlerVisualSpecies(battler);
|
||||
enum Species species = GetBattlerVisualSpecies(battler);
|
||||
enum HoldEffect holdEffect = GetBattlerHoldEffectIgnoreNegation(battler);
|
||||
|
||||
// Prevents Zigzagoon from dynamaxing in vanilla.
|
||||
|
|
@ -244,8 +244,8 @@ static enum Move GetTypeBasedMaxMove(enum BattlerId battler, enum Type type)
|
|||
{
|
||||
// Gigantamax check
|
||||
u32 i;
|
||||
u32 species = gBattleMons[battler].species;
|
||||
u32 targetSpecies = species;
|
||||
enum Species species = gBattleMons[battler].species;
|
||||
enum Species targetSpecies = species;
|
||||
enum Ability ability = GetBattlerAbility(battler);
|
||||
|
||||
if (!gSpeciesInfo[species].isGigantamax)
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ static void SetPerformedRentalSwap(void)
|
|||
static void GenerateOpponentMons(void)
|
||||
{
|
||||
int i, j, k;
|
||||
u16 species[FRONTIER_PARTY_SIZE];
|
||||
enum Species species[FRONTIER_PARTY_SIZE];
|
||||
u16 heldItems[FRONTIER_PARTY_SIZE];
|
||||
int firstMonId = 0;
|
||||
u16 trainerId = 0;
|
||||
|
|
@ -390,8 +390,8 @@ static void GenerateInitialRentalMons(void)
|
|||
u8 factoryBattleMode;
|
||||
u8 rentalRank;
|
||||
u16 monId;
|
||||
u16 currSpecies;
|
||||
u16 species[PARTY_SIZE];
|
||||
enum Species currSpecies;
|
||||
enum Species species[PARTY_SIZE];
|
||||
u16 monIds[PARTY_SIZE];
|
||||
u16 heldItems[PARTY_SIZE];
|
||||
|
||||
|
|
@ -490,7 +490,7 @@ static void GetOpponentMostCommonMonType(void)
|
|||
typeCounts[i] = 0;
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
u32 species = gFacilityTrainerMons[gFrontierTempParty[i]].species;
|
||||
enum Species species = gFacilityTrainerMons[gFrontierTempParty[i]].species;
|
||||
typeCounts[GetSpeciesType(species, 0)]++;
|
||||
if (GetSpeciesType(species, 0) != GetSpeciesType(species, 1))
|
||||
typeCounts[GetSpeciesType(species, 1)]++;
|
||||
|
|
@ -654,8 +654,8 @@ u8 GetFactoryMonFixedIV(u8 challengeNum, bool8 isLastBattle)
|
|||
void FillFactoryBrainParty(void)
|
||||
{
|
||||
int i, j, k;
|
||||
u16 species[FRONTIER_PARTY_SIZE];
|
||||
u16 heldItems[FRONTIER_PARTY_SIZE];
|
||||
enum Species species[FRONTIER_PARTY_SIZE];
|
||||
enum Item heldItems[FRONTIER_PARTY_SIZE];
|
||||
int monLevel;
|
||||
u8 fixedIV;
|
||||
u32 otId;
|
||||
|
|
|
|||
|
|
@ -1831,7 +1831,7 @@ static void Select_PrintRentalPkmnString(void)
|
|||
|
||||
static void Select_PrintMonSpecies(void)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 x;
|
||||
u8 monId = sFactorySelectScreen->cursorPos;
|
||||
|
||||
|
|
@ -1948,7 +1948,7 @@ static u8 Select_OptionOthers(void)
|
|||
|
||||
static void Select_PrintMonCategory(void)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 text[30];
|
||||
u8 x;
|
||||
u8 monId = sFactorySelectScreen->cursorPos;
|
||||
|
|
@ -1968,7 +1968,7 @@ static void Select_CreateMonSprite(void)
|
|||
{
|
||||
u8 monId = sFactorySelectScreen->cursorPos;
|
||||
struct Pokemon *mon = &sFactorySelectScreen->mons[monId].monData;
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
bool8 isShiny = GetMonData(mon, MON_DATA_IS_SHINY);
|
||||
|
||||
|
|
@ -1987,7 +1987,7 @@ static void Select_SetMonPicAnimating(bool8 animating)
|
|||
static void Select_ReshowMonSprite(void)
|
||||
{
|
||||
struct Pokemon *mon;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u32 personality;
|
||||
bool8 isShiny;
|
||||
|
||||
|
|
@ -2017,7 +2017,7 @@ static void Select_CreateChosenMonsSprites(void)
|
|||
if (sFactorySelectScreen->mons[j].selectedId == i + 1)
|
||||
{
|
||||
struct Pokemon *mon = &sFactorySelectScreen->mons[j].monData;
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
bool8 isShiny = GetMonData(mon, MON_DATA_IS_SHINY);
|
||||
|
||||
|
|
@ -2209,7 +2209,7 @@ static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V)
|
|||
static bool32 Select_AreSpeciesValid(u16 monId)
|
||||
{
|
||||
u8 i, j;
|
||||
u32 species = gFacilityTrainerMons[monId].species;
|
||||
enum Species species = gFacilityTrainerMons[monId].species;
|
||||
u8 selectState = sFactorySelectScreen->selectingMonsState;
|
||||
|
||||
for (i = 1; i < selectState; i++)
|
||||
|
|
@ -3728,7 +3728,7 @@ static void Swap_PrintPkmnSwap(void)
|
|||
|
||||
static void Swap_PrintMonSpecies(void)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 x;
|
||||
|
||||
FillWindowPixelBuffer(SWAP_WIN_SPECIES, PIXEL_FILL(0));
|
||||
|
|
@ -3828,7 +3828,7 @@ static void Swap_PrintOneActionString(u8 which)
|
|||
// For printing the species name once its selected. Keep the current fade but don't keep fading in and out
|
||||
static void Swap_PrintMonSpeciesAtFade(void)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 x;
|
||||
u16 pal[5];
|
||||
|
||||
|
|
@ -3862,7 +3862,7 @@ static void Swap_PrintMonSpeciesAtFade(void)
|
|||
// Reprints the species name over the faded one after a transition
|
||||
static void Swap_PrintMonSpeciesForTransition(void)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 x;
|
||||
|
||||
LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), sizeof(sSwapText_Pal));
|
||||
|
|
@ -3888,7 +3888,7 @@ static void Swap_PrintMonSpeciesForTransition(void)
|
|||
|
||||
static void Swap_PrintMonCategory(void)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 text[30];
|
||||
u8 x;
|
||||
u8 monId = sFactorySwapScreen->cursorPos;
|
||||
|
|
@ -4029,7 +4029,7 @@ static void OpenMonPic(u8 *spriteId, bool8 *animating, bool8 swapScreen)
|
|||
static void Swap_ShowSummaryMonSprite(void)
|
||||
{
|
||||
struct Pokemon *mon;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u32 personality;
|
||||
bool8 isShiny;
|
||||
|
||||
|
|
@ -4113,7 +4113,7 @@ static void Swap_TaskCantHaveSameMons(u8 taskId)
|
|||
static bool8 Swap_AlreadyHasSameSpecies(u8 monId)
|
||||
{
|
||||
u8 i;
|
||||
u16 species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES);
|
||||
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
|
|
@ -4245,9 +4245,9 @@ static void Task_CloseMonPic(u8 taskId)
|
|||
static void Swap_CreateMonSprite(void)
|
||||
{
|
||||
struct Pokemon *mon;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u32 personality;
|
||||
bool8 isShiny;
|
||||
bool32 isShiny;
|
||||
|
||||
if (!sFactorySwapScreen->inEnemyScreen)
|
||||
mon = &gPlayerParty[sFactorySwapScreen->cursorPos];
|
||||
|
|
|
|||
|
|
@ -685,7 +685,7 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, enum BattlerId battler)
|
|||
}
|
||||
}
|
||||
|
||||
void BattleGfxSfxDummy2(u16 species)
|
||||
void BattleGfxSfxDummy2(enum Species species)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -1160,7 +1160,7 @@ void CreateEnemyShadowSprite(enum BattlerId battler)
|
|||
{
|
||||
if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE)
|
||||
{
|
||||
u16 species = GetBattlerVisualSpecies(battler);
|
||||
enum Species species = GetBattlerVisualSpecies(battler);
|
||||
u8 size = gSpeciesInfo[species].enemyShadowSize;
|
||||
|
||||
gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow,
|
||||
|
|
@ -1255,7 +1255,7 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
|
|||
bool8 invisible = FALSE;
|
||||
enum BattlerId battler = shadowSprite->tBattlerId;
|
||||
struct Sprite *battlerSprite = &gSprites[gBattlerSpriteIds[battler]];
|
||||
u16 transformSpecies = SanitizeSpeciesId(gBattleSpritesDataPtr->battlerData[battler].transformSpecies);
|
||||
enum Species transformSpecies = SanitizeSpeciesId(gBattleSpritesDataPtr->battlerData[battler].transformSpecies);
|
||||
|
||||
if (!battlerSprite->inUse || !IsBattlerSpritePresent(battler))
|
||||
{
|
||||
|
|
@ -1283,7 +1283,7 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
|
|||
}
|
||||
else if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE)
|
||||
{
|
||||
u16 species = GetBattlerVisualSpecies(battler);
|
||||
enum Species species = GetBattlerVisualSpecies(battler);
|
||||
xOffset = gSpeciesInfo[species].enemyShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16);
|
||||
yOffset = gSpeciesInfo[species].enemyShadowYOffset + 16;
|
||||
size = gSpeciesInfo[species].enemyShadowSize;
|
||||
|
|
@ -1310,7 +1310,7 @@ void SpriteCB_SetInvisible(struct Sprite *sprite)
|
|||
sprite->invisible = TRUE;
|
||||
}
|
||||
|
||||
void SetBattlerShadowSpriteCallback(enum BattlerId battler, u16 species)
|
||||
void SetBattlerShadowSpriteCallback(enum BattlerId battler, enum Species species)
|
||||
{
|
||||
if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE)
|
||||
{
|
||||
|
|
@ -1458,7 +1458,7 @@ bool32 ShouldPlayNormalMonCry(struct Pokemon *mon)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void DecompressGhostFrontPic(u32 battler)
|
||||
void DecompressGhostFrontPic(enum BattlerId battler)
|
||||
{
|
||||
u16 palOffset;
|
||||
enum BattlerPosition position = GetBattlerPosition(battler);
|
||||
|
|
|
|||
|
|
@ -1980,7 +1980,7 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
|
|||
|
||||
if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL))
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u32 exp, currLevelExp;
|
||||
s32 currExpBarValue, maxExpBarValue;
|
||||
u8 level;
|
||||
|
|
|
|||
|
|
@ -635,7 +635,7 @@ static void CB2_InitBattleInternal(void)
|
|||
#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \
|
||||
for ((i) = 0; (i) < PARTY_SIZE; (i)++) \
|
||||
{ \
|
||||
u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES_OR_EGG); \
|
||||
enum Species species = GetMonData(&(party)[(i)], MON_DATA_SPECIES_OR_EGG); \
|
||||
u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \
|
||||
u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \
|
||||
\
|
||||
|
|
@ -1888,7 +1888,7 @@ void ModifyPersonalityForNature(u32 *personality, u32 newNature)
|
|||
*personality -= (diff * sign);
|
||||
}
|
||||
|
||||
u32 GeneratePersonalityForGender(u32 gender, u32 species)
|
||||
u32 GeneratePersonalityForGender(u32 gender, enum Species species)
|
||||
{
|
||||
const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[species];
|
||||
if (gender == MON_GENDERLESS)
|
||||
|
|
@ -2743,7 +2743,7 @@ void SpriteCB_FaintOpponentMon(struct Sprite *sprite)
|
|||
{
|
||||
enum BattlerId battler = sprite->sBattler;
|
||||
u32 personality = GetMonData(GetBattlerMon(battler), MON_DATA_PERSONALITY);
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 yOffset;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != 0)
|
||||
|
|
@ -5671,7 +5671,7 @@ static void TryEvolvePokemon(void)
|
|||
bool32 canStopEvo = TRUE;
|
||||
enum EvolutionMode mode = EVO_MODE_BATTLE_SPECIAL;
|
||||
u32 evolutionItemArg = i;
|
||||
u32 species = GetEvolutionTargetSpecies(&gPlayerParty[i], mode, evolutionItemArg, NULL, &canStopEvo, CHECK_EVO);
|
||||
enum Species species = GetEvolutionTargetSpecies(&gPlayerParty[i], mode, evolutionItemArg, NULL, &canStopEvo, CHECK_EVO);
|
||||
sTriedEvolving |= 1u << i;
|
||||
|
||||
if (species == SPECIES_NONE && (gLeveledUpInBattle & (1u << i)))
|
||||
|
|
@ -5809,7 +5809,8 @@ enum Type GetDynamicMoveType(struct Pokemon *mon, enum Move move, enum BattlerId
|
|||
{
|
||||
enum Type moveType = GetMoveType(move);
|
||||
enum BattleMoveEffects moveEffect = GetMoveEffect(move);
|
||||
u32 species, heldItem;
|
||||
enum Species species;
|
||||
enum Item heldItem;
|
||||
enum Type type1, type2, type3;
|
||||
enum Ability ability;
|
||||
enum HoldEffect holdEffect;
|
||||
|
|
@ -5942,6 +5943,8 @@ enum Type GetDynamicMoveType(struct Pokemon *mon, enum Move move, enum BattlerId
|
|||
case SPECIES_TAUROS_PALDEA_BLAZE:
|
||||
case SPECIES_TAUROS_PALDEA_AQUA:
|
||||
return GetSpeciesType(species, 1);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EFFECT_IVY_CUDGEL:
|
||||
|
|
@ -5954,6 +5957,8 @@ enum Type GetDynamicMoveType(struct Pokemon *mon, enum Move move, enum BattlerId
|
|||
case SPECIES_OGERPON_CORNERSTONE:
|
||||
case SPECIES_OGERPON_CORNERSTONE_TERA:
|
||||
return GetSpeciesType(species, 1);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EFFECT_NATURAL_GIFT:
|
||||
|
|
|
|||
|
|
@ -1942,7 +1942,7 @@ static enum CancelerResult CancelerMultihitMoves(struct BattleContext *ctx)
|
|||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u32 species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(&party[i], MON_DATA_SPECIES);
|
||||
if (species != SPECIES_NONE
|
||||
&& GetMonData(&party[i], MON_DATA_HP)
|
||||
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ struct PikeRoomNPC
|
|||
|
||||
struct PikeWildMon
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 levelDelta;
|
||||
u16 moves[MAX_MON_MOVES];
|
||||
};
|
||||
|
|
@ -83,7 +83,7 @@ static void PrepareTwoTrainers(void);
|
|||
static void TryHealMons(u8 healCount);
|
||||
static void Task_DoStatusInflictionScreenFlash(u8 taskId);
|
||||
static bool8 AtLeastTwoAliveMons(void);
|
||||
static u8 SpeciesToPikeMonId(u16 species);
|
||||
static u8 SpeciesToPikeMonId(enum Species species);
|
||||
static bool8 CanEncounterWildMon(u8 monLevel);
|
||||
static u8 GetPikeQueenFightType(u8);
|
||||
static bool8 StatusInflictionFadeOut(struct Task *task);
|
||||
|
|
@ -844,7 +844,7 @@ static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static bool8 DoesTypePreventStatus(u16 species, u32 status)
|
||||
static bool8 DoesTypePreventStatus(enum Species species, u32 status)
|
||||
{
|
||||
bool8 ret = FALSE;
|
||||
|
||||
|
|
@ -881,7 +881,7 @@ static bool8 TryInflictRandomStatus(void)
|
|||
u8 count;
|
||||
u8 indices[FRONTIER_PARTY_SIZE];
|
||||
u32 status;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
bool8 statusChosen;
|
||||
struct Pokemon *mon;
|
||||
|
||||
|
|
@ -1635,7 +1635,7 @@ static bool8 CanEncounterWildMon(u8 enemyMonLevel)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static u8 SpeciesToPikeMonId(u16 species)
|
||||
static u8 SpeciesToPikeMonId(enum Species species)
|
||||
{
|
||||
u8 ret;
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include "constants/layouts.h"
|
||||
#include "constants/metatile_labels.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/trainers.h"
|
||||
|
||||
#define NUM_LAYOUT_OFFSETS 8
|
||||
|
|
@ -46,7 +47,7 @@ extern const struct MapLayout *const gMapLayouts[];
|
|||
|
||||
struct PyramidWildMon
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 lvl;
|
||||
u8 abilityNum;
|
||||
u16 moves[MAX_MON_MOVES];
|
||||
|
|
@ -1357,7 +1358,7 @@ static void MarkPyramidTrainerAsBattled(u16 trainerId)
|
|||
#if BATTLE_PYRAMID_RANDOM_ENCOUNTERS == TRUE
|
||||
// check if given species evolved from a specific evolutionary stone
|
||||
// if nItems is passed as 0, it will check for any EVO_ITEM case
|
||||
static bool32 CheckBattlePyramidEvoRequirement(u16 species, const u16 *evoItems, u8 nItems)
|
||||
static bool32 CheckBattlePyramidEvoRequirement(enum Species species, const u16 *evoItems, u8 nItems)
|
||||
{
|
||||
u32 i, j, k;
|
||||
for (i = 0; i < NUM_SPECIES; i++)
|
||||
|
|
@ -1393,8 +1394,8 @@ static bool32 CheckBattlePyramidEvoRequirement(u16 species, const u16 *evoItems,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
extern u32 GetTotalBaseStat(u32 species);
|
||||
void GenerateBattlePyramidWildMon(u32 forceSpecies)
|
||||
extern u32 GetTotalBaseStat(enum Species species);
|
||||
void GenerateBattlePyramidWildMon(enum Species forceSpecies)
|
||||
{
|
||||
u8 name[POKEMON_NAME_LENGTH + 1];
|
||||
int i, j;
|
||||
|
|
@ -1402,7 +1403,7 @@ void GenerateBattlePyramidWildMon(u32 forceSpecies)
|
|||
u32 lvl = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / 7) % TOTAL_PYRAMID_ROUNDS;
|
||||
const struct BattlePyramidRequirement *reqs = &sBattlePyramidRequirementsByRound[round];
|
||||
u32 species = forceSpecies;
|
||||
enum Species species = forceSpecies;
|
||||
u32 bstLim;
|
||||
u16 *moves = NULL;
|
||||
u16 *abilities = NULL;
|
||||
|
|
@ -1567,7 +1568,7 @@ void GenerateBattlePyramidWildMon(u32 forceSpecies)
|
|||
CalculateMonStats(&gEnemyParty[0]);
|
||||
}
|
||||
#else
|
||||
void GenerateBattlePyramidWildMon(u32 forceSpecies)
|
||||
void GenerateBattlePyramidWildMon(enum Species forceSpecies)
|
||||
{
|
||||
u8 name[POKEMON_NAME_LENGTH + 1];
|
||||
int i;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
#include "pokenav.h"
|
||||
#include "menu_specialized.h"
|
||||
#include "data.h"
|
||||
#include "generational_changes.h"
|
||||
#include "config_changes.h"
|
||||
#include "move.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/battle_anim.h"
|
||||
|
|
@ -1387,7 +1387,7 @@ static void Cmd_multihitresultmessage(void)
|
|||
|
||||
static inline bool32 DoesBattlerNegateDamage(enum BattlerId battler)
|
||||
{
|
||||
u32 species = gBattleMons[battler].species;
|
||||
enum Species species = gBattleMons[battler].species;
|
||||
enum Ability ability = GetBattlerAbility(battler);
|
||||
|
||||
if (gBattleMons[battler].volatiles.transformed)
|
||||
|
|
@ -6842,7 +6842,7 @@ static void PutMonIconOnLvlUpBanner(void)
|
|||
struct SpritePalette iconPalSheet;
|
||||
|
||||
struct Pokemon *mon = &gPlayerParty[gBattleStruct->expGetterMonId];
|
||||
u32 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
|
||||
iconSheet.data = GetMonIconPtr(species, personality);
|
||||
|
|
@ -8819,11 +8819,23 @@ static void Cmd_trysetencore(void)
|
|||
if (gBattleMons[gBattlerTarget].volatiles.encoredMove != GetBattlerChosenMove(gBattlerTarget))
|
||||
gBattleStruct->moveTarget[gBattlerTarget] = SetRandomTarget(gBattlerTarget);
|
||||
|
||||
// Encore always lasts 3 turns, but we need to account for a scenario where Encore changes the move during the same turn.
|
||||
if (HasBattlerActedThisTurn(gBattlerTarget))
|
||||
gBattleMons[gBattlerTarget].volatiles.encoreTimer = B_ENCORE_TIMER;
|
||||
u8 turns;
|
||||
if (GetConfig(B_ENCORE_TURNS) >= GEN_5)
|
||||
{
|
||||
turns = B_ENCORE_TIMER; // 4 turns
|
||||
if (!HasBattlerActedThisTurn(gBattlerTarget))
|
||||
turns--; // If the target hasn't yet moved this turn, Encore lasts for only three turns.
|
||||
}
|
||||
else if (GetConfig(B_ENCORE_TURNS) >= GEN_4)
|
||||
{
|
||||
turns = RandomUniform(RNG_ENCORE_TURNS, 3, 7);
|
||||
}
|
||||
else
|
||||
gBattleMons[gBattlerTarget].volatiles.encoreTimer = B_ENCORE_TIMER - 1;
|
||||
{
|
||||
turns = RandomUniform(RNG_ENCORE_TURNS, 2, 6);
|
||||
}
|
||||
|
||||
gBattleMons[gBattlerTarget].volatiles.encoreTimer = turns;
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
}
|
||||
|
|
@ -9142,7 +9154,7 @@ static void Cmd_healpartystatus(void)
|
|||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG);
|
||||
enum Species species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG);
|
||||
u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM);
|
||||
|
||||
if (species != SPECIES_NONE && species != SPECIES_EGG)
|
||||
|
|
@ -10247,7 +10259,8 @@ static void Cmd_pickup(void)
|
|||
CMD_ARGS();
|
||||
|
||||
u32 i, j;
|
||||
u16 species, heldItem;
|
||||
enum Species species;
|
||||
enum Item heldItem;
|
||||
u8 lvlDivBy10;
|
||||
enum Ability ability;
|
||||
|
||||
|
|
@ -11158,7 +11171,7 @@ static void Cmd_trysetcaughtmondexflags(void)
|
|||
CMD_ARGS(const u8 *failInstr);
|
||||
|
||||
struct Pokemon *caughtMon = GetBattlerMon(GetCatchingBattler());
|
||||
u32 species = GetMonData(caughtMon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(caughtMon, MON_DATA_SPECIES);
|
||||
u32 personality = GetMonData(caughtMon, MON_DATA_PERSONALITY);
|
||||
|
||||
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
|
||||
|
|
@ -11178,7 +11191,7 @@ static void Cmd_displaydexinfo(void)
|
|||
|
||||
u32 caughtBattler = GetCatchingBattler();
|
||||
struct Pokemon *mon = GetBattlerMon(caughtBattler);
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
|
||||
switch (gBattleCommunication[0])
|
||||
{
|
||||
|
|
@ -11420,7 +11433,7 @@ static void Cmd_trainerslideout(void)
|
|||
}
|
||||
|
||||
//note test wiglett when becomes possible
|
||||
bool32 IsTelekinesisBannedSpecies(u16 species)
|
||||
bool32 IsTelekinesisBannedSpecies(enum Species species)
|
||||
{
|
||||
species = SanitizeSpeciesId(species);
|
||||
|
||||
|
|
@ -11940,7 +11953,7 @@ u8 GetFirstFaintedPartyIndex(enum BattlerId battler)
|
|||
// Loop through to find fainted battler.
|
||||
for (i = start; i < end; ++i)
|
||||
{
|
||||
u32 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG);
|
||||
enum Species species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG);
|
||||
if (species != SPECIES_NONE
|
||||
&& species != SPECIES_EGG
|
||||
&& GetMonData(&party[i], MON_DATA_HP) == 0)
|
||||
|
|
@ -12267,7 +12280,7 @@ void BS_JumpIfTerrainAffected(void)
|
|||
void BS_TryReflectType(void)
|
||||
{
|
||||
NATIVE_ARGS(const u8 *failInstr);
|
||||
u16 targetBaseSpecies = GET_BASE_SPECIES_ID(gBattleMons[gBattlerTarget].species);
|
||||
enum Species targetBaseSpecies = GET_BASE_SPECIES_ID(gBattleMons[gBattlerTarget].species);
|
||||
enum Type targetTypes[3];
|
||||
GetBattlerTypes(gBattlerTarget, FALSE, targetTypes);
|
||||
|
||||
|
|
@ -12960,7 +12973,8 @@ static void UpdatePokeFlutePartyStatus(struct Pokemon* party, u8 position)
|
|||
s32 i;
|
||||
enum BattlerId battler;
|
||||
u32 monToCheck, status;
|
||||
u16 species, abilityNum;
|
||||
enum Species species;
|
||||
u16 abilityNum;
|
||||
monToCheck = 0;
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
|
|
@ -14790,7 +14804,7 @@ void BS_JumpIfWeatherAffected(void)
|
|||
|
||||
void BS_JumpIfSpecies(void)
|
||||
{
|
||||
NATIVE_ARGS(u16 species, const u8 *jumpInstr);
|
||||
NATIVE_ARGS(enum Species species, const u8 *jumpInstr);
|
||||
if (gBattleMons[gBattlerAttacker].species == cmd->species)
|
||||
gBattlescriptCurrInstr = cmd->jumpInstr;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -600,7 +600,7 @@ void StartGroudonKyogreBattle(void)
|
|||
void StartRegiBattle(void)
|
||||
{
|
||||
enum BattleTransition transitionId;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
|
||||
LockPlayerFieldControls();
|
||||
gMain.savedCallback = CB2_EndScriptedWildBattle;
|
||||
|
|
@ -805,7 +805,7 @@ static u16 GetSumOfPlayerPartyLevel(u8 numMons)
|
|||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG);
|
||||
enum Species species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG);
|
||||
|
||||
if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0)
|
||||
{
|
||||
|
|
@ -2132,4 +2132,3 @@ void SetMultiTrainerBattle(struct ScriptContext *ctx)
|
|||
TRAINER_BATTLE_PARAM.defeatTextB = (u8*)ScriptReadWord(ctx);
|
||||
gPartnerTrainerId = TRAINER_PARTNER(ScriptReadHalfword(ctx));
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#include "battle_scripts.h"
|
||||
#include "battle_switch_in.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "generational_changes.h"
|
||||
#include "config_changes.h"
|
||||
#include "constants/battle.h"
|
||||
#include "constants/moves.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -294,10 +294,10 @@ static void GenerateInitialRentalMons(void)
|
|||
s32 i, j;
|
||||
u8 firstMonId;
|
||||
u16 monSetId;
|
||||
u16 currSpecies;
|
||||
u16 species[PARTY_SIZE];
|
||||
enum Species currSpecies;
|
||||
enum Species species[PARTY_SIZE];
|
||||
u16 monIds[PARTY_SIZE];
|
||||
u16 heldItems[PARTY_SIZE];
|
||||
enum Item heldItems[PARTY_SIZE];
|
||||
|
||||
firstMonId = 0;
|
||||
gFacilityTrainers = gSlateportBattleTentTrainers;
|
||||
|
|
@ -355,8 +355,8 @@ static void GenerateOpponentMons(void)
|
|||
u16 trainerId;
|
||||
s32 i, j, k;
|
||||
const u16 *monSet;
|
||||
u16 species[FRONTIER_PARTY_SIZE];
|
||||
u16 heldItems[FRONTIER_PARTY_SIZE];
|
||||
enum Species species[FRONTIER_PARTY_SIZE];
|
||||
enum Item heldItems[FRONTIER_PARTY_SIZE];
|
||||
s32 numMons = 0;
|
||||
|
||||
gFacilityTrainers = gSlateportBattleTentTrainers;
|
||||
|
|
|
|||
|
|
@ -1176,14 +1176,14 @@ static void BattleTowerNop2(void)
|
|||
static void GetApprenticeMultiPartnerParty(u16 trainerId)
|
||||
{
|
||||
s32 i, count;
|
||||
u32 validSpecies[MULTI_PARTY_SIZE];
|
||||
u16 species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES);
|
||||
u16 species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES);
|
||||
enum Species validSpecies[MULTI_PARTY_SIZE];
|
||||
enum Species species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES);
|
||||
enum Species species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES);
|
||||
|
||||
count = 0;
|
||||
for (i = 0; i < MULTI_PARTY_SIZE; i++)
|
||||
{
|
||||
u16 apprenticeSpecies = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[i].species;
|
||||
enum Species apprenticeSpecies = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[i].species;
|
||||
if (apprenticeSpecies != species1 && apprenticeSpecies != species2)
|
||||
{
|
||||
validSpecies[count] = i;
|
||||
|
|
@ -1201,10 +1201,10 @@ static void GetApprenticeMultiPartnerParty(u16 trainerId)
|
|||
static void GetRecordMixFriendMultiPartnerParty(u16 trainerId)
|
||||
{
|
||||
s32 i, count;
|
||||
u32 validSpecies[3];
|
||||
enum Species validSpecies[3];
|
||||
enum FrontierLevelMode lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u16 species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES);
|
||||
u16 species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES);
|
||||
enum Species species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES);
|
||||
enum Species species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES);
|
||||
|
||||
count = 0;
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
|
|
@ -1376,7 +1376,7 @@ static void LoadMultiPartnerCandidatesData(void)
|
|||
static void GetPotentialPartnerMoveAndSpecies(u16 trainerId, u16 monId)
|
||||
{
|
||||
enum Move move = MOVE_NONE;
|
||||
u16 species = SPECIES_NONE;
|
||||
enum Species species = SPECIES_NONE;
|
||||
SetFacilityPtrsGetLevel();
|
||||
|
||||
if (trainerId != TRAINER_EREADER)
|
||||
|
|
@ -2129,7 +2129,7 @@ void TrySetLinkBattleTowerEnemyPartyLevel(void)
|
|||
|
||||
for (u32 i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES);
|
||||
if (species)
|
||||
{
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][enemyLevel]);
|
||||
|
|
|
|||
|
|
@ -660,13 +660,13 @@ void BattleTv_SetDataBasedOnAnimation(u8 animationId)
|
|||
|
||||
void TryPutLinkBattleTvShowOnAir(void)
|
||||
{
|
||||
u16 playerBestSpecies = 0, opponentBestSpecies = 0;
|
||||
enum Species playerBestSpecies = 0, opponentBestSpecies = 0;
|
||||
s16 playerBestSum = 0, opponentBestSum = SHRT_MAX;
|
||||
u8 playerBestMonId = 0, opponentBestMonId = 0;
|
||||
struct BattleTvMovePoints *movePoints = NULL;
|
||||
u8 countPlayer = 0, countOpponent = 0;
|
||||
s16 sum = 0;
|
||||
u16 species = SPECIES_NONE;
|
||||
enum Species species = SPECIES_NONE;
|
||||
enum Move move = MOVE_NONE;
|
||||
s32 i, j;
|
||||
int zero = 0, one = 1; //needed for matching
|
||||
|
|
@ -1307,7 +1307,7 @@ static void TrySetBattleSeminarShow(void)
|
|||
{
|
||||
if (i != gMoveSelectionCursor[gBattlerAttacker] && dmgByMove[i] > dmgByMove[gMoveSelectionCursor[gBattlerAttacker]])
|
||||
{
|
||||
u16 opponentSpecies, playerSpecies;
|
||||
enum Species opponentSpecies, playerSpecies;
|
||||
s32 bestMoveId;
|
||||
|
||||
if (gMoveSelectionCursor[gBattlerAttacker] != 0)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
#include "battle_z_move.h"
|
||||
#include "battle_gimmick.h"
|
||||
#include "battle_hold_effects.h"
|
||||
#include "generational_changes.h"
|
||||
#include "config_changes.h"
|
||||
#include "party_menu.h"
|
||||
#include "pokemon.h"
|
||||
#include "international_string_util.h"
|
||||
|
|
@ -271,7 +271,7 @@ bool32 EndOrContinueWeather(void)
|
|||
// Gen5+
|
||||
static u32 CalcBeatUpPower(void)
|
||||
{
|
||||
u32 species = gBattleStruct->beatUpSpecies[gBattleStruct->beatUpSlot++];
|
||||
enum Species species = gBattleStruct->beatUpSpecies[gBattleStruct->beatUpSlot++];
|
||||
// FIXME: Why call CalcBeatUpPower when 'beatUpSlot' is OOB?
|
||||
if (species == 0xFFFF)
|
||||
return 0;
|
||||
|
|
@ -283,7 +283,7 @@ static s32 CalcBeatUpDamage(struct BattleContext *ctx)
|
|||
{
|
||||
u32 partyIndex = gBattleStruct->beatUpSpecies[gBattleStruct->beatUpSlot++];
|
||||
struct Pokemon *party = GetBattlerParty(ctx->battlerAtk);
|
||||
u32 species = GetMonData(&party[partyIndex], MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(&party[partyIndex], MON_DATA_SPECIES);
|
||||
u32 levelFactor = GetMonData(&party[partyIndex], MON_DATA_LEVEL) * 2 / 5 + 2;
|
||||
s32 dmg = GetSpeciesBaseAttack(species);
|
||||
|
||||
|
|
@ -1113,6 +1113,38 @@ bool32 IsLastMonToMove(enum BattlerId battler)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static u32 GetAiTurnOrder(u8 *aiTurnOrder, enum BattlerId battler)
|
||||
{
|
||||
for (u32 i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (aiTurnOrder[i] == battler)
|
||||
return i;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool32 Ai_AttackerMovesAfterTarget(struct BattleContext *ctx)
|
||||
{
|
||||
return GetAiTurnOrder(ctx->aiTurnOrder, ctx->battlerAtk) > GetAiTurnOrder(ctx->aiTurnOrder, ctx->battlerDef);
|
||||
}
|
||||
|
||||
static bool32 Ai_AttackerMovesLast(struct BattleContext *ctx)
|
||||
{
|
||||
u32 numAliveBattlers = 0;
|
||||
u32 battlerTurnOrder = GetAiTurnOrder(ctx->aiTurnOrder, ctx->battlerAtk);
|
||||
|
||||
for (enum BattlerId battler = B_BATTLER_0; battler < gBattlersCount; battler++)
|
||||
{
|
||||
if (IsBattlerAlive(battler))
|
||||
numAliveBattlers++;
|
||||
}
|
||||
|
||||
if (battlerTurnOrder >= numAliveBattlers - 1)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 ShouldDefiantCompetitiveActivate(enum BattlerId battler, enum Ability ability)
|
||||
{
|
||||
enum BattleSide side = GetBattlerSide(battler);
|
||||
|
|
@ -1693,7 +1725,7 @@ u8 GetImprisonedMovesCount(enum BattlerId battler, enum Move move)
|
|||
u32 GetBattlerAffectionHearts(enum BattlerId battler)
|
||||
{
|
||||
struct Pokemon *mon = GetBattlerMon(battler);
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
|
||||
if (!IsOnPlayerSide(battler))
|
||||
return AFFECTION_NO_HEARTS;
|
||||
|
|
@ -3040,7 +3072,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, enum BattlerId battler, enum
|
|||
u32 side = 0;
|
||||
u32 i = 0, j = 0;
|
||||
u32 partner = 0;
|
||||
u32 speciesForm = SPECIES_NONE;
|
||||
enum Species speciesForm = SPECIES_NONE;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
|
||||
return 0;
|
||||
|
|
@ -3239,28 +3271,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, enum BattlerId battler, enum
|
|||
case ABILITY_DOWNLOAD:
|
||||
if (shouldAbilityTrigger)
|
||||
{
|
||||
enum Stat statId;
|
||||
enum BattlerId opposingBattler;
|
||||
u32 opposingDef = 0, opposingSpDef = 0;
|
||||
|
||||
opposingBattler = BATTLE_OPPOSITE(battler);
|
||||
for (i = 0; i < 2; opposingBattler ^= BIT_FLANK, i++)
|
||||
{
|
||||
if (IsBattlerAlive(opposingBattler))
|
||||
{
|
||||
opposingDef += gBattleMons[opposingBattler].defense
|
||||
* gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_DEF]][0]
|
||||
/ gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_DEF]][1];
|
||||
opposingSpDef += gBattleMons[opposingBattler].spDefense
|
||||
* gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_SPDEF]][0]
|
||||
/ gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_SPDEF]][1];
|
||||
}
|
||||
}
|
||||
|
||||
if (opposingDef < opposingSpDef)
|
||||
statId = STAT_ATK;
|
||||
else
|
||||
statId = STAT_SPATK;
|
||||
enum Stat statId = GetDownloadStat(battler);
|
||||
|
||||
if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility))
|
||||
{
|
||||
|
|
@ -6331,14 +6342,28 @@ static inline u32 CalcMoveBasePower(struct BattleContext *ctx)
|
|||
}
|
||||
break;
|
||||
case EFFECT_PAYBACK:
|
||||
if (HasBattlerActedThisTurn(battlerDef)
|
||||
if (ctx->aiCalc)
|
||||
{
|
||||
if (Ai_AttackerMovesAfterTarget(ctx))
|
||||
basePower *= 2;
|
||||
}
|
||||
else if (HasBattlerActedThisTurn(battlerDef)
|
||||
&& (B_PAYBACK_SWITCH_BOOST < GEN_5 || gBattleStruct->battlerState[battlerDef].isFirstTurn != 2))
|
||||
{
|
||||
basePower *= 2;
|
||||
}
|
||||
break;
|
||||
case EFFECT_BOLT_BEAK:
|
||||
if (!HasBattlerActedThisTurn(battlerDef)
|
||||
|| gBattleStruct->battlerState[battlerDef].isFirstTurn == 2)
|
||||
if (ctx->aiCalc)
|
||||
{
|
||||
if (!Ai_AttackerMovesAfterTarget(ctx))
|
||||
basePower *= 2;
|
||||
}
|
||||
else if (!HasBattlerActedThisTurn(battlerDef)
|
||||
|| gBattleStruct->battlerState[battlerDef].isFirstTurn == 2)
|
||||
{
|
||||
basePower *= 2;
|
||||
}
|
||||
break;
|
||||
case EFFECT_FUSION_COMBO:
|
||||
if (move == gLastUsedMove)
|
||||
|
|
@ -6534,8 +6559,18 @@ static inline u32 CalcMoveBasePowerAfterModifiers(struct BattleContext *ctx)
|
|||
modifier = uq4_12_multiply(modifier, UQ_4_12(0.75));
|
||||
break;
|
||||
case ABILITY_ANALYTIC:
|
||||
if (IsLastMonToMove(battlerAtk) && moveEffect != EFFECT_FUTURE_SIGHT)
|
||||
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
|
||||
if (moveEffect == EFFECT_FUTURE_SIGHT)
|
||||
break;
|
||||
|
||||
if (ctx->aiCalc)
|
||||
{
|
||||
if (Ai_AttackerMovesLast(ctx))
|
||||
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
|
||||
}
|
||||
else if (IsLastMonToMove(battlerAtk))
|
||||
{
|
||||
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
|
||||
}
|
||||
break;
|
||||
case ABILITY_TOUGH_CLAWS:
|
||||
if (IsMoveMakingContact(battlerAtk, battlerDef, ctx->abilityAtk, ctx->holdEffectAtk, ctx->move))
|
||||
|
|
@ -7036,7 +7071,7 @@ static inline u32 CalcAttackStat(struct BattleContext *ctx)
|
|||
return uq4_12_multiply_by_int_half_down(modifier, atkStat);
|
||||
}
|
||||
|
||||
static bool32 CanEvolve(u32 species)
|
||||
static bool32 CanEvolve(enum Species species)
|
||||
{
|
||||
u32 i;
|
||||
const struct Evolution *evolutions = GetSpeciesEvolutions(species);
|
||||
|
|
@ -7206,7 +7241,7 @@ static inline u32 CalcDefenseStat(struct BattleContext *ctx)
|
|||
break;
|
||||
case HOLD_EFFECT_EVIOLITE:
|
||||
{
|
||||
u16 species = gBattleMons[battlerDef].species;
|
||||
enum Species species = gBattleMons[battlerDef].species;
|
||||
if (gBattleMons[battlerDef].volatiles.transformed && gBattleMons[battlerDef].volatiles.transformedMonSpecies != SPECIES_NONE)
|
||||
species = gBattleMons[battlerDef].volatiles.transformedMonSpecies;
|
||||
if (CanEvolve(species))
|
||||
|
|
@ -7760,7 +7795,7 @@ static inline s32 DoFutureSightAttackDamageCalcVars(struct BattleContext *ctx)
|
|||
struct Pokemon *party = GetBattlerParty(battlerAtk);
|
||||
struct Pokemon *partyMon = &party[gBattleStruct->futureSight[battlerDef].partyIndex];
|
||||
u32 partyMonLevel = GetMonData(partyMon, MON_DATA_LEVEL);
|
||||
u32 partyMonSpecies = GetMonData(partyMon, MON_DATA_SPECIES);
|
||||
enum Species partyMonSpecies = GetMonData(partyMon, MON_DATA_SPECIES);
|
||||
gBattleMovePower = GetMovePower(move);
|
||||
|
||||
if (IsBattleMovePhysical(move))
|
||||
|
|
@ -8148,7 +8183,7 @@ static inline void MulByTypeEffectiveness(struct BattleContext *ctx, uq4_12_t *m
|
|||
*modifier = uq4_12_multiply(*modifier, mod);
|
||||
}
|
||||
|
||||
static inline void TryNoticeIllusionInTypeEffectiveness(enum Move move, enum Type moveType, enum BattlerId battlerAtk, enum BattlerId battlerDef, uq4_12_t resultingModifier, u32 illusionSpecies)
|
||||
static inline void TryNoticeIllusionInTypeEffectiveness(enum Move move, enum Type moveType, enum BattlerId battlerAtk, enum BattlerId battlerDef, uq4_12_t resultingModifier, enum Species illusionSpecies)
|
||||
{
|
||||
// Check if the type effectiveness would've been different if the pokemon really had the types as the disguise.
|
||||
uq4_12_t presumedModifier = UQ_4_12(1.0);
|
||||
|
|
@ -8198,7 +8233,7 @@ void UpdateMoveResultFlags(uq4_12_t modifier, u16 *resultFlags)
|
|||
|
||||
static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(struct BattleContext *ctx, uq4_12_t modifier)
|
||||
{
|
||||
u32 illusionSpecies;
|
||||
enum Species illusionSpecies;
|
||||
enum Type types[3];
|
||||
GetBattlerTypes(ctx->battlerDef, FALSE, types);
|
||||
|
||||
|
|
@ -8299,7 +8334,7 @@ uq4_12_t CalcTypeEffectivenessMultiplier(struct BattleContext *ctx)
|
|||
return modifier;
|
||||
}
|
||||
|
||||
uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(enum Move move, u16 speciesDef, enum Ability abilityDef)
|
||||
uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(enum Move move, enum Species speciesDef, enum Ability abilityDef)
|
||||
{
|
||||
uq4_12_t modifier = UQ_4_12(1.0);
|
||||
enum Type moveType = GetBattleMoveType(move);
|
||||
|
|
@ -8354,7 +8389,7 @@ uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, enum Type moveType)
|
|||
ctx.moveType = moveType;
|
||||
ctx.updateFlags = FALSE;
|
||||
|
||||
u32 speciesDef = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species speciesDef = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Type type1 = GetSpeciesType(speciesDef, 0);
|
||||
enum Type type2 = GetSpeciesType(speciesDef, 1);
|
||||
|
||||
|
|
@ -8437,7 +8472,7 @@ bool32 IsPartnerMonFromSameTrainer(enum BattlerId battler)
|
|||
return !(gBattleTypeFlags & BATTLE_TYPE_MULTI);
|
||||
}
|
||||
|
||||
bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId)
|
||||
bool32 DoesSpeciesUseHoldItemToChangeForm(enum Species species, u16 heldItemId)
|
||||
{
|
||||
u32 i;
|
||||
const struct FormChange *formChanges = GetSpeciesFormChanges(species);
|
||||
|
|
@ -8599,9 +8634,9 @@ bool32 IsBattlerInTeraForm(enum BattlerId battler)
|
|||
return (gSpeciesInfo[gBattleMons[battler].species].isTeraForm);
|
||||
}
|
||||
|
||||
u32 GetBattleFormChangeTargetSpecies(enum BattlerId battler, enum FormChanges method, enum Ability ability)
|
||||
enum Species GetBattleFormChangeTargetSpecies(enum BattlerId battler, enum FormChanges method, enum Ability ability)
|
||||
{
|
||||
u32 species = gBattleMons[battler].species;
|
||||
enum Species species = gBattleMons[battler].species;
|
||||
const struct FormChange *formChanges = GetSpeciesFormChanges(species);
|
||||
|
||||
if (formChanges == NULL)
|
||||
|
|
@ -8684,8 +8719,8 @@ bool32 TryBattleFormChange(enum BattlerId battler, enum FormChanges method, enum
|
|||
if (!CanBattlerFormChange(battler, method))
|
||||
return FALSE;
|
||||
|
||||
u32 currentSpecies = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 targetSpecies = GetBattleFormChangeTargetSpecies(battler, method, ability);
|
||||
enum Species currentSpecies = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species targetSpecies = GetBattleFormChangeTargetSpecies(battler, method, ability);
|
||||
|
||||
struct PartyState *battlePartyState = GetBattlerPartyState(battler);
|
||||
// If the battle ends, and there's not a specified species to change back to,
|
||||
|
|
@ -8747,8 +8782,8 @@ bool32 DoBattlersShareType(enum BattlerId battler1, enum BattlerId battler2)
|
|||
|
||||
bool32 CanBattlerGetOrLoseItem(enum BattlerId fromBattler, enum BattlerId battler, enum Item itemId)
|
||||
{
|
||||
u32 fromSpecies = gBattleMons[fromBattler].species;
|
||||
u32 otherSpecies = gBattleMons[battler].species;
|
||||
enum Species fromSpecies = gBattleMons[fromBattler].species;
|
||||
enum Species otherSpecies = gBattleMons[battler].species;
|
||||
|
||||
enum HoldEffect holdEffect = GetItemHoldEffect(itemId); // Raw hold effect
|
||||
|
||||
|
|
@ -8769,9 +8804,9 @@ bool32 CanBattlerGetOrLoseItem(enum BattlerId fromBattler, enum BattlerId battle
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
u32 GetBattlerVisualSpecies(enum BattlerId battler)
|
||||
enum Species GetBattlerVisualSpecies(enum BattlerId battler)
|
||||
{
|
||||
u32 illusionSpecies = GetIllusionMonSpecies(battler);
|
||||
enum Species illusionSpecies = GetIllusionMonSpecies(battler);
|
||||
if (illusionSpecies != SPECIES_NONE)
|
||||
return illusionSpecies;
|
||||
return gBattleMons[battler].species;
|
||||
|
|
@ -8804,7 +8839,7 @@ void ClearIllusionMon(enum BattlerId battler)
|
|||
memset(&gBattleStruct->illusion[battler], 0, sizeof(gBattleStruct->illusion[battler]));
|
||||
}
|
||||
|
||||
u32 GetIllusionMonSpecies(enum BattlerId battler)
|
||||
enum Species GetIllusionMonSpecies(enum BattlerId battler)
|
||||
{
|
||||
struct Pokemon *illusionMon = GetIllusionMonPtr(battler);
|
||||
if (illusionMon != NULL)
|
||||
|
|
@ -8840,7 +8875,7 @@ u32 GetIllusionMonPartyId(struct Pokemon *party, struct Pokemon *mon, struct Pok
|
|||
&& GetMonData(&party[id], MON_DATA_HP)
|
||||
&& !GetMonData(&party[id], MON_DATA_IS_EGG))
|
||||
{
|
||||
u32 species = GetMonData(&party[id], MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(&party[id], MON_DATA_SPECIES);
|
||||
if (species == SPECIES_TERAPAGOS_STELLAR || (species >= SPECIES_OGERPON_TEAL_TERA && species <= SPECIES_OGERPON_CORNERSTONE_TERA))
|
||||
continue;
|
||||
if (&party[id] != mon && &party[id] != partnerMon)
|
||||
|
|
@ -9612,7 +9647,7 @@ bool32 MoveIsAffectedBySheerForce(enum Move move)
|
|||
|
||||
bool32 CanMonParticipateInSkyBattle(struct Pokemon *mon)
|
||||
{
|
||||
u32 species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
enum Species species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
u32 monAbilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM);
|
||||
|
||||
bool32 hasLevitateAbility = GetSpeciesAbility(species, monAbilityNum) == ABILITY_LEVITATE;
|
||||
|
|
@ -10915,7 +10950,7 @@ enum BattlerId GetTargetBySlot(enum BattlerId battlerAtk, enum BattlerId battler
|
|||
}
|
||||
}
|
||||
|
||||
bool32 IsNaturalEnemy(u32 speciesAttacker, u32 speciesTarget)
|
||||
bool32 IsNaturalEnemy(enum Species speciesAttacker, enum Species speciesTarget)
|
||||
{
|
||||
if (B_WILD_NATURAL_ENEMIES != TRUE)
|
||||
return FALSE;
|
||||
|
|
@ -10939,3 +10974,28 @@ bool32 IsNaturalEnemy(u32 speciesAttacker, u32 speciesTarget)
|
|||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
enum Stat GetDownloadStat(enum BattlerId battler)
|
||||
{
|
||||
enum BattlerId opposingBattler;
|
||||
u32 opposingDef = 0, opposingSpDef = 0;
|
||||
|
||||
opposingBattler = BATTLE_OPPOSITE(battler);
|
||||
for (u32 i = 0; i < 2; opposingBattler ^= BIT_FLANK, i++)
|
||||
{
|
||||
if (IsBattlerAlive(opposingBattler))
|
||||
{
|
||||
opposingDef += gBattleMons[opposingBattler].defense
|
||||
* gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_DEF]][0]
|
||||
/ gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_DEF]][1];
|
||||
opposingSpDef += gBattleMons[opposingBattler].spDefense
|
||||
* gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_SPDEF]][0]
|
||||
/ gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_SPDEF]][1];
|
||||
}
|
||||
}
|
||||
|
||||
if (opposingDef < opposingSpDef)
|
||||
return STAT_ATK;
|
||||
else
|
||||
return STAT_SPATK;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ bool32 TryChangeZTrigger(enum BattlerId battler, u32 moveIndex)
|
|||
return viableZMove;
|
||||
}
|
||||
|
||||
enum Move GetSignatureZMove(enum Move move, u32 species, enum Item item)
|
||||
enum Move GetSignatureZMove(enum Move move, enum Species species, enum Item item)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ static u8 GetWeedingBonusByBerryType(u8);
|
|||
static u8 GetPestsBonusByBerryType(u8);
|
||||
static void SetTreeMutations(u8 id, u8 berry);
|
||||
static u8 GetTreeMutationValue(u8 id);
|
||||
static u16 GetBerryPestSpecies(u8 berryId);
|
||||
static enum Species GetBerryPestSpecies(u8 berryId);
|
||||
static void TryForWeeds(struct BerryTree *tree);
|
||||
static void TryForPests(struct BerryTree *tree);
|
||||
static void AddTreeBonus(struct BerryTree *tree, u8 bonus);
|
||||
|
|
@ -2286,7 +2286,7 @@ bool8 ObjectEventInteractionBerryHasWeed(void)
|
|||
|
||||
bool8 ObjectEventInteractionBerryHasPests(void)
|
||||
{
|
||||
u16 species;
|
||||
enum Species species;
|
||||
if (!OW_BERRY_PESTS || !gSaveBlock1Ptr->berryTrees[GetObjectEventBerryTreeId(gSelectedObjectEvent)].pests)
|
||||
return FALSE;
|
||||
species = GetBerryPestSpecies(gSaveBlock1Ptr->berryTrees[GetObjectEventBerryTreeId(gSelectedObjectEvent)].berry);
|
||||
|
|
@ -2458,7 +2458,7 @@ static void SetTreeMutations(u8 id, u8 berry)
|
|||
#endif
|
||||
}
|
||||
|
||||
static u16 GetBerryPestSpecies(u8 berryId)
|
||||
static enum Species GetBerryPestSpecies(u8 berryId)
|
||||
{
|
||||
#if OW_BERRY_PESTS == TRUE
|
||||
const struct Berry *berry = GetBerryInfo(berryId);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include "global.h"
|
||||
#include "generational_changes.h"
|
||||
#include "config_changes.h"
|
||||
#include "malloc.h"
|
||||
#include "constants/generational_changes.h"
|
||||
#include "constants/config_changes.h"
|
||||
#include "config/pokerus.h"
|
||||
#include "config/ai.h"
|
||||
|
||||
|
|
@ -98,9 +98,9 @@ static void PrintContestantMonName(u8);
|
|||
static void PrintContestantMonNameWithColor(u8, u8);
|
||||
static u8 CreateJudgeSprite(void);
|
||||
static u8 CreateJudgeSpeechBubbleSprite(void);
|
||||
static u8 CreateContestantSprite(u16, bool8, u32, u32);
|
||||
static u8 CreateContestantSprite(enum Species, bool8, u32, u32);
|
||||
static void PrintContestMoveDescription(enum Move move);
|
||||
static u16 SanitizeSpecies(u16);
|
||||
static enum Species SanitizeSpecies(enum Species);
|
||||
static void ContestClearGeneralTextWindow(void);
|
||||
static enum Move GetChosenMove(u8);
|
||||
static void GetAllChosenMoves(void);
|
||||
|
|
@ -3150,7 +3150,7 @@ static u8 CreateJudgeSpeechBubbleSprite(void)
|
|||
return spriteId;
|
||||
}
|
||||
|
||||
static u8 CreateContestantSprite(u16 species, bool8 isShiny, u32 personality, u32 index)
|
||||
static u8 CreateContestantSprite(enum Species species, bool8 isShiny, u32 personality, u32 index)
|
||||
{
|
||||
u8 spriteId;
|
||||
species = SanitizeSpecies(species);
|
||||
|
|
@ -3176,7 +3176,7 @@ static u8 CreateContestantSprite(u16 species, bool8 isShiny, u32 personality, u3
|
|||
return spriteId;
|
||||
}
|
||||
|
||||
bool8 IsSpeciesNotUnown(u16 species)
|
||||
bool8 IsSpeciesNotUnown(enum Species species)
|
||||
{
|
||||
if (species == SPECIES_UNOWN)
|
||||
return FALSE;
|
||||
|
|
@ -5310,7 +5310,7 @@ static u16 SanitizeMove(enum Move move)
|
|||
return move;
|
||||
}
|
||||
|
||||
static u16 SanitizeSpecies(u16 species)
|
||||
static enum Species SanitizeSpecies(enum Species species)
|
||||
{
|
||||
assertf(species < NUM_SPECIES, "invalid species: %d", species)
|
||||
{
|
||||
|
|
@ -5323,7 +5323,7 @@ static u16 SanitizeSpecies(u16 species)
|
|||
static void SetMoveSpecificAnimData(u8 contestant)
|
||||
{
|
||||
enum Move move = SanitizeMove(eContestantStatus[contestant].currMove);
|
||||
u16 species = SanitizeSpecies(gContestMons[contestant].species);
|
||||
enum Species species = SanitizeSpecies(gContestMons[contestant].species);
|
||||
u8 targetContestant;
|
||||
|
||||
memset(&gContestResources->moveAnim->species, 0, 20);
|
||||
|
|
|
|||
|
|
@ -335,7 +335,7 @@ static void VBlankCB_ContestPainting(void)
|
|||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
static void InitContestMonPixels(u16 species, bool8 backPic)
|
||||
static void InitContestMonPixels(enum Species species, bool8 backPic)
|
||||
{
|
||||
const void *pal = GetMonSpritePalFromSpeciesAndPersonality(species, gContestPaintingWinner->isShiny, gContestPaintingWinner->personality);
|
||||
memcpy(gContestPaintingMonPalette, pal, PLTT_SIZE_4BPP);
|
||||
|
|
|
|||
|
|
@ -868,7 +868,7 @@ static void Task_ShowWinnerMonBanner(u8 taskId)
|
|||
{
|
||||
int i;
|
||||
u8 spriteId;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
bool8 isShiny;
|
||||
u32 personality;
|
||||
|
||||
|
|
@ -1081,7 +1081,7 @@ static void Task_FlashStarsAndHearts(u8 taskId)
|
|||
sContestResults->data->pointsFlashing = TRUE;
|
||||
}
|
||||
|
||||
static void LoadContestMonIcon(u16 species, u8 monIndex, u8 srcOffset, u8 useDmaNow, u32 personality)
|
||||
static void LoadContestMonIcon(enum Species species, u8 monIndex, u8 srcOffset, u8 useDmaNow, u32 personality)
|
||||
{
|
||||
const u8 *iconPtr;
|
||||
u16 var0, var1;
|
||||
|
|
@ -2559,7 +2559,7 @@ bool8 IsContestDebugActive(void)
|
|||
void ShowContestEntryMonPic(void)
|
||||
{
|
||||
u32 personality;
|
||||
u16 species;
|
||||
enum Species species;
|
||||
u8 spriteId;
|
||||
u8 taskId;
|
||||
u8 left, top;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user