mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-01-20 10:24:21 +01:00
Merge branch 'BattleEngine' into BE_Instruct
# Conflicts: # src/battle_script_commands.c
This commit is contained in:
commit
80c1e11245
@ -2061,3 +2061,26 @@
|
||||
jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpptr
|
||||
1:
|
||||
.endm
|
||||
|
||||
@ Will jump to script pointer if the target weighs less than 200 kg, or 441 lbs.
|
||||
.macro jumpifunder200 battler:req, ptr:req
|
||||
various \battler, VARIOUS_JUMP_IF_UNDER_200
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
@ Sets the sky drop status and does all other necessary operations
|
||||
.macro setskydrop
|
||||
various 0, VARIOUS_SET_SKY_DROP
|
||||
.endm
|
||||
|
||||
@ Clears the sky drop status and does all other necessary operations.
|
||||
@ If the target fainted in before this script is called, it goes to the given script.
|
||||
.macro clearskydrop ptr:req
|
||||
various 0, VARIOUS_CLEAR_SKY_DROP
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
@ Accounts for if the target of Sky Drop was in confuse_lock when the attacker falls asleep due to Yawn.
|
||||
.macro skydropyawn
|
||||
various 0, VARIOUS_SKY_DROP_YAWN
|
||||
.endm
|
||||
|
@ -403,6 +403,65 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectOctolock @ EFFECT_OCTOLOCK
|
||||
.4byte BattleScript_EffectClangorousSoul @ EFFECT_CLANGOROUS_SOUL
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK
|
||||
.4byte BattleScript_EffectSkyDrop @ EFFECT_SKY_DROP
|
||||
|
||||
BattleScript_EffectSkyDrop:
|
||||
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2
|
||||
attackcanceler
|
||||
ppreduce
|
||||
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
|
||||
attackstring
|
||||
jumpifsubstituteblocks BattleScript_ButItFailed
|
||||
jumpiftargetally BattleScript_ButItFailed
|
||||
jumpifunder200 BS_TARGET, BattleScript_SkyDropWork
|
||||
pause B_WAIT_TIME_SHORT
|
||||
printstring STRINGID_TARGETTOOHEAVY
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_SkyDropWork:
|
||||
setskydrop
|
||||
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKY_DROP
|
||||
setsemiinvulnerablebit
|
||||
call BattleScriptFirstChargingTurnAfterAttackString
|
||||
goto BattleScript_MoveEnd
|
||||
BattleScript_SkyDropTurn2:
|
||||
attackcanceler
|
||||
setmoveeffect MOVE_EFFECT_CHARGING
|
||||
setbyte sB_ANIM_TURN, 0x1
|
||||
clearstatusfromeffect BS_ATTACKER
|
||||
orword gHitMarker, HITMARKER_NO_PPDEDUCT
|
||||
argumenttomoveeffect
|
||||
clearsemiinvulnerablebit
|
||||
attackstring
|
||||
clearskydrop BattleScript_SkyDropChangedTarget
|
||||
jumpiftype BS_TARGET, TYPE_FLYING, BattleScript_SkyDropFlyingType
|
||||
goto BattleScript_HitFromCritCalc
|
||||
BattleScript_SkyDropFlyingType:
|
||||
makevisible BS_TARGET
|
||||
printstring STRINGID_ITDOESNTAFFECT
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
makevisible BS_ATTACKER
|
||||
jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_SkyDropFlyingAlreadyConfused
|
||||
jumpifstatus2 BS_TARGET, STATUS2_LOCK_CONFUSE, BattleScript_SkyDropFlyingConfuseLock
|
||||
goto BattleScript_MoveEnd
|
||||
BattleScript_SkyDropChangedTarget:
|
||||
pause B_WAIT_TIME_SHORT
|
||||
orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
|
||||
resultmessage
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
makevisible BS_ATTACKER
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_SkyDropFlyingConfuseLock:
|
||||
setmoveeffect MOVE_EFFECT_CONFUSION
|
||||
seteffectprimary
|
||||
BattleScript_SkyDropFlyingAlreadyConfused:
|
||||
setmoveeffect MOVE_EFFECT_THRASH
|
||||
clearstatusfromeffect BS_TARGET
|
||||
jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_MoveEnd
|
||||
setbyte BS_ATTACKER, BS_TARGET
|
||||
goto BattleScript_ThrashConfuses
|
||||
|
||||
BattleScript_EffectShellSideArm:
|
||||
shellsidearmcheck
|
||||
@ -1192,7 +1251,7 @@ BattleScript_EffectAromaticMistWorks:
|
||||
setstatchanger STAT_SPDEF, 1, FALSE
|
||||
statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_EffectAromaticMistEnd
|
||||
jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AromaticMistAnim
|
||||
pause 16
|
||||
pause B_WAIT_TIME_SHORTEST
|
||||
printstring STRINGID_TARGETSTATWONTGOHIGHER
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_EffectAromaticMistEnd
|
||||
@ -3400,6 +3459,7 @@ BattleScriptFirstChargingTurn::
|
||||
printstring STRINGID_EMPTYSTRING3
|
||||
ppreduce
|
||||
attackstring
|
||||
BattleScriptFirstChargingTurnAfterAttackString:
|
||||
pause B_WAIT_TIME_LONG
|
||||
copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID
|
||||
printfromtable gFirstTurnOfTwoStringIds
|
||||
@ -5941,6 +6001,7 @@ BattleScript_PayDayMoneyAndPickUpItems::
|
||||
end2
|
||||
|
||||
BattleScript_LocalBattleLost::
|
||||
jumpifbattletype BATTLE_TYPE_INGAME_PARTNER, BattleScript_LocalBattleLostPrintWhiteOut
|
||||
jumpifbattletype BATTLE_TYPE_DOME, BattleScript_CheckDomeDrew
|
||||
jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_LocalBattleLostPrintTrainersWinText
|
||||
jumpifbattletype BATTLE_TYPE_TRAINER_HILL, BattleScript_LocalBattleLostPrintTrainersWinText
|
||||
@ -7086,7 +7147,7 @@ BattleScript_EnduredMsg::
|
||||
|
||||
BattleScript_SturdiedMsg::
|
||||
copybyte gBattlerAbility, gBattlerTarget
|
||||
pause 16
|
||||
pause B_WAIT_TIME_SHORTEST
|
||||
call BattleScript_AbilityPopUp
|
||||
printstring STRINGID_ENDUREDSTURDY
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
@ -7527,7 +7588,10 @@ BattleScript_YawnMakesAsleep::
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
updatestatusicon BS_EFFECT_BATTLER
|
||||
waitstate
|
||||
jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_SKY_DROPPED, BattleScript_YawnEnd
|
||||
makevisible BS_EFFECT_BATTLER
|
||||
skydropyawn
|
||||
BattleScript_YawnEnd:
|
||||
end2
|
||||
|
||||
BattleScript_EmbargoEndTurn::
|
||||
@ -8235,6 +8299,7 @@ BattleScript_MimicryActivatesEnd3::
|
||||
end3
|
||||
|
||||
BattleScript_ProteanActivates::
|
||||
pause B_WAIT_TIME_SHORTEST
|
||||
call BattleScript_AbilityPopUp
|
||||
printstring STRINGID_PKMNCHANGEDTYPE
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
@ -8330,7 +8395,7 @@ BattleScript_WeakArmorActivates::
|
||||
statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_WeakArmorActivatesSpeed
|
||||
jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_WeakArmorDefAnim
|
||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_WeakArmorActivatesSpeed
|
||||
pause 16
|
||||
pause B_WAIT_TIME_SHORTEST
|
||||
printfromtable gStatDownStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_WeakArmorActivatesSpeed
|
||||
@ -8344,7 +8409,7 @@ BattleScript_WeakArmorActivatesSpeed:
|
||||
statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd
|
||||
jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedAnim
|
||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd
|
||||
pause 16
|
||||
pause B_WAIT_TIME_SHORTEST
|
||||
printstring STRINGID_TARGETSTATWONTGOHIGHER
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_WeakArmorActivatesEnd
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 365 B After Width: | Height: | Size: 275 B |
@ -606,6 +606,7 @@ struct BattleStruct
|
||||
u8 ballSpriteIds[2]; // item gfx, window gfx
|
||||
u8 stickyWebUser;
|
||||
u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change
|
||||
u8 skyDropTargets[MAX_BATTLERS_COUNT]; // For Sky Drop, to account for if multiple Pokemon use Sky Drop in a double battle.
|
||||
};
|
||||
|
||||
#define F_DYNAMIC_TYPE_1 (1 << 6)
|
||||
|
@ -23,7 +23,12 @@ struct MultiPartnerMenuPokemon
|
||||
};
|
||||
|
||||
#define TYPE_NAME_LENGTH 6
|
||||
|
||||
#if B_EXPANDED_ABILITY_NAMES
|
||||
#define ABILITY_NAME_LENGTH 16
|
||||
#else
|
||||
#define ABILITY_NAME_LENGTH 12
|
||||
#endif
|
||||
|
||||
// defines for the 'DoBounceEffect' function
|
||||
#define BOUNCE_MON 0x0
|
||||
|
@ -1,7 +1,13 @@
|
||||
#ifndef GUARD_BATTLE_MESSAGE_H
|
||||
#define GUARD_BATTLE_MESSAGE_H
|
||||
|
||||
#define TEXT_BUFF_ARRAY_COUNT 16
|
||||
#include "constants/battle_config.h"
|
||||
|
||||
#if B_EXPANDED_ABILITY_NAMES == TRUE
|
||||
#define TEXT_BUFF_ARRAY_COUNT 17
|
||||
#else
|
||||
#define TEXT_BUFF_ARRAY_COUNT 16
|
||||
#endif
|
||||
|
||||
// for 0xFD
|
||||
#define B_TXT_BUFF1 0x0
|
||||
|
@ -170,6 +170,7 @@
|
||||
#define STATUS3_AQUA_RING (1 << 28)
|
||||
#define STATUS3_LASER_FOCUS (1 << 29)
|
||||
#define STATUS3_POWER_TRICK (1 << 30)
|
||||
#define STATUS3_SKY_DROPPED (1 << 31) // Target of Sky Drop
|
||||
#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER | STATUS3_PHANTOM_FORCE)
|
||||
|
||||
#define STATUS4_ELECTRIFIED (1 << 0)
|
||||
@ -361,7 +362,9 @@
|
||||
#define MOVE_EFFECT_RECOIL_HP_25 0x46
|
||||
#define MOVE_EFFECT_RELIC_SONG 0x47
|
||||
#define MOVE_EFFECT_TRAP_BOTH 0x48
|
||||
#define NUM_MOVE_EFFECTS 0x49
|
||||
#define MOVE_EFFECT_SKY_DROP 0x49
|
||||
|
||||
#define NUM_MOVE_EFFECTS 0x50
|
||||
|
||||
#define MOVE_EFFECT_AFFECTS_USER 0x4000
|
||||
#define MOVE_EFFECT_CERTAIN 0x8000
|
||||
@ -393,9 +396,10 @@
|
||||
|
||||
#define BATTLE_TERRAIN_COUNT 22
|
||||
|
||||
#define B_WAIT_TIME_LONG 64
|
||||
#define B_WAIT_TIME_MED 48
|
||||
#define B_WAIT_TIME_SHORT 32
|
||||
#define B_WAIT_TIME_LONG 64
|
||||
#define B_WAIT_TIME_MED 48
|
||||
#define B_WAIT_TIME_SHORT 32
|
||||
#define B_WAIT_TIME_SHORTEST 16
|
||||
|
||||
#define CHERRIM_OVERCAST 0
|
||||
#define CHERRIM_SUNSHINE 1
|
||||
|
@ -5,53 +5,55 @@
|
||||
|
||||
// Species with peculiar battle effects.
|
||||
#ifndef POKEMON_EXPANSION
|
||||
#define SPECIES_DIALGA 0
|
||||
#define SPECIES_PALKIA 0
|
||||
#define SPECIES_GIRATINA 0
|
||||
#define SPECIES_CHERRIM 0
|
||||
#define SPECIES_ARCEUS 0
|
||||
#define SPECIES_SILVALLY 0
|
||||
#define SPECIES_GENESECT 0
|
||||
#define SPECIES_AEGISLASH 0
|
||||
#define SPECIES_AEGISLASH_BLADE 10000
|
||||
#define SPECIES_MIMIKYU 0
|
||||
#define SPECIES_MIMIKYU_BUSTED 10001
|
||||
#define SPECIES_DARMANITAN 0
|
||||
#define SPECIES_DARMANITAN_ZEN_MODE 10002
|
||||
#define SPECIES_MINIOR_CORE_RED 0
|
||||
#define SPECIES_MINIOR 10003
|
||||
#define SPECIES_MINIOR_CORE_BLUE 0
|
||||
#define SPECIES_MINIOR_METEOR_BLUE 10004
|
||||
#define SPECIES_MINIOR_CORE_GREEN 0
|
||||
#define SPECIES_MINIOR_METEOR_GREEN 10005
|
||||
#define SPECIES_MINIOR_CORE_INDIGO 0
|
||||
#define SPECIES_MINIOR_METEOR_INDIGO 10006
|
||||
#define SPECIES_MINIOR_CORE_ORANGE 0
|
||||
#define SPECIES_MINIOR_METEOR_ORANGE 10007
|
||||
#define SPECIES_MINIOR_CORE_VIOLET 0
|
||||
#define SPECIES_MINIOR_METEOR_VIOLET 10008
|
||||
#define SPECIES_MINIOR_CORE_YELLOW 0
|
||||
#define SPECIES_MINIOR_METEOR_YELLOW 10009
|
||||
#define SPECIES_WISHIWASHI 0
|
||||
#define SPECIES_WISHIWASHI_SCHOOL 10010
|
||||
#define SPECIES_ZYGARDE 0 // 50%
|
||||
#define SPECIES_ZYGARDE_10 10011 // 10 %
|
||||
#define SPECIES_ZYGARDE_COMPLETE 10012 // 100 %
|
||||
#define SPECIES_BURMY 0
|
||||
#define SPECIES_BURMY_SANDY_CLOAK 10013
|
||||
#define SPECIES_BURMY_TRASH_CLOAK 10014
|
||||
#define SPECIES_CRAMORANT 0
|
||||
#define SPECIES_CRAMORANT_GORGING 10015
|
||||
#define SPECIES_CRAMORANT_GULPING 10016
|
||||
#define SPECIES_GRENINJA_BATTLE_BOND 0
|
||||
#define SPECIES_GRENINJA_ASH 10017
|
||||
#define SPECIES_HOOPA 0
|
||||
#define SPECIES_HOOPA_UNBOUND 10018
|
||||
#define SPECIES_MELOETTA 0
|
||||
#define SPECIES_MELOETTA_PIROUETTE 10019
|
||||
#define SPECIES_MORPEKO 0
|
||||
#define SPECIES_MORPEKO_HANGRY 10020
|
||||
#define SPECIES_SIRFETCHD 10021
|
||||
#define SPECIES_DIALGA 0
|
||||
#define SPECIES_PALKIA 0
|
||||
#define SPECIES_GIRATINA 0
|
||||
#define SPECIES_CHERRIM 0
|
||||
#define SPECIES_ARCEUS 0
|
||||
#define SPECIES_SILVALLY 0
|
||||
#define SPECIES_GENESECT 0
|
||||
#define SPECIES_AEGISLASH 0
|
||||
#define SPECIES_AEGISLASH_BLADE 10000
|
||||
#define SPECIES_MIMIKYU 0
|
||||
#define SPECIES_MIMIKYU_BUSTED 10001
|
||||
#define SPECIES_DARMANITAN 0
|
||||
#define SPECIES_DARMANITAN_ZEN_MODE 10002
|
||||
#define SPECIES_MINIOR_CORE_RED 0
|
||||
#define SPECIES_MINIOR 10003
|
||||
#define SPECIES_MINIOR_CORE_BLUE 0
|
||||
#define SPECIES_MINIOR_METEOR_BLUE 10004
|
||||
#define SPECIES_MINIOR_CORE_GREEN 0
|
||||
#define SPECIES_MINIOR_METEOR_GREEN 10005
|
||||
#define SPECIES_MINIOR_CORE_INDIGO 0
|
||||
#define SPECIES_MINIOR_METEOR_INDIGO 10006
|
||||
#define SPECIES_MINIOR_CORE_ORANGE 0
|
||||
#define SPECIES_MINIOR_METEOR_ORANGE 10007
|
||||
#define SPECIES_MINIOR_CORE_VIOLET 0
|
||||
#define SPECIES_MINIOR_METEOR_VIOLET 10008
|
||||
#define SPECIES_MINIOR_CORE_YELLOW 0
|
||||
#define SPECIES_MINIOR_METEOR_YELLOW 10009
|
||||
#define SPECIES_WISHIWASHI 0
|
||||
#define SPECIES_WISHIWASHI_SCHOOL 10010
|
||||
#define SPECIES_ZYGARDE 0 // 50%
|
||||
#define SPECIES_ZYGARDE_10 10011 // 10 %
|
||||
#define SPECIES_ZYGARDE_COMPLETE 10012 // 100 %
|
||||
#define SPECIES_BURMY 0
|
||||
#define SPECIES_BURMY_SANDY_CLOAK 10013
|
||||
#define SPECIES_BURMY_TRASH_CLOAK 10014
|
||||
#define SPECIES_CRAMORANT 0
|
||||
#define SPECIES_CRAMORANT_GORGING 10015
|
||||
#define SPECIES_CRAMORANT_GULPING 10016
|
||||
#define SPECIES_GRENINJA_BATTLE_BOND 0
|
||||
#define SPECIES_GRENINJA_ASH 10017
|
||||
#define SPECIES_HOOPA 0
|
||||
#define SPECIES_HOOPA_UNBOUND 10018
|
||||
#define SPECIES_MELOETTA 0
|
||||
#define SPECIES_MELOETTA_PIROUETTE 10019
|
||||
#define SPECIES_MORPEKO 0
|
||||
#define SPECIES_MORPEKO_HANGRY 10020
|
||||
#define SPECIES_SIRFETCHD 10021
|
||||
#define SPECIES_DARMANITAN_GALARIAN 0
|
||||
#define SPECIES_DARMANITAN_ZEN_MODE_GALARIAN 10022
|
||||
#endif
|
||||
|
||||
// Items with peculiar battle effects.
|
||||
@ -165,6 +167,7 @@
|
||||
#define B_RAMPAGE_CANCELLING GEN_7 // In Gen5+, a failed Thrash, etc, will cancel except on its last turn.
|
||||
|
||||
// Ability settings
|
||||
#define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters.
|
||||
#define B_ABILITY_WEATHER GEN_7 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability.
|
||||
#define B_GALE_WINGS GEN_7 // In Gen7+ requires full HP to trigger.
|
||||
#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
|
||||
@ -232,8 +235,9 @@
|
||||
#define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented
|
||||
#define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball.
|
||||
|
||||
// Other
|
||||
// Other settings
|
||||
#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter.
|
||||
#define B_MULTI_BATTLE_WHITEOUT GEN_8 // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight.
|
||||
|
||||
// Animation Settings
|
||||
#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle.
|
||||
|
@ -386,7 +386,8 @@
|
||||
#define EFFECT_OCTOLOCK 380
|
||||
#define EFFECT_CLANGOROUS_SOUL 381
|
||||
#define EFFECT_BOLT_BEAK 382
|
||||
#define EFFECT_SKY_DROP 383
|
||||
|
||||
#define NUM_BATTLE_MOVE_EFFECTS 383
|
||||
#define NUM_BATTLE_MOVE_EFFECTS 384
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||
|
@ -225,6 +225,10 @@
|
||||
#define VARIOUS_SET_OCTOLOCK 135
|
||||
#define VARIOUS_CUT_1_3_HP_RAISE_STATS 136
|
||||
#define VARIOUS_TRY_END_NEUTRALIZING_GAS 137
|
||||
#define VARIOUS_JUMP_IF_UNDER_200 138
|
||||
#define VARIOUS_SET_SKY_DROP 139
|
||||
#define VARIOUS_CLEAR_SKY_DROP 140
|
||||
#define VARIOUS_SKY_DROP_YAWN 141
|
||||
|
||||
// Cmd_manipulatedamage
|
||||
#define DMG_CHANGE_SIGN 0
|
||||
@ -282,18 +286,19 @@
|
||||
#define MOVEEND_ITEM_EFFECTS_ALL 15
|
||||
#define MOVEEND_KINGSROCK 16 // These item effects will occur each strike of a multi-hit move
|
||||
#define MOVEEND_SUBSTITUTE 17
|
||||
#define MOVEEND_UPDATE_LAST_MOVES 18
|
||||
#define MOVEEND_MIRROR_MOVE 19
|
||||
#define MOVEEND_NEXT_TARGET 20 // Everything up until here is handled for each strike of a multi-hit move
|
||||
#define MOVEEND_EJECT_BUTTON 21
|
||||
#define MOVEEND_RED_CARD 22
|
||||
#define MOVEEND_EJECT_PACK 23
|
||||
#define MOVEEND_LIFEORB_SHELLBELL 24 // Includes shell bell, throat spray, etc
|
||||
#define MOVEEND_PICKPOCKET 25
|
||||
#define MOVEEND_DANCER 26
|
||||
#define MOVEEND_EMERGENCY_EXIT 27
|
||||
#define MOVEEND_CLEAR_BITS 28
|
||||
#define MOVEEND_COUNT 29
|
||||
#define MOVEEND_SKY_DROP_CONFUSE 18
|
||||
#define MOVEEND_UPDATE_LAST_MOVES 19
|
||||
#define MOVEEND_MIRROR_MOVE 20
|
||||
#define MOVEEND_NEXT_TARGET 21 // Everything up until here is handled for each strike of a multi-hit move
|
||||
#define MOVEEND_EJECT_BUTTON 22
|
||||
#define MOVEEND_RED_CARD 23
|
||||
#define MOVEEND_EJECT_PACK 24
|
||||
#define MOVEEND_LIFEORB_SHELLBELL 25 // Includes shell bell, throat spray, etc
|
||||
#define MOVEEND_PICKPOCKET 26
|
||||
#define MOVEEND_DANCER 27
|
||||
#define MOVEEND_EMERGENCY_EXIT 28
|
||||
#define MOVEEND_CLEAR_BITS 29
|
||||
#define MOVEEND_COUNT 30
|
||||
|
||||
// switch cases
|
||||
#define B_SWITCH_NORMAL 0
|
||||
|
@ -592,25 +592,27 @@
|
||||
#define STRINGID_STRONGWINDSDISSIPATED 588
|
||||
#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 589
|
||||
#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 590
|
||||
#define STRINGID_STUFFCHEEKSCANTSELECT 592
|
||||
#define STRINGID_PKMNREVERTEDTOPRIMAL 593
|
||||
#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 594
|
||||
#define STRINGID_BUTHOOPACANTUSEIT 595
|
||||
#define STRINGID_BROKETHROUGHPROTECTION 596
|
||||
#define STRINGID_ABILITYALLOWSONLYMOVE 597
|
||||
#define STRINGID_SWAPPEDABILITIES 598
|
||||
#define STRINGID_PASTELVEILPROTECTED 599
|
||||
#define STRINGID_PASTELVEILENTERS 600
|
||||
#define STRINGID_BATTLERTYPECHANGEDTO 601
|
||||
#define STRINGID_BOTHCANNOLONGERESCAPE 602
|
||||
#define STRINGID_CANTESCAPEDUETOUSEDMOVE 603
|
||||
#define STRINGID_PKMNBECAMEWEAKERTOFIRE 604
|
||||
#define STRINGID_ABOUTTOUSEPOLTERGEIST 605
|
||||
#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 606
|
||||
#define STRINGID_NEUTRALIZINGGASENTERS 607
|
||||
#define STRINGID_NEUTRALIZINGGASOVER 608
|
||||
#define STRINGID_STUFFCHEEKSCANTSELECT 591
|
||||
#define STRINGID_PKMNREVERTEDTOPRIMAL 592
|
||||
#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 593
|
||||
#define STRINGID_BUTHOOPACANTUSEIT 594
|
||||
#define STRINGID_BROKETHROUGHPROTECTION 595
|
||||
#define STRINGID_ABILITYALLOWSONLYMOVE 596
|
||||
#define STRINGID_SWAPPEDABILITIES 597
|
||||
#define STRINGID_PASTELVEILPROTECTED 598
|
||||
#define STRINGID_PASTELVEILENTERS 599
|
||||
#define STRINGID_BATTLERTYPECHANGEDTO 600
|
||||
#define STRINGID_BOTHCANNOLONGERESCAPE 601
|
||||
#define STRINGID_CANTESCAPEDUETOUSEDMOVE 602
|
||||
#define STRINGID_PKMNBECAMEWEAKERTOFIRE 603
|
||||
#define STRINGID_ABOUTTOUSEPOLTERGEIST 604
|
||||
#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 605
|
||||
#define STRINGID_NEUTRALIZINGGASENTERS 606
|
||||
#define STRINGID_NEUTRALIZINGGASOVER 607
|
||||
#define STRINGID_TARGETTOOHEAVY 608
|
||||
#define STRINGID_PKMNTOOKTARGETHIGH 609
|
||||
|
||||
#define BATTLESTRINGS_COUNT 609
|
||||
#define BATTLESTRINGS_COUNT 610
|
||||
|
||||
// The below IDs are all indexes into battle message tables,
|
||||
// used to determine which of a set of messages to print.
|
||||
@ -661,6 +663,7 @@
|
||||
#define B_MSG_TURN1_PHANTOM_FORCE 8
|
||||
#define B_MSG_TURN1_GEOMANCY 9
|
||||
#define B_MSG_TURN1_FREEZE_SHOCK 10
|
||||
#define B_MSG_TURN1_SKY_DROP 11
|
||||
|
||||
// gMoveWeatherChangeStringIds
|
||||
#define B_MSG_STARTED_RAIN 0
|
||||
|
@ -100,7 +100,7 @@
|
||||
#define HOLD_EFFECT_ADAMANT_ORB 94
|
||||
#define HOLD_EFFECT_LUSTROUS_ORB 95
|
||||
#define HOLD_EFFECT_GRISEOUS_ORB 96
|
||||
#define HOLD_EFFECT_GRACIDEA 97
|
||||
#define HOLD_EFFECT_ENIGMA_BERRY 97
|
||||
#define HOLD_EFFECT_RESIST_BERRY 98
|
||||
#define HOLD_EFFECT_POWER_ITEM 99
|
||||
#define HOLD_EFFECT_RESTORE_PCT_HP 100
|
||||
|
@ -795,7 +795,9 @@ static bool8 ShouldUseItem(void)
|
||||
u8 validMons = 0;
|
||||
bool8 shouldUse = FALSE;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT)
|
||||
// If teaming up with player and Pokemon is on the right, or Pokemon is currently held by Sky Drop
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT)
|
||||
|| gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED)
|
||||
return FALSE;
|
||||
|
||||
if (gStatuses3[gActiveBattler] & STATUS3_EMBARGO)
|
||||
|
@ -157,7 +157,6 @@ static const s8 sAiAbilityRatings[ABILITIES_COUNT] =
|
||||
[ABILITY_POISON_HEAL] = 8,
|
||||
[ABILITY_POISON_POINT] = 4,
|
||||
[ABILITY_POISON_TOUCH] = 4,
|
||||
//[ABILITY_PORTAL_POWER] = 8,
|
||||
[ABILITY_POWER_CONSTRUCT] = 10,
|
||||
[ABILITY_POWER_OF_ALCHEMY] = 0,
|
||||
[ABILITY_PRANKSTER] = 8,
|
||||
|
@ -1996,7 +1996,7 @@ static const u8 sText_HoldEffectQuickPowder[] = _("Quick Powder");
|
||||
static const u8 sText_HoldEffectAdamantOrb[] = _("Adamant Orb");
|
||||
static const u8 sText_HoldEffectLustrousOrb[] = _("Lustrous Orb");
|
||||
static const u8 sText_HoldEffectGriseousOrb[] = _("Griseous Orb");
|
||||
static const u8 sText_HoldEffectGracidea[] = _("Gracidea");
|
||||
static const u8 sText_HoldEffectEnigmaBerry[] = _("Enigma Berry");
|
||||
static const u8 sText_HoldEffectResistBerry[] = _("Resist Berry");
|
||||
static const u8 sText_HoldEffectPowerItem[] = _("Power Item");
|
||||
static const u8 sText_HoldEffectRestorePctHp[] = _("Restore Pct Hp");
|
||||
@ -2138,7 +2138,7 @@ static const u8 *const sHoldEffectNames[] =
|
||||
[HOLD_EFFECT_ADAMANT_ORB] = sText_HoldEffectAdamantOrb,
|
||||
[HOLD_EFFECT_LUSTROUS_ORB] = sText_HoldEffectLustrousOrb,
|
||||
[HOLD_EFFECT_GRISEOUS_ORB] = sText_HoldEffectGriseousOrb,
|
||||
[HOLD_EFFECT_GRACIDEA] = sText_HoldEffectGracidea,
|
||||
[HOLD_EFFECT_ENIGMA_BERRY] = sText_HoldEffectEnigmaBerry,
|
||||
[HOLD_EFFECT_RESIST_BERRY] = sText_HoldEffectResistBerry,
|
||||
[HOLD_EFFECT_POWER_ITEM] = sText_HoldEffectPowerItem,
|
||||
[HOLD_EFFECT_RESTORE_PCT_HP] = sText_HoldEffectRestorePctHp,
|
||||
|
@ -2857,15 +2857,15 @@ static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp2 =
|
||||
static const s16 sAbilityPopUpCoordsDoubles[MAX_BATTLERS_COUNT][2] =
|
||||
{
|
||||
{29, 80}, // player left
|
||||
{204, 19}, // opponent left
|
||||
{186, 19}, // opponent left
|
||||
{29, 97}, // player right
|
||||
{204, 36}, // opponent right
|
||||
{186, 36}, // opponent right
|
||||
};
|
||||
|
||||
static const s16 sAbilityPopUpCoordsSingles[MAX_BATTLERS_COUNT][2] =
|
||||
{
|
||||
{29, 93}, // player
|
||||
{204, 23}, // opponent
|
||||
{29, 97}, // player
|
||||
{186, 57}, // opponent
|
||||
};
|
||||
|
||||
static u8* AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32 y, u32 color1, u32 color2, u32 color3, u32 *windowId)
|
||||
@ -2876,7 +2876,7 @@ static u8* AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32
|
||||
winTemplate.height = 2;
|
||||
|
||||
*windowId = AddWindow(&winTemplate);
|
||||
FillWindowPixelBuffer(*windowId, (color1 << 4) | (color1));
|
||||
FillWindowPixelBuffer(*windowId, PIXEL_FILL(color1));
|
||||
|
||||
AddTextPrinterParameterized4(*windowId, 0, x, y, 0, 0, color, -1, str);
|
||||
return (u8*)(GetWindowAttribute(*windowId, WINDOW_TILE_DATA));
|
||||
@ -2905,10 +2905,10 @@ static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTi
|
||||
{
|
||||
u32 windowId, i;
|
||||
u8 *windowTileData;
|
||||
u8 text1[MAX_CHARS_PRINTED + 2];
|
||||
u8 text2[MAX_CHARS_PRINTED + 2];
|
||||
u8 text1[MAX_CHARS_PRINTED];
|
||||
u8 text2[MAX_CHARS_PRINTED];
|
||||
|
||||
for (i = 0; i < MAX_CHARS_PRINTED + 1; i++)
|
||||
for (i = 0; i < MAX_CHARS_PRINTED; i++)
|
||||
{
|
||||
text1[i] = str[i];
|
||||
if (text1[i] == EOS)
|
||||
@ -2920,7 +2920,7 @@ static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTi
|
||||
TextIntoAbilityPopUp(spriteTileData1, windowTileData, 8, (y == 0));
|
||||
RemoveWindow(windowId);
|
||||
|
||||
if (i == MAX_CHARS_PRINTED + 1)
|
||||
if (i == MAX_CHARS_PRINTED)
|
||||
{
|
||||
for (i = 0; i < MAX_CHARS_PRINTED; i++)
|
||||
{
|
||||
@ -2931,11 +2931,22 @@ static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTi
|
||||
text2[i] = EOS;
|
||||
|
||||
windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text2, x2, y, color1, color2, color3, &windowId);
|
||||
TextIntoAbilityPopUp(spriteTileData2, windowTileData, 1, (y == 0));
|
||||
TextIntoAbilityPopUp(spriteTileData2, windowTileData, 3, (y == 0));
|
||||
RemoveWindow(windowId);
|
||||
}
|
||||
}
|
||||
|
||||
static const u8 sText_Space16[]= _(" ");
|
||||
static void ClearAbilityName(u8 spriteId1, u8 spriteId2)
|
||||
{
|
||||
PrintOnAbilityPopUp(sText_Space16,
|
||||
(void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256,
|
||||
(void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256,
|
||||
6, 1,
|
||||
4,
|
||||
7, 9, 1);
|
||||
}
|
||||
|
||||
static void PrintBattlerOnAbilityPopUp(u8 battlerId, u8 spriteId1, u8 spriteId2)
|
||||
{
|
||||
int i;
|
||||
@ -2978,7 +2989,7 @@ static void PrintAbilityOnAbilityPopUp(u32 ability, u8 spriteId1, u8 spriteId2)
|
||||
PrintOnAbilityPopUp(gAbilityNames[ability],
|
||||
(void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256,
|
||||
(void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256,
|
||||
7, 1,
|
||||
6, 1,
|
||||
4,
|
||||
7, 9, 1);
|
||||
}
|
||||
@ -3039,6 +3050,20 @@ static const u16 sOverwrittenPixelsTable[][2] =
|
||||
{PIXEL_COORDS_TO_OFFSET(0, 24), 3},
|
||||
{PIXEL_COORDS_TO_OFFSET(0, 25), 3},
|
||||
{PIXEL_COORDS_TO_OFFSET(0, 26), 3},
|
||||
|
||||
//Second Row Of Image
|
||||
{PIXEL_COORDS_TO_OFFSET(0, 45), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(0, 46), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(0, 47), 8},
|
||||
//{PIXEL_COORDS_TO_OFFSET(0, 48), 8}, // cuts off the top of the 'G' in Neutralizing Gas
|
||||
{PIXEL_COORDS_TO_OFFSET(8, 45), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(8, 46), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(8, 47), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(8, 48), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(16, 45), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(16, 46), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(16, 47), 8},
|
||||
{PIXEL_COORDS_TO_OFFSET(16, 48), 8},
|
||||
};
|
||||
|
||||
static inline void CopyPixels(u8 *dest, const u8 *src, u32 pixelCount)
|
||||
@ -3165,6 +3190,7 @@ void UpdateAbilityPopup(u8 battlerId)
|
||||
u8 spriteId2 = gBattleStruct->abilityPopUpSpriteIds[battlerId][1];
|
||||
u16 ability = (gBattleScripting.abilityPopupOverwrite != 0) ? gBattleScripting.abilityPopupOverwrite : gBattleMons[battlerId].ability;
|
||||
|
||||
ClearAbilityName(spriteId1, spriteId2);
|
||||
PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2);
|
||||
RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32));
|
||||
}
|
||||
@ -3230,19 +3256,19 @@ static void Task_FreeAbilityPopUpGfx(u8 taskId)
|
||||
|
||||
static const struct OamData sOamData_LastUsedBall =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(32x32),
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(32x32),
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow =
|
||||
|
@ -2926,6 +2926,7 @@ static void BattleStartClearSetData(void)
|
||||
gBattleStruct->lastTakenMoveFrom[i][2] = 0;
|
||||
gBattleStruct->lastTakenMoveFrom[i][3] = 0;
|
||||
gBattleStruct->AI_monToSwitchIntoId[i] = PARTY_SIZE;
|
||||
gBattleStruct->skyDropTargets[i] = 0xFF;
|
||||
}
|
||||
|
||||
gLastUsedMove = 0;
|
||||
@ -3215,6 +3216,45 @@ void FaintClearSetData(void)
|
||||
UndoFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FALSE);
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||
UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]);
|
||||
|
||||
// If the fainted mon was involved in a Sky Drop
|
||||
if (gBattleStruct->skyDropTargets[gActiveBattler] != 0xFF)
|
||||
{
|
||||
// Get battler id of the other Pokemon involved in this Sky Drop
|
||||
u8 otherSkyDropper = gBattleStruct->skyDropTargets[gActiveBattler];
|
||||
|
||||
// Clear Sky Drop data
|
||||
gBattleStruct->skyDropTargets[gActiveBattler] = 0xFF;
|
||||
gBattleStruct->skyDropTargets[otherSkyDropper] = 0xFF;
|
||||
|
||||
// If the other Pokemon involved in this Sky Drop was the target, not the attacker
|
||||
if (gStatuses3[otherSkyDropper] & STATUS3_SKY_DROPPED)
|
||||
{
|
||||
// Release the target and take them out of the semi-invulnerable state
|
||||
gStatuses3[otherSkyDropper] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR);
|
||||
|
||||
// Make the target's sprite visible
|
||||
gSprites[gBattlerSpriteIds[otherSkyDropper]].invisible = FALSE;
|
||||
|
||||
// If the target was sky dropped in the middle of using Outrage/Petal Dance/Thrash,
|
||||
// confuse them upon release and print "confused via fatigue" message and animation.
|
||||
if (gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE)
|
||||
{
|
||||
gBattleMons[otherSkyDropper].status2 &= ~(STATUS2_LOCK_CONFUSE);
|
||||
|
||||
// If the released mon can be confused, do so.
|
||||
// Don't use CanBeConfused here, since it can cause issues in edge cases.
|
||||
if (!(GetBattlerAbility(otherSkyDropper) == ABILITY_OWN_TEMPO
|
||||
|| gBattleMons[otherSkyDropper].status2 & STATUS2_CONFUSION
|
||||
|| IsBattlerTerrainAffected(otherSkyDropper, STATUS_FIELD_MISTY_TERRAIN)))
|
||||
{
|
||||
gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2);
|
||||
gBattlerAttacker = otherSkyDropper;
|
||||
gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void DoBattleIntro(void)
|
||||
@ -3953,10 +3993,12 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
break;
|
||||
case B_ACTION_USE_ITEM:
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_LINK
|
||||
if ((gBattleTypeFlags & (BATTLE_TYPE_LINK
|
||||
| BATTLE_TYPE_FRONTIER_NO_PYRAMID
|
||||
| BATTLE_TYPE_EREADER_TRAINER
|
||||
| BATTLE_TYPE_RECORDED_LINK))
|
||||
// Or if currently held by Sky Drop
|
||||
|| gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED)
|
||||
{
|
||||
RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
|
||||
gSelectionBattleScripts[gActiveBattler] = BattleScript_ActionSelectionItemsCantBeUsed;
|
||||
|
@ -427,6 +427,8 @@ static const u8 sText_ExclamationMark4[] = _("!");
|
||||
static const u8 sText_ExclamationMark5[] = _("!");
|
||||
static const u8 sText_Accuracy[] = _("accuracy");
|
||||
static const u8 sText_Evasiveness[] = _("evasiveness");
|
||||
static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX}\ninto the air!");
|
||||
static const u8 sText_TargetTooHeavy[] = _("But the target\nwas too heavy!");
|
||||
|
||||
const u8 * const gStatNamesTable[NUM_BATTLE_STATS] =
|
||||
{
|
||||
@ -1330,6 +1332,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||
[STRINGID_PKMNBECAMEWEAKERTOFIRE - 12] = sText_PkmnBecameWeakerToFire,
|
||||
[STRINGID_ABOUTTOUSEPOLTERGEIST - 12] = sText_PkmnAboutToBeAttackedByItsItem,
|
||||
[STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE - 12] = sText_CantEscapeBecauseOfCurrentMove,
|
||||
[STRINGID_PKMNTOOKTARGETHIGH - 12] = sText_PkmnTookTargetHigh,
|
||||
[STRINGID_TARGETTOOHEAVY - 12] = sText_TargetTooHeavy,
|
||||
};
|
||||
|
||||
const u16 gMentalHerbCureStringIds[] =
|
||||
@ -1544,6 +1548,7 @@ const u16 gFirstTurnOfTwoStringIds[] =
|
||||
[B_MSG_TURN1_PHANTOM_FORCE] = STRINGID_VANISHEDINSTANTLY,
|
||||
[B_MSG_TURN1_GEOMANCY] = STRINGID_PKNMABSORBINGPOWER,
|
||||
[B_MSG_TURN1_FREEZE_SHOCK] = STRINGID_CLOAKEDINAFREEZINGLIGHT,
|
||||
[B_MSG_TURN1_SKY_DROP] = STRINGID_PKMNTOOKTARGETHIGH,
|
||||
};
|
||||
|
||||
// Index copied from move's index in sTrappingMoves
|
||||
|
@ -938,8 +938,8 @@ static const u8 sForbiddenMoves[MOVES_COUNT] =
|
||||
[MOVE_BADDY_BAD] = FORBIDDEN_METRONOME,
|
||||
[MOVE_BANEFUL_BUNKER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BEAK_BLAST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
|
||||
[MOVE_BEHEMOTH_BASH] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BEHEMOTH_BLADE] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BEHEMOTH_BASH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BEHEMOTH_BLADE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BELCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
|
||||
[MOVE_BESTOW] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BIDE] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
|
||||
@ -969,7 +969,7 @@ static const u8 sForbiddenMoves[MOVES_COUNT] =
|
||||
[MOVE_DRAGON_ENERGY] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DRAGON_TAIL] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_DRUM_BEATING] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DYNAMAX_CANNON] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
|
||||
[MOVE_DYNAMAX_CANNON] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
|
||||
[MOVE_ENDURE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_ETERNABEAM] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT,
|
||||
[MOVE_FALSE_SURRENDER] = FORBIDDEN_METRONOME,
|
||||
@ -1014,7 +1014,7 @@ static const u8 sForbiddenMoves[MOVES_COUNT] =
|
||||
[MOVE_MOONGEIST_BEAM] = FORBIDDEN_METRONOME,
|
||||
[MOVE_NATURE_POWER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
|
||||
[MOVE_NATURES_MADNESS] = FORBIDDEN_METRONOME,
|
||||
[MOVE_OBSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT,
|
||||
[MOVE_OBSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT,
|
||||
[MOVE_ORIGIN_PULSE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_OUTRAGE] = FORBIDDEN_INSTRUCT,
|
||||
[MOVE_OVERDRIVE] = FORBIDDEN_METRONOME,
|
||||
@ -1404,6 +1404,8 @@ static void Cmd_attackcanceler(void)
|
||||
SET_BATTLER_TYPE(gBattlerAttacker, moveType);
|
||||
gBattlerAbility = gBattlerAttacker;
|
||||
BattleScriptPushCursor();
|
||||
PrepareStringBattle(STRINGID_EMPTYSTRING3, gBattlerAttacker);
|
||||
gBattleCommunication[MSG_DISPLAY] = 1;
|
||||
gBattlescriptCurrInstr = BattleScript_ProteanActivates;
|
||||
return;
|
||||
}
|
||||
@ -1593,13 +1595,15 @@ static bool32 AccuracyCalcHelper(u16 move)
|
||||
JumpIfMoveFailed(7, move);
|
||||
return TRUE;
|
||||
}
|
||||
else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD)
|
||||
// If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits.
|
||||
else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF))
|
||||
{
|
||||
if (!JumpIfMoveFailed(7, move))
|
||||
RecordAbilityBattle(gBattlerAttacker, ABILITY_NO_GUARD);
|
||||
return TRUE;
|
||||
}
|
||||
else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD)
|
||||
// If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits.
|
||||
else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF))
|
||||
{
|
||||
if (!JumpIfMoveFailed(7, move))
|
||||
RecordAbilityBattle(gBattlerTarget, ABILITY_NO_GUARD);
|
||||
@ -1607,8 +1611,7 @@ static bool32 AccuracyCalcHelper(u16 move)
|
||||
}
|
||||
|
||||
if ((gStatuses3[gBattlerTarget] & STATUS3_PHANTOM_FORCE)
|
||||
|| (!(gBattleMoves[move].flags & FLAG_DMG_IN_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
|
||||
|| (!(gBattleMoves[move].flags & FLAG_DMG_2X_IN_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
|
||||
|| (!(gBattleMoves[move].flags & (FLAG_DMG_IN_AIR | FLAG_DMG_2X_IN_AIR)) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
|
||||
|| (!(gBattleMoves[move].flags & FLAG_DMG_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND)
|
||||
|| (!(gBattleMoves[move].flags & FLAG_DMG_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER))
|
||||
{
|
||||
@ -2915,9 +2918,20 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
||||
else
|
||||
{
|
||||
gBattleMons[gEffectBattler].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); // 2-5 turns
|
||||
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
|
||||
|
||||
// If the confusion is activating due to being released from Sky Drop, go to "confused due to fatigue" script.
|
||||
// Otherwise, do normal confusion script.
|
||||
if(gCurrentMove == MOVE_SKY_DROP)
|
||||
{
|
||||
gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE);
|
||||
gBattlerAttacker = gEffectBattler;
|
||||
gBattlescriptCurrInstr = BattleScript_ThrashConfuses;
|
||||
}
|
||||
else
|
||||
{
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_FLINCH:
|
||||
@ -3918,7 +3932,8 @@ static void Cmd_getexp(void)
|
||||
gBattleScripting.getexpState = 5;
|
||||
gBattleMoveDamage = 0; // used for exp
|
||||
}
|
||||
else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_LEVEL)
|
||||
else if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gBattleStruct->expGetterMonId >= 3)
|
||||
|| GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_LEVEL)
|
||||
{
|
||||
*(&gBattleStruct->sentInPokes) >>= 1;
|
||||
gBattleScripting.getexpState = 5;
|
||||
@ -4110,6 +4125,28 @@ static void Cmd_getexp(void)
|
||||
}
|
||||
}
|
||||
|
||||
#if B_MULTI_BATTLE_WHITEOUT >= GEN_4
|
||||
static bool32 NoAliveMonsForPlayerAndPartner(void)
|
||||
{
|
||||
u32 i;
|
||||
u32 HP_count = 0;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && (gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER))
|
||||
{
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)
|
||||
&& (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & gBitTable[i])))
|
||||
{
|
||||
HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (HP_count == 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool32 NoAliveMonsForPlayer(void)
|
||||
{
|
||||
u32 i;
|
||||
@ -4171,8 +4208,21 @@ static void Cmd_checkteamslost(void)
|
||||
if (gBattleControllerExecFlags)
|
||||
return;
|
||||
|
||||
#if B_MULTI_BATTLE_WHITEOUT >= GEN_4
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))
|
||||
{
|
||||
if (NoAliveMonsForPlayerAndPartner())
|
||||
gBattleOutcome |= B_OUTCOME_LOST;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (NoAliveMonsForPlayer())
|
||||
gBattleOutcome |= B_OUTCOME_LOST;
|
||||
}
|
||||
#else
|
||||
if (NoAliveMonsForPlayer())
|
||||
gBattleOutcome |= B_OUTCOME_LOST;
|
||||
#endif
|
||||
if (NoAliveMonsForOpponent())
|
||||
gBattleOutcome |= B_OUTCOME_WON;
|
||||
|
||||
@ -5138,6 +5188,33 @@ static void Cmd_moveend(void)
|
||||
}
|
||||
gBattleScripting.moveendState++;
|
||||
break;
|
||||
case MOVEEND_SKY_DROP_CONFUSE: // If a Pokemon was released from Sky Drop and was in LOCK_CONFUSE, go to "confused due to fatigue" scripts and clear Sky Drop data.
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (gBattleStruct->skyDropTargets[i] == 0xFE)
|
||||
{
|
||||
u8 targetId;
|
||||
// Find the battler id of the Pokemon that was held by Sky Drop
|
||||
for (targetId = 0; targetId < gBattlersCount; targetId++)
|
||||
{
|
||||
if (gBattleStruct->skyDropTargets[targetId] == i)
|
||||
break;
|
||||
}
|
||||
|
||||
// Set gBattlerAttacker to the battler id of the target
|
||||
gBattlerAttacker = targetId;
|
||||
|
||||
// Jump to "confused due to fatigue" script
|
||||
gBattlescriptCurrInstr = BattleScript_ThrashConfuses;
|
||||
|
||||
// Clear skyDropTargets data
|
||||
gBattleStruct->skyDropTargets[i] = 0xFF;
|
||||
gBattleStruct->skyDropTargets[targetId] = 0xFF;
|
||||
return;
|
||||
}
|
||||
}
|
||||
gBattleScripting.moveendState++;
|
||||
break;
|
||||
case MOVEEND_UPDATE_LAST_MOVES:
|
||||
if (gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE))
|
||||
gBattleStruct->lastMoveFailed |= gBitTable[gBattlerAttacker];
|
||||
@ -7696,10 +7773,11 @@ static void Cmd_various(void)
|
||||
}
|
||||
return;
|
||||
case VARIOUS_GRAVITY_ON_AIRBORNE_MONS:
|
||||
if (gStatuses3[gActiveBattler] & STATUS3_ON_AIR)
|
||||
// Cancel all multiturn moves of IN_AIR Pokemon except those being targeted by Sky Drop.
|
||||
if (gStatuses3[gActiveBattler] & STATUS3_ON_AIR && !(gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED))
|
||||
CancelMultiTurnMoves(gActiveBattler);
|
||||
|
||||
gStatuses3[gActiveBattler] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR);
|
||||
gStatuses3[gActiveBattler] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR | STATUS3_SKY_DROPPED);
|
||||
break;
|
||||
case VARIOUS_SPECTRAL_THIEF:
|
||||
// Raise stats
|
||||
@ -8903,7 +8981,7 @@ static void Cmd_various(void)
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
}
|
||||
|
||||
if (gBattleMons[gActiveBattler].pp[i] == 0)
|
||||
if (gBattleMons[gActiveBattler].pp[i] == 0 && gBattleStruct->skyDropTargets[gActiveBattler] == 0xFF)
|
||||
CancelMultiTurnMoves(gActiveBattler);
|
||||
|
||||
gBattlescriptCurrInstr += 7; // continue
|
||||
@ -8970,6 +9048,71 @@ static void Cmd_various(void)
|
||||
gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
|
||||
TryToRevertMimicry(); // restore the types of Pokémon with Mimicry
|
||||
break;
|
||||
case VARIOUS_JUMP_IF_UNDER_200:
|
||||
// If the Pokemon is less than 200 kg, or weighing less than 441 lbs, then Sky Drop will work. Otherwise, it will fail.
|
||||
if (GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), 1) < 441)
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
else
|
||||
gBattlescriptCurrInstr += 7;
|
||||
return;
|
||||
case VARIOUS_SET_SKY_DROP:
|
||||
gStatuses3[gBattlerTarget] |= (STATUS3_SKY_DROPPED | STATUS3_ON_AIR);
|
||||
/* skyDropTargets holds the information of who is in a particular instance of Sky Drop.
|
||||
This is needed in the case that multiple Pokemon use Sky Drop in the same turn or if
|
||||
the target of a Sky Drop faints while in the air.*/
|
||||
gBattleStruct->skyDropTargets[gBattlerAttacker] = gBattlerTarget;
|
||||
gBattleStruct->skyDropTargets[gBattlerTarget] = gBattlerAttacker;
|
||||
|
||||
// End any multiturn effects caused by the target except STATUS2_LOCK_CONFUSE
|
||||
gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_MULTIPLETURNS);
|
||||
gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_UPROAR);
|
||||
gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_BIDE);
|
||||
gDisableStructs[gBattlerTarget].rolloutTimer = 0;
|
||||
gDisableStructs[gBattlerTarget].furyCutterCounter = 0;
|
||||
|
||||
// End any Follow Me/Rage Powder effects caused by the target
|
||||
if (gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer != 0 && gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget == gBattlerTarget)
|
||||
gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 0;
|
||||
|
||||
break;
|
||||
case VARIOUS_CLEAR_SKY_DROP:
|
||||
// Check to see if the initial target of this Sky Drop fainted before the 2nd turn of Sky Drop.
|
||||
// If so, make the move fail. If not, clear all of the statuses and continue the move.
|
||||
if (gBattleStruct->skyDropTargets[gBattlerAttacker] == 0xFF)
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
else
|
||||
{
|
||||
gBattleStruct->skyDropTargets[gBattlerAttacker] = 0xFF;
|
||||
gBattleStruct->skyDropTargets[gBattlerTarget] = 0xFF;
|
||||
gStatuses3[gBattlerTarget] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR);
|
||||
gBattlescriptCurrInstr += 7;
|
||||
}
|
||||
|
||||
// Confuse target if they were in the middle of Petal Dance/Outrage/Thrash when targeted.
|
||||
if (gBattleMons[gBattlerTarget].status2 & STATUS2_LOCK_CONFUSE)
|
||||
gBattleScripting.moveEffect = (MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN);
|
||||
return;
|
||||
case VARIOUS_SKY_DROP_YAWN: // If the mon that's sleeping due to Yawn was holding a Pokemon in Sky Drop, release the target and clear Sky Drop data.
|
||||
if (gBattleStruct->skyDropTargets[gEffectBattler] != 0xFF && !(gStatuses3[gEffectBattler] & STATUS3_SKY_DROPPED))
|
||||
{
|
||||
// Set the target of Sky Drop as gEffectBattler
|
||||
gEffectBattler = gBattleStruct->skyDropTargets[gEffectBattler];
|
||||
|
||||
// Clear skyDropTargets data
|
||||
gBattleStruct->skyDropTargets[gBattleStruct->skyDropTargets[gEffectBattler]] = 0xFF;
|
||||
gBattleStruct->skyDropTargets[gEffectBattler] = 0xFF;
|
||||
|
||||
// If the target was in the middle of Outrage/Thrash/etc. when targeted by Sky Drop, confuse them on release and do proper animation
|
||||
if (gBattleMons[gEffectBattler].status2 & STATUS2_LOCK_CONFUSE && CanBeConfused(gEffectBattler))
|
||||
{
|
||||
gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE);
|
||||
gBattlerAttacker = gEffectBattler;
|
||||
gBattleMons[gBattlerTarget].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2);
|
||||
gBattlescriptCurrInstr = BattleScript_ThrashConfuses;
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED:
|
||||
if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler, TRUE))
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
@ -11363,7 +11506,8 @@ static void Cmd_tryspiteppreduce(void)
|
||||
|
||||
gBattlescriptCurrInstr += 5;
|
||||
|
||||
if (gBattleMons[gBattlerTarget].pp[i] == 0)
|
||||
// Don't cut off Sky Drop if pp is brought to zero.
|
||||
if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)
|
||||
CancelMultiTurnMoves(gBattlerTarget);
|
||||
}
|
||||
else
|
||||
@ -12009,6 +12153,7 @@ static void Cmd_setsemiinvulnerablebit(void)
|
||||
{
|
||||
case MOVE_FLY:
|
||||
case MOVE_BOUNCE:
|
||||
case MOVE_SKY_DROP:
|
||||
gStatuses3[gBattlerAttacker] |= STATUS3_ON_AIR;
|
||||
break;
|
||||
case MOVE_DIG:
|
||||
|
@ -224,6 +224,7 @@ bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move)
|
||||
if (gSideTimers[defSide].followmeTimer == 0
|
||||
|| gBattleMons[gSideTimers[defSide].followmeTarget].hp == 0
|
||||
|| gBattleMoves[move].effect == EFFECT_SNIPE_SHOT
|
||||
|| gBattleMoves[move].effect == EFFECT_SKY_DROP
|
||||
|| ability == ABILITY_PROPELLER_TAIL || ability == ABILITY_STALWART)
|
||||
return FALSE;
|
||||
|
||||
@ -1413,12 +1414,80 @@ void MarkBattlerReceivedLinkData(u8 battlerId)
|
||||
|
||||
void CancelMultiTurnMoves(u8 battler)
|
||||
{
|
||||
gBattleMons[battler].status2 &= ~STATUS2_MULTIPLETURNS;
|
||||
gBattleMons[battler].status2 &= ~STATUS2_LOCK_CONFUSE;
|
||||
gBattleMons[battler].status2 &= ~STATUS2_UPROAR;
|
||||
gBattleMons[battler].status2 &= ~STATUS2_BIDE;
|
||||
u8 i;
|
||||
gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS);
|
||||
gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE);
|
||||
gBattleMons[battler].status2 &= ~(STATUS2_UPROAR);
|
||||
gBattleMons[battler].status2 &= ~(STATUS2_BIDE);
|
||||
|
||||
gStatuses3[battler] &= ~STATUS3_SEMI_INVULNERABLE;
|
||||
// Clear battler's semi-invulnerable bits if they are not held by Sky Drop.
|
||||
if (!(gStatuses3[battler] & STATUS3_SKY_DROPPED))
|
||||
gStatuses3[battler] &= ~(STATUS3_SEMI_INVULNERABLE);
|
||||
|
||||
// Check to see if this Pokemon was in the middle of using Sky Drop. If so, release the target.
|
||||
if (gBattleStruct->skyDropTargets[battler] != 0xFF && !(gStatuses3[battler] & STATUS3_SKY_DROPPED))
|
||||
{
|
||||
// Get the target's battler id
|
||||
u8 otherSkyDropper = gBattleStruct->skyDropTargets[battler];
|
||||
|
||||
// Clears sky_dropped and on_air statuses
|
||||
gStatuses3[otherSkyDropper] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR);
|
||||
|
||||
// Makes both attacker and target's sprites visible
|
||||
gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
|
||||
gSprites[gBattlerSpriteIds[otherSkyDropper]].invisible = FALSE;
|
||||
|
||||
// If target was sky dropped in the middle of Outrage/Thrash/Petal Dance,
|
||||
// confuse them upon release and display "confused by fatigue" message & animation.
|
||||
// Don't do this if this CancelMultiTurnMoves is caused by falling asleep via Yawn.
|
||||
if (gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE && gBattleStruct->turnEffectsTracker != 24)
|
||||
{
|
||||
gBattleMons[otherSkyDropper].status2 &= ~(STATUS2_LOCK_CONFUSE);
|
||||
|
||||
// If the target can be confused, confuse them.
|
||||
// Don't use CanBeConfused, can cause issues in edge cases.
|
||||
if (!(GetBattlerAbility(otherSkyDropper) == ABILITY_OWN_TEMPO
|
||||
|| gBattleMons[otherSkyDropper].status2 & STATUS2_CONFUSION
|
||||
|| IsBattlerTerrainAffected(otherSkyDropper, STATUS_FIELD_MISTY_TERRAIN)))
|
||||
{
|
||||
// Set confused status
|
||||
gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2);
|
||||
|
||||
// If this CancelMultiTurnMoves is occuring due to attackcanceller
|
||||
if (gBattlescriptCurrInstr[0] == 0x0)
|
||||
{
|
||||
gBattleStruct->skyDropTargets[battler] = 0xFE;
|
||||
}
|
||||
// If this CancelMultiTurnMoves is occuring due to VARIOUS_GRAVITY_ON_AIRBORNE_MONS
|
||||
// Reapplying STATUS3_SKY_DROPPED allows for avoiding unecessary messages when Gravity is applied to the target.
|
||||
else if (gBattlescriptCurrInstr[0] == 0x76 && gBattlescriptCurrInstr[2] == 76)
|
||||
{
|
||||
gBattleStruct->skyDropTargets[battler] = 0xFE;
|
||||
gStatuses3[otherSkyDropper] |= STATUS3_SKY_DROPPED;
|
||||
}
|
||||
// If this CancelMultiTurnMoves is occuring due to cancelmultiturnmoves script
|
||||
else if (gBattlescriptCurrInstr[0] == 0x76 && gBattlescriptCurrInstr[2] == 0)
|
||||
{
|
||||
gBattlerAttacker = otherSkyDropper;
|
||||
gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 3;
|
||||
}
|
||||
// If this CancelMultiTurnMoves is occuring due to receiving Sleep/Freeze status
|
||||
else if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT)
|
||||
{
|
||||
gBattlerAttacker = otherSkyDropper;
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear skyDropTargets data, unless this CancelMultiTurnMoves is caused by Yawn, attackcanceler, or VARIOUS_GRAVITY_ON_AIRBORNE_MONS
|
||||
if (!(gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE) && gBattleStruct->skyDropTargets[battler] < 4)
|
||||
{
|
||||
gBattleStruct->skyDropTargets[battler] = 0xFF;
|
||||
gBattleStruct->skyDropTargets[otherSkyDropper] = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
gDisableStructs[battler].rolloutTimer = 0;
|
||||
gDisableStructs[battler].furyCutterCounter = 0;
|
||||
@ -2784,7 +2853,8 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case ENDTURN_THRASH: // thrash
|
||||
if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
|
||||
// Don't decrement STATUS2_LOCK_CONFUSE if the target is held by Sky Drop
|
||||
if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE && !(gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED))
|
||||
{
|
||||
gBattleMons[gActiveBattler].status2 -= STATUS2_LOCK_CONFUSE_TURN(1);
|
||||
if (WasUnableToUseMove(gActiveBattler))
|
||||
@ -2892,7 +2962,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[gActiveBattler].status1 |= (Random() & 3) + 2;
|
||||
gBattleMons[gActiveBattler].status1 |= (B_SLEEP_TURNS >= GEN_5) ? ((Random() % 3) + 2) : ((Random() % 4) + 3);
|
||||
BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
BattleScriptExecute(BattleScript_YawnMakesAsleep);
|
||||
@ -3225,6 +3295,7 @@ void TryClearRageAndFuryCutter(void)
|
||||
enum
|
||||
{
|
||||
CANCELLER_FLAGS,
|
||||
CANCELLER_SKY_DROP,
|
||||
CANCELLER_ASLEEP,
|
||||
CANCELLER_FROZEN,
|
||||
CANCELLER_TRUANT,
|
||||
@ -3261,6 +3332,16 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
gStatuses3[gBattlerAttacker] &= ~STATUS3_GRUDGE;
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case CANCELLER_SKY_DROP:
|
||||
// If Pokemon is being held in Sky Drop
|
||||
if (gStatuses3[gBattlerAttacker] & STATUS3_SKY_DROPPED)
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEnd;
|
||||
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
||||
effect = 1;
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case CANCELLER_ASLEEP: // check being asleep
|
||||
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
|
||||
{
|
||||
@ -3888,6 +3969,7 @@ static bool32 ShouldChangeFormHpBased(u32 battler)
|
||||
{ABILITY_SCHOOLING, SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, 4},
|
||||
{ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GORGING, 2},
|
||||
{ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GULPING, 1},
|
||||
{ABILITY_ZEN_MODE, SPECIES_DARMANITAN_GALARIAN, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, 2},
|
||||
};
|
||||
u32 i;
|
||||
|
||||
@ -4901,7 +4983,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
||||
&& !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove))
|
||||
&& (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER))
|
||||
&& !(gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
&& CountUsablePartyMons(battler) > 0)
|
||||
&& CountUsablePartyMons(battler) > 0
|
||||
// Not currently held by Sky Drop
|
||||
&& !(gStatuses3[battler] & STATUS3_SKY_DROPPED))
|
||||
{
|
||||
gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_EMERGENCY_EXIT;
|
||||
effect++;
|
||||
@ -5793,6 +5877,8 @@ bool32 CanBattlerEscape(u32 battlerId) // no ability check
|
||||
return FALSE;
|
||||
else if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK)
|
||||
return FALSE;
|
||||
else if (gStatuses3[battlerId] & STATUS3_SKY_DROPPED)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
@ -9184,6 +9270,10 @@ bool32 CanMegaEvolve(u8 battlerId)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Check if mon is currently held by Sky Drop
|
||||
if (gStatuses3[battlerId] & STATUS3_SKY_DROPPED)
|
||||
return FALSE;
|
||||
|
||||
// Gets mon data.
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
|
||||
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
|
||||
@ -9261,23 +9351,24 @@ void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut)
|
||||
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
|
||||
static const u16 species[][3] =
|
||||
{
|
||||
// Changed Form ID Default Form ID Should change on switch
|
||||
{SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU, FALSE},
|
||||
{SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND, FALSE},
|
||||
{SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA, FALSE},
|
||||
{SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH, TRUE},
|
||||
{SPECIES_DARMANITAN_ZEN_MODE, SPECIES_DARMANITAN, TRUE},
|
||||
{SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, TRUE},
|
||||
{SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, TRUE},
|
||||
{SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT, TRUE},
|
||||
{SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT, TRUE},
|
||||
{SPECIES_MORPEKO_HANGRY, SPECIES_MORPEKO, TRUE},
|
||||
// Changed Form ID Default Form ID Should change on switch
|
||||
{SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU, FALSE},
|
||||
{SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND, FALSE},
|
||||
{SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA, FALSE},
|
||||
{SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH, TRUE},
|
||||
{SPECIES_DARMANITAN_ZEN_MODE, SPECIES_DARMANITAN, TRUE},
|
||||
{SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, TRUE},
|
||||
{SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, TRUE},
|
||||
{SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, TRUE},
|
||||
{SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT, TRUE},
|
||||
{SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT, TRUE},
|
||||
{SPECIES_MORPEKO_HANGRY, SPECIES_MORPEKO, TRUE},
|
||||
{SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, SPECIES_DARMANITAN_GALARIAN, TRUE},
|
||||
};
|
||||
|
||||
currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL);
|
||||
|
@ -8009,7 +8009,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_SKY_DROP] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
|
||||
.effect = EFFECT_SKY_DROP,
|
||||
.power = 60,
|
||||
.type = TYPE_FLYING,
|
||||
.accuracy = 100,
|
||||
|
@ -255,6 +255,279 @@ static const u8 sGrimNeighDescription[] = _("KOs boost Sp. Atk stat.");
|
||||
static const u8 sAsOneIceRiderDescription[] = _("Unnerve and Chilling Neigh.");
|
||||
static const u8 sAsOneShadowRiderDescription[] = _("Unnerve and Grim Neigh.");
|
||||
|
||||
#if B_EXPANDED_ABILITY_NAMES == TRUE
|
||||
const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
|
||||
{
|
||||
[ABILITY_NONE] = _("-------"),
|
||||
[ABILITY_STENCH] = _("Stench"),
|
||||
[ABILITY_DRIZZLE] = _("Drizzle"),
|
||||
[ABILITY_SPEED_BOOST] = _("Speed Boost"),
|
||||
[ABILITY_BATTLE_ARMOR] = _("Battle Armor"),
|
||||
[ABILITY_STURDY] = _("Sturdy"),
|
||||
[ABILITY_DAMP] = _("Damp"),
|
||||
[ABILITY_LIMBER] = _("Limber"),
|
||||
[ABILITY_SAND_VEIL] = _("Sand Veil"),
|
||||
[ABILITY_STATIC] = _("Static"),
|
||||
[ABILITY_VOLT_ABSORB] = _("Volt Absorb"),
|
||||
[ABILITY_WATER_ABSORB] = _("Water Absorb"),
|
||||
[ABILITY_OBLIVIOUS] = _("Oblivious"),
|
||||
[ABILITY_CLOUD_NINE] = _("Cloud Nine"),
|
||||
[ABILITY_COMPOUND_EYES] = _("Compound Eyes"),
|
||||
[ABILITY_INSOMNIA] = _("Insomnia"),
|
||||
[ABILITY_COLOR_CHANGE] = _("Color Change"),
|
||||
[ABILITY_IMMUNITY] = _("Immunity"),
|
||||
[ABILITY_FLASH_FIRE] = _("Flash Fire"),
|
||||
[ABILITY_SHIELD_DUST] = _("Shield Dust"),
|
||||
[ABILITY_OWN_TEMPO] = _("Own Tempo"),
|
||||
[ABILITY_SUCTION_CUPS] = _("Suction Cups"),
|
||||
[ABILITY_INTIMIDATE] = _("Intimidate"),
|
||||
[ABILITY_SHADOW_TAG] = _("Shadow Tag"),
|
||||
[ABILITY_ROUGH_SKIN] = _("Rough Skin"),
|
||||
[ABILITY_WONDER_GUARD] = _("Wonder Guard"),
|
||||
[ABILITY_LEVITATE] = _("Levitate"),
|
||||
[ABILITY_EFFECT_SPORE] = _("Effect Spore"),
|
||||
[ABILITY_SYNCHRONIZE] = _("Synchronize"),
|
||||
[ABILITY_CLEAR_BODY] = _("Clear Body"),
|
||||
[ABILITY_NATURAL_CURE] = _("Natural Cure"),
|
||||
[ABILITY_LIGHTNING_ROD] = _("Lightning Rod"),
|
||||
[ABILITY_SERENE_GRACE] = _("Serene Grace"),
|
||||
[ABILITY_SWIFT_SWIM] = _("Swift Swim"),
|
||||
[ABILITY_CHLOROPHYLL] = _("Chlorophyll"),
|
||||
[ABILITY_ILLUMINATE] = _("Illuminate"),
|
||||
[ABILITY_TRACE] = _("Trace"),
|
||||
[ABILITY_HUGE_POWER] = _("Huge Power"),
|
||||
[ABILITY_POISON_POINT] = _("Poison Point"),
|
||||
[ABILITY_INNER_FOCUS] = _("Inner Focus"),
|
||||
[ABILITY_MAGMA_ARMOR] = _("Magma Armor"),
|
||||
[ABILITY_WATER_VEIL] = _("Water Veil"),
|
||||
[ABILITY_MAGNET_PULL] = _("Magnet Pull"),
|
||||
[ABILITY_SOUNDPROOF] = _("Soundproof"),
|
||||
[ABILITY_RAIN_DISH] = _("Rain Dish"),
|
||||
[ABILITY_SAND_STREAM] = _("Sand Stream"),
|
||||
[ABILITY_PRESSURE] = _("Pressure"),
|
||||
[ABILITY_THICK_FAT] = _("Thick Fat"),
|
||||
[ABILITY_EARLY_BIRD] = _("Early Bird"),
|
||||
[ABILITY_FLAME_BODY] = _("Flame Body"),
|
||||
[ABILITY_RUN_AWAY] = _("Run Away"),
|
||||
[ABILITY_KEEN_EYE] = _("Keen Eye"),
|
||||
[ABILITY_HYPER_CUTTER] = _("Hyper Cutter"),
|
||||
[ABILITY_PICKUP] = _("Pickup"),
|
||||
[ABILITY_TRUANT] = _("Truant"),
|
||||
[ABILITY_HUSTLE] = _("Hustle"),
|
||||
[ABILITY_CUTE_CHARM] = _("Cute Charm"),
|
||||
[ABILITY_PLUS] = _("Plus"),
|
||||
[ABILITY_MINUS] = _("Minus"),
|
||||
[ABILITY_FORECAST] = _("Forecast"),
|
||||
[ABILITY_STICKY_HOLD] = _("Sticky Hold"),
|
||||
[ABILITY_SHED_SKIN] = _("Shed Skin"),
|
||||
[ABILITY_GUTS] = _("Guts"),
|
||||
[ABILITY_MARVEL_SCALE] = _("Marvel Scale"),
|
||||
[ABILITY_LIQUID_OOZE] = _("Liquid Ooze"),
|
||||
[ABILITY_OVERGROW] = _("Overgrow"),
|
||||
[ABILITY_BLAZE] = _("Blaze"),
|
||||
[ABILITY_TORRENT] = _("Torrent"),
|
||||
[ABILITY_SWARM] = _("Swarm"),
|
||||
[ABILITY_ROCK_HEAD] = _("Rock Head"),
|
||||
[ABILITY_DROUGHT] = _("Drought"),
|
||||
[ABILITY_ARENA_TRAP] = _("Arena Trap"),
|
||||
[ABILITY_VITAL_SPIRIT] = _("Vital Spirit"),
|
||||
[ABILITY_WHITE_SMOKE] = _("White Smoke"),
|
||||
[ABILITY_PURE_POWER] = _("Pure Power"),
|
||||
[ABILITY_SHELL_ARMOR] = _("Shell Armor"),
|
||||
[ABILITY_AIR_LOCK] = _("Air Lock"),
|
||||
[ABILITY_TANGLED_FEET] = _("Tangled Feet"),
|
||||
[ABILITY_MOTOR_DRIVE] = _("Motor Drive"),
|
||||
[ABILITY_RIVALRY] = _("Rivalry"),
|
||||
[ABILITY_STEADFAST] = _("Steadfast"),
|
||||
[ABILITY_SNOW_CLOAK] = _("Snow Cloak"),
|
||||
[ABILITY_GLUTTONY] = _("Gluttony"),
|
||||
[ABILITY_ANGER_POINT] = _("Anger Point"),
|
||||
[ABILITY_UNBURDEN] = _("Unburden"),
|
||||
[ABILITY_HEATPROOF] = _("Heatproof"),
|
||||
[ABILITY_SIMPLE] = _("Simple"),
|
||||
[ABILITY_DRY_SKIN] = _("Dry Skin"),
|
||||
[ABILITY_DOWNLOAD] = _("Download"),
|
||||
[ABILITY_IRON_FIST] = _("Iron Fist"),
|
||||
[ABILITY_POISON_HEAL] = _("Poison Heal"),
|
||||
[ABILITY_ADAPTABILITY] = _("Adaptability"),
|
||||
[ABILITY_SKILL_LINK] = _("Skill Link"),
|
||||
[ABILITY_HYDRATION] = _("Hydration"),
|
||||
[ABILITY_SOLAR_POWER] = _("Solar Power"),
|
||||
[ABILITY_QUICK_FEET] = _("Quick Feet"),
|
||||
[ABILITY_NORMALIZE] = _("Normalize"),
|
||||
[ABILITY_SNIPER] = _("Sniper"),
|
||||
[ABILITY_MAGIC_GUARD] = _("Magic Guard"),
|
||||
[ABILITY_NO_GUARD] = _("No Guard"),
|
||||
[ABILITY_STALL] = _("Stall"),
|
||||
[ABILITY_TECHNICIAN] = _("Technician"),
|
||||
[ABILITY_LEAF_GUARD] = _("Leaf Guard"),
|
||||
[ABILITY_KLUTZ] = _("Klutz"),
|
||||
[ABILITY_MOLD_BREAKER] = _("Mold Breaker"),
|
||||
[ABILITY_SUPER_LUCK] = _("Super Luck"),
|
||||
[ABILITY_AFTERMATH] = _("Aftermath"),
|
||||
[ABILITY_ANTICIPATION] = _("Anticipation"),
|
||||
[ABILITY_FOREWARN] = _("Forewarn"),
|
||||
[ABILITY_UNAWARE] = _("Unaware"),
|
||||
[ABILITY_TINTED_LENS] = _("Tinted Lens"),
|
||||
[ABILITY_FILTER] = _("Filter"),
|
||||
[ABILITY_SLOW_START] = _("Slow Start"),
|
||||
[ABILITY_SCRAPPY] = _("Scrappy"),
|
||||
[ABILITY_STORM_DRAIN] = _("Storm Drain"),
|
||||
[ABILITY_ICE_BODY] = _("Ice Body"),
|
||||
[ABILITY_SOLID_ROCK] = _("Solid Rock"),
|
||||
[ABILITY_SNOW_WARNING] = _("Snow Warning"),
|
||||
[ABILITY_HONEY_GATHER] = _("Honey Gather"),
|
||||
[ABILITY_FRISK] = _("Frisk"),
|
||||
[ABILITY_RECKLESS] = _("Reckless"),
|
||||
[ABILITY_MULTITYPE] = _("Multitype"),
|
||||
[ABILITY_FLOWER_GIFT] = _("Flower Gift"),
|
||||
[ABILITY_BAD_DREAMS] = _("Bad Dreams"),
|
||||
[ABILITY_PICKPOCKET] = _("Pickpocket"),
|
||||
[ABILITY_SHEER_FORCE] = _("Sheer Force"),
|
||||
[ABILITY_CONTRARY] = _("Contrary"),
|
||||
[ABILITY_UNNERVE] = _("Unnerve"),
|
||||
[ABILITY_DEFIANT] = _("Defiant"),
|
||||
[ABILITY_DEFEATIST] = _("Defeatist"),
|
||||
[ABILITY_CURSED_BODY] = _("Cursed Body"),
|
||||
[ABILITY_HEALER] = _("Healer"),
|
||||
[ABILITY_FRIEND_GUARD] = _("Friend Guard"),
|
||||
[ABILITY_WEAK_ARMOR] = _("Weak Armor"),
|
||||
[ABILITY_HEAVY_METAL] = _("Heavy Metal"),
|
||||
[ABILITY_LIGHT_METAL] = _("Light Metal"),
|
||||
[ABILITY_MULTISCALE] = _("Multiscale"),
|
||||
[ABILITY_TOXIC_BOOST] = _("Toxic Boost"),
|
||||
[ABILITY_FLARE_BOOST] = _("Flare Boost"),
|
||||
[ABILITY_HARVEST] = _("Harvest"),
|
||||
[ABILITY_TELEPATHY] = _("Telepathy"),
|
||||
[ABILITY_MOODY] = _("Moody"),
|
||||
[ABILITY_OVERCOAT] = _("Overcoat"),
|
||||
[ABILITY_POISON_TOUCH] = _("Poison Touch"),
|
||||
[ABILITY_REGENERATOR] = _("Regenerator"),
|
||||
[ABILITY_BIG_PECKS] = _("Big Pecks"),
|
||||
[ABILITY_SAND_RUSH] = _("Sand Rush"),
|
||||
[ABILITY_WONDER_SKIN] = _("Wonder Skin"),
|
||||
[ABILITY_ANALYTIC] = _("Analytic"),
|
||||
[ABILITY_ILLUSION] = _("Illusion"),
|
||||
[ABILITY_IMPOSTER] = _("Imposter"),
|
||||
[ABILITY_INFILTRATOR] = _("Infiltrator"),
|
||||
[ABILITY_MUMMY] = _("Mummy"),
|
||||
[ABILITY_MOXIE] = _("Moxie"),
|
||||
[ABILITY_JUSTIFIED] = _("Justified"),
|
||||
[ABILITY_RATTLED] = _("Rattled"),
|
||||
[ABILITY_MAGIC_BOUNCE] = _("Magic Bounce"),
|
||||
[ABILITY_SAP_SIPPER] = _("Sap Sipper"),
|
||||
[ABILITY_PRANKSTER] = _("Prankster"),
|
||||
[ABILITY_SAND_FORCE] = _("Sand Force"),
|
||||
[ABILITY_IRON_BARBS] = _("Iron Barbs"),
|
||||
[ABILITY_ZEN_MODE] = _("Zen Mode"),
|
||||
[ABILITY_VICTORY_STAR] = _("Victory Star"),
|
||||
[ABILITY_TURBOBLAZE] = _("Turboblaze"),
|
||||
[ABILITY_TERAVOLT] = _("Teravolt"),
|
||||
[ABILITY_AROMA_VEIL] = _("Aroma Veil"),
|
||||
[ABILITY_FLOWER_VEIL] = _("Flower Veil"),
|
||||
[ABILITY_CHEEK_POUCH] = _("Cheek Pouch"),
|
||||
[ABILITY_PROTEAN] = _("Protean"),
|
||||
[ABILITY_FUR_COAT] = _("Fur Coat"),
|
||||
[ABILITY_MAGICIAN] = _("Magician"),
|
||||
[ABILITY_BULLETPROOF] = _("Bulletproof"),
|
||||
[ABILITY_COMPETITIVE] = _("Competitive"),
|
||||
[ABILITY_STRONG_JAW] = _("Strong Jaw"),
|
||||
[ABILITY_REFRIGERATE] = _("Refrigerate"),
|
||||
[ABILITY_SWEET_VEIL] = _("Sweet Veil"),
|
||||
[ABILITY_STANCE_CHANGE] = _("Stance Change"),
|
||||
[ABILITY_GALE_WINGS] = _("Gale Wings"),
|
||||
[ABILITY_MEGA_LAUNCHER] = _("Mega Launcher"),
|
||||
[ABILITY_GRASS_PELT] = _("Grass Pelt"),
|
||||
[ABILITY_SYMBIOSIS] = _("Symbiosis"),
|
||||
[ABILITY_TOUGH_CLAWS] = _("Tough Claws"),
|
||||
[ABILITY_PIXILATE] = _("Pixilate"),
|
||||
[ABILITY_GOOEY] = _("Gooey"),
|
||||
[ABILITY_AERILATE] = _("Aerilate"),
|
||||
[ABILITY_PARENTAL_BOND] = _("Parental Bond"),
|
||||
[ABILITY_DARK_AURA] = _("Dark Aura"),
|
||||
[ABILITY_FAIRY_AURA] = _("Fairy Aura"),
|
||||
[ABILITY_AURA_BREAK] = _("Aura Break"),
|
||||
[ABILITY_PRIMORDIAL_SEA] = _("Primordial Sea"),
|
||||
[ABILITY_DESOLATE_LAND] = _("Desolate Land"),
|
||||
[ABILITY_DELTA_STREAM] = _("Delta Stream"),
|
||||
[ABILITY_STAMINA] = _("Stamina"),
|
||||
[ABILITY_WIMP_OUT] = _("Wimp Out"),
|
||||
[ABILITY_EMERGENCY_EXIT] = _("Emergency Exit"),
|
||||
[ABILITY_WATER_COMPACTION] = _("Water Compaction"),
|
||||
[ABILITY_MERCILESS] = _("Merciless"),
|
||||
[ABILITY_SHIELDS_DOWN] = _("Shields Down"),
|
||||
[ABILITY_STAKEOUT] = _("Stakeout"),
|
||||
[ABILITY_WATER_BUBBLE] = _("Water Bubble"),
|
||||
[ABILITY_STEELWORKER] = _("Steelworker"),
|
||||
[ABILITY_BERSERK] = _("Berserk"),
|
||||
[ABILITY_SLUSH_RUSH] = _("Slush Rush"),
|
||||
[ABILITY_LONG_REACH] = _("Long Reach"),
|
||||
[ABILITY_LIQUID_VOICE] = _("Liquid Voice"),
|
||||
[ABILITY_TRIAGE] = _("Triage"),
|
||||
[ABILITY_GALVANIZE] = _("Galvanize"),
|
||||
[ABILITY_SURGE_SURFER] = _("Surge Surfer"),
|
||||
[ABILITY_SCHOOLING] = _("Schooling"),
|
||||
[ABILITY_DISGUISE] = _("Disguise"),
|
||||
[ABILITY_BATTLE_BOND] = _("Battle Bond"),
|
||||
[ABILITY_POWER_CONSTRUCT] = _("Power Construct"),
|
||||
[ABILITY_CORROSION] = _("Corrosion"),
|
||||
[ABILITY_COMATOSE] = _("Comatose"),
|
||||
[ABILITY_QUEENLY_MAJESTY] = _("Queenly Majesty"),
|
||||
[ABILITY_INNARDS_OUT] = _("Innards Out"),
|
||||
[ABILITY_DANCER] = _("Dancer"),
|
||||
[ABILITY_BATTERY] = _("Battery"),
|
||||
[ABILITY_FLUFFY] = _("Fluffy"),
|
||||
[ABILITY_DAZZLING] = _("Dazzling"),
|
||||
[ABILITY_SOUL_HEART] = _("Soul-Heart"),
|
||||
[ABILITY_TANGLING_HAIR] = _("Tangling Hair"),
|
||||
[ABILITY_RECEIVER] = _("Receiver"),
|
||||
[ABILITY_POWER_OF_ALCHEMY] = _("Power Of Alchemy"),
|
||||
[ABILITY_BEAST_BOOST] = _("Beast Boost"),
|
||||
[ABILITY_RKS_SYSTEM] = _("RKS System"),
|
||||
[ABILITY_ELECTRIC_SURGE] = _("Electric Surge"),
|
||||
[ABILITY_PSYCHIC_SURGE] = _("Psychic Surge"),
|
||||
[ABILITY_MISTY_SURGE] = _("Misty Surge"),
|
||||
[ABILITY_GRASSY_SURGE] = _("Grassy Surge"),
|
||||
[ABILITY_FULL_METAL_BODY] = _("Full Metal Body"),
|
||||
[ABILITY_SHADOW_SHIELD] = _("Shadow Shield"),
|
||||
[ABILITY_PRISM_ARMOR] = _("Prism Armor"),
|
||||
[ABILITY_NEUROFORCE] = _("Neuroforce"),
|
||||
[ABILITY_INTREPID_SWORD] = _("Intrepid Sword"),
|
||||
[ABILITY_DAUNTLESS_SHIELD] = _("Dauntless Shield"),
|
||||
[ABILITY_LIBERO] = _("Libero"),
|
||||
[ABILITY_BALL_FETCH] = _("Ball Fetch"),
|
||||
[ABILITY_COTTON_DOWN] = _("Cotton Down"),
|
||||
[ABILITY_PROPELLER_TAIL] = _("Propeller Tail"),
|
||||
[ABILITY_MIRROR_ARMOR] = _("Mirror Armor"),
|
||||
[ABILITY_GULP_MISSILE] = _("Gulp Missile"),
|
||||
[ABILITY_STALWART] = _("Stalwart"),
|
||||
[ABILITY_STEAM_ENGINE] = _("Steam Engine"),
|
||||
[ABILITY_PUNK_ROCK] = _("Punk Rock"),
|
||||
[ABILITY_SAND_SPIT] = _("Sand Spit"),
|
||||
[ABILITY_ICE_SCALES] = _("Ice Scales"),
|
||||
[ABILITY_RIPEN] = _("Ripen"),
|
||||
[ABILITY_ICE_FACE] = _("Ice Face"),
|
||||
[ABILITY_POWER_SPOT] = _("Power Spot"),
|
||||
[ABILITY_MIMICRY] = _("Mimicry"),
|
||||
[ABILITY_SCREEN_CLEANER] = _("Screen Cleaner"),
|
||||
[ABILITY_STEELY_SPIRIT] = _("Steely Spirit"),
|
||||
[ABILITY_PERISH_BODY] = _("Perish Body"),
|
||||
[ABILITY_WANDERING_SPIRIT] = _("Wandering Spirit"),
|
||||
[ABILITY_GORILLA_TACTICS] = _("Gorilla Tactics"),
|
||||
[ABILITY_NEUTRALIZING_GAS] = _("Neutralizing Gas"),
|
||||
[ABILITY_PASTEL_VEIL] = _("Pastel Veil"),
|
||||
[ABILITY_HUNGER_SWITCH] = _("Hunger Switch"),
|
||||
[ABILITY_QUICK_DRAW] = _("Quick Draw"),
|
||||
[ABILITY_UNSEEN_FIST] = _("Unseen Fist"),
|
||||
[ABILITY_CURIOUS_MEDICINE] = _("Curious Medicine"),
|
||||
[ABILITY_TRANSISTOR] = _("Transistor"),
|
||||
[ABILITY_DRAGONS_MAW] = _("Dragon's Maw"),
|
||||
[ABILITY_CHILLING_NEIGH] = _("Chilling Neigh"),
|
||||
[ABILITY_GRIM_NEIGH] = _("Grim Neigh"),
|
||||
[ABILITY_AS_ONE_ICE_RIDER] = _("As One"),
|
||||
[ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
|
||||
};
|
||||
#else // 12 characters
|
||||
const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
|
||||
{
|
||||
[ABILITY_NONE] = _("-------"),
|
||||
@ -526,6 +799,7 @@ const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
|
||||
[ABILITY_AS_ONE_ICE_RIDER] = _("As One"),
|
||||
[ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
|
||||
};
|
||||
#endif
|
||||
|
||||
const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] =
|
||||
{
|
||||
|
@ -2479,7 +2479,7 @@ static const u8 sPOLLEN_PUFFDescription[] = _(
|
||||
|
||||
static const u8 sANCHOR_SHOTDescription[] = _(
|
||||
"Strangles the foe with a\n"
|
||||
"chain. The foe can't flinch.");
|
||||
"chain. The foe can't escape.");
|
||||
|
||||
static const u8 sPSYCHIC_TERRAINDescription[] = _(
|
||||
"The ground turns weird for\n"
|
||||
|
Loading…
x
Reference in New Issue
Block a user