conflicts
This commit is contained in:
commit
93cc143134
@ -450,6 +450,24 @@
|
||||
"contributions": [
|
||||
"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,
|
||||
|
||||
4
.github/workflows/labels.yml
vendored
4
.github/workflows/labels.yml
vendored
@ -3,10 +3,12 @@ name: Labels
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, labeled, unlabeled]
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
|
||||
jobs:
|
||||
label:
|
||||
if: github.actor != 'allcontributors[bot]'
|
||||
if: ${{ github.actor != 'allcontributors[bot]' && github.event.review.state == 'approved' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: check labels
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -44,6 +44,7 @@ prefabs.json
|
||||
/pokeemerald-*.png
|
||||
src/data/map_group_count.h
|
||||
include/constants/heal_locations.h
|
||||
include/constants/script_commands.h
|
||||
tools/trainerproc/trainerproc
|
||||
src/data/battle_partners.h
|
||||
src/data/trainers.h
|
||||
|
||||
@ -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="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/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>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
|
||||
@ -1938,12 +1938,6 @@
|
||||
.4byte \jumpInstr
|
||||
.endm
|
||||
|
||||
.macro infatuatewithbattler battler:req, infatuateWith:req
|
||||
callnative BS_InfatuateWithBattler
|
||||
.byte \battler
|
||||
.byte \infatuateWith
|
||||
.endm
|
||||
|
||||
.macro setlastuseditem battler:req
|
||||
callnative BS_SetLastUsedItem
|
||||
.byte \battler
|
||||
|
||||
@ -29003,7 +29003,7 @@ gBattleAnimMove_Transform::
|
||||
monbg ANIM_ATTACKER
|
||||
playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
|
||||
waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48
|
||||
createvisualtask AnimTask_TransformMon, 2, 0, 1
|
||||
createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_TRANSFORM
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATTACKER
|
||||
end
|
||||
@ -31525,14 +31525,14 @@ gBattleAnimGeneral_SimpleHeal::
|
||||
|
||||
gBattleAnimGeneral_IllusionOff::
|
||||
monbg ANIM_TARGET
|
||||
createvisualtask AnimTask_TransformMon, 2, 1, 0
|
||||
createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_ILLUSION_OFF
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_TARGET
|
||||
end
|
||||
|
||||
gBattleAnimGeneral_FormChange::
|
||||
monbg ANIM_ATTACKER
|
||||
createvisualtask AnimTask_TransformMon, 2, 1, 0
|
||||
createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_FORM_CHANGE
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATTACKER
|
||||
end
|
||||
@ -31564,7 +31564,7 @@ gBattleAnimGeneral_MegaEvolution::
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
waitforvisualfinish
|
||||
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_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
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
|
||||
loadspritegfx ANIM_TAG_TERA_SYMBOL
|
||||
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_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
createvisualtask SoundTask_PlayNormalCry, 0
|
||||
@ -31789,7 +31789,7 @@ General_PrimalReversion_Alpha:
|
||||
delay 20
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0
|
||||
createvisualtask AnimTask_HideSwapSprite, 2
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
|
||||
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
createvisualtask SoundTask_PlayNormalCry, 0
|
||||
@ -31822,7 +31822,7 @@ General_PrimalReversion_Omega:
|
||||
delay 20
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0
|
||||
createvisualtask AnimTask_HideSwapSprite, 2
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
|
||||
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
createvisualtask SoundTask_PlayNormalCry, 0
|
||||
@ -31862,7 +31862,7 @@ gBattleAnimGeneral_PowerConstruct::
|
||||
delay 20
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0
|
||||
createvisualtask AnimTask_HideSwapSprite, 2
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
|
||||
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
createvisualtask SoundTask_PlayNormalCry, 0
|
||||
@ -31932,7 +31932,7 @@ gBattleAnimGeneral_UltraBurst::
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
createsprite gUltraBurstSymbolSpriteTemplate, ANIM_ATTACKER, 0x0, 0x0, 0x0, 0x0, 0x0
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0
|
||||
createvisualtask AnimTask_HideSwapSprite, 2
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
|
||||
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
createvisualtask SoundTask_PlayNormalCry, 0
|
||||
|
||||
@ -3508,26 +3508,27 @@ BattleScript_FuryCutterHit:
|
||||
|
||||
BattleScript_TryDestinyKnotTarget:
|
||||
jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet
|
||||
infatuatewithbattler BS_TARGET, BS_ATTACKER
|
||||
playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
|
||||
waitanimation
|
||||
printstring STRINGID_DESTINYKNOTACTIVATES
|
||||
tryinfatuating BattleScript_ButItFailed
|
||||
volatileanimation BS_TARGET, VOLATILE_INFATUATION
|
||||
waitanimation
|
||||
printstring STRINGID_DESTINYKNOTACTIVATES
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
BattleScript_TryDestinyKnotTargetRet:
|
||||
return
|
||||
|
||||
BattleScript_TryDestinyKnotAttacker:
|
||||
jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotAttackerRet
|
||||
infatuatewithbattler BS_ATTACKER, BS_TARGET
|
||||
jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet
|
||||
playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
|
||||
waitanimation
|
||||
swapattackerwithtarget
|
||||
printstring STRINGID_DESTINYKNOTACTIVATES
|
||||
tryinfatuating BattleScript_SwapTargetAttackerButItFailed
|
||||
swapattackerwithtarget
|
||||
volatileanimation BS_ATTACKER, VOLATILE_INFATUATION
|
||||
waitanimation
|
||||
printstring STRINGID_DESTINYKNOTACTIVATES
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
BattleScript_TryDestinyKnotAttackerRet:
|
||||
return
|
||||
|
||||
BattleScript_EffectAttract::
|
||||
@ -3816,6 +3817,9 @@ BattleScript_RestoreAttackerButItFailed:
|
||||
BattleScript_RestoreTargetButItFailed:
|
||||
restoretarget
|
||||
goto BattleScript_ButItFailed
|
||||
BattleScript_SwapTargetAttackerButItFailed:
|
||||
swapattackerwithtarget
|
||||
goto BattleScript_ButItFailed
|
||||
|
||||
BattleScript_NotAffected::
|
||||
pause B_WAIT_TIME_SHORT
|
||||
@ -6116,10 +6120,11 @@ BattleScript_PowderMoveNoEffect::
|
||||
pause B_WAIT_TIME_SHORT
|
||||
jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_PowderMoveNoEffectPrint
|
||||
jumpifability BS_TARGET, ABILITY_OVERCOAT, BattleScript_PowderMoveNoEffectOvercoat
|
||||
setlastuseditem BS_TARGET
|
||||
printstring STRINGID_SAFETYGOGGLESPROTECTED
|
||||
goto BattleScript_PowderMoveNoEffectWaitMsg
|
||||
BattleScript_PowderMoveNoEffectOvercoat:
|
||||
call BattleScript_AbilityPopUp
|
||||
call BattleScript_AbilityPopUpTarget
|
||||
BattleScript_PowderMoveNoEffectPrint:
|
||||
printstring STRINGID_ITDOESNTAFFECT
|
||||
BattleScript_PowderMoveNoEffectWaitMsg:
|
||||
@ -6382,7 +6387,7 @@ BattleScript_MoveEffectRecoil::
|
||||
return
|
||||
|
||||
BattleScript_ItemSteal::
|
||||
playanimation BS_TARGET, B_ANIM_ITEM_STEAL
|
||||
playanimation BS_EFFECT_BATTLER, B_ANIM_ITEM_STEAL
|
||||
printstring STRINGID_PKMNSTOLEITEM
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
return
|
||||
@ -8225,6 +8230,7 @@ BattleScript_Pickpocket::
|
||||
call BattleScript_AbilityPopUp
|
||||
jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented
|
||||
swapattackerwithtarget
|
||||
copybyte gEffectBattler, gBattlerTarget
|
||||
call BattleScript_ItemSteal
|
||||
swapattackerwithtarget
|
||||
activateitemeffects
|
||||
|
||||
@ -154,7 +154,6 @@ u32 CountNegativeStatStages(u32 battlerId);
|
||||
|
||||
// move checks
|
||||
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);
|
||||
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);
|
||||
|
||||
@ -22,7 +22,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battler);
|
||||
void ClearSpritesHealthboxAnimData(void);
|
||||
void CopyAllBattleSpritesInvisibilities(void);
|
||||
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 LoadBattleMonGfxAndAnimate(u8 battler, bool8 loadMonSprite, u8 spriteId);
|
||||
void TrySetBehindSubstituteSpriteBit(u8 battler, u16 move);
|
||||
|
||||
@ -425,6 +425,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, enum Ability atkA
|
||||
bool32 IsSemiInvulnerable(u32 battler, enum SemiInvulnerableExclusion excludeCommander);
|
||||
bool32 BreaksThroughSemiInvulnerablity(u32 battler, u32 move);
|
||||
bool32 HasPartnerTrainer(u32 battler);
|
||||
bool32 IsAffectedByPowderMove(u32 battler, u32 ability, enum HoldEffect holdEffect);
|
||||
u32 GetNaturePowerMove(u32 battler);
|
||||
u32 GetNaturePowerMove(u32 battler);
|
||||
void RemoveAbilityFlags(u32 battler);
|
||||
|
||||
@ -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_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_POWDER_OVERCOAT GEN_LATEST // In Gen6+, Overcoat blocks powder and spore moves from affecting the user.
|
||||
|
||||
// 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.
|
||||
|
||||
@ -173,7 +173,6 @@ enum VolatileFlags
|
||||
F(VOLATILE_INFATUATION, infatuation, (enum BattlerId, MAX_BITS(4))) \
|
||||
F(VOLATILE_DEFENSE_CURL, defenseCurl, (u32, 1)) \
|
||||
F(VOLATILE_TRANSFORMED, transformed, (u32, 1)) \
|
||||
F(VOLATILE_RECHARGE, recharge, (u32, 1)) \
|
||||
F(VOLATILE_RAGE, rage, (u32, 1)) \
|
||||
F(VOLATILE_SUBSTITUTE, substitute, (u32, 1), V_BATON_PASSABLE) \
|
||||
F(VOLATILE_DESTINY_BOND, destinyBond, (u32, 2)) \
|
||||
@ -183,7 +182,7 @@ enum VolatileFlags
|
||||
F(VOLATILE_FORESIGHT, foresight, (u32, 1)) \
|
||||
F(VOLATILE_DRAGON_CHEER, dragonCheer, (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_MUD_SPORT, mudSport, (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_SKY_DROP,
|
||||
STATE_COMMANDER,
|
||||
SEMI_INVULNERABLE_COUNT,
|
||||
};
|
||||
|
||||
enum SemiInvulnerableExclusion
|
||||
|
||||
@ -668,6 +668,14 @@
|
||||
#define ANIM_ORDER_UP_DROOPY 2
|
||||
#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.
|
||||
// Handled by UnpackSelectedBattlePalettes
|
||||
#define F_PAL_BG (1 << 0)
|
||||
|
||||
@ -42,6 +42,7 @@ enum GenConfigTag
|
||||
GEN_CONFIG_DESTINY_BOND_FAIL,
|
||||
GEN_CONFIG_POWDER_RAIN,
|
||||
GEN_CONFIG_POWDER_GRASS,
|
||||
GEN_CONFIG_POWDER_OVERCOAT,
|
||||
GEN_CONFIG_OBLIVIOUS_TAUNT,
|
||||
GEN_CONFIG_TOXIC_NEVER_MISS,
|
||||
GEN_CONFIG_PARALYZE_ELECTRIC,
|
||||
|
||||
@ -45,6 +45,7 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] =
|
||||
[GEN_CONFIG_DESTINY_BOND_FAIL] = B_DESTINY_BOND_FAIL,
|
||||
[GEN_CONFIG_POWDER_RAIN] = B_POWDER_RAIN,
|
||||
[GEN_CONFIG_POWDER_GRASS] = B_POWDER_GRASS,
|
||||
[GEN_CONFIG_POWDER_OVERCOAT] = B_POWDER_OVERCOAT,
|
||||
[GEN_CONFIG_OBLIVIOUS_TAUNT] = B_OBLIVIOUS_TAUNT,
|
||||
[GEN_CONFIG_TOXIC_NEVER_MISS] = B_TOXIC_NEVER_MISS,
|
||||
[GEN_CONFIG_PARALYZE_ELECTRIC] = B_PARALYZE_ELECTRIC,
|
||||
|
||||
@ -1088,7 +1088,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
SetTypeBeforeUsingMove(move, battlerAtk);
|
||||
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);
|
||||
|
||||
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
|
||||
&& GetMoveTarget(move) == MOVE_TARGET_USER
|
||||
&& !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
|
||||
{
|
||||
u32 predictedMoveOnPartner = gLastMoves[BATTLE_PARTNER(battlerAtk)];
|
||||
|
||||
@ -540,16 +540,6 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler)
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
// 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.
|
||||
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)
|
||||
{
|
||||
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_2:
|
||||
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)
|
||||
{
|
||||
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;
|
||||
if (GetMoveStrikeCount(move) > 1 && !(effect == EFFECT_DRAGON_DARTS && !HasTwoOpponents(battler)))
|
||||
return FALSE;
|
||||
@ -3489,7 +3523,7 @@ bool32 IsBattlerIncapacitated(u32 battler, enum Ability ability)
|
||||
if (gBattleMons[battler].status1 & STATUS1_SLEEP && !HasMoveWithEffect(battler, EFFECT_SLEEP_TALK))
|
||||
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 FALSE;
|
||||
|
||||
@ -2484,11 +2484,10 @@ void AnimTask_HideSwapSprite(u8 taskId)
|
||||
case 0:
|
||||
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.
|
||||
gTasks[taskId].data[10] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]);
|
||||
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, SPECIES_GFX_CHANGE_FORM_CHANGE);
|
||||
GetBgDataForTransform(&animBg, gBattleAnimAttacker);
|
||||
|
||||
if (IsContest())
|
||||
@ -2536,14 +2535,6 @@ void AnimTask_HideSwapSprite(u8 taskId)
|
||||
break;
|
||||
case 2:
|
||||
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);
|
||||
break;
|
||||
@ -2596,7 +2587,6 @@ void AnimTask_TransformMon(u8 taskId)
|
||||
SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1);
|
||||
|
||||
gTasks[taskId].data[10] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[11] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
@ -2611,7 +2601,7 @@ void AnimTask_TransformMon(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gTasks[taskId].data[11]);
|
||||
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]);
|
||||
GetBgDataForTransform(&animBg, gBattleAnimAttacker);
|
||||
|
||||
if (IsContest())
|
||||
@ -2680,7 +2670,7 @@ void AnimTask_TransformMon(u8 taskId)
|
||||
{
|
||||
if (!IsOnPlayerSide(gBattleAnimAttacker))
|
||||
{
|
||||
if (gTasks[taskId].data[10] == 0)
|
||||
if (gTasks[taskId].data[10] == SPECIES_GFX_CHANGE_TRANSFORM)
|
||||
SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies);
|
||||
}
|
||||
}
|
||||
|
||||
@ -360,7 +360,6 @@ static const struct ListMenuItem sVolatileStatusListItems[] =
|
||||
{COMPOUND_STRING("Torment"), VOLATILE_TORMENT},
|
||||
{COMPOUND_STRING("Powder"), VOLATILE_POWDER},
|
||||
{COMPOUND_STRING("DefenseCurl"), VOLATILE_DEFENSE_CURL},
|
||||
{COMPOUND_STRING("Recharge"), VOLATILE_RECHARGE},
|
||||
{COMPOUND_STRING("Rage"), VOLATILE_RAGE},
|
||||
{COMPOUND_STRING("DestinyBond"), VOLATILE_DESTINY_BOND},
|
||||
{COMPOUND_STRING("EscapePrevention"), VOLATILE_ESCAPE_PREVENTION},
|
||||
|
||||
@ -908,7 +908,7 @@ void CopyBattleSpriteInvisibility(u8 battler)
|
||||
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;
|
||||
bool32 isShiny;
|
||||
@ -949,7 +949,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo
|
||||
targetSpecies = gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies;
|
||||
}
|
||||
|
||||
if (trackEnemyPersonality)
|
||||
if (changeType == SPECIES_GFX_CHANGE_TRANSFORM)
|
||||
{
|
||||
personalityValue = gDisableStructs[battlerAtk].transformedMonPersonality;
|
||||
isShiny = gDisableStructs[battlerAtk].transformedMonShininess;
|
||||
@ -971,7 +971,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo
|
||||
paletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, isShiny, personalityValue);
|
||||
LoadPalette(paletteData, paletteOffset, PLTT_SIZE_4BPP);
|
||||
|
||||
if (!megaEvo)
|
||||
if (changeType == SPECIES_GFX_CHANGE_TRANSFORM)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
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));
|
||||
}
|
||||
|
||||
// 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);
|
||||
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], 0);
|
||||
}
|
||||
|
||||
@ -4226,7 +4226,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
else
|
||||
{
|
||||
if (gBattleMons[battler].volatiles.multipleTurns
|
||||
|| gBattleMons[battler].volatiles.recharge)
|
||||
|| gDisableStructs[battler].rechargeTimer > 0)
|
||||
{
|
||||
gChosenActionByBattler[battler] = B_ACTION_USE_MOVE;
|
||||
gBattleCommunication[battler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY;
|
||||
@ -4381,7 +4381,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
gBattleCommunication[GetPartnerBattler(battler)] = STATE_BEFORE_ACTION_CHOSEN;
|
||||
RecordedBattle_ClearBattlerAction(battler, 1);
|
||||
if (gBattleMons[GetPartnerBattler(battler)].volatiles.multipleTurns
|
||||
|| gBattleMons[GetPartnerBattler(battler)].volatiles.recharge)
|
||||
|| gDisableStructs[GetPartnerBattler(battler)].rechargeTimer > 0)
|
||||
{
|
||||
BtlController_EmitEndBounceEffect(battler, B_COMM_TO_CONTROLLER);
|
||||
MarkBattlerForControllerExec(battler);
|
||||
@ -5141,11 +5141,8 @@ static void TurnValuesCleanUp(bool8 var0)
|
||||
gDisableStructs[i].isFirstTurn--;
|
||||
|
||||
if (gDisableStructs[i].rechargeTimer)
|
||||
{
|
||||
gDisableStructs[i].rechargeTimer--;
|
||||
if (gDisableStructs[i].rechargeTimer == 0)
|
||||
gBattleMons[i].volatiles.recharge = FALSE;
|
||||
}
|
||||
|
||||
gBattleStruct->battlerState[i].canPickupItem = FALSE;
|
||||
gBattleStruct->battlerState[i].wasAboveHalfHp = FALSE;
|
||||
}
|
||||
|
||||
@ -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_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_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_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!"),
|
||||
@ -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_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_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_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}!"),
|
||||
|
||||
@ -1049,31 +1049,15 @@ u32 NumFaintedBattlersByAttacker(u32 battlerAtk)
|
||||
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))
|
||||
{
|
||||
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;
|
||||
gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 EmergencyExitCanBeTriggered(u32 battler)
|
||||
@ -1166,7 +1150,7 @@ static void Cmd_attackcanceler(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsMovePowderBlocked(&ctx))
|
||||
if (IsPowderMoveBlocked(&ctx))
|
||||
return;
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
// battlerStealer steals the item of battlerItem
|
||||
void StealTargetItem(u8 battlerStealer, u8 battlerItem)
|
||||
// battlerStealer steals the item of itemBattler
|
||||
void StealTargetItem(u8 battlerStealer, u8 itemBattler)
|
||||
{
|
||||
gLastUsedItem = gBattleMons[battlerItem].item;
|
||||
gBattleMons[battlerItem].item = ITEM_NONE;
|
||||
gLastUsedItem = gBattleMons[itemBattler].item;
|
||||
gBattleMons[itemBattler].item = ITEM_NONE;
|
||||
|
||||
if (GetGenConfig(GEN_STEAL_WILD_ITEMS) >= GEN_9
|
||||
&& !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE))
|
||||
@ -2802,16 +2786,16 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem)
|
||||
MarkBattlerForControllerExec(battlerStealer);
|
||||
}
|
||||
|
||||
RecordItemEffectBattle(battlerItem, ITEM_NONE);
|
||||
CheckSetUnburden(battlerItem);
|
||||
RecordItemEffectBattle(itemBattler, ITEM_NONE);
|
||||
CheckSetUnburden(itemBattler);
|
||||
|
||||
BtlController_EmitSetMonData(battlerItem, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[battlerItem].item); // remove target item
|
||||
MarkBattlerForControllerExec(battlerItem);
|
||||
BtlController_EmitSetMonData(itemBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[itemBattler].item), &gBattleMons[itemBattler].item); // remove target item
|
||||
MarkBattlerForControllerExec(itemBattler);
|
||||
|
||||
if (GetBattlerAbility(gBattlerTarget) != ABILITY_GORILLA_TACTICS)
|
||||
gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE;
|
||||
if (GetBattlerAbility(itemBattler) != ABILITY_GORILLA_TACTICS)
|
||||
gBattleStruct->choicedMove[itemBattler] = MOVE_NONE;
|
||||
|
||||
TrySaveExchangedItem(battlerItem, gLastUsedItem);
|
||||
TrySaveExchangedItem(itemBattler, gLastUsedItem);
|
||||
}
|
||||
|
||||
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
|
||||
break;
|
||||
|
||||
gBattleMons[gEffectBattler].volatiles.recharge = TRUE;
|
||||
gDisableStructs[gEffectBattler].rechargeTimer = 2;
|
||||
gLockedMoves[gEffectBattler] = gCurrentMove;
|
||||
gBattlescriptCurrInstr = battleScript;
|
||||
@ -5549,22 +5532,54 @@ static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move
|
||||
switch (abilityAtk)
|
||||
{
|
||||
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[battlerDef].item != ITEM_NONE
|
||||
&& IsBattlerAlive(battlerAtk)
|
||||
&& IsBattlerTurnDamaged(battlerDef)
|
||||
&& 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)))
|
||||
&& !gSpecialStatuses[battlerAtk].gemBoost) // In base game, gems are consumed after magician would activate.
|
||||
{
|
||||
StealTargetItem(battlerAtk, battlerDef);
|
||||
gBattleScripting.battler = gBattlerAbility = battlerAtk;
|
||||
gEffectBattler = battlerDef;
|
||||
BattleScriptCall(BattleScript_MagicianActivates);
|
||||
effect = TRUE;
|
||||
u32 numMagicianTargets = 0;
|
||||
u32 magicianTargets = 0;
|
||||
|
||||
for (u32 i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
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;
|
||||
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)
|
||||
gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later
|
||||
}
|
||||
gEffectBattler = gBattlerTarget;
|
||||
BattleScriptCall(BattleScript_ItemSteal);
|
||||
effect = TRUE;
|
||||
}
|
||||
@ -16548,15 +16564,6 @@ void BS_JumpIfNoAlly(void)
|
||||
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)
|
||||
{
|
||||
NATIVE_ARGS(u8 battler);
|
||||
|
||||
@ -1134,8 +1134,12 @@ bool32 GetTrainerFlagFromScriptPointer(const u8 *data)
|
||||
|
||||
bool32 GetRematchFromScriptPointer(const u8 *data)
|
||||
{
|
||||
#if FREE_MATCH_CALL
|
||||
return FALSE;
|
||||
#else
|
||||
TrainerBattleParameter *temp = (TrainerBattleParameter*)(data + OPCODE_OFFSET);
|
||||
return ShouldTryRematchBattleForTrainerId(temp->params.opponentA);
|
||||
#endif
|
||||
}
|
||||
|
||||
#undef OPCODE_OFFSET
|
||||
@ -1809,11 +1813,13 @@ static bool8 WasSecondRematchWon(const struct RematchTrainer *table, u16 firstBa
|
||||
return FALSE;
|
||||
if (!HasTrainerBeenFought(table[tableId].trainerIds[1]))
|
||||
return FALSE;
|
||||
#if FREE_MATCH_CALL == FALSE
|
||||
if (I_VS_SEEKER_CHARGING)
|
||||
{
|
||||
if (gSaveBlock1Ptr->trainerRematches[tableId] == 0)
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -357,7 +357,7 @@ bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move)
|
||||
if (effect == EFFECT_PURSUIT && IsPursuitTargetSet())
|
||||
return FALSE;
|
||||
|
||||
if (gSideTimers[defSide].followmePowder && !IsAffectedByPowder(battlerAtk, ability, GetBattlerHoldEffect(battlerAtk)))
|
||||
if (gSideTimers[defSide].followmePowder && !IsAffectedByPowderMove(battlerAtk, ability, GetBattlerHoldEffect(battlerAtk)))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
@ -448,7 +448,7 @@ void HandleAction_UseMove(void)
|
||||
gCurrentMove = gChosenMove = MOVE_STRUGGLE;
|
||||
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];
|
||||
}
|
||||
@ -1973,10 +1973,8 @@ static enum MoveCanceller CancellerSkyDrop(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);
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge;
|
||||
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
||||
@ -5023,9 +5021,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
|
||||
case ABILITY_EFFECT_SPORE:
|
||||
{
|
||||
enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker);
|
||||
if ((GetGenConfig(GEN_CONFIG_POWDER_GRASS) < GEN_6 || !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GRASS))
|
||||
&& abilityAtk != ABILITY_OVERCOAT
|
||||
&& GetBattlerHoldEffect(gBattlerAttacker) != HOLD_EFFECT_SAFETY_GOGGLES)
|
||||
enum HoldEffect holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker);
|
||||
if (IsAffectedByPowderMove(gBattlerAttacker, abilityAtk, holdEffectAtk))
|
||||
{
|
||||
u32 poison, paralysis, sleep;
|
||||
|
||||
@ -5052,7 +5049,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
|
||||
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
||||
&& IsBattlerTurnDamaged(gBattlerTarget)
|
||||
&& 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())
|
||||
gBattleStruct->battlerState[gBattlerAttacker].sleepClauseEffectExempt = TRUE;
|
||||
@ -10791,6 +10788,15 @@ static bool32 IsOpposingSideEmpty(u32 battler)
|
||||
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)
|
||||
{
|
||||
s32 i, validMovesCount;
|
||||
|
||||
@ -6706,12 +6706,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
|
||||
{
|
||||
.name = COMPOUND_STRING("Uproar"),
|
||||
.description = COMPOUND_STRING(
|
||||
#if B_UPROAR_TURNS >= GEN_5
|
||||
"Causes an uproar for 2 to 5\n"
|
||||
#else
|
||||
"Causes an uproar for 3\n"
|
||||
#endif
|
||||
"turns and prevents sleep."),
|
||||
#if B_UPROAR_TURNS >= GEN_5
|
||||
"Causes an uproar for 3\n"
|
||||
#else
|
||||
"Causes an uproar for 2 to 5\n"
|
||||
#endif
|
||||
"turns and prevents sleep."),
|
||||
.effect = EFFECT_UPROAR,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 90 : 50,
|
||||
.type = TYPE_NORMAL,
|
||||
|
||||
@ -200,12 +200,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Venusaur,
|
||||
.iconSprite = gMonIcon_Venusaur,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_VenusaurF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_VenusaurF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Venusaur)
|
||||
@ -1336,12 +1336,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Butterfree,
|
||||
.iconSprite = gMonIcon_Butterfree,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_ButterfreeF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_ButterfreeF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-3, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Butterfree)
|
||||
@ -2100,12 +2100,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Rattata,
|
||||
.iconSprite = gMonIcon_Rattata,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_RattataF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(40, 40),
|
||||
.backPicFemale = gMonBackPic_RattataF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
|
||||
SHADOW(1, -3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Rattata)
|
||||
@ -2192,12 +2192,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Raticate,
|
||||
.iconSprite = gMonIcon_Raticate,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_RaticateF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_RaticateF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
|
||||
SHADOW(0, 8, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Raticate)
|
||||
@ -2916,7 +2916,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Pikachu,
|
||||
.iconSprite = gMonIcon_Pikachu,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_PikachuF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 48),
|
||||
.backPicFemale = gMonBackPic_PikachuF,
|
||||
@ -2925,7 +2925,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.iconSpriteFemale = gMonIcon_PikachuF,
|
||||
.iconPalIndexFemale = 2,
|
||||
#endif //P_CUSTOM_GENDER_DIFF_ICONS
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
|
||||
SHADOW(-3, 5, SHADOW_SIZE_M)
|
||||
OVERWORLD(
|
||||
@ -5693,12 +5693,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Zubat,
|
||||
.iconSprite = gMonIcon_Zubat,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_ZubatF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
.backPicFemale = gMonBackPic_ZubatF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-4, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Zubat)
|
||||
@ -5792,12 +5792,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Golbat,
|
||||
.iconSprite = gMonIcon_Golbat,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_GolbatF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_GolbatF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 40),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(2, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Golbat)
|
||||
@ -6043,12 +6043,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Gloom,
|
||||
.iconSprite = gMonIcon_Gloom,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_GloomF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
.backPicFemale = gMonBackPic_GloomF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 3, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gloom)
|
||||
@ -6136,12 +6136,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Vileplume,
|
||||
.iconSprite = gMonIcon_Vileplume,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_VileplumeF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 56),
|
||||
.backPicFemale = gMonBackPic_VileplumeF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 7, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Vileplume)
|
||||
@ -8308,12 +8308,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Politoed,
|
||||
.iconSprite = gMonIcon_Politoed,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_PolitoedF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
|
||||
.backPicFemale = gMonBackPic_PolitoedF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(1, 9, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Politoed)
|
||||
@ -8471,12 +8471,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Kadabra,
|
||||
.iconSprite = gMonIcon_Kadabra,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_KadabraF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_KadabraF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(1, 6, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Kadabra)
|
||||
@ -8570,12 +8570,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Alakazam,
|
||||
.iconSprite = gMonIcon_Alakazam,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_AlakazamF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_AlakazamF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 9, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Alakazam)
|
||||
@ -11165,12 +11165,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Doduo,
|
||||
.iconSprite = gMonIcon_Doduo,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_DoduoF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_DoduoF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(6, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Doduo)
|
||||
@ -11258,12 +11258,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Dodrio,
|
||||
.iconSprite = gMonIcon_Dodrio,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_DodrioF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_DodrioF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(3, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Dodrio)
|
||||
@ -12361,12 +12361,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Steelix,
|
||||
.iconSprite = gMonIcon_Steelix,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_SteelixF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_SteelixF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Steelix)
|
||||
@ -12603,12 +12603,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Hypno,
|
||||
.iconSprite = gMonIcon_Hypno,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_HypnoF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_HypnoF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-3, 9, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Hypno)
|
||||
@ -14362,12 +14362,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Rhyhorn,
|
||||
.iconSprite = gMonIcon_Rhyhorn,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_RhyhornF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 40),
|
||||
.backPicFemale = gMonBackPic_RhyhornF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(0, 0, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Rhyhorn)
|
||||
@ -14443,12 +14443,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Rhydon,
|
||||
.iconSprite = gMonIcon_Rhydon,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_RhydonF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_RhydonF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Rhydon)
|
||||
@ -15389,12 +15389,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Goldeen,
|
||||
.iconSprite = gMonIcon_Goldeen,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_GoldeenF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 40),
|
||||
.backPicFemale = gMonBackPic_GoldeenF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-6, 0, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Goldeen)
|
||||
@ -15474,12 +15474,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Seaking,
|
||||
.iconSprite = gMonIcon_Seaking,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_SeakingF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_SeakingF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Seaking)
|
||||
@ -17431,12 +17431,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Magikarp,
|
||||
.iconSprite = gMonIcon_Magikarp,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_MagikarpF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
|
||||
.backPicFemale = gMonBackPic_MagikarpF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(1, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Magikarp)
|
||||
@ -17513,12 +17513,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Gyarados,
|
||||
.iconSprite = gMonIcon_Gyarados,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_GyaradosF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_GyaradosF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(5, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Gyarados)
|
||||
@ -17875,12 +17875,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Eevee,
|
||||
.iconSprite = gMonIcon_Eevee,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_EeveeF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(40, 48),
|
||||
.backPicFemale = gMonBackPic_EeveeF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
|
||||
SHADOW(-2, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Eevee)
|
||||
@ -18030,7 +18030,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.shinyPalette = gMonShinyPalette_Eevee,
|
||||
.iconSprite = gMonIcon_EeveePartner,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_EeveeF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(40, 48),
|
||||
.backPicFemale = gMonBackPic_EeveeF,
|
||||
@ -18039,7 +18039,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
|
||||
.iconSpriteFemale = gMonIcon_EeveePartnerF,
|
||||
.iconPalIndexFemale = 2,
|
||||
#endif
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
|
||||
SHADOW(-2, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Eevee)
|
||||
|
||||
@ -198,12 +198,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Meganium,
|
||||
.iconSprite = gMonIcon_Meganium,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_MeganiumF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 64),
|
||||
.backPicFemale = gMonBackPic_MeganiumF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(0, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Meganium)
|
||||
@ -1242,12 +1242,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Ledyba,
|
||||
.iconSprite = gMonIcon_Ledyba,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_LedybaF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 48),
|
||||
.backPicFemale = gMonBackPic_LedybaF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(2, 4, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Ledyba)
|
||||
@ -1326,12 +1326,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Ledian,
|
||||
.iconSprite = gMonIcon_Ledian,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_LedianF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
|
||||
.backPicFemale = gMonBackPic_LedianF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(0, 15, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Ledian)
|
||||
@ -2690,12 +2690,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Sudowoodo,
|
||||
.iconSprite = gMonIcon_Sudowoodo,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_SudowoodoF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
|
||||
.backPicFemale = gMonBackPic_SudowoodoF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(48, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-2, 7, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Sudowoodo)
|
||||
@ -3010,12 +3010,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Aipom,
|
||||
.iconSprite = gMonIcon_Aipom,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_AipomF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(32, 64),
|
||||
.backPicFemale = gMonBackPic_AipomF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Aipom)
|
||||
@ -3095,12 +3095,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Ambipom,
|
||||
.iconSprite = gMonIcon_Ambipom,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_AmbipomF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_AmbipomF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Ambipom)
|
||||
@ -3515,12 +3515,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Wooper,
|
||||
.iconSprite = gMonIcon_Wooper,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_WooperF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(40, 32),
|
||||
.backPicFemale = gMonBackPic_WooperF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 40),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
|
||||
SHADOW(1, -2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Wooper)
|
||||
@ -3597,12 +3597,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Quagsire,
|
||||
.iconSprite = gMonIcon_Quagsire,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_QuagsireF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_QuagsireF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(0, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Quagsire)
|
||||
@ -3815,12 +3815,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Murkrow,
|
||||
.iconSprite = gMonIcon_Murkrow,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_MurkrowF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 40),
|
||||
.backPicFemale = gMonBackPic_MurkrowF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(40, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-2, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Murkrow)
|
||||
@ -4302,7 +4302,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Wobbuffet,
|
||||
.iconSprite = gMonIcon_Wobbuffet,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_WobbuffetF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_WobbuffetF,
|
||||
@ -4311,7 +4311,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.iconSpriteFemale = gMonIcon_WobbuffetF,
|
||||
.iconPalIndexFemale = 0,
|
||||
#endif
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-3, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Wobbuffet)
|
||||
@ -4389,12 +4389,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Girafarig,
|
||||
.iconSprite = gMonIcon_Girafarig,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_GirafarigF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 64),
|
||||
.backPicFemale = gMonBackPic_GirafarigF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(2, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Girafarig)
|
||||
@ -4896,12 +4896,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Gligar,
|
||||
.iconSprite = gMonIcon_Gligar,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_GligarF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 56),
|
||||
.backPicFemale = gMonBackPic_GligarF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(0, 15, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Gligar)
|
||||
@ -5500,12 +5500,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Heracross,
|
||||
.iconSprite = gMonIcon_Heracross,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_HeracrossF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_HeracrossF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(48, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Heracross)
|
||||
@ -5661,12 +5661,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Sneasel,
|
||||
.iconSprite = gMonIcon_Sneasel,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_SneaselF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
.backPicFemale = gMonBackPic_SneaselF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Sneasel)
|
||||
@ -6056,12 +6056,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Ursaring,
|
||||
.iconSprite = gMonIcon_Ursaring,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_UrsaringF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_UrsaringF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(1, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Ursaring)
|
||||
@ -6491,12 +6491,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Piloswine,
|
||||
.iconSprite = gMonIcon_Piloswine,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_PiloswineF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
|
||||
.backPicFemale = gMonBackPic_PiloswineF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 3, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Piloswine)
|
||||
@ -6959,12 +6959,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Octillery,
|
||||
.iconSprite = gMonIcon_Octillery,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_OctilleryF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
.backPicFemale = gMonBackPic_OctilleryF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(1, 4, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Octillery)
|
||||
@ -7475,12 +7475,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Houndoom,
|
||||
.iconSprite = gMonIcon_Houndoom,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_HoundoomF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_HoundoomF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-5, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Houndoom)
|
||||
@ -7702,12 +7702,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.shinyPalette = gMonShinyPalette_Donphan,
|
||||
.iconSprite = gMonIcon_Donphan,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_DonphanF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
.backPicFemale = gMonBackPic_DonphanF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(7, 2, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Donphan)
|
||||
|
||||
@ -347,10 +347,10 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Torchic,
|
||||
.iconSprite = gMonIcon_Torchic,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.backPicFemale = gMonBackPic_TorchicF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(40, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
|
||||
SHADOW(-1, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Torchic)
|
||||
@ -428,12 +428,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Combusken,
|
||||
.iconSprite = gMonIcon_Combusken,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_CombuskenF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 64),
|
||||
.backPicFemale = gMonBackPic_CombuskenF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-1, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Combusken)
|
||||
@ -517,12 +517,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Blaziken,
|
||||
.iconSprite = gMonIcon_Blaziken,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_BlazikenF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 64),
|
||||
.backPicFemale = gMonBackPic_BlazikenF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(4, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Blaziken)
|
||||
@ -1644,12 +1644,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Beautifly,
|
||||
.iconSprite = gMonIcon_Beautifly,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_BeautiflyF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_BeautiflyF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-5, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Beautifly)
|
||||
@ -1825,12 +1825,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Dustox,
|
||||
.iconSprite = gMonIcon_Dustox,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 5,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_DustoxF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 48),
|
||||
.backPicFemale = gMonBackPic_DustoxF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-2, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Dustox)
|
||||
@ -2059,12 +2059,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Ludicolo,
|
||||
.iconSprite = gMonIcon_Ludicolo,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_LudicoloF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 64),
|
||||
.backPicFemale = gMonBackPic_LudicoloF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-3, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Ludicolo)
|
||||
@ -2224,12 +2224,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Nuzleaf,
|
||||
.iconSprite = gMonIcon_Nuzleaf,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_NuzleafF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(40, 56),
|
||||
.backPicFemale = gMonBackPic_NuzleafF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-3, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Nuzleaf)
|
||||
@ -2316,12 +2316,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Shiftry,
|
||||
.iconSprite = gMonIcon_Shiftry,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 5,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_ShiftryF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_ShiftryF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-5, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Shiftry)
|
||||
@ -5202,12 +5202,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Meditite,
|
||||
.iconSprite = gMonIcon_Meditite,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_MedititeF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(48, 48),
|
||||
.backPicFemale = gMonBackPic_MedititeF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(48, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
|
||||
SHADOW(0, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Meditite)
|
||||
@ -5288,12 +5288,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Medicham,
|
||||
.iconSprite = gMonIcon_Medicham,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_MedichamF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(40, 64),
|
||||
.backPicFemale = gMonBackPic_MedichamF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(-2, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Medicham)
|
||||
@ -6046,12 +6046,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Roselia,
|
||||
.iconSprite = gMonIcon_Roselia,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 4,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_RoseliaF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
.backPicFemale = gMonBackPic_RoseliaF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
|
||||
SHADOW(-2, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Roselia)
|
||||
@ -6227,12 +6227,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Gulpin,
|
||||
.iconSprite = gMonIcon_Gulpin,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_GulpinF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(40, 48),
|
||||
.backPicFemale = gMonBackPic_GulpinF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 48),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
|
||||
SHADOW(1, -2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Gulpin)
|
||||
@ -6312,12 +6312,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Swalot,
|
||||
.iconSprite = gMonIcon_Swalot,
|
||||
.iconPalIndex = 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_SwalotF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 56),
|
||||
.backPicFemale = gMonBackPic_SwalotF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(4, 3, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Swalot)
|
||||
@ -6769,12 +6769,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Numel,
|
||||
.iconSprite = gMonIcon_Numel,
|
||||
.iconPalIndex = 1,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_NumelF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(40, 48),
|
||||
.backPicFemale = gMonBackPic_NumelF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(56, 56),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
|
||||
SHADOW(4, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Numel)
|
||||
@ -6860,12 +6860,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Camerupt,
|
||||
.iconSprite = gMonIcon_Camerupt,
|
||||
.iconPalIndex = 0,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_CameruptF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
|
||||
.backPicFemale = gMonBackPic_CameruptF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 40),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(2, 4, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Camerupt)
|
||||
@ -9112,12 +9112,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Milotic,
|
||||
.iconSprite = gMonIcon_Milotic,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_MiloticF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
.backPicFemale = gMonBackPic_MiloticF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(0, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Milotic)
|
||||
@ -11278,12 +11278,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
|
||||
.shinyPalette = gMonShinyPalette_Relicanth,
|
||||
.iconSprite = gMonIcon_Relicanth,
|
||||
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2,
|
||||
#if P_GENDER_DIFFERENCES
|
||||
#if P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.frontPicFemale = gMonFrontPic_RelicanthF,
|
||||
.frontPicSizeFemale = MON_COORDS_SIZE(56, 56),
|
||||
.backPicFemale = gMonBackPic_RelicanthF,
|
||||
.backPicSizeFemale = MON_COORDS_SIZE(64, 40),
|
||||
#endif //P_GENDER_DIFFERENCES
|
||||
#endif //P_GENDER_DIFFERENCES && !P_GBA_STYLE_SPECIES_GFX
|
||||
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
|
||||
SHADOW(0, 3, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Relicanth)
|
||||
|
||||
@ -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];
|
||||
|
||||
color[0] = TEXT_COLOR_TRANSPARENT;
|
||||
color[1] = TEXT_DYNAMIC_COLOR_6;
|
||||
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)
|
||||
@ -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)
|
||||
{
|
||||
static const struct WindowTemplate textWin[] =
|
||||
{
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 3,
|
||||
.tilemapTop = 2,
|
||||
.width = 24,
|
||||
.height = 16,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 1,
|
||||
}
|
||||
};
|
||||
|
||||
if (sErrorAddress == 0)
|
||||
return;
|
||||
@ -159,20 +158,20 @@ void DecompressionError_CB2(void)
|
||||
ResetPaletteFade();
|
||||
LoadPalette(gTextWindowFrame1_Pal, 0xE0, 0x20);
|
||||
LoadPalette(gStandardMenuPalette, 0xF0, 0x20);
|
||||
InitWindows(textWin);
|
||||
DrawStdFrameWithCustomTileAndPalette(0, TRUE, 0x214, 0xE);
|
||||
u32 window = AddWindow(&sTextWin);
|
||||
DrawStdFrameWithCustomTileAndPalette(window, TRUE, 0x214, 0xE);
|
||||
static const u8 romCheckFailMessage[] =_(
|
||||
"{COLOR RED}ERROR! {COLOR DARK_GRAY}Decompression Failed!\n"
|
||||
"\n"
|
||||
"Address:\n"
|
||||
"Error:\n");
|
||||
DecompressErrorScreenTextPrint(romCheckFailMessage, 1, 0);
|
||||
DecompressErrorScreenTextPrint(window, romCheckFailMessage, 1, 0);
|
||||
u8 addressStr[11];
|
||||
u8 errorStr[11];
|
||||
GetHexStringFromU32(addressStr, sErrorAddress);
|
||||
GetHexStringFromU32(errorStr, sCompressionError);
|
||||
DecompressErrorScreenTextPrint(addressStr, 7, 4);
|
||||
DecompressErrorScreenTextPrint(errorStr, 7, 6);
|
||||
DecompressErrorScreenTextPrint(window, addressStr, 7, 4);
|
||||
DecompressErrorScreenTextPrint(window, errorStr, 7, 6);
|
||||
TransferPlttBuffer();
|
||||
*(u16*)PLTT = RGB(17, 18, 31);
|
||||
ShowBg(0);
|
||||
|
||||
@ -176,7 +176,6 @@ void BreakSubStringNaive(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId, enum
|
||||
|
||||
Free(allWords);
|
||||
}
|
||||
#undef SCROLL_PROMPT_WIDTH
|
||||
|
||||
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++)
|
||||
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
|
||||
// NOTE: Currently the line break calculation isn't fancy
|
||||
if (totalWidth > maxWidth)
|
||||
@ -256,6 +258,8 @@ void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId,
|
||||
bool32 shouldTryAgain;
|
||||
for (currWordIndex = 0; currWordIndex < numWords; currWordIndex++)
|
||||
{
|
||||
if (toggleScrollPrompt == SHOW_SCROLL_PROMPT && currWordIndex + 1 == numWords)
|
||||
currLineWidth += SCROLL_PROMPT_WIDTH;
|
||||
if (currLineWidth + allWords[currWordIndex].length > maxWidth)
|
||||
{
|
||||
totalLines++;
|
||||
@ -266,6 +270,10 @@ void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId,
|
||||
currLineWidth += allWords[currWordIndex].width + spaceWidth;
|
||||
}
|
||||
}
|
||||
|
||||
if (currLineWidth > maxWidth)
|
||||
totalLines++;
|
||||
|
||||
// LINE LAYOUT STARTS HERE
|
||||
struct StringLine *stringLines;
|
||||
do
|
||||
@ -424,3 +432,4 @@ bool32 StringHasManualBreaks(u8 *src)
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
#undef SCROLL_PROMPT_WIDTH
|
||||
|
||||
@ -1,4 +1,20 @@
|
||||
#include "global.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Overcoat blocks powder and spore moves (Gen6+)")
|
||||
PARAMETRIZE { gen = GEN_5; }
|
||||
PARAMETRIZE { gen = GEN_6; }
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_POWDER_GRASS, gen);
|
||||
WITH_CONFIG(GEN_CONFIG_POWDER_OVERCOAT, gen);
|
||||
ASSUME(IsPowderMove(MOVE_STUN_SPORE));
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); }
|
||||
|
||||
@ -1,4 +1,20 @@
|
||||
#include "global.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -59,3 +59,17 @@ AI_SINGLE_BATTLE_TEST("AI sees Loaded Dice damage increase from multi hit moves"
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
66
test/battle/hold_effect/destiny_knot.c
Normal file
66
test/battle/hold_effect/destiny_knot.c
Normal 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);
|
||||
}
|
||||
}
|
||||
43
test/battle/item_effect/poke_flute.c
Normal file
43
test/battle/item_effect/poke_flute.c
Normal 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);
|
||||
}
|
||||
}
|
||||
52
test/battle/move_effect_secondary/recharge.c
Normal file
52
test/battle/move_effect_secondary/recharge.c
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user