conflicts

This commit is contained in:
AlexOn1ine 2025-11-11 13:12:00 +01:00
commit 93cc143134
40 changed files with 633 additions and 283 deletions

View File

@ -450,6 +450,24 @@
"contributions": [ "contributions": [
"code" "code"
] ]
},
{
"login": "cawtds",
"name": "cawtds",
"avatar_url": "https://avatars.githubusercontent.com/u/38510667?v=4",
"profile": "https://github.com/cawtds",
"contributions": [
"code"
]
},
{
"login": "fdeblasio",
"name": "Frank DeBlasio",
"avatar_url": "https://avatars.githubusercontent.com/u/35279583?v=4",
"profile": "https://github.com/fdeblasio",
"contributions": [
"code"
]
} }
], ],
"contributorsPerLine": 7, "contributorsPerLine": 7,

View File

@ -3,10 +3,12 @@ name: Labels
on: on:
pull_request: pull_request:
types: [opened, synchronize, labeled, unlabeled] types: [opened, synchronize, labeled, unlabeled]
pull_request_review:
types: [submitted]
jobs: jobs:
label: label:
if: github.actor != 'allcontributors[bot]' if: ${{ github.actor != 'allcontributors[bot]' && github.event.review.state == 'approved' }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check labels - name: check labels

1
.gitignore vendored
View File

@ -44,6 +44,7 @@ prefabs.json
/pokeemerald-*.png /pokeemerald-*.png
src/data/map_group_count.h src/data/map_group_count.h
include/constants/heal_locations.h include/constants/heal_locations.h
include/constants/script_commands.h
tools/trainerproc/trainerproc tools/trainerproc/trainerproc
src/data/battle_partners.h src/data/battle_partners.h
src/data/trainers.h src/data/trainers.h

View File

@ -75,6 +75,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ghostyboyy97"><img src="https://avatars.githubusercontent.com/u/106448956?v=4?s=100" width="100px;" alt="ghostyboyy97"/><br /><sub><b>ghostyboyy97</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=ghostyboyy97" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ghostyboyy97"><img src="https://avatars.githubusercontent.com/u/106448956?v=4?s=100" width="100px;" alt="ghostyboyy97"/><br /><sub><b>ghostyboyy97</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=ghostyboyy97" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://hashtagmarky.github.io"><img src="https://avatars.githubusercontent.com/u/143505183?v=4?s=100" width="100px;" alt="Marky"/><br /><sub><b>Marky</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=HashtagMarky" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="http://hashtagmarky.github.io"><img src="https://avatars.githubusercontent.com/u/143505183?v=4?s=100" width="100px;" alt="Marky"/><br /><sub><b>Marky</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=HashtagMarky" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MandL27"><img src="https://avatars.githubusercontent.com/u/10366615?v=4?s=100" width="100px;" alt="MandL27"/><br /><sub><b>MandL27</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=MandL27" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/MandL27"><img src="https://avatars.githubusercontent.com/u/10366615?v=4?s=100" width="100px;" alt="MandL27"/><br /><sub><b>MandL27</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=MandL27" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cawtds"><img src="https://avatars.githubusercontent.com/u/38510667?v=4?s=100" width="100px;" alt="cawtds"/><br /><sub><b>cawtds</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=cawtds" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fdeblasio"><img src="https://avatars.githubusercontent.com/u/35279583?v=4?s=100" width="100px;" alt="Frank DeBlasio"/><br /><sub><b>Frank DeBlasio</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=fdeblasio" title="Code">💻</a></td>
</tr> </tr>
</tbody> </tbody>
<tfoot> <tfoot>

View File

@ -1938,12 +1938,6 @@
.4byte \jumpInstr .4byte \jumpInstr
.endm .endm
.macro infatuatewithbattler battler:req, infatuateWith:req
callnative BS_InfatuateWithBattler
.byte \battler
.byte \infatuateWith
.endm
.macro setlastuseditem battler:req .macro setlastuseditem battler:req
callnative BS_SetLastUsedItem callnative BS_SetLastUsedItem
.byte \battler .byte \battler

View File

@ -29003,7 +29003,7 @@ gBattleAnimMove_Transform::
monbg ANIM_ATTACKER monbg ANIM_ATTACKER
playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48
createvisualtask AnimTask_TransformMon, 2, 0, 1 createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_TRANSFORM
waitforvisualfinish waitforvisualfinish
clearmonbg ANIM_ATTACKER clearmonbg ANIM_ATTACKER
end end
@ -31525,14 +31525,14 @@ gBattleAnimGeneral_SimpleHeal::
gBattleAnimGeneral_IllusionOff:: gBattleAnimGeneral_IllusionOff::
monbg ANIM_TARGET monbg ANIM_TARGET
createvisualtask AnimTask_TransformMon, 2, 1, 0 createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_ILLUSION_OFF
waitforvisualfinish waitforvisualfinish
clearmonbg ANIM_TARGET clearmonbg ANIM_TARGET
end end
gBattleAnimGeneral_FormChange:: gBattleAnimGeneral_FormChange::
monbg ANIM_ATTACKER monbg ANIM_ATTACKER
createvisualtask AnimTask_TransformMon, 2, 1, 0 createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_FORM_CHANGE
waitforvisualfinish waitforvisualfinish
clearmonbg ANIM_ATTACKER clearmonbg ANIM_ATTACKER
end end
@ -31564,7 +31564,7 @@ gBattleAnimGeneral_MegaEvolution::
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
waitforvisualfinish waitforvisualfinish
createvisualtask SoundTask_PlayNormalCry, 0 createvisualtask SoundTask_PlayNormalCry, 0
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_HideSwapSprite, 2
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
createsprite gMegaSymbolSpriteTemplate ANIM_ATTACKER, 3, 0, 0, ANIM_ATTACKER createsprite gMegaSymbolSpriteTemplate ANIM_ATTACKER, 3, 0, 0, ANIM_ATTACKER
@ -31649,7 +31649,7 @@ gBattleAnimGeneral_TeraActivate::
createvisualtask AnimTask_SetOpponentShadowCallbacks, 2 @ Restore shadows hidden in the charge script createvisualtask AnimTask_SetOpponentShadowCallbacks, 2 @ Restore shadows hidden in the charge script
loadspritegfx ANIM_TAG_TERA_SYMBOL loadspritegfx ANIM_TAG_TERA_SYMBOL
loadspritegfx ANIM_TAG_SPARKLE_6 loadspritegfx ANIM_TAG_SPARKLE_6
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_HideSwapSprite, 2
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
createvisualtask SoundTask_PlayNormalCry, 0 createvisualtask SoundTask_PlayNormalCry, 0
@ -31789,7 +31789,7 @@ General_PrimalReversion_Alpha:
delay 20 delay 20
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
waitforvisualfinish waitforvisualfinish
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_HideSwapSprite, 2
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
createvisualtask SoundTask_PlayNormalCry, 0 createvisualtask SoundTask_PlayNormalCry, 0
@ -31822,7 +31822,7 @@ General_PrimalReversion_Omega:
delay 20 delay 20
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
waitforvisualfinish waitforvisualfinish
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_HideSwapSprite, 2
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
createvisualtask SoundTask_PlayNormalCry, 0 createvisualtask SoundTask_PlayNormalCry, 0
@ -31862,7 +31862,7 @@ gBattleAnimGeneral_PowerConstruct::
delay 20 delay 20
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
waitforvisualfinish waitforvisualfinish
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_HideSwapSprite, 2
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
createvisualtask SoundTask_PlayNormalCry, 0 createvisualtask SoundTask_PlayNormalCry, 0
@ -31932,7 +31932,7 @@ gBattleAnimGeneral_UltraBurst::
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
createsprite gUltraBurstSymbolSpriteTemplate, ANIM_ATTACKER, 0x0, 0x0, 0x0, 0x0, 0x0 createsprite gUltraBurstSymbolSpriteTemplate, ANIM_ATTACKER, 0x0, 0x0, 0x0, 0x0, 0x0
waitforvisualfinish waitforvisualfinish
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_HideSwapSprite, 2
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
createvisualtask SoundTask_PlayNormalCry, 0 createvisualtask SoundTask_PlayNormalCry, 0

View File

@ -3508,26 +3508,27 @@ BattleScript_FuryCutterHit:
BattleScript_TryDestinyKnotTarget: BattleScript_TryDestinyKnotTarget:
jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet
infatuatewithbattler BS_TARGET, BS_ATTACKER
playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
waitanimation waitanimation
printstring STRINGID_DESTINYKNOTACTIVATES
tryinfatuating BattleScript_ButItFailed
volatileanimation BS_TARGET, VOLATILE_INFATUATION volatileanimation BS_TARGET, VOLATILE_INFATUATION
waitanimation waitanimation
printstring STRINGID_DESTINYKNOTACTIVATES
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
BattleScript_TryDestinyKnotTargetRet: BattleScript_TryDestinyKnotTargetRet:
return return
BattleScript_TryDestinyKnotAttacker: BattleScript_TryDestinyKnotAttacker:
jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotAttackerRet jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet
infatuatewithbattler BS_ATTACKER, BS_TARGET
playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
waitanimation waitanimation
swapattackerwithtarget
printstring STRINGID_DESTINYKNOTACTIVATES
tryinfatuating BattleScript_SwapTargetAttackerButItFailed
swapattackerwithtarget
volatileanimation BS_ATTACKER, VOLATILE_INFATUATION volatileanimation BS_ATTACKER, VOLATILE_INFATUATION
waitanimation waitanimation
printstring STRINGID_DESTINYKNOTACTIVATES
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
BattleScript_TryDestinyKnotAttackerRet:
return return
BattleScript_EffectAttract:: BattleScript_EffectAttract::
@ -3816,6 +3817,9 @@ BattleScript_RestoreAttackerButItFailed:
BattleScript_RestoreTargetButItFailed: BattleScript_RestoreTargetButItFailed:
restoretarget restoretarget
goto BattleScript_ButItFailed goto BattleScript_ButItFailed
BattleScript_SwapTargetAttackerButItFailed:
swapattackerwithtarget
goto BattleScript_ButItFailed
BattleScript_NotAffected:: BattleScript_NotAffected::
pause B_WAIT_TIME_SHORT pause B_WAIT_TIME_SHORT
@ -6116,10 +6120,11 @@ BattleScript_PowderMoveNoEffect::
pause B_WAIT_TIME_SHORT pause B_WAIT_TIME_SHORT
jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_PowderMoveNoEffectPrint jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_PowderMoveNoEffectPrint
jumpifability BS_TARGET, ABILITY_OVERCOAT, BattleScript_PowderMoveNoEffectOvercoat jumpifability BS_TARGET, ABILITY_OVERCOAT, BattleScript_PowderMoveNoEffectOvercoat
setlastuseditem BS_TARGET
printstring STRINGID_SAFETYGOGGLESPROTECTED printstring STRINGID_SAFETYGOGGLESPROTECTED
goto BattleScript_PowderMoveNoEffectWaitMsg goto BattleScript_PowderMoveNoEffectWaitMsg
BattleScript_PowderMoveNoEffectOvercoat: BattleScript_PowderMoveNoEffectOvercoat:
call BattleScript_AbilityPopUp call BattleScript_AbilityPopUpTarget
BattleScript_PowderMoveNoEffectPrint: BattleScript_PowderMoveNoEffectPrint:
printstring STRINGID_ITDOESNTAFFECT printstring STRINGID_ITDOESNTAFFECT
BattleScript_PowderMoveNoEffectWaitMsg: BattleScript_PowderMoveNoEffectWaitMsg:
@ -6382,7 +6387,7 @@ BattleScript_MoveEffectRecoil::
return return
BattleScript_ItemSteal:: BattleScript_ItemSteal::
playanimation BS_TARGET, B_ANIM_ITEM_STEAL playanimation BS_EFFECT_BATTLER, B_ANIM_ITEM_STEAL
printstring STRINGID_PKMNSTOLEITEM printstring STRINGID_PKMNSTOLEITEM
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
return return
@ -8225,6 +8230,7 @@ BattleScript_Pickpocket::
call BattleScript_AbilityPopUp call BattleScript_AbilityPopUp
jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented
swapattackerwithtarget swapattackerwithtarget
copybyte gEffectBattler, gBattlerTarget
call BattleScript_ItemSteal call BattleScript_ItemSteal
swapattackerwithtarget swapattackerwithtarget
activateitemeffects activateitemeffects

View File

@ -154,7 +154,6 @@ u32 CountNegativeStatStages(u32 battlerId);
// move checks // move checks
bool32 Ai_IsPriorityBlocked(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData); bool32 Ai_IsPriorityBlocked(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData);
bool32 IsAffectedByPowder(u32 battler, enum Ability ability, enum HoldEffect holdEffect);
bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, enum DamageCategory category); bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, enum DamageCategory category);
enum MoveComparisonResult AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo); enum MoveComparisonResult AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo);
struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, enum AIConsiderGimmick considerGimmickAtk, enum AIConsiderGimmick considerGimmickDef); struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, enum AIConsiderGimmick considerGimmickAtk, enum AIConsiderGimmick considerGimmickDef);

View File

@ -22,7 +22,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battler);
void ClearSpritesHealthboxAnimData(void); void ClearSpritesHealthboxAnimData(void);
void CopyAllBattleSpritesInvisibilities(void); void CopyAllBattleSpritesInvisibilities(void);
void CopyBattleSpriteInvisibility(u8 battler); void CopyBattleSpriteInvisibility(u8 battler);
void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bool8 trackEnemyPersonality); void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 changeType);
void BattleLoadSubstituteOrMonSpriteGfx(u8 battler, bool8 loadMonSprite); void BattleLoadSubstituteOrMonSpriteGfx(u8 battler, bool8 loadMonSprite);
void LoadBattleMonGfxAndAnimate(u8 battler, bool8 loadMonSprite, u8 spriteId); void LoadBattleMonGfxAndAnimate(u8 battler, bool8 loadMonSprite, u8 spriteId);
void TrySetBehindSubstituteSpriteBit(u8 battler, u16 move); void TrySetBehindSubstituteSpriteBit(u8 battler, u16 move);

View File

@ -425,6 +425,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, enum Ability atkA
bool32 IsSemiInvulnerable(u32 battler, enum SemiInvulnerableExclusion excludeCommander); bool32 IsSemiInvulnerable(u32 battler, enum SemiInvulnerableExclusion excludeCommander);
bool32 BreaksThroughSemiInvulnerablity(u32 battler, u32 move); bool32 BreaksThroughSemiInvulnerablity(u32 battler, u32 move);
bool32 HasPartnerTrainer(u32 battler); bool32 HasPartnerTrainer(u32 battler);
bool32 IsAffectedByPowderMove(u32 battler, u32 ability, enum HoldEffect holdEffect);
u32 GetNaturePowerMove(u32 battler); u32 GetNaturePowerMove(u32 battler);
u32 GetNaturePowerMove(u32 battler); u32 GetNaturePowerMove(u32 battler);
void RemoveAbilityFlags(u32 battler); void RemoveAbilityFlags(u32 battler);

View File

@ -166,6 +166,7 @@
#define B_BATTLE_BOND GEN_LATEST // In Gen9+, Battle Bond increases Atk, SpAtk and Speed by one stage, once per battle #define B_BATTLE_BOND GEN_LATEST // In Gen9+, Battle Bond increases Atk, SpAtk and Speed by one stage, once per battle
#define B_ATE_MULTIPLIER GEN_LATEST // In Gen7+, -ate abilities (Aerilate, Galvanize, Normalize, Pixilate, Refrigerate) multiply damage by 1.2. Otherwise, it's 1.3, except Normalize which has no multiplier. #define B_ATE_MULTIPLIER GEN_LATEST // In Gen7+, -ate abilities (Aerilate, Galvanize, Normalize, Pixilate, Refrigerate) multiply damage by 1.2. Otherwise, it's 1.3, except Normalize which has no multiplier.
#define B_DEFIANT_STICKY_WEB GEN_LATEST // In Gen9+, Defiant activates on Sticky Web regardless of who set it up. In Gen8, Defiant does not activate on Sticky Web set up by an ally after Court Change swaps its side. #define B_DEFIANT_STICKY_WEB GEN_LATEST // In Gen9+, Defiant activates on Sticky Web regardless of who set it up. In Gen8, Defiant does not activate on Sticky Web set up by an ally after Court Change swaps its side.
#define B_POWDER_OVERCOAT GEN_LATEST // In Gen6+, Overcoat blocks powder and spore moves from affecting the user.
// Item settings // Item settings
#define B_CONFUSE_BERRIES_HEAL GEN_LATEST // Before Gen7, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP. #define B_CONFUSE_BERRIES_HEAL GEN_LATEST // Before Gen7, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP.

View File

@ -173,7 +173,6 @@ enum VolatileFlags
F(VOLATILE_INFATUATION, infatuation, (enum BattlerId, MAX_BITS(4))) \ F(VOLATILE_INFATUATION, infatuation, (enum BattlerId, MAX_BITS(4))) \
F(VOLATILE_DEFENSE_CURL, defenseCurl, (u32, 1)) \ F(VOLATILE_DEFENSE_CURL, defenseCurl, (u32, 1)) \
F(VOLATILE_TRANSFORMED, transformed, (u32, 1)) \ F(VOLATILE_TRANSFORMED, transformed, (u32, 1)) \
F(VOLATILE_RECHARGE, recharge, (u32, 1)) \
F(VOLATILE_RAGE, rage, (u32, 1)) \ F(VOLATILE_RAGE, rage, (u32, 1)) \
F(VOLATILE_SUBSTITUTE, substitute, (u32, 1), V_BATON_PASSABLE) \ F(VOLATILE_SUBSTITUTE, substitute, (u32, 1), V_BATON_PASSABLE) \
F(VOLATILE_DESTINY_BOND, destinyBond, (u32, 2)) \ F(VOLATILE_DESTINY_BOND, destinyBond, (u32, 2)) \
@ -183,7 +182,7 @@ enum VolatileFlags
F(VOLATILE_FORESIGHT, foresight, (u32, 1)) \ F(VOLATILE_FORESIGHT, foresight, (u32, 1)) \
F(VOLATILE_DRAGON_CHEER, dragonCheer, (u32, 1), V_BATON_PASSABLE) \ F(VOLATILE_DRAGON_CHEER, dragonCheer, (u32, 1), V_BATON_PASSABLE) \
F(VOLATILE_FOCUS_ENERGY, focusEnergy, (u32, 1), V_BATON_PASSABLE) \ F(VOLATILE_FOCUS_ENERGY, focusEnergy, (u32, 1), V_BATON_PASSABLE) \
F(VOLATILE_SEMI_INVULNERABLE, semiInvulnerable, (u32, 5)) \ F(VOLATILE_SEMI_INVULNERABLE, semiInvulnerable, (u32, SEMI_INVULNERABLE_COUNT - 1)) \
F(VOLATILE_ELECTRIFIED, electrified, (u32, 1)) \ F(VOLATILE_ELECTRIFIED, electrified, (u32, 1)) \
F(VOLATILE_MUD_SPORT, mudSport, (u32, 1), V_BATON_PASSABLE) \ F(VOLATILE_MUD_SPORT, mudSport, (u32, 1), V_BATON_PASSABLE) \
F(VOLATILE_WATER_SPORT, waterSport, (u32, 1), V_BATON_PASSABLE) \ F(VOLATILE_WATER_SPORT, waterSport, (u32, 1), V_BATON_PASSABLE) \
@ -243,6 +242,7 @@ enum SemiInvulnerableState
STATE_PHANTOM_FORCE, STATE_PHANTOM_FORCE,
STATE_SKY_DROP, STATE_SKY_DROP,
STATE_COMMANDER, STATE_COMMANDER,
SEMI_INVULNERABLE_COUNT,
}; };
enum SemiInvulnerableExclusion enum SemiInvulnerableExclusion

View File

@ -668,6 +668,14 @@
#define ANIM_ORDER_UP_DROOPY 2 #define ANIM_ORDER_UP_DROOPY 2
#define ANIM_ORDER_UP_STRETCHY 3 #define ANIM_ORDER_UP_STRETCHY 3
// AnimTask_TransformMon variations
enum SpeciesGfxChange
{
SPECIES_GFX_CHANGE_TRANSFORM,
SPECIES_GFX_CHANGE_FORM_CHANGE,
SPECIES_GFX_CHANGE_ILLUSION_OFF,
};
// Flags given to various functions to indicate which palettes to consider. // Flags given to various functions to indicate which palettes to consider.
// Handled by UnpackSelectedBattlePalettes // Handled by UnpackSelectedBattlePalettes
#define F_PAL_BG (1 << 0) #define F_PAL_BG (1 << 0)

View File

@ -42,6 +42,7 @@ enum GenConfigTag
GEN_CONFIG_DESTINY_BOND_FAIL, GEN_CONFIG_DESTINY_BOND_FAIL,
GEN_CONFIG_POWDER_RAIN, GEN_CONFIG_POWDER_RAIN,
GEN_CONFIG_POWDER_GRASS, GEN_CONFIG_POWDER_GRASS,
GEN_CONFIG_POWDER_OVERCOAT,
GEN_CONFIG_OBLIVIOUS_TAUNT, GEN_CONFIG_OBLIVIOUS_TAUNT,
GEN_CONFIG_TOXIC_NEVER_MISS, GEN_CONFIG_TOXIC_NEVER_MISS,
GEN_CONFIG_PARALYZE_ELECTRIC, GEN_CONFIG_PARALYZE_ELECTRIC,

View File

@ -45,6 +45,7 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] =
[GEN_CONFIG_DESTINY_BOND_FAIL] = B_DESTINY_BOND_FAIL, [GEN_CONFIG_DESTINY_BOND_FAIL] = B_DESTINY_BOND_FAIL,
[GEN_CONFIG_POWDER_RAIN] = B_POWDER_RAIN, [GEN_CONFIG_POWDER_RAIN] = B_POWDER_RAIN,
[GEN_CONFIG_POWDER_GRASS] = B_POWDER_GRASS, [GEN_CONFIG_POWDER_GRASS] = B_POWDER_GRASS,
[GEN_CONFIG_POWDER_OVERCOAT] = B_POWDER_OVERCOAT,
[GEN_CONFIG_OBLIVIOUS_TAUNT] = B_OBLIVIOUS_TAUNT, [GEN_CONFIG_OBLIVIOUS_TAUNT] = B_OBLIVIOUS_TAUNT,
[GEN_CONFIG_TOXIC_NEVER_MISS] = B_TOXIC_NEVER_MISS, [GEN_CONFIG_TOXIC_NEVER_MISS] = B_TOXIC_NEVER_MISS,
[GEN_CONFIG_PARALYZE_ELECTRIC] = B_PARALYZE_ELECTRIC, [GEN_CONFIG_PARALYZE_ELECTRIC] = B_PARALYZE_ELECTRIC,

View File

@ -1088,7 +1088,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
SetTypeBeforeUsingMove(move, battlerAtk); SetTypeBeforeUsingMove(move, battlerAtk);
moveType = GetBattleMoveType(move); moveType = GetBattleMoveType(move);
if (IsPowderMove(move) && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) if (IsPowderMove(move) && !IsAffectedByPowderMove(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef]))
RETURN_SCORE_MINUS(10); RETURN_SCORE_MINUS(10);
if (!BreaksThroughSemiInvulnerablity(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) if (!BreaksThroughSemiInvulnerablity(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY))
@ -4915,7 +4915,7 @@ static s32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move, stru
if (hasPartner if (hasPartner
&& GetMoveTarget(move) == MOVE_TARGET_USER && GetMoveTarget(move) == MOVE_TARGET_USER
&& !IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && !IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef])
&& (!IsPowderMove(move) || IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef]))) && (!IsPowderMove(move) || IsAffectedByPowderMove(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])))
// Rage Powder doesn't affect powder immunities // Rage Powder doesn't affect powder immunities
{ {
u32 predictedMoveOnPartner = gLastMoves[BATTLE_PARTNER(battlerAtk)]; u32 predictedMoveOnPartner = gLastMoves[BATTLE_PARTNER(battlerAtk)];

View File

@ -540,16 +540,6 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler)
return FALSE; return FALSE;
} }
// move checks
bool32 IsAffectedByPowder(u32 battler, enum Ability ability, enum HoldEffect holdEffect)
{
if (ability == ABILITY_OVERCOAT
|| (GetGenConfig(GEN_CONFIG_POWDER_GRASS) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS))
|| holdEffect == HOLD_EFFECT_SAFETY_GOGGLES)
return FALSE;
return TRUE;
}
bool32 Ai_IsPriorityBlocked(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData) bool32 Ai_IsPriorityBlocked(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData)
{ {
s32 atkPriority = GetBattleMovePriority(battlerAtk, aiData->abilities[battlerAtk], move); s32 atkPriority = GetBattleMovePriority(battlerAtk, aiData->abilities[battlerAtk], move);
@ -568,6 +558,7 @@ bool32 Ai_IsPriorityBlocked(u32 battlerAtk, u32 battlerDef, u32 move, struct AiL
return FALSE; return FALSE;
} }
// This function checks if all physical/special moves are either unusable or unreasonable to use. // This function checks if all physical/special moves are either unusable or unreasonable to use.
// Consider a pokemon boosting their attack against a ghost pokemon having only normal-type physical attacks. // Consider a pokemon boosting their attack against a ghost pokemon having only normal-type physical attacks.
bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, enum DamageCategory category) bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, enum DamageCategory category)
@ -1067,6 +1058,49 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3
{ {
switch (additionalEffect->moveEffect) switch (additionalEffect->moveEffect)
{ {
case MOVE_EFFECT_ATK_MINUS_1:
case MOVE_EFFECT_ATK_MINUS_2:
if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK))
return TRUE;
break;
case MOVE_EFFECT_DEF_MINUS_1:
case MOVE_EFFECT_DEF_MINUS_2:
if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK))
return TRUE;
break;
case MOVE_EFFECT_SPD_MINUS_1:
case MOVE_EFFECT_SPD_MINUS_2:
if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF))
return TRUE;
break;
case MOVE_EFFECT_SP_ATK_MINUS_1:
case MOVE_EFFECT_SP_ATK_MINUS_2:
if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPATK))
return TRUE;
break;
case MOVE_EFFECT_SP_DEF_MINUS_1:
case MOVE_EFFECT_SP_DEF_MINUS_2:
if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPDEF))
return TRUE;
break;
case MOVE_EFFECT_EVS_MINUS_1:
case MOVE_EFFECT_EVS_MINUS_2:
if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_EVASION))
return TRUE;
break;
case MOVE_EFFECT_ACC_MINUS_1:
case MOVE_EFFECT_ACC_MINUS_2:
if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ACC))
return TRUE;
break;
case MOVE_EFFECT_ATK_DEF_DOWN:
if (abilityAtk == ABILITY_CONTRARY && (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK) || BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF)))
return TRUE;
break;
case MOVE_EFFECT_DEF_SPDEF_DOWN:
if (abilityAtk == ABILITY_CONTRARY && (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF) || BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPDEF)))
return TRUE;
break;
case MOVE_EFFECT_ATK_PLUS_1: case MOVE_EFFECT_ATK_PLUS_1:
case MOVE_EFFECT_ATK_PLUS_2: case MOVE_EFFECT_ATK_PLUS_2:
if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK)) if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK))
@ -1426,7 +1460,7 @@ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 aiMoveConsidered, u32 pla
bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move)
{ {
enum BattleMoveEffects effect = GetMoveEffect(move); enum BattleMoveEffects effect = GetMoveEffect(move);
if (!AI_BattlerAtMaxHp(battlerTarget) || effect == EFFECT_MULTI_HIT) if (!AI_BattlerAtMaxHp(battlerTarget) || effect == EFFECT_MULTI_HIT || gAiLogicData->abilities[battler] == ABILITY_PARENTAL_BOND)
return FALSE; return FALSE;
if (GetMoveStrikeCount(move) > 1 && !(effect == EFFECT_DRAGON_DARTS && !HasTwoOpponents(battler))) if (GetMoveStrikeCount(move) > 1 && !(effect == EFFECT_DRAGON_DARTS && !HasTwoOpponents(battler)))
return FALSE; return FALSE;
@ -3489,7 +3523,7 @@ bool32 IsBattlerIncapacitated(u32 battler, enum Ability ability)
if (gBattleMons[battler].status1 & STATUS1_SLEEP && !HasMoveWithEffect(battler, EFFECT_SLEEP_TALK)) if (gBattleMons[battler].status1 & STATUS1_SLEEP && !HasMoveWithEffect(battler, EFFECT_SLEEP_TALK))
return TRUE; return TRUE;
if (gBattleMons[battler].volatiles.recharge || (ability == ABILITY_TRUANT && gDisableStructs[battler].truantCounter != 0)) if (gDisableStructs[battler].rechargeTimer > 0 || (ability == ABILITY_TRUANT && gDisableStructs[battler].truantCounter != 0))
return TRUE; return TRUE;
return FALSE; return FALSE;

View File

@ -2484,11 +2484,10 @@ void AnimTask_HideSwapSprite(u8 taskId)
case 0: case 0:
gTasks[taskId].data[11] = gSprites[spriteId].x; // Save battler position gTasks[taskId].data[11] = gSprites[spriteId].x; // Save battler position
gSprites[spriteId].x = -64; // hide it from screen to avoid the blip/glitch effect when swapping the sprite. gSprites[spriteId].x = -64; // hide it from screen to avoid the blip/glitch effect when swapping the sprite.
gTasks[taskId].data[10] = gBattleAnimArgs[0];
gTasks[taskId].data[0]++; gTasks[taskId].data[0]++;
break; break;
case 1: case 1:
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]); HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, SPECIES_GFX_CHANGE_FORM_CHANGE);
GetBgDataForTransform(&animBg, gBattleAnimAttacker); GetBgDataForTransform(&animBg, gBattleAnimAttacker);
if (IsContest()) if (IsContest())
@ -2536,14 +2535,6 @@ void AnimTask_HideSwapSprite(u8 taskId)
break; break;
case 2: case 2:
gSprites[spriteId].x = gTasks[taskId].data[11]; // restores battler position gSprites[spriteId].x = gTasks[taskId].data[11]; // restores battler position
if (!IsContest())
{
if (!IsOnPlayerSide(gBattleAnimAttacker))
{
if (gTasks[taskId].data[10] == 0)
SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies);
}
}
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
break; break;
@ -2596,7 +2587,6 @@ void AnimTask_TransformMon(u8 taskId)
SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1); SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1);
gTasks[taskId].data[10] = gBattleAnimArgs[0]; gTasks[taskId].data[10] = gBattleAnimArgs[0];
gTasks[taskId].data[11] = gBattleAnimArgs[1];
gTasks[taskId].data[0]++; gTasks[taskId].data[0]++;
break; break;
case 1: case 1:
@ -2611,7 +2601,7 @@ void AnimTask_TransformMon(u8 taskId)
} }
break; break;
case 2: case 2:
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gTasks[taskId].data[11]); HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]);
GetBgDataForTransform(&animBg, gBattleAnimAttacker); GetBgDataForTransform(&animBg, gBattleAnimAttacker);
if (IsContest()) if (IsContest())
@ -2680,7 +2670,7 @@ void AnimTask_TransformMon(u8 taskId)
{ {
if (!IsOnPlayerSide(gBattleAnimAttacker)) if (!IsOnPlayerSide(gBattleAnimAttacker))
{ {
if (gTasks[taskId].data[10] == 0) if (gTasks[taskId].data[10] == SPECIES_GFX_CHANGE_TRANSFORM)
SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies); SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies);
} }
} }

View File

@ -360,7 +360,6 @@ static const struct ListMenuItem sVolatileStatusListItems[] =
{COMPOUND_STRING("Torment"), VOLATILE_TORMENT}, {COMPOUND_STRING("Torment"), VOLATILE_TORMENT},
{COMPOUND_STRING("Powder"), VOLATILE_POWDER}, {COMPOUND_STRING("Powder"), VOLATILE_POWDER},
{COMPOUND_STRING("DefenseCurl"), VOLATILE_DEFENSE_CURL}, {COMPOUND_STRING("DefenseCurl"), VOLATILE_DEFENSE_CURL},
{COMPOUND_STRING("Recharge"), VOLATILE_RECHARGE},
{COMPOUND_STRING("Rage"), VOLATILE_RAGE}, {COMPOUND_STRING("Rage"), VOLATILE_RAGE},
{COMPOUND_STRING("DestinyBond"), VOLATILE_DESTINY_BOND}, {COMPOUND_STRING("DestinyBond"), VOLATILE_DESTINY_BOND},
{COMPOUND_STRING("EscapePrevention"), VOLATILE_ESCAPE_PREVENTION}, {COMPOUND_STRING("EscapePrevention"), VOLATILE_ESCAPE_PREVENTION},

View File

@ -908,7 +908,7 @@ void CopyBattleSpriteInvisibility(u8 battler)
gBattleSpritesDataPtr->battlerData[battler].invisible = gSprites[gBattlerSpriteIds[battler]].invisible; gBattleSpritesDataPtr->battlerData[battler].invisible = gSprites[gBattlerSpriteIds[battler]].invisible;
} }
void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bool8 trackEnemyPersonality) void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 changeType)
{ {
u32 personalityValue, position, paletteOffset, targetSpecies; u32 personalityValue, position, paletteOffset, targetSpecies;
bool32 isShiny; bool32 isShiny;
@ -949,7 +949,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo
targetSpecies = gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies; targetSpecies = gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies;
} }
if (trackEnemyPersonality) if (changeType == SPECIES_GFX_CHANGE_TRANSFORM)
{ {
personalityValue = gDisableStructs[battlerAtk].transformedMonPersonality; personalityValue = gDisableStructs[battlerAtk].transformedMonPersonality;
isShiny = gDisableStructs[battlerAtk].transformedMonShininess; isShiny = gDisableStructs[battlerAtk].transformedMonShininess;
@ -971,7 +971,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo
paletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, isShiny, personalityValue); paletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, isShiny, personalityValue);
LoadPalette(paletteData, paletteOffset, PLTT_SIZE_4BPP); LoadPalette(paletteData, paletteOffset, PLTT_SIZE_4BPP);
if (!megaEvo) if (changeType == SPECIES_GFX_CHANGE_TRANSFORM)
{ {
BlendPalette(paletteOffset, 16, 6, RGB_WHITE); BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16));
@ -988,6 +988,13 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16));
} }
// Terastallization's tint
if (changeType != SPECIES_GFX_CHANGE_ILLUSION_OFF && GetActiveGimmick(battlerAtk) == GIMMICK_TERA)
{
BlendPalette(paletteOffset, 16, 8, GetTeraTypeRGB(GetBattlerTeraType(battlerAtk)));
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16));
}
gSprites[gBattlerSpriteIds[battlerAtk]].y = GetBattlerSpriteDefault_Y(battlerAtk); gSprites[gBattlerSpriteIds[battlerAtk]].y = GetBattlerSpriteDefault_Y(battlerAtk);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], 0); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], 0);
} }

View File

@ -4226,7 +4226,7 @@ static void HandleTurnActionSelectionState(void)
else else
{ {
if (gBattleMons[battler].volatiles.multipleTurns if (gBattleMons[battler].volatiles.multipleTurns
|| gBattleMons[battler].volatiles.recharge) || gDisableStructs[battler].rechargeTimer > 0)
{ {
gChosenActionByBattler[battler] = B_ACTION_USE_MOVE; gChosenActionByBattler[battler] = B_ACTION_USE_MOVE;
gBattleCommunication[battler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; gBattleCommunication[battler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY;
@ -4381,7 +4381,7 @@ static void HandleTurnActionSelectionState(void)
gBattleCommunication[GetPartnerBattler(battler)] = STATE_BEFORE_ACTION_CHOSEN; gBattleCommunication[GetPartnerBattler(battler)] = STATE_BEFORE_ACTION_CHOSEN;
RecordedBattle_ClearBattlerAction(battler, 1); RecordedBattle_ClearBattlerAction(battler, 1);
if (gBattleMons[GetPartnerBattler(battler)].volatiles.multipleTurns if (gBattleMons[GetPartnerBattler(battler)].volatiles.multipleTurns
|| gBattleMons[GetPartnerBattler(battler)].volatiles.recharge) || gDisableStructs[GetPartnerBattler(battler)].rechargeTimer > 0)
{ {
BtlController_EmitEndBounceEffect(battler, B_COMM_TO_CONTROLLER); BtlController_EmitEndBounceEffect(battler, B_COMM_TO_CONTROLLER);
MarkBattlerForControllerExec(battler); MarkBattlerForControllerExec(battler);
@ -5141,11 +5141,8 @@ static void TurnValuesCleanUp(bool8 var0)
gDisableStructs[i].isFirstTurn--; gDisableStructs[i].isFirstTurn--;
if (gDisableStructs[i].rechargeTimer) if (gDisableStructs[i].rechargeTimer)
{
gDisableStructs[i].rechargeTimer--; gDisableStructs[i].rechargeTimer--;
if (gDisableStructs[i].rechargeTimer == 0)
gBattleMons[i].volatiles.recharge = FALSE;
}
gBattleStruct->battlerState[i].canPickupItem = FALSE; gBattleStruct->battlerState[i].canPickupItem = FALSE;
gBattleStruct->battlerState[i].wasAboveHalfHp = FALSE; gBattleStruct->battlerState[i].wasAboveHalfHp = FALSE;
} }

View File

@ -298,7 +298,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
[STRINGID_PKMNTRYINGTOTAKEFOE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is hoping to take its attacker down with it!"), [STRINGID_PKMNTRYINGTOTAKEFOE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is hoping to take its attacker down with it!"),
[STRINGID_PKMNTOOKFOE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} took its attacker down with it!"), [STRINGID_PKMNTOOKFOE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} took its attacker down with it!"),
[STRINGID_PKMNREDUCEDPP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s PP was reduced!"), [STRINGID_PKMNREDUCEDPP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s PP was reduced!"),
[STRINGID_PKMNSTOLEITEM] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} stole {B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"), [STRINGID_PKMNSTOLEITEM] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} stole {B_EFF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"),
[STRINGID_TARGETCANTESCAPENOW] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} can no longer escape!"), [STRINGID_TARGETCANTESCAPENOW] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} can no longer escape!"),
[STRINGID_PKMNFELLINTONIGHTMARE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} began having a nightmare!"), [STRINGID_PKMNFELLINTONIGHTMARE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} began having a nightmare!"),
[STRINGID_PKMNLOCKEDINNIGHTMARE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is locked in a nightmare!"), [STRINGID_PKMNLOCKEDINNIGHTMARE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is locked in a nightmare!"),
@ -684,7 +684,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
[STRINGID_RECEIVERABILITYTAKEOVER] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} was taken over!"), [STRINGID_RECEIVERABILITYTAKEOVER] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} was taken over!"),
[STRINGID_PKNMABSORBINGPOWER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is absorbing power!"), [STRINGID_PKNMABSORBINGPOWER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is absorbing power!"),
[STRINGID_NOONEWILLBEABLETORUNAWAY] = COMPOUND_STRING("No one will be able to run away during the next turn!"), [STRINGID_NOONEWILLBEABLETORUNAWAY] = COMPOUND_STRING("No one will be able to run away during the next turn!"),
[STRINGID_DESTINYKNOTACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"), [STRINGID_DESTINYKNOTACTIVATES] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"),
[STRINGID_CLOAKEDINAFREEZINGLIGHT] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became cloaked in a freezing light!"), [STRINGID_CLOAKEDINAFREEZINGLIGHT] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became cloaked in a freezing light!"),
[STRINGID_CLEARAMULETWONTLOWERSTATS] = COMPOUND_STRING("The effects of the {B_LAST_ITEM} held by {B_SCR_NAME_WITH_PREFIX2} prevents its stats from being lowered!"), [STRINGID_CLEARAMULETWONTLOWERSTATS] = COMPOUND_STRING("The effects of the {B_LAST_ITEM} held by {B_SCR_NAME_WITH_PREFIX2} prevents its stats from being lowered!"),
[STRINGID_FERVENTWISHREACHED] = COMPOUND_STRING("{B_ATK_TRAINER_NAME}'s fervent wish has reached {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_FERVENTWISHREACHED] = COMPOUND_STRING("{B_ATK_TRAINER_NAME}'s fervent wish has reached {B_ATK_NAME_WITH_PREFIX2}!"),

View File

@ -1049,31 +1049,15 @@ u32 NumFaintedBattlersByAttacker(u32 battlerAtk)
return numMonsFainted; return numMonsFainted;
} }
bool32 IsMovePowderBlocked(struct BattleContext *ctx) bool32 IsPowderMoveBlocked(struct BattleContext *ctx)
{ {
bool32 effect = FALSE; if (!IsPowderMove(ctx->currentMove)
|| ctx->battlerAtk == ctx->battlerDef
|| IsAffectedByPowderMove(ctx->battlerDef, ctx->abilities[ctx->battlerDef], GetBattlerHoldEffect(ctx->battlerDef)))
return FALSE;
if (IsPowderMove(ctx->currentMove) && (ctx->battlerAtk != ctx->battlerDef)) gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect;
{ return TRUE;
if (GetGenConfig(GEN_CONFIG_POWDER_GRASS) >= GEN_6
&& (IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_GRASS) || ctx->abilities[ctx->battlerDef] == ABILITY_OVERCOAT))
{
gBattlerAbility = ctx->battlerDef;
RecordAbilityBattle(ctx->battlerDef, ABILITY_OVERCOAT);
effect = TRUE;
}
else if (GetBattlerHoldEffect(ctx->battlerDef) == HOLD_EFFECT_SAFETY_GOGGLES)
{
RecordItemEffectBattle(ctx->battlerDef, HOLD_EFFECT_SAFETY_GOGGLES);
gLastUsedItem = gBattleMons[ctx->battlerDef].item;
effect = TRUE;
}
if (effect)
gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect;
}
return effect;
} }
bool32 EmergencyExitCanBeTriggered(u32 battler) bool32 EmergencyExitCanBeTriggered(u32 battler)
@ -1166,7 +1150,7 @@ static void Cmd_attackcanceler(void)
return; return;
} }
if (IsMovePowderBlocked(&ctx)) if (IsPowderMoveBlocked(&ctx))
return; return;
// Check if no available target present on the field or if Sky Battles ban the move // Check if no available target present on the field or if Sky Battles ban the move
@ -2779,11 +2763,11 @@ static void CheckSetUnburden(u8 battler)
gDisableStructs[battler].unburdenActive = TRUE; gDisableStructs[battler].unburdenActive = TRUE;
} }
// battlerStealer steals the item of battlerItem // battlerStealer steals the item of itemBattler
void StealTargetItem(u8 battlerStealer, u8 battlerItem) void StealTargetItem(u8 battlerStealer, u8 itemBattler)
{ {
gLastUsedItem = gBattleMons[battlerItem].item; gLastUsedItem = gBattleMons[itemBattler].item;
gBattleMons[battlerItem].item = ITEM_NONE; gBattleMons[itemBattler].item = ITEM_NONE;
if (GetGenConfig(GEN_STEAL_WILD_ITEMS) >= GEN_9 if (GetGenConfig(GEN_STEAL_WILD_ITEMS) >= GEN_9
&& !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE)) && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE))
@ -2802,16 +2786,16 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem)
MarkBattlerForControllerExec(battlerStealer); MarkBattlerForControllerExec(battlerStealer);
} }
RecordItemEffectBattle(battlerItem, ITEM_NONE); RecordItemEffectBattle(itemBattler, ITEM_NONE);
CheckSetUnburden(battlerItem); CheckSetUnburden(itemBattler);
BtlController_EmitSetMonData(battlerItem, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[battlerItem].item); // remove target item BtlController_EmitSetMonData(itemBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[itemBattler].item), &gBattleMons[itemBattler].item); // remove target item
MarkBattlerForControllerExec(battlerItem); MarkBattlerForControllerExec(itemBattler);
if (GetBattlerAbility(gBattlerTarget) != ABILITY_GORILLA_TACTICS) if (GetBattlerAbility(itemBattler) != ABILITY_GORILLA_TACTICS)
gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE; gBattleStruct->choicedMove[itemBattler] = MOVE_NONE;
TrySaveExchangedItem(battlerItem, gLastUsedItem); TrySaveExchangedItem(itemBattler, gLastUsedItem);
} }
static inline bool32 TrySetReflect(u32 battler) static inline bool32 TrySetReflect(u32 battler)
@ -3264,7 +3248,6 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c
if (B_SKIP_RECHARGE == GEN_1 && !IsBattlerAlive(gBattlerTarget)) // Skip recharge if gen 1 and foe is KO'd if (B_SKIP_RECHARGE == GEN_1 && !IsBattlerAlive(gBattlerTarget)) // Skip recharge if gen 1 and foe is KO'd
break; break;
gBattleMons[gEffectBattler].volatiles.recharge = TRUE;
gDisableStructs[gEffectBattler].rechargeTimer = 2; gDisableStructs[gEffectBattler].rechargeTimer = 2;
gLockedMoves[gEffectBattler] = gCurrentMove; gLockedMoves[gEffectBattler] = gCurrentMove;
gBattlescriptCurrInstr = battleScript; gBattlescriptCurrInstr = battleScript;
@ -5549,22 +5532,54 @@ static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move
switch (abilityAtk) switch (abilityAtk)
{ {
case ABILITY_MAGICIAN: case ABILITY_MAGICIAN:
if (move != MOVE_FLING && move != MOVE_NATURAL_GIFT if (GetMoveEffect(move) != EFFECT_FLING
&& GetMoveEffect(move) != EFFECT_NATURAL_GIFT
&& gBattleMons[battlerAtk].item == ITEM_NONE && gBattleMons[battlerAtk].item == ITEM_NONE
&& gBattleMons[battlerDef].item != ITEM_NONE
&& IsBattlerAlive(battlerAtk) && IsBattlerAlive(battlerAtk)
&& IsBattlerTurnDamaged(battlerDef) && !gSpecialStatuses[battlerAtk].gemBoost) // In base game, gems are consumed after magician would activate.
&& CanStealItem(battlerAtk, battlerDef, gBattleMons[battlerDef].item)
&& !gSpecialStatuses[battlerAtk].gemBoost // In base game, gems are consumed after magician would activate.
&& !(gWishFutureKnock.knockedOffMons[GetBattlerSide(battlerDef)] & (1u << gBattlerPartyIndexes[battlerDef]))
&& !DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
&& (GetBattlerAbility(battlerDef) != ABILITY_STICKY_HOLD || !IsBattlerAlive(battlerDef)))
{ {
StealTargetItem(battlerAtk, battlerDef); u32 numMagicianTargets = 0;
gBattleScripting.battler = gBattlerAbility = battlerAtk; u32 magicianTargets = 0;
gEffectBattler = battlerDef;
BattleScriptCall(BattleScript_MagicianActivates); for (u32 i = 0; i < gBattlersCount; i++)
effect = TRUE; {
if (gBattleMons[i].item != ITEM_NONE
&& i != battlerAtk
&& IsBattlerTurnDamaged(i)
&& CanStealItem(battlerAtk, i, gBattleMons[i].item)
&& !(gWishFutureKnock.knockedOffMons[GetBattlerSide(i)] & (1u << gBattlerPartyIndexes[i]))
&& !DoesSubstituteBlockMove(battlerAtk, i, move)
&& (GetBattlerAbility(i) != ABILITY_STICKY_HOLD || !IsBattlerAlive(i)))
{
magicianTargets |= 1u << i;
numMagicianTargets++;
}
}
if (numMagicianTargets == 0)
{
effect = FALSE;
break;
}
u8 battlers[4] = {0, 1, 2, 3};
if (numMagicianTargets > 1)
SortBattlersBySpeed(battlers, FALSE);
for (u32 i = 0; i < gBattlersCount; i++)
{
u32 battler = battlers[i];
if (!(magicianTargets & 1u << battler))
continue;
StealTargetItem(battlerAtk, battler);
gBattlerAbility = battlerAtk;
gEffectBattler = battler;
BattleScriptCall(BattleScript_MagicianActivates);
effect = TRUE;
break; // found target to steal from
}
} }
break; break;
case ABILITY_MOXIE: case ABILITY_MOXIE:
@ -5739,6 +5754,7 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect)
gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS) gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS)
gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later
} }
gEffectBattler = gBattlerTarget;
BattleScriptCall(BattleScript_ItemSteal); BattleScriptCall(BattleScript_ItemSteal);
effect = TRUE; effect = TRUE;
} }
@ -16548,15 +16564,6 @@ void BS_JumpIfNoAlly(void)
gBattlescriptCurrInstr = cmd->nextInstr; gBattlescriptCurrInstr = cmd->nextInstr;
} }
void BS_InfatuateWithBattler(void)
{
NATIVE_ARGS(u8 battler, u8 infatuateWith);
u32 battler = GetBattlerForBattleScript(cmd->battler);
gBattleScripting.battler = battler;
gBattleMons[battler].volatiles.infatuation = INFATUATED_WITH(GetBattlerForBattleScript(cmd->infatuateWith));
gBattlescriptCurrInstr = cmd->nextInstr;
}
void BS_SetLastUsedItem(void) void BS_SetLastUsedItem(void)
{ {
NATIVE_ARGS(u8 battler); NATIVE_ARGS(u8 battler);

View File

@ -1134,8 +1134,12 @@ bool32 GetTrainerFlagFromScriptPointer(const u8 *data)
bool32 GetRematchFromScriptPointer(const u8 *data) bool32 GetRematchFromScriptPointer(const u8 *data)
{ {
#if FREE_MATCH_CALL
return FALSE;
#else
TrainerBattleParameter *temp = (TrainerBattleParameter*)(data + OPCODE_OFFSET); TrainerBattleParameter *temp = (TrainerBattleParameter*)(data + OPCODE_OFFSET);
return ShouldTryRematchBattleForTrainerId(temp->params.opponentA); return ShouldTryRematchBattleForTrainerId(temp->params.opponentA);
#endif
} }
#undef OPCODE_OFFSET #undef OPCODE_OFFSET
@ -1809,11 +1813,13 @@ static bool8 WasSecondRematchWon(const struct RematchTrainer *table, u16 firstBa
return FALSE; return FALSE;
if (!HasTrainerBeenFought(table[tableId].trainerIds[1])) if (!HasTrainerBeenFought(table[tableId].trainerIds[1]))
return FALSE; return FALSE;
#if FREE_MATCH_CALL == FALSE
if (I_VS_SEEKER_CHARGING) if (I_VS_SEEKER_CHARGING)
{ {
if (gSaveBlock1Ptr->trainerRematches[tableId] == 0) if (gSaveBlock1Ptr->trainerRematches[tableId] == 0)
return FALSE; return FALSE;
} }
#endif
return TRUE; return TRUE;
} }

View File

@ -357,7 +357,7 @@ bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move)
if (effect == EFFECT_PURSUIT && IsPursuitTargetSet()) if (effect == EFFECT_PURSUIT && IsPursuitTargetSet())
return FALSE; return FALSE;
if (gSideTimers[defSide].followmePowder && !IsAffectedByPowder(battlerAtk, ability, GetBattlerHoldEffect(battlerAtk))) if (gSideTimers[defSide].followmePowder && !IsAffectedByPowderMove(battlerAtk, ability, GetBattlerHoldEffect(battlerAtk)))
return FALSE; return FALSE;
return TRUE; return TRUE;
@ -448,7 +448,7 @@ void HandleAction_UseMove(void)
gCurrentMove = gChosenMove = MOVE_STRUGGLE; gCurrentMove = gChosenMove = MOVE_STRUGGLE;
gBattleStruct->moveTarget[gBattlerAttacker] = GetBattleMoveTarget(MOVE_STRUGGLE, NO_TARGET_OVERRIDE); gBattleStruct->moveTarget[gBattlerAttacker] = GetBattleMoveTarget(MOVE_STRUGGLE, NO_TARGET_OVERRIDE);
} }
else if (gBattleMons[gBattlerAttacker].volatiles.multipleTurns || gBattleMons[gBattlerAttacker].volatiles.recharge) else if (gBattleMons[gBattlerAttacker].volatiles.multipleTurns || gDisableStructs[gBattlerAttacker].rechargeTimer > 0)
{ {
gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker];
} }
@ -1973,10 +1973,8 @@ static enum MoveCanceller CancellerSkyDrop(struct BattleContext *ctx)
static enum MoveCanceller CancellerRecharge(struct BattleContext *ctx) static enum MoveCanceller CancellerRecharge(struct BattleContext *ctx)
{ {
if (gBattleMons[ctx->battlerAtk].volatiles.recharge) if (gDisableStructs[ctx->battlerAtk].rechargeTimer > 0)
{ {
gBattleMons[ctx->battlerAtk].volatiles.recharge = TRUE;
gDisableStructs[ctx->battlerAtk].rechargeTimer = 0;
CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELLER_CHECK); CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELLER_CHECK);
gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge; gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@ -5023,9 +5021,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
case ABILITY_EFFECT_SPORE: case ABILITY_EFFECT_SPORE:
{ {
enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker);
if ((GetGenConfig(GEN_CONFIG_POWDER_GRASS) < GEN_6 || !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GRASS)) enum HoldEffect holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker);
&& abilityAtk != ABILITY_OVERCOAT if (IsAffectedByPowderMove(gBattlerAttacker, abilityAtk, holdEffectAtk))
&& GetBattlerHoldEffect(gBattlerAttacker) != HOLD_EFFECT_SAFETY_GOGGLES)
{ {
u32 poison, paralysis, sleep; u32 poison, paralysis, sleep;
@ -5052,7 +5049,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerTurnDamaged(gBattlerTarget)
&& CanBeSlept(gBattlerTarget, gBattlerAttacker, abilityAtk, NOT_BLOCKED_BY_SLEEP_CLAUSE) && CanBeSlept(gBattlerTarget, gBattlerAttacker, abilityAtk, NOT_BLOCKED_BY_SLEEP_CLAUSE)
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move)) && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, abilityAtk, holdEffectAtk, move))
{ {
if (IsSleepClauseEnabled()) if (IsSleepClauseEnabled())
gBattleStruct->battlerState[gBattlerAttacker].sleepClauseEffectExempt = TRUE; gBattleStruct->battlerState[gBattlerAttacker].sleepClauseEffectExempt = TRUE;
@ -10791,6 +10788,15 @@ static bool32 IsOpposingSideEmpty(u32 battler)
return TRUE; return TRUE;
} }
bool32 IsAffectedByPowderMove(u32 battler, u32 ability, enum HoldEffect holdEffect)
{
if ((GetGenConfig(GEN_CONFIG_POWDER_OVERCOAT) >= GEN_6 && ability == ABILITY_OVERCOAT)
|| (GetGenConfig(GEN_CONFIG_POWDER_GRASS) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS))
|| holdEffect == HOLD_EFFECT_SAFETY_GOGGLES)
return FALSE;
return TRUE;
}
static u32 GetMirrorMoveMove(void) static u32 GetMirrorMoveMove(void)
{ {
s32 i, validMovesCount; s32 i, validMovesCount;

View File

@ -6706,12 +6706,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
{ {
.name = COMPOUND_STRING("Uproar"), .name = COMPOUND_STRING("Uproar"),
.description = COMPOUND_STRING( .description = COMPOUND_STRING(
#if B_UPROAR_TURNS >= GEN_5 #if B_UPROAR_TURNS >= GEN_5
"Causes an uproar for 2 to 5\n" "Causes an uproar for 3\n"
#else #else
"Causes an uproar for 3\n" "Causes an uproar for 2 to 5\n"
#endif #endif
"turns and prevents sleep."), "turns and prevents sleep."),
.effect = EFFECT_UPROAR, .effect = EFFECT_UPROAR,
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 90 : 50, .power = B_UPDATED_MOVE_DATA >= GEN_5 ? 90 : 50,
.type = TYPE_NORMAL, .type = TYPE_NORMAL,

View File

@ -200,12 +200,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Venusaur, .shinyPalette = gMonShinyPalette_Venusaur,
.iconSprite = gMonIcon_Venusaur, .iconSprite = gMonIcon_Venusaur,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_VenusaurF, .frontPicFemale = gMonFrontPic_VenusaurF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_VenusaurF, .backPicFemale = gMonBackPic_VenusaurF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Venusaur) FOOTPRINT(Venusaur)
@ -1336,12 +1336,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Butterfree, .shinyPalette = gMonShinyPalette_Butterfree,
.iconSprite = gMonIcon_Butterfree, .iconSprite = gMonIcon_Butterfree,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_ButterfreeF, .frontPicFemale = gMonFrontPic_ButterfreeF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_ButterfreeF, .backPicFemale = gMonBackPic_ButterfreeF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 13, SHADOW_SIZE_S) SHADOW(-3, 13, SHADOW_SIZE_S)
FOOTPRINT(Butterfree) FOOTPRINT(Butterfree)
@ -2100,12 +2100,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Rattata, .shinyPalette = gMonShinyPalette_Rattata,
.iconSprite = gMonIcon_Rattata, .iconSprite = gMonIcon_Rattata,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_RattataF, .frontPicFemale = gMonFrontPic_RattataF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 40), .frontPicSizeFemale = MON_COORDS_SIZE(40, 40),
.backPicFemale = gMonBackPic_RattataF, .backPicFemale = gMonBackPic_RattataF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_FAST, .pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(1, -3, SHADOW_SIZE_S) SHADOW(1, -3, SHADOW_SIZE_S)
FOOTPRINT(Rattata) FOOTPRINT(Rattata)
@ -2192,12 +2192,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Raticate, .shinyPalette = gMonShinyPalette_Raticate,
.iconSprite = gMonIcon_Raticate, .iconSprite = gMonIcon_Raticate,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_RaticateF, .frontPicFemale = gMonFrontPic_RaticateF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_RaticateF, .backPicFemale = gMonBackPic_RaticateF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_FAST, .pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, 8, SHADOW_SIZE_L) SHADOW(0, 8, SHADOW_SIZE_L)
FOOTPRINT(Raticate) FOOTPRINT(Raticate)
@ -2916,7 +2916,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Pikachu, .shinyPalette = gMonShinyPalette_Pikachu,
.iconSprite = gMonIcon_Pikachu, .iconSprite = gMonIcon_Pikachu,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_PikachuF, .frontPicFemale = gMonFrontPic_PikachuF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicSizeFemale = MON_COORDS_SIZE(48, 48),
.backPicFemale = gMonBackPic_PikachuF, .backPicFemale = gMonBackPic_PikachuF,
@ -2925,7 +2925,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSpriteFemale = gMonIcon_PikachuF, .iconSpriteFemale = gMonIcon_PikachuF,
.iconPalIndexFemale = 2, .iconPalIndexFemale = 2,
#endif //P_CUSTOM_GENDER_DIFF_ICONS #endif //P_CUSTOM_GENDER_DIFF_ICONS
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-3, 5, SHADOW_SIZE_M) SHADOW(-3, 5, SHADOW_SIZE_M)
OVERWORLD( OVERWORLD(
@ -5693,12 +5693,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Zubat, .shinyPalette = gMonShinyPalette_Zubat,
.iconSprite = gMonIcon_Zubat, .iconSprite = gMonIcon_Zubat,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_ZubatF, .frontPicFemale = gMonFrontPic_ZubatF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
.backPicFemale = gMonBackPic_ZubatF, .backPicFemale = gMonBackPic_ZubatF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicSizeFemale = MON_COORDS_SIZE(56, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 11, SHADOW_SIZE_S) SHADOW(-4, 11, SHADOW_SIZE_S)
FOOTPRINT(Zubat) FOOTPRINT(Zubat)
@ -5792,12 +5792,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Golbat, .shinyPalette = gMonShinyPalette_Golbat,
.iconSprite = gMonIcon_Golbat, .iconSprite = gMonIcon_Golbat,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_GolbatF, .frontPicFemale = gMonFrontPic_GolbatF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_GolbatF, .backPicFemale = gMonBackPic_GolbatF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 40), .backPicSizeFemale = MON_COORDS_SIZE(56, 40),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 14, SHADOW_SIZE_M) SHADOW(2, 14, SHADOW_SIZE_M)
FOOTPRINT(Golbat) FOOTPRINT(Golbat)
@ -6043,12 +6043,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Gloom, .shinyPalette = gMonShinyPalette_Gloom,
.iconSprite = gMonIcon_Gloom, .iconSprite = gMonIcon_Gloom,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_GloomF, .frontPicFemale = gMonFrontPic_GloomF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
.backPicFemale = gMonBackPic_GloomF, .backPicFemale = gMonBackPic_GloomF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 3, SHADOW_SIZE_M) SHADOW(-1, 3, SHADOW_SIZE_M)
FOOTPRINT(Gloom) FOOTPRINT(Gloom)
@ -6136,12 +6136,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Vileplume, .shinyPalette = gMonShinyPalette_Vileplume,
.iconSprite = gMonIcon_Vileplume, .iconSprite = gMonIcon_Vileplume,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_VileplumeF, .frontPicFemale = gMonFrontPic_VileplumeF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicSizeFemale = MON_COORDS_SIZE(56, 56),
.backPicFemale = gMonBackPic_VileplumeF, .backPicFemale = gMonBackPic_VileplumeF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 7, SHADOW_SIZE_L) SHADOW(-1, 7, SHADOW_SIZE_L)
FOOTPRINT(Vileplume) FOOTPRINT(Vileplume)
@ -8308,12 +8308,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Politoed, .shinyPalette = gMonShinyPalette_Politoed,
.iconSprite = gMonIcon_Politoed, .iconSprite = gMonIcon_Politoed,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_PolitoedF, .frontPicFemale = gMonFrontPic_PolitoedF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
.backPicFemale = gMonBackPic_PolitoedF, .backPicFemale = gMonBackPic_PolitoedF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicSizeFemale = MON_COORDS_SIZE(56, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 9, SHADOW_SIZE_M) SHADOW(1, 9, SHADOW_SIZE_M)
FOOTPRINT(Politoed) FOOTPRINT(Politoed)
@ -8471,12 +8471,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Kadabra, .shinyPalette = gMonShinyPalette_Kadabra,
.iconSprite = gMonIcon_Kadabra, .iconSprite = gMonIcon_Kadabra,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_KadabraF, .frontPicFemale = gMonFrontPic_KadabraF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_KadabraF, .backPicFemale = gMonBackPic_KadabraF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 6, SHADOW_SIZE_L) SHADOW(1, 6, SHADOW_SIZE_L)
FOOTPRINT(Kadabra) FOOTPRINT(Kadabra)
@ -8570,12 +8570,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Alakazam, .shinyPalette = gMonShinyPalette_Alakazam,
.iconSprite = gMonIcon_Alakazam, .iconSprite = gMonIcon_Alakazam,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_AlakazamF, .frontPicFemale = gMonFrontPic_AlakazamF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_AlakazamF, .backPicFemale = gMonBackPic_AlakazamF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 9, SHADOW_SIZE_L) SHADOW(-1, 9, SHADOW_SIZE_L)
FOOTPRINT(Alakazam) FOOTPRINT(Alakazam)
@ -11165,12 +11165,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Doduo, .shinyPalette = gMonShinyPalette_Doduo,
.iconSprite = gMonIcon_Doduo, .iconSprite = gMonIcon_Doduo,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_DoduoF, .frontPicFemale = gMonFrontPic_DoduoF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_DoduoF, .backPicFemale = gMonBackPic_DoduoF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 5, SHADOW_SIZE_M) SHADOW(6, 5, SHADOW_SIZE_M)
FOOTPRINT(Doduo) FOOTPRINT(Doduo)
@ -11258,12 +11258,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Dodrio, .shinyPalette = gMonShinyPalette_Dodrio,
.iconSprite = gMonIcon_Dodrio, .iconSprite = gMonIcon_Dodrio,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_DodrioF, .frontPicFemale = gMonFrontPic_DodrioF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_DodrioF, .backPicFemale = gMonBackPic_DodrioF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 12, SHADOW_SIZE_L) SHADOW(3, 12, SHADOW_SIZE_L)
FOOTPRINT(Dodrio) FOOTPRINT(Dodrio)
@ -12361,12 +12361,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Steelix, .shinyPalette = gMonShinyPalette_Steelix,
.iconSprite = gMonIcon_Steelix, .iconSprite = gMonIcon_Steelix,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_SteelixF, .frontPicFemale = gMonFrontPic_SteelixF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_SteelixF, .backPicFemale = gMonBackPic_SteelixF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Steelix) FOOTPRINT(Steelix)
@ -12603,12 +12603,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Hypno, .shinyPalette = gMonShinyPalette_Hypno,
.iconSprite = gMonIcon_Hypno, .iconSprite = gMonIcon_Hypno,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_HypnoF, .frontPicFemale = gMonFrontPic_HypnoF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_HypnoF, .backPicFemale = gMonBackPic_HypnoF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 9, SHADOW_SIZE_L) SHADOW(-3, 9, SHADOW_SIZE_L)
FOOTPRINT(Hypno) FOOTPRINT(Hypno)
@ -14362,12 +14362,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Rhyhorn, .shinyPalette = gMonShinyPalette_Rhyhorn,
.iconSprite = gMonIcon_Rhyhorn, .iconSprite = gMonIcon_Rhyhorn,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_RhyhornF, .frontPicFemale = gMonFrontPic_RhyhornF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 40), .frontPicSizeFemale = MON_COORDS_SIZE(56, 40),
.backPicFemale = gMonBackPic_RhyhornF, .backPicFemale = gMonBackPic_RhyhornF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 0, SHADOW_SIZE_L) SHADOW(0, 0, SHADOW_SIZE_L)
FOOTPRINT(Rhyhorn) FOOTPRINT(Rhyhorn)
@ -14443,12 +14443,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Rhydon, .shinyPalette = gMonShinyPalette_Rhydon,
.iconSprite = gMonIcon_Rhydon, .iconSprite = gMonIcon_Rhydon,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_RhydonF, .frontPicFemale = gMonFrontPic_RhydonF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_RhydonF, .backPicFemale = gMonBackPic_RhydonF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Rhydon) FOOTPRINT(Rhydon)
@ -15389,12 +15389,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Goldeen, .shinyPalette = gMonShinyPalette_Goldeen,
.iconSprite = gMonIcon_Goldeen, .iconSprite = gMonIcon_Goldeen,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_GoldeenF, .frontPicFemale = gMonFrontPic_GoldeenF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 40), .frontPicSizeFemale = MON_COORDS_SIZE(64, 40),
.backPicFemale = gMonBackPic_GoldeenF, .backPicFemale = gMonBackPic_GoldeenF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 0, SHADOW_SIZE_XL_BATTLE_ONLY) SHADOW(-6, 0, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Goldeen) FOOTPRINT(Goldeen)
@ -15474,12 +15474,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Seaking, .shinyPalette = gMonShinyPalette_Seaking,
.iconSprite = gMonIcon_Seaking, .iconSprite = gMonIcon_Seaking,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_SeakingF, .frontPicFemale = gMonFrontPic_SeakingF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_SeakingF, .backPicFemale = gMonBackPic_SeakingF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Seaking) FOOTPRINT(Seaking)
@ -17431,12 +17431,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Magikarp, .shinyPalette = gMonShinyPalette_Magikarp,
.iconSprite = gMonIcon_Magikarp, .iconSprite = gMonIcon_Magikarp,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_MagikarpF, .frontPicFemale = gMonFrontPic_MagikarpF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
.backPicFemale = gMonBackPic_MagikarpF, .backPicFemale = gMonBackPic_MagikarpF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 7, SHADOW_SIZE_M) SHADOW(1, 7, SHADOW_SIZE_M)
FOOTPRINT(Magikarp) FOOTPRINT(Magikarp)
@ -17513,12 +17513,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Gyarados, .shinyPalette = gMonShinyPalette_Gyarados,
.iconSprite = gMonIcon_Gyarados, .iconSprite = gMonIcon_Gyarados,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_GyaradosF, .frontPicFemale = gMonFrontPic_GyaradosF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_GyaradosF, .backPicFemale = gMonBackPic_GyaradosF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 9, SHADOW_SIZE_XL_BATTLE_ONLY) SHADOW(5, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Gyarados) FOOTPRINT(Gyarados)
@ -17875,12 +17875,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Eevee, .shinyPalette = gMonShinyPalette_Eevee,
.iconSprite = gMonIcon_Eevee, .iconSprite = gMonIcon_Eevee,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_EeveeF, .frontPicFemale = gMonFrontPic_EeveeF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicSizeFemale = MON_COORDS_SIZE(40, 48),
.backPicFemale = gMonBackPic_EeveeF, .backPicFemale = gMonBackPic_EeveeF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicSizeFemale = MON_COORDS_SIZE(56, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 2, SHADOW_SIZE_S) SHADOW(-2, 2, SHADOW_SIZE_S)
FOOTPRINT(Eevee) FOOTPRINT(Eevee)
@ -18030,7 +18030,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.shinyPalette = gMonShinyPalette_Eevee, .shinyPalette = gMonShinyPalette_Eevee,
.iconSprite = gMonIcon_EeveePartner, .iconSprite = gMonIcon_EeveePartner,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_EeveeF, .frontPicFemale = gMonFrontPic_EeveeF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicSizeFemale = MON_COORDS_SIZE(40, 48),
.backPicFemale = gMonBackPic_EeveeF, .backPicFemale = gMonBackPic_EeveeF,
@ -18039,7 +18039,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSpriteFemale = gMonIcon_EeveePartnerF, .iconSpriteFemale = gMonIcon_EeveePartnerF,
.iconPalIndexFemale = 2, .iconPalIndexFemale = 2,
#endif #endif
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 2, SHADOW_SIZE_S) SHADOW(-2, 2, SHADOW_SIZE_S)
FOOTPRINT(Eevee) FOOTPRINT(Eevee)

View File

@ -198,12 +198,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Meganium, .shinyPalette = gMonShinyPalette_Meganium,
.iconSprite = gMonIcon_Meganium, .iconSprite = gMonIcon_Meganium,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_MeganiumF, .frontPicFemale = gMonFrontPic_MeganiumF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 64), .frontPicSizeFemale = MON_COORDS_SIZE(48, 64),
.backPicFemale = gMonBackPic_MeganiumF, .backPicFemale = gMonBackPic_MeganiumF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_M) SHADOW(0, 13, SHADOW_SIZE_M)
FOOTPRINT(Meganium) FOOTPRINT(Meganium)
@ -1242,12 +1242,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Ledyba, .shinyPalette = gMonShinyPalette_Ledyba,
.iconSprite = gMonIcon_Ledyba, .iconSprite = gMonIcon_Ledyba,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_LedybaF, .frontPicFemale = gMonFrontPic_LedybaF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicSizeFemale = MON_COORDS_SIZE(48, 48),
.backPicFemale = gMonBackPic_LedybaF, .backPicFemale = gMonBackPic_LedybaF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicSizeFemale = MON_COORDS_SIZE(56, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 4, SHADOW_SIZE_M) SHADOW(2, 4, SHADOW_SIZE_M)
FOOTPRINT(Ledyba) FOOTPRINT(Ledyba)
@ -1326,12 +1326,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Ledian, .shinyPalette = gMonShinyPalette_Ledian,
.iconSprite = gMonIcon_Ledian, .iconSprite = gMonIcon_Ledian,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_LedianF, .frontPicFemale = gMonFrontPic_LedianF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
.backPicFemale = gMonBackPic_LedianF, .backPicFemale = gMonBackPic_LedianF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 15, SHADOW_SIZE_S) SHADOW(0, 15, SHADOW_SIZE_S)
FOOTPRINT(Ledian) FOOTPRINT(Ledian)
@ -2690,12 +2690,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Sudowoodo, .shinyPalette = gMonShinyPalette_Sudowoodo,
.iconSprite = gMonIcon_Sudowoodo, .iconSprite = gMonIcon_Sudowoodo,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_SudowoodoF, .frontPicFemale = gMonFrontPic_SudowoodoF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
.backPicFemale = gMonBackPic_SudowoodoF, .backPicFemale = gMonBackPic_SudowoodoF,
.backPicSizeFemale = MON_COORDS_SIZE(48, 56), .backPicSizeFemale = MON_COORDS_SIZE(48, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 7, SHADOW_SIZE_S) SHADOW(-2, 7, SHADOW_SIZE_S)
FOOTPRINT(Sudowoodo) FOOTPRINT(Sudowoodo)
@ -3010,12 +3010,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Aipom, .shinyPalette = gMonShinyPalette_Aipom,
.iconSprite = gMonIcon_Aipom, .iconSprite = gMonIcon_Aipom,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_AipomF, .frontPicFemale = gMonFrontPic_AipomF,
.frontPicSizeFemale = MON_COORDS_SIZE(32, 64), .frontPicSizeFemale = MON_COORDS_SIZE(32, 64),
.backPicFemale = gMonBackPic_AipomF, .backPicFemale = gMonBackPic_AipomF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S) SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Aipom) FOOTPRINT(Aipom)
@ -3095,12 +3095,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Ambipom, .shinyPalette = gMonShinyPalette_Ambipom,
.iconSprite = gMonIcon_Ambipom, .iconSprite = gMonIcon_Ambipom,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_AmbipomF, .frontPicFemale = gMonFrontPic_AmbipomF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_AmbipomF, .backPicFemale = gMonBackPic_AmbipomF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_S) SHADOW(-1, 13, SHADOW_SIZE_S)
FOOTPRINT(Ambipom) FOOTPRINT(Ambipom)
@ -3515,12 +3515,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Wooper, .shinyPalette = gMonShinyPalette_Wooper,
.iconSprite = gMonIcon_Wooper, .iconSprite = gMonIcon_Wooper,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_WooperF, .frontPicFemale = gMonFrontPic_WooperF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 32), .frontPicSizeFemale = MON_COORDS_SIZE(40, 32),
.backPicFemale = gMonBackPic_WooperF, .backPicFemale = gMonBackPic_WooperF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 40), .backPicSizeFemale = MON_COORDS_SIZE(64, 40),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW, .pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(1, -2, SHADOW_SIZE_S) SHADOW(1, -2, SHADOW_SIZE_S)
FOOTPRINT(Wooper) FOOTPRINT(Wooper)
@ -3597,12 +3597,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Quagsire, .shinyPalette = gMonShinyPalette_Quagsire,
.iconSprite = gMonIcon_Quagsire, .iconSprite = gMonIcon_Quagsire,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_QuagsireF, .frontPicFemale = gMonFrontPic_QuagsireF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_QuagsireF, .backPicFemale = gMonBackPic_QuagsireF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 8, SHADOW_SIZE_M) SHADOW(0, 8, SHADOW_SIZE_M)
FOOTPRINT(Quagsire) FOOTPRINT(Quagsire)
@ -3815,12 +3815,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Murkrow, .shinyPalette = gMonShinyPalette_Murkrow,
.iconSprite = gMonIcon_Murkrow, .iconSprite = gMonIcon_Murkrow,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_MurkrowF, .frontPicFemale = gMonFrontPic_MurkrowF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 40), .frontPicSizeFemale = MON_COORDS_SIZE(48, 40),
.backPicFemale = gMonBackPic_MurkrowF, .backPicFemale = gMonBackPic_MurkrowF,
.backPicSizeFemale = MON_COORDS_SIZE(40, 56), .backPicSizeFemale = MON_COORDS_SIZE(40, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 8, SHADOW_SIZE_S) SHADOW(-2, 8, SHADOW_SIZE_S)
FOOTPRINT(Murkrow) FOOTPRINT(Murkrow)
@ -4302,7 +4302,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Wobbuffet, .shinyPalette = gMonShinyPalette_Wobbuffet,
.iconSprite = gMonIcon_Wobbuffet, .iconSprite = gMonIcon_Wobbuffet,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_WobbuffetF, .frontPicFemale = gMonFrontPic_WobbuffetF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_WobbuffetF, .backPicFemale = gMonBackPic_WobbuffetF,
@ -4311,7 +4311,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSpriteFemale = gMonIcon_WobbuffetF, .iconSpriteFemale = gMonIcon_WobbuffetF,
.iconPalIndexFemale = 0, .iconPalIndexFemale = 0,
#endif #endif
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 8, SHADOW_SIZE_M) SHADOW(-3, 8, SHADOW_SIZE_M)
FOOTPRINT(Wobbuffet) FOOTPRINT(Wobbuffet)
@ -4389,12 +4389,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Girafarig, .shinyPalette = gMonShinyPalette_Girafarig,
.iconSprite = gMonIcon_Girafarig, .iconSprite = gMonIcon_Girafarig,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_GirafarigF, .frontPicFemale = gMonFrontPic_GirafarigF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicSizeFemale = MON_COORDS_SIZE(56, 64),
.backPicFemale = gMonBackPic_GirafarigF, .backPicFemale = gMonBackPic_GirafarigF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 13, SHADOW_SIZE_M) SHADOW(2, 13, SHADOW_SIZE_M)
FOOTPRINT(Girafarig) FOOTPRINT(Girafarig)
@ -4896,12 +4896,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Gligar, .shinyPalette = gMonShinyPalette_Gligar,
.iconSprite = gMonIcon_Gligar, .iconSprite = gMonIcon_Gligar,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_GligarF, .frontPicFemale = gMonFrontPic_GligarF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicSizeFemale = MON_COORDS_SIZE(56, 56),
.backPicFemale = gMonBackPic_GligarF, .backPicFemale = gMonBackPic_GligarF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 15, SHADOW_SIZE_S) SHADOW(0, 15, SHADOW_SIZE_S)
FOOTPRINT(Gligar) FOOTPRINT(Gligar)
@ -5500,12 +5500,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Heracross, .shinyPalette = gMonShinyPalette_Heracross,
.iconSprite = gMonIcon_Heracross, .iconSprite = gMonIcon_Heracross,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_HeracrossF, .frontPicFemale = gMonFrontPic_HeracrossF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_HeracrossF, .backPicFemale = gMonBackPic_HeracrossF,
.backPicSizeFemale = MON_COORDS_SIZE(48, 64), .backPicSizeFemale = MON_COORDS_SIZE(48, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 10, SHADOW_SIZE_M) SHADOW(-1, 10, SHADOW_SIZE_M)
FOOTPRINT(Heracross) FOOTPRINT(Heracross)
@ -5661,12 +5661,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Sneasel, .shinyPalette = gMonShinyPalette_Sneasel,
.iconSprite = gMonIcon_Sneasel, .iconSprite = gMonIcon_Sneasel,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_SneaselF, .frontPicFemale = gMonFrontPic_SneaselF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
.backPicFemale = gMonBackPic_SneaselF, .backPicFemale = gMonBackPic_SneaselF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 5, SHADOW_SIZE_S) SHADOW(-1, 5, SHADOW_SIZE_S)
FOOTPRINT(Sneasel) FOOTPRINT(Sneasel)
@ -6056,12 +6056,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Ursaring, .shinyPalette = gMonShinyPalette_Ursaring,
.iconSprite = gMonIcon_Ursaring, .iconSprite = gMonIcon_Ursaring,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_UrsaringF, .frontPicFemale = gMonFrontPic_UrsaringF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_UrsaringF, .backPicFemale = gMonBackPic_UrsaringF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 14, SHADOW_SIZE_L) SHADOW(1, 14, SHADOW_SIZE_L)
FOOTPRINT(Ursaring) FOOTPRINT(Ursaring)
@ -6491,12 +6491,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Piloswine, .shinyPalette = gMonShinyPalette_Piloswine,
.iconSprite = gMonIcon_Piloswine, .iconSprite = gMonIcon_Piloswine,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_PiloswineF, .frontPicFemale = gMonFrontPic_PiloswineF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
.backPicFemale = gMonBackPic_PiloswineF, .backPicFemale = gMonBackPic_PiloswineF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 3, SHADOW_SIZE_M) SHADOW(-1, 3, SHADOW_SIZE_M)
FOOTPRINT(Piloswine) FOOTPRINT(Piloswine)
@ -6959,12 +6959,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Octillery, .shinyPalette = gMonShinyPalette_Octillery,
.iconSprite = gMonIcon_Octillery, .iconSprite = gMonIcon_Octillery,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_OctilleryF, .frontPicFemale = gMonFrontPic_OctilleryF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
.backPicFemale = gMonBackPic_OctilleryF, .backPicFemale = gMonBackPic_OctilleryF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 4, SHADOW_SIZE_M) SHADOW(1, 4, SHADOW_SIZE_M)
FOOTPRINT(Octillery) FOOTPRINT(Octillery)
@ -7475,12 +7475,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Houndoom, .shinyPalette = gMonShinyPalette_Houndoom,
.iconSprite = gMonIcon_Houndoom, .iconSprite = gMonIcon_Houndoom,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_HoundoomF, .frontPicFemale = gMonFrontPic_HoundoomF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_HoundoomF, .backPicFemale = gMonBackPic_HoundoomF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 13, SHADOW_SIZE_L) SHADOW(-5, 13, SHADOW_SIZE_L)
FOOTPRINT(Houndoom) FOOTPRINT(Houndoom)
@ -7702,12 +7702,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Donphan, .shinyPalette = gMonShinyPalette_Donphan,
.iconSprite = gMonIcon_Donphan, .iconSprite = gMonIcon_Donphan,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_DonphanF, .frontPicFemale = gMonFrontPic_DonphanF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 48), .frontPicSizeFemale = MON_COORDS_SIZE(64, 48),
.backPicFemale = gMonBackPic_DonphanF, .backPicFemale = gMonBackPic_DonphanF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(7, 2, SHADOW_SIZE_L) SHADOW(7, 2, SHADOW_SIZE_L)
FOOTPRINT(Donphan) FOOTPRINT(Donphan)

View File

@ -347,10 +347,10 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Torchic, .shinyPalette = gMonShinyPalette_Torchic,
.iconSprite = gMonIcon_Torchic, .iconSprite = gMonIcon_Torchic,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.backPicFemale = gMonBackPic_TorchicF, .backPicFemale = gMonBackPic_TorchicF,
.backPicSizeFemale = MON_COORDS_SIZE(40, 48), .backPicSizeFemale = MON_COORDS_SIZE(40, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW, .pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, 1, SHADOW_SIZE_S) SHADOW(-1, 1, SHADOW_SIZE_S)
FOOTPRINT(Torchic) FOOTPRINT(Torchic)
@ -428,12 +428,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Combusken, .shinyPalette = gMonShinyPalette_Combusken,
.iconSprite = gMonIcon_Combusken, .iconSprite = gMonIcon_Combusken,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_CombuskenF, .frontPicFemale = gMonFrontPic_CombuskenF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 64), .frontPicSizeFemale = MON_COORDS_SIZE(48, 64),
.backPicFemale = gMonBackPic_CombuskenF, .backPicFemale = gMonBackPic_CombuskenF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 8, SHADOW_SIZE_M) SHADOW(-1, 8, SHADOW_SIZE_M)
FOOTPRINT(Combusken) FOOTPRINT(Combusken)
@ -517,12 +517,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Blaziken, .shinyPalette = gMonShinyPalette_Blaziken,
.iconSprite = gMonIcon_Blaziken, .iconSprite = gMonIcon_Blaziken,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_BlazikenF, .frontPicFemale = gMonFrontPic_BlazikenF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicSizeFemale = MON_COORDS_SIZE(56, 64),
.backPicFemale = gMonBackPic_BlazikenF, .backPicFemale = gMonBackPic_BlazikenF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 8, SHADOW_SIZE_M) SHADOW(4, 8, SHADOW_SIZE_M)
FOOTPRINT(Blaziken) FOOTPRINT(Blaziken)
@ -1644,12 +1644,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Beautifly, .shinyPalette = gMonShinyPalette_Beautifly,
.iconSprite = gMonIcon_Beautifly, .iconSprite = gMonIcon_Beautifly,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_BeautiflyF, .frontPicFemale = gMonFrontPic_BeautiflyF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_BeautiflyF, .backPicFemale = gMonBackPic_BeautiflyF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 12, SHADOW_SIZE_S) SHADOW(-5, 12, SHADOW_SIZE_S)
FOOTPRINT(Beautifly) FOOTPRINT(Beautifly)
@ -1825,12 +1825,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Dustox, .shinyPalette = gMonShinyPalette_Dustox,
.iconSprite = gMonIcon_Dustox, .iconSprite = gMonIcon_Dustox,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 5, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 5,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_DustoxF, .frontPicFemale = gMonFrontPic_DustoxF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 48), .frontPicSizeFemale = MON_COORDS_SIZE(64, 48),
.backPicFemale = gMonBackPic_DustoxF, .backPicFemale = gMonBackPic_DustoxF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 11, SHADOW_SIZE_S) SHADOW(-2, 11, SHADOW_SIZE_S)
FOOTPRINT(Dustox) FOOTPRINT(Dustox)
@ -2059,12 +2059,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Ludicolo, .shinyPalette = gMonShinyPalette_Ludicolo,
.iconSprite = gMonIcon_Ludicolo, .iconSprite = gMonIcon_Ludicolo,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_LudicoloF, .frontPicFemale = gMonFrontPic_LudicoloF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicSizeFemale = MON_COORDS_SIZE(56, 64),
.backPicFemale = gMonBackPic_LudicoloF, .backPicFemale = gMonBackPic_LudicoloF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 14, SHADOW_SIZE_M) SHADOW(-3, 14, SHADOW_SIZE_M)
FOOTPRINT(Ludicolo) FOOTPRINT(Ludicolo)
@ -2224,12 +2224,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Nuzleaf, .shinyPalette = gMonShinyPalette_Nuzleaf,
.iconSprite = gMonIcon_Nuzleaf, .iconSprite = gMonIcon_Nuzleaf,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_NuzleafF, .frontPicFemale = gMonFrontPic_NuzleafF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 56), .frontPicSizeFemale = MON_COORDS_SIZE(40, 56),
.backPicFemale = gMonBackPic_NuzleafF, .backPicFemale = gMonBackPic_NuzleafF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicSizeFemale = MON_COORDS_SIZE(56, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 5, SHADOW_SIZE_S) SHADOW(-3, 5, SHADOW_SIZE_S)
FOOTPRINT(Nuzleaf) FOOTPRINT(Nuzleaf)
@ -2316,12 +2316,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Shiftry, .shinyPalette = gMonShinyPalette_Shiftry,
.iconSprite = gMonIcon_Shiftry, .iconSprite = gMonIcon_Shiftry,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 5, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 5,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_ShiftryF, .frontPicFemale = gMonFrontPic_ShiftryF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_ShiftryF, .backPicFemale = gMonBackPic_ShiftryF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 5, SHADOW_SIZE_M) SHADOW(-5, 5, SHADOW_SIZE_M)
FOOTPRINT(Shiftry) FOOTPRINT(Shiftry)
@ -5202,12 +5202,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Meditite, .shinyPalette = gMonShinyPalette_Meditite,
.iconSprite = gMonIcon_Meditite, .iconSprite = gMonIcon_Meditite,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_MedititeF, .frontPicFemale = gMonFrontPic_MedititeF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicSizeFemale = MON_COORDS_SIZE(48, 48),
.backPicFemale = gMonBackPic_MedititeF, .backPicFemale = gMonBackPic_MedititeF,
.backPicSizeFemale = MON_COORDS_SIZE(48, 48), .backPicSizeFemale = MON_COORDS_SIZE(48, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW, .pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 1, SHADOW_SIZE_S) SHADOW(0, 1, SHADOW_SIZE_S)
FOOTPRINT(Meditite) FOOTPRINT(Meditite)
@ -5288,12 +5288,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Medicham, .shinyPalette = gMonShinyPalette_Medicham,
.iconSprite = gMonIcon_Medicham, .iconSprite = gMonIcon_Medicham,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_MedichamF, .frontPicFemale = gMonFrontPic_MedichamF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 64), .frontPicSizeFemale = MON_COORDS_SIZE(40, 64),
.backPicFemale = gMonBackPic_MedichamF, .backPicFemale = gMonBackPic_MedichamF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 13, SHADOW_SIZE_S) SHADOW(-2, 13, SHADOW_SIZE_S)
FOOTPRINT(Medicham) FOOTPRINT(Medicham)
@ -6046,12 +6046,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Roselia, .shinyPalette = gMonShinyPalette_Roselia,
.iconSprite = gMonIcon_Roselia, .iconSprite = gMonIcon_Roselia,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 4, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 4,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_RoseliaF, .frontPicFemale = gMonFrontPic_RoseliaF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
.backPicFemale = gMonBackPic_RoseliaF, .backPicFemale = gMonBackPic_RoseliaF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW, .pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-2, 3, SHADOW_SIZE_S) SHADOW(-2, 3, SHADOW_SIZE_S)
FOOTPRINT(Roselia) FOOTPRINT(Roselia)
@ -6227,12 +6227,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Gulpin, .shinyPalette = gMonShinyPalette_Gulpin,
.iconSprite = gMonIcon_Gulpin, .iconSprite = gMonIcon_Gulpin,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_GulpinF, .frontPicFemale = gMonFrontPic_GulpinF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicSizeFemale = MON_COORDS_SIZE(40, 48),
.backPicFemale = gMonBackPic_GulpinF, .backPicFemale = gMonBackPic_GulpinF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicSizeFemale = MON_COORDS_SIZE(56, 48),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW, .pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(1, -2, SHADOW_SIZE_S) SHADOW(1, -2, SHADOW_SIZE_S)
FOOTPRINT(Gulpin) FOOTPRINT(Gulpin)
@ -6312,12 +6312,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Swalot, .shinyPalette = gMonShinyPalette_Swalot,
.iconSprite = gMonIcon_Swalot, .iconSprite = gMonIcon_Swalot,
.iconPalIndex = 2, .iconPalIndex = 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_SwalotF, .frontPicFemale = gMonFrontPic_SwalotF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicSizeFemale = MON_COORDS_SIZE(56, 56),
.backPicFemale = gMonBackPic_SwalotF, .backPicFemale = gMonBackPic_SwalotF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 3, SHADOW_SIZE_L) SHADOW(4, 3, SHADOW_SIZE_L)
FOOTPRINT(Swalot) FOOTPRINT(Swalot)
@ -6769,12 +6769,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Numel, .shinyPalette = gMonShinyPalette_Numel,
.iconSprite = gMonIcon_Numel, .iconSprite = gMonIcon_Numel,
.iconPalIndex = 1, .iconPalIndex = 1,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_NumelF, .frontPicFemale = gMonFrontPic_NumelF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicSizeFemale = MON_COORDS_SIZE(40, 48),
.backPicFemale = gMonBackPic_NumelF, .backPicFemale = gMonBackPic_NumelF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicSizeFemale = MON_COORDS_SIZE(56, 56),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW, .pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(4, 2, SHADOW_SIZE_S) SHADOW(4, 2, SHADOW_SIZE_S)
FOOTPRINT(Numel) FOOTPRINT(Numel)
@ -6860,12 +6860,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Camerupt, .shinyPalette = gMonShinyPalette_Camerupt,
.iconSprite = gMonIcon_Camerupt, .iconSprite = gMonIcon_Camerupt,
.iconPalIndex = 0, .iconPalIndex = 0,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_CameruptF, .frontPicFemale = gMonFrontPic_CameruptF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
.backPicFemale = gMonBackPic_CameruptF, .backPicFemale = gMonBackPic_CameruptF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 40), .backPicSizeFemale = MON_COORDS_SIZE(64, 40),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 4, SHADOW_SIZE_L) SHADOW(2, 4, SHADOW_SIZE_L)
FOOTPRINT(Camerupt) FOOTPRINT(Camerupt)
@ -9112,12 +9112,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Milotic, .shinyPalette = gMonShinyPalette_Milotic,
.iconSprite = gMonIcon_Milotic, .iconSprite = gMonIcon_Milotic,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_MiloticF, .frontPicFemale = gMonFrontPic_MiloticF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
.backPicFemale = gMonBackPic_MiloticF, .backPicFemale = gMonBackPic_MiloticF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_M) SHADOW(0, 12, SHADOW_SIZE_M)
FOOTPRINT(Milotic) FOOTPRINT(Milotic)
@ -11278,12 +11278,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.shinyPalette = gMonShinyPalette_Relicanth, .shinyPalette = gMonShinyPalette_Relicanth,
.iconSprite = gMonIcon_Relicanth, .iconSprite = gMonIcon_Relicanth,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2,
#if P_GENDER_DIFFERENCES #if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.frontPicFemale = gMonFrontPic_RelicanthF, .frontPicFemale = gMonFrontPic_RelicanthF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicSizeFemale = MON_COORDS_SIZE(56, 56),
.backPicFemale = gMonBackPic_RelicanthF, .backPicFemale = gMonBackPic_RelicanthF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 40), .backPicSizeFemale = MON_COORDS_SIZE(64, 40),
#endif //P_GENDER_DIFFERENCES #endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, .pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 3, SHADOW_SIZE_M) SHADOW(0, 3, SHADOW_SIZE_M)
FOOTPRINT(Relicanth) FOOTPRINT(Relicanth)

View File

@ -47,14 +47,14 @@ static const struct BgTemplate sBgTemplates[3] =
}, },
}; };
static void DecompressErrorScreenTextPrint(const u8 *text, u8 x, u8 y) static void DecompressErrorScreenTextPrint(u32 window, const u8 *text, u8 x, u8 y)
{ {
u8 color[3]; u8 color[3];
color[0] = TEXT_COLOR_TRANSPARENT; color[0] = TEXT_COLOR_TRANSPARENT;
color[1] = TEXT_DYNAMIC_COLOR_6; color[1] = TEXT_DYNAMIC_COLOR_6;
color[2] = TEXT_COLOR_LIGHT_GRAY; color[2] = TEXT_COLOR_LIGHT_GRAY;
AddTextPrinterParameterized4(0, FONT_NORMAL, x * 8, y * 8 + 1, 0, 0, color, 0, text); AddTextPrinterParameterized4(window, FONT_NORMAL, x * 8, y * 8 + 1, 0, 0, color, 0, text);
} }
static void GetHexStringFromU32(u8 *str, u32 value) static void GetHexStringFromU32(u8 *str, u32 value)
@ -121,20 +121,19 @@ static void GetHexStringFromU32(u8 *str, u32 value)
} }
} }
static const struct WindowTemplate sTextWin =
{
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 2,
.width = 24,
.height = 16,
.paletteNum = 15,
.baseBlock = 1,
};
void DecompressionError_CB2(void) void DecompressionError_CB2(void)
{ {
static const struct WindowTemplate textWin[] =
{
{
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 2,
.width = 24,
.height = 16,
.paletteNum = 15,
.baseBlock = 1,
}
};
if (sErrorAddress == 0) if (sErrorAddress == 0)
return; return;
@ -159,20 +158,20 @@ void DecompressionError_CB2(void)
ResetPaletteFade(); ResetPaletteFade();
LoadPalette(gTextWindowFrame1_Pal, 0xE0, 0x20); LoadPalette(gTextWindowFrame1_Pal, 0xE0, 0x20);
LoadPalette(gStandardMenuPalette, 0xF0, 0x20); LoadPalette(gStandardMenuPalette, 0xF0, 0x20);
InitWindows(textWin); u32 window = AddWindow(&sTextWin);
DrawStdFrameWithCustomTileAndPalette(0, TRUE, 0x214, 0xE); DrawStdFrameWithCustomTileAndPalette(window, TRUE, 0x214, 0xE);
static const u8 romCheckFailMessage[] =_( static const u8 romCheckFailMessage[] =_(
"{COLOR RED}ERROR! {COLOR DARK_GRAY}Decompression Failed!\n" "{COLOR RED}ERROR! {COLOR DARK_GRAY}Decompression Failed!\n"
"\n" "\n"
"Address:\n" "Address:\n"
"Error:\n"); "Error:\n");
DecompressErrorScreenTextPrint(romCheckFailMessage, 1, 0); DecompressErrorScreenTextPrint(window, romCheckFailMessage, 1, 0);
u8 addressStr[11]; u8 addressStr[11];
u8 errorStr[11]; u8 errorStr[11];
GetHexStringFromU32(addressStr, sErrorAddress); GetHexStringFromU32(addressStr, sErrorAddress);
GetHexStringFromU32(errorStr, sCompressionError); GetHexStringFromU32(errorStr, sCompressionError);
DecompressErrorScreenTextPrint(addressStr, 7, 4); DecompressErrorScreenTextPrint(window, addressStr, 7, 4);
DecompressErrorScreenTextPrint(errorStr, 7, 6); DecompressErrorScreenTextPrint(window, errorStr, 7, 6);
TransferPlttBuffer(); TransferPlttBuffer();
*(u16*)PLTT = RGB(17, 18, 31); *(u16*)PLTT = RGB(17, 18, 31);
ShowBg(0); ShowBg(0);

View File

@ -176,7 +176,6 @@ void BreakSubStringNaive(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId, enum
Free(allWords); Free(allWords);
} }
#undef SCROLL_PROMPT_WIDTH
void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId, enum ToggleScrollPrompt toggleScrollPrompt) void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId, enum ToggleScrollPrompt toggleScrollPrompt)
{ {
@ -246,6 +245,9 @@ void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId,
for (u32 i = 1; i < numWords; i++) for (u32 i = 1; i < numWords; i++)
totalWidth += allWords[i].width + spaceWidth; totalWidth += allWords[i].width + spaceWidth;
if (toggleScrollPrompt == SHOW_SCROLL_PROMPT)
totalWidth += SCROLL_PROMPT_WIDTH;
// If it doesn't fit on 1 line, do fancy line break calculation // If it doesn't fit on 1 line, do fancy line break calculation
// NOTE: Currently the line break calculation isn't fancy // NOTE: Currently the line break calculation isn't fancy
if (totalWidth > maxWidth) if (totalWidth > maxWidth)
@ -256,6 +258,8 @@ void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId,
bool32 shouldTryAgain; bool32 shouldTryAgain;
for (currWordIndex = 0; currWordIndex < numWords; currWordIndex++) for (currWordIndex = 0; currWordIndex < numWords; currWordIndex++)
{ {
if (toggleScrollPrompt == SHOW_SCROLL_PROMPT && currWordIndex + 1 == numWords)
currLineWidth += SCROLL_PROMPT_WIDTH;
if (currLineWidth + allWords[currWordIndex].length > maxWidth) if (currLineWidth + allWords[currWordIndex].length > maxWidth)
{ {
totalLines++; totalLines++;
@ -266,6 +270,10 @@ void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId,
currLineWidth += allWords[currWordIndex].width + spaceWidth; currLineWidth += allWords[currWordIndex].width + spaceWidth;
} }
} }
if (currLineWidth > maxWidth)
totalLines++;
// LINE LAYOUT STARTS HERE // LINE LAYOUT STARTS HERE
struct StringLine *stringLines; struct StringLine *stringLines;
do do
@ -424,3 +432,4 @@ bool32 StringHasManualBreaks(u8 *src)
} }
return FALSE; return FALSE;
} }
#undef SCROLL_PROMPT_WIDTH

View File

@ -1,4 +1,20 @@
#include "global.h" #include "global.h"
#include "test/battle.h" #include "test/battle.h"
TO_DO_BATTLE_TEST("Bulletproof makes ballistic moves fail against the ability user"); SINGLE_BATTLE_TEST("Bulletproof makes ballistic moves fail against the ability user")
{
GIVEN {
ASSUME(IsBallisticMove(MOVE_ELECTRO_BALL));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_CHESPIN) { Ability(ABILITY_BULLETPROOF); }
} WHEN {
TURN { MOVE(player, MOVE_ELECTRO_BALL); }
} SCENE {
ABILITY_POPUP(opponent, ABILITY_BULLETPROOF);
MESSAGE("The opposing Chespin's Bulletproof blocks Electro Ball!");
NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRO_BALL, player);
HP_BAR(opponent);
}
}
}

View File

@ -242,4 +242,31 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for Contrary mon on switch-in")
} }
} }
AI_SINGLE_BATTLE_TEST("AI sees Contrary-effected moves correctly in MoveEffectInPlus instead of as a neutral effect")
{
GIVEN{
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_HERACROSS){
Level(44);
HP(1);
Speed(5);
Nature(NATURE_ADAMANT);
Item(ITEM_LOADED_DICE);
Moves(MOVE_PIN_MISSILE);
}
OPPONENT(SPECIES_SERPERIOR){
Level(44);
Speed(10);
Nature(NATURE_TIMID);
Ability(ABILITY_CONTRARY);
Moves(MOVE_DRAGON_PULSE, MOVE_SPIN_OUT, MOVE_HIDDEN_POWER, MOVE_GLARE);
}
} WHEN {
TURN{
MOVE(player, MOVE_PIN_MISSILE);
EXPECT_MOVE(opponent, MOVE_SPIN_OUT); // previously all 107, now sees speed can rise w/ Contrary
}
}
}
TO_DO_BATTLE_TEST("Contrary does not invert stat changes that have been Baton-passed") TO_DO_BATTLE_TEST("Contrary does not invert stat changes that have been Baton-passed")

View File

@ -25,3 +25,31 @@ SINGLE_BATTLE_TEST("Magician gets self-damage recoil after stealing Life Orb")
} }
} }
DOUBLE_BATTLE_TEST("Magician steal the item from the fastest possible target")
{
u32 playerRightSpeed = 0;
u32 opponentLeftSpeed = 0;
u32 opponentRightSpeed = 0;
PARAMETRIZE { playerRightSpeed = 4; opponentLeftSpeed = 2; opponentRightSpeed = 3; }
PARAMETRIZE { playerRightSpeed = 3; opponentLeftSpeed = 4; opponentRightSpeed = 2; }
PARAMETRIZE { playerRightSpeed = 2; opponentLeftSpeed = 3; opponentRightSpeed = 4; }
GIVEN {
PLAYER(SPECIES_DELPHOX) { Speed(1); Ability(ABILITY_MAGICIAN); Item(ITEM_NONE); }
PLAYER(SPECIES_WOBBUFFET) { Speed(playerRightSpeed); Item(ITEM_POKE_BALL); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(opponentLeftSpeed); Item(ITEM_GREAT_BALL); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(opponentRightSpeed); Item(ITEM_ULTRA_BALL); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_SURF); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_MAGICIAN);
} THEN {
if (playerRightSpeed == 4)
EXPECT(playerLeft->item == ITEM_POKE_BALL);
else if (opponentLeftSpeed == 4)
EXPECT(playerLeft->item == ITEM_GREAT_BALL);
else if (playerRightSpeed == 4)
EXPECT(playerLeft->item == ITEM_ULTRA_BALL);
}
}

View File

@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Overcoat blocks powder and spore moves (Gen6+)")
PARAMETRIZE { gen = GEN_5; } PARAMETRIZE { gen = GEN_5; }
PARAMETRIZE { gen = GEN_6; } PARAMETRIZE { gen = GEN_6; }
GIVEN { GIVEN {
WITH_CONFIG(GEN_CONFIG_POWDER_GRASS, gen); WITH_CONFIG(GEN_CONFIG_POWDER_OVERCOAT, gen);
ASSUME(IsPowderMove(MOVE_STUN_SPORE)); ASSUME(IsPowderMove(MOVE_STUN_SPORE));
PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); } OPPONENT(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); }

View File

@ -1,4 +1,20 @@
#include "global.h" #include "global.h"
#include "test/battle.h" #include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Soundproof (Ability) test titles") SINGLE_BATTLE_TEST("Soundproof makes sound moves fail against the ability user")
{
GIVEN {
ASSUME(IsSoundMove(MOVE_BOOMBURST));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_EXPLOUD) { Ability(ABILITY_SOUNDPROOF); }
} WHEN {
TURN { MOVE(player, MOVE_BOOMBURST); }
} SCENE {
ABILITY_POPUP(opponent, ABILITY_SOUNDPROOF);
MESSAGE("The opposing Exploud's Soundproof blocks Boomburst!");
NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BOOMBURST, player);
HP_BAR(opponent);
}
}
}

View File

@ -59,3 +59,17 @@ AI_SINGLE_BATTLE_TEST("AI sees Loaded Dice damage increase from multi hit moves"
MESSAGE("Wobbuffet fainted!"); MESSAGE("Wobbuffet fainted!");
} }
} }
AI_SINGLE_BATTLE_TEST("AI sees Parental Bond killing through sturdy")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY);
PLAYER(SPECIES_MAGNEZONE){Level(64); Ability(ABILITY_STURDY); Moves(MOVE_TACKLE, MOVE_LIGHT_SCREEN); }
OPPONENT(SPECIES_KANGASKHAN_MEGA){Level(64); Moves(MOVE_DRAIN_PUNCH, MOVE_TAUNT); }
} WHEN {
TURN{ MOVE(player, MOVE_TACKLE);
EXPECT_MOVE(opponent, MOVE_DRAIN_PUNCH); // AI should see drain punch as a kill due to multi hit, outscoring taunt
}
}
}

View File

@ -0,0 +1,66 @@
#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(gItemsInfo[ITEM_DESTINY_KNOT].holdEffect == HOLD_EFFECT_DESTINY_KNOT);
}
SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is targeted")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); }
} WHEN {
TURN { MOVE(player, MOVE_ATTRACT); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
MESSAGE("Wobbuffet fell in love because of the Destiny Knot!");
} THEN {
EXPECT(player->volatiles.infatuation);
}
}
SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is attacking")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); Item(ITEM_DESTINY_KNOT);}
OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM);}
} WHEN {
TURN { MOVE(player, MOVE_TACKLE); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("The opposing Clefairy fell in love because of the Destiny Knot!");
} THEN {
EXPECT(opponent->volatiles.infatuation);
}
}
SINGLE_BATTLE_TEST("Destiny Knot procs but fails if the target is already infatuated")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); }
} WHEN {
TURN { MOVE(opponent, MOVE_ATTRACT); MOVE(player, MOVE_ATTRACT, WITH_RNG(RNG_INFATUATION, FALSE)); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
MESSAGE("But it failed!");
}
}
SINGLE_BATTLE_TEST("Destiny Knot procs but fails if the target is oblivious")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); Ability(ABILITY_OBLIVIOUS); }
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); }
} WHEN {
TURN { MOVE(player, MOVE_ATTRACT); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
ABILITY_POPUP(player, ABILITY_OBLIVIOUS);
} THEN {
EXPECT(!player->volatiles.infatuation);
}
}

View File

@ -0,0 +1,43 @@
#include "global.h"
#include "test/battle.h"
#include "constants/item_effects.h"
DOUBLE_BATTLE_TEST("Poke Flute heals all battlers from being asleep")
{
GIVEN {
ASSUME(gItemsInfo[ITEM_POKE_FLUTE].battleUsage == EFFECT_ITEM_USE_POKE_FLUTE);
PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
} WHEN {
TURN { USE_ITEM(playerLeft, ITEM_POKE_FLUTE, partyIndex: 0); }
} SCENE {
MESSAGE("The Pokémon hearing the flute awoke!");
} THEN {
EXPECT_EQ(playerLeft->status1, STATUS1_NONE);
EXPECT_EQ(playerRight->status1, STATUS1_NONE);
EXPECT_EQ(opponentLeft->status1, STATUS1_NONE);
EXPECT_EQ(opponentRight->status1, STATUS1_NONE);
}
}
DOUBLE_BATTLE_TEST("Poke Flute does not heal battlers with Soundproof from being asleep")
{
GIVEN {
ASSUME(gItemsInfo[ITEM_POKE_FLUTE].battleUsage == EFFECT_ITEM_USE_POKE_FLUTE);
PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
PLAYER(SPECIES_EXPLOUD) { Ability(ABILITY_SOUNDPROOF); Status1(STATUS1_SLEEP); }
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
OPPONENT(SPECIES_EXPLOUD) { Ability(ABILITY_SOUNDPROOF); Status1(STATUS1_SLEEP); }
} WHEN {
TURN { USE_ITEM(playerLeft, ITEM_POKE_FLUTE, partyIndex: 0); }
} SCENE {
MESSAGE("The Pokémon hearing the flute awoke!");
} THEN {
EXPECT_EQ(playerLeft->status1, STATUS1_NONE);
EXPECT_NE(playerRight->status1, STATUS1_NONE);
EXPECT_EQ(opponentLeft->status1, STATUS1_NONE);
EXPECT_NE(opponentRight->status1, STATUS1_NONE);
}
}

View File

@ -0,0 +1,52 @@
#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(MoveHasAdditionalEffectSelf(MOVE_METEOR_ASSAULT, MOVE_EFFECT_RECHARGE) == TRUE);
}
SINGLE_BATTLE_TEST("Recharge moves make the user unable to attack for exactly one turn")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { }
OPPONENT(SPECIES_WOBBUFFET) { }
} WHEN {
TURN { MOVE(player, MOVE_METEOR_ASSAULT);}
TURN { SKIP_TURN(player);}
TURN { MOVE(player, MOVE_TACKLE);}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_METEOR_ASSAULT, player);
MESSAGE("Wobbuffet must recharge!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
}
}
SINGLE_BATTLE_TEST("Recharge moves don't timeout when all battlers are recharging")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { }
OPPONENT(SPECIES_WOBBUFFET) { }
} WHEN {
TURN { MOVE(player, MOVE_METEOR_ASSAULT); MOVE(opponent, MOVE_METEOR_ASSAULT);}
}
}
DOUBLE_BATTLE_TEST("Recharge moves don't timeout when all battlers are recharging (doubles")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { }
PLAYER(SPECIES_WYNAUT) { }
OPPONENT(SPECIES_WOBBUFFET) { }
OPPONENT(SPECIES_WYNAUT) { }
} WHEN {
TURN {
MOVE(playerLeft, MOVE_METEOR_ASSAULT, target: opponentLeft);
MOVE(playerRight, MOVE_METEOR_ASSAULT, target: opponentRight);
MOVE(opponentLeft, MOVE_METEOR_ASSAULT, target: playerLeft);
MOVE(opponentRight, MOVE_METEOR_ASSAULT, target: playerRight);
}
}
}