Merge branch '_RHH/master' into _RHH/upcoming
# Conflicts: # data/battle_scripts_1.s # include/constants/battle_move_effects.h # src/battle_ai_main.c # src/battle_ai_util.c # src/battle_tv.c # src/data/battle_moves.h # src/data/graphics/pokemon.h
|
@ -23,9 +23,10 @@ body:
|
|||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.7.3 (Latest release)
|
||||
- 1.7.4 (Latest release)
|
||||
- master (default when pulling, unreleased bugfixes)
|
||||
- upcoming (Edge)
|
||||
- 1.7.3
|
||||
- 1.7.2
|
||||
- 1.7.1
|
||||
- 1.7.0
|
||||
|
|
|
@ -23,9 +23,11 @@ body:
|
|||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.7.2 (Latest release)
|
||||
- 1.7.4 (Latest release)
|
||||
- master (default when pulling, unreleased bugfixes)
|
||||
- upcoming (Edge)
|
||||
- 1.7.3
|
||||
- 1.7.2
|
||||
- 1.7.1
|
||||
- 1.7.0
|
||||
- 1.6.2
|
||||
|
|
3
.github/ISSUE_TEMPLATE/04_other_errors.yaml
vendored
|
@ -23,9 +23,10 @@ body:
|
|||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.7.3 (Latest release)
|
||||
- 1.7.4 (Latest release)
|
||||
- master (default when pulling, unreleased bugfixes)
|
||||
- upcoming (Edge)
|
||||
- 1.7.3
|
||||
- 1.7.2
|
||||
- 1.7.1
|
||||
- 1.7.0
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# Pokeemerald-Expansion Changelogs
|
||||
|
||||
## Version 1.7.x
|
||||
### [Version 1.7.4](docs/changelogs/1.7.4.md) - Bugfix Release
|
||||
### [Version 1.7.3](docs/changelogs/1.7.3.md) - Bugfix Release
|
||||
### [Version 1.7.2](docs/changelogs/1.7.2.md) - Bugfix Release
|
||||
### [Version 1.7.1](docs/changelogs/1.7.1.md) - Bugfix Release
|
||||
|
|
|
@ -165,7 +165,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple
|
|||
|
||||
## **How do I update my version of pokeemerald-expansion?**
|
||||
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
|
||||
- Once you have your remote set up, run the command `git pull RHH expansion/1.7.3`.
|
||||
- Once you have your remote set up, run the command `git pull RHH expansion/1.7.4`.
|
||||
|
||||
### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :)
|
||||
|
||||
|
|
|
@ -5286,62 +5286,6 @@ BattleScript_EffectRecoilHP25::
|
|||
incrementgamestat GAME_STAT_USED_STRUGGLE
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectTeeterDance::
|
||||
attackcanceler
|
||||
attackstring
|
||||
ppreduce
|
||||
setbyte gBattlerTarget, 0
|
||||
BattleScript_TeeterDanceLoop::
|
||||
movevaluescleanup
|
||||
jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_TeeterDanceLoopIncrement
|
||||
jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_TeeterDanceOwnTempoPrevents
|
||||
jumpifsubstituteblocks BattleScript_TeeterDanceSubstitutePrevents
|
||||
jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_TeeterDanceAlreadyConfused
|
||||
jumpifhasnohp BS_TARGET, BattleScript_TeeterDanceLoopIncrement
|
||||
accuracycheck BattleScript_TeeterDanceMissed, ACC_CURR_MOVE
|
||||
jumpifsafeguard BattleScript_TeeterDanceSafeguardProtected
|
||||
attackanimation
|
||||
waitanimation
|
||||
seteffectprimary MOVE_EFFECT_CONFUSION
|
||||
resultmessage
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
BattleScript_TeeterDanceDoMoveEndIncrement::
|
||||
moveendto MOVEEND_NEXT_TARGET
|
||||
BattleScript_TeeterDanceLoopIncrement::
|
||||
addbyte gBattlerTarget, 1
|
||||
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TeeterDanceLoop
|
||||
end
|
||||
|
||||
BattleScript_TeeterDanceOwnTempoPrevents::
|
||||
pause B_WAIT_TIME_SHORT
|
||||
printstring STRINGID_PKMNPREVENTSCONFUSIONWITH
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_TeeterDanceDoMoveEndIncrement
|
||||
|
||||
BattleScript_TeeterDanceSafeguardProtected::
|
||||
pause B_WAIT_TIME_SHORT
|
||||
printstring STRINGID_PKMNUSEDSAFEGUARD
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_TeeterDanceDoMoveEndIncrement
|
||||
|
||||
BattleScript_TeeterDanceSubstitutePrevents::
|
||||
pause B_WAIT_TIME_SHORT
|
||||
printstring STRINGID_BUTITFAILED
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_TeeterDanceDoMoveEndIncrement
|
||||
|
||||
BattleScript_TeeterDanceAlreadyConfused::
|
||||
setalreadystatusedmoveattempt BS_ATTACKER
|
||||
pause B_WAIT_TIME_SHORT
|
||||
printstring STRINGID_PKMNALREADYCONFUSED
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_TeeterDanceDoMoveEndIncrement
|
||||
|
||||
BattleScript_TeeterDanceMissed::
|
||||
resultmessage
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_TeeterDanceDoMoveEndIncrement
|
||||
|
||||
BattleScript_EffectMudSport::
|
||||
BattleScript_EffectWaterSport::
|
||||
attackcanceler
|
||||
|
|
68
docs/changelogs/1.7.4.md
Normal file
|
@ -0,0 +1,68 @@
|
|||
# Version 1.7.4
|
||||
|
||||
```md
|
||||
## How to update
|
||||
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
|
||||
- Once you have your remote set up, run the command `git pull RHH expansion/1.Y.Z`.
|
||||
```
|
||||
|
||||
## 🧬 General 🧬
|
||||
### Fixed
|
||||
* HGSS Dex fixes:
|
||||
* Fixed inconsistent list tileset between capped and decapped modes by @ravepossum in https://github.com/rh-hideout/pokeemerald-expansion/pull/4126
|
||||
* Fixed screen select bar popping in too early for area screen by @ravepossum in https://github.com/rh-hideout/pokeemerald-expansion/pull/4094
|
||||
* Fixed Lotad/Seedot house using species weight instead of height by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4195
|
||||
|
||||
## 🐉 Pokémon 🐉
|
||||
### Fixed
|
||||
* Fixed Ogerpon shiny palettes by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4165
|
||||
* Fixed Basculegion back sprite offset by @MelonSpeedruns in https://github.com/rh-hideout/pokeemerald-expansion/pull/4198
|
||||
* Fixed Greninja form animations by @MelonSpeedruns in https://github.com/rh-hideout/pokeemerald-expansion/pull/4198
|
||||
* Fixed compile error when `P_GEN_8_CROSS_EVOS` is enabled but not `P_GEN_9_CROSS_EVOS` due to Ursaluna's cry being labled as Gen 9 by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4210
|
||||
* Fixed Curly Tatsugiri and Green Plumage Squawkabilly icons not showing up properly in later versions of Porymap by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4212
|
||||
|
||||
## ⚔️ Battle General ⚔️ ##
|
||||
### Fixed
|
||||
* Fixed disobedience not resetting multihit moves by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4133
|
||||
* Fixed switch in interactions with hold effects abilities by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4091
|
||||
* Download activating on an empty field.
|
||||
* Intimidate activating on an empty field and not activating upon new opponent switching in.
|
||||
* Primal Reversion not happening immediately upon switching in from U-turn.
|
||||
* Held items not being triggered when switching in fron U-turn and Intimidate being triggered beforehand.
|
||||
* Fixed LastUsedBall issues not being saved and DisplayBall not being shown by @Wesmaster in https://github.com/rh-hideout/pokeemerald-expansion/pull/4209
|
||||
|
||||
## 🤹 Moves 🤹
|
||||
### Fixed
|
||||
* Fixed move animations crashing on some emulators because of division by zero by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4121
|
||||
* Flip Turn, Anchor Shot, Snipe Shot and Incinerate were affected by this.
|
||||
* Fixed Eerie Spell consuming double PP and showing its message twice by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4127
|
||||
* Fixed Fairy Lock animation by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4111
|
||||
|
||||
## 🎭 Abilities 🎭
|
||||
### Added
|
||||
* Added Gen 5+ config for Soundproof no longer preventing Uproar status by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4174
|
||||
### Fixed
|
||||
* Fixed Mycelium Might speed calculation by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4146
|
||||
* Fixed Stench triggering on non-damaging attacks by @HungryPickle in https://github.com/rh-hideout/pokeemerald-expansion/pull/4159
|
||||
* Fixed Disguise not ending the battle in the correct form by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4167
|
||||
* Fixed Opportunist accumulating stat changes by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4168
|
||||
|
||||
## 🧶 Items 🧶
|
||||
### Fixed
|
||||
* Kee Berry fixes by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4149
|
||||
* Fixed triggering if the holder does a physical attack instead of receiving it.
|
||||
* Fixed it boosting the target's defense if the attacker holds a Kee Berry, while still displaying the boost animation for the holder.
|
||||
* Fixed poison-healing items not reseting Toxic Counter by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4135
|
||||
|
||||
## 🧹 Other Cleanup 🧹
|
||||
### Changed
|
||||
* Clean up space/tabs difference by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4163
|
||||
* Deleted a space by @cmy2008 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4194
|
||||
|
||||
## New Contributors
|
||||
* @cmy2008 made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4194
|
||||
* @MelonSpeedruns made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4198
|
||||
|
||||
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.7.3...expansion/1.7.4
|
||||
|
||||
<!--Last PR: 4212-->
|
0
graphics/pokemon/squawkabilly/green_plumage/icon.png → graphics/pokemon/squawkabilly/icon.png
Executable file → Normal file
Before Width: | Height: | Size: 384 B After Width: | Height: | Size: 384 B |
Before Width: | Height: | Size: 449 B After Width: | Height: | Size: 449 B |
Before Width: | Height: | Size: 459 B After Width: | Height: | Size: 459 B |
0
graphics/pokemon/tatsugiri/curly/icon.png → graphics/pokemon/tatsugiri/icon.png
Executable file → Normal file
Before Width: | Height: | Size: 334 B After Width: | Height: | Size: 334 B |
|
@ -136,7 +136,7 @@ bool32 HasSnatchAffectedMove(u32 battler);
|
|||
// status checks
|
||||
bool32 AI_CanBeBurned(u32 battler, u32 ability);
|
||||
bool32 AI_CanGetFrostbite(u32 battler, u32 ability);
|
||||
bool32 AI_CanBeConfused(u32 battler, u32 ability);
|
||||
bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability);
|
||||
bool32 AI_CanSleep(u32 battler, u32 ability);
|
||||
bool32 IsBattlerIncapacitated(u32 battler, u32 ability);
|
||||
bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove);
|
||||
|
|
|
@ -681,7 +681,6 @@ extern const u8 BattleScript_EffectImprison[];
|
|||
extern const u8 BattleScript_EffectRefresh[];
|
||||
extern const u8 BattleScript_EffectGrudge[];
|
||||
extern const u8 BattleScript_EffectSnatch[];
|
||||
extern const u8 BattleScript_EffectTeeterDance[];
|
||||
extern const u8 BattleScript_EffectHitEscape[];
|
||||
extern const u8 BattleScript_EffectMudSport[];
|
||||
extern const u8 BattleScript_EffectTickle[];
|
||||
|
|
|
@ -164,7 +164,6 @@ enum {
|
|||
EFFECT_GRUDGE,
|
||||
EFFECT_SNATCH,
|
||||
EFFECT_LOW_KICK,
|
||||
EFFECT_TEETER_DANCE,
|
||||
EFFECT_HIT_ESCAPE,
|
||||
EFFECT_MUD_SPORT,
|
||||
EFFECT_WEATHER_BALL,
|
||||
|
|
|
@ -626,9 +626,9 @@ enum {
|
|||
#if P_FAMILY_TEDDIURSA
|
||||
CRY_TEDDIURSA,
|
||||
CRY_URSARING,
|
||||
#if P_GEN_9_CROSS_EVOS
|
||||
#if P_GEN_8_CROSS_EVOS
|
||||
CRY_URSALUNA,
|
||||
#endif //P_GEN_9_CROSS_EVOS
|
||||
#endif //P_GEN_8_CROSS_EVOS
|
||||
#endif //P_FAMILY_TEDDIURSA
|
||||
#if P_FAMILY_SLUGMA
|
||||
CRY_SLUGMA,
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#define EXPANSION_VERSION_MAJOR 1
|
||||
#define EXPANSION_VERSION_MINOR 7
|
||||
#define EXPANSION_VERSION_PATCH 3
|
||||
#define EXPANSION_VERSION_PATCH 4
|
||||
|
||||
// FALSE if this this version of Expansion is not a tagged commit, i.e.
|
||||
// it contains unreleased changes.
|
||||
|
|
|
@ -623,9 +623,9 @@ gCryTable::
|
|||
.if P_FAMILY_TEDDIURSA == TRUE
|
||||
cry Cry_Teddiursa
|
||||
cry Cry_Ursaring
|
||||
.if P_GEN_9_CROSS_EVOS == TRUE
|
||||
.if P_GEN_8_CROSS_EVOS == TRUE
|
||||
cry Cry_Ursaluna
|
||||
.endif @ P_GEN_9_CROSS_EVOS
|
||||
.endif @ P_GEN_8_CROSS_EVOS
|
||||
.endif @ P_FAMILY_TEDDIURSA
|
||||
.if P_FAMILY_SLUGMA == TRUE
|
||||
cry Cry_Slugma
|
||||
|
@ -3049,9 +3049,9 @@ gCryTable_Reverse::
|
|||
.if P_FAMILY_TEDDIURSA == TRUE
|
||||
cry_reverse Cry_Teddiursa
|
||||
cry_reverse Cry_Ursaring
|
||||
.if P_GEN_9_CROSS_EVOS == TRUE
|
||||
.if P_GEN_8_CROSS_EVOS == TRUE
|
||||
cry_reverse Cry_Ursaluna
|
||||
.endif @ P_GEN_9_CROSS_EVOS
|
||||
.endif @ P_GEN_8_CROSS_EVOS
|
||||
.endif @ P_FAMILY_TEDDIURSA
|
||||
.if P_FAMILY_SLUGMA == TRUE
|
||||
cry_reverse Cry_Slugma
|
||||
|
|
|
@ -1844,11 +1844,11 @@ Cry_Teddiursa::
|
|||
Cry_Ursaring::
|
||||
.incbin "sound/direct_sound_samples/cries/ursaring.bin"
|
||||
|
||||
.if P_GEN_9_CROSS_EVOS == TRUE
|
||||
.if P_GEN_8_CROSS_EVOS == TRUE
|
||||
.align 2
|
||||
Cry_Ursaluna::
|
||||
.incbin "sound/direct_sound_samples/cries/ursaluna.bin"
|
||||
.endif @ P_GEN_9_CROSS_EVOS
|
||||
.endif @ P_GEN_8_CROSS_EVOS
|
||||
.endif @ P_FAMILY_TEDDIURSA
|
||||
|
||||
.if P_FAMILY_SLUGMA == TRUE
|
||||
|
|
|
@ -1904,19 +1904,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
|||
if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75)
|
||||
ADJUST_SCORE(-6);
|
||||
break;
|
||||
case EFFECT_TEETER_DANCE:
|
||||
if (((gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
|
||||
|| (!DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move) && aiData->abilities[battlerDef] == ABILITY_OWN_TEMPO)
|
||||
|| (IsBattlerGrounded(battlerDef) && AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN))
|
||||
|| (DoesSubstituteBlockMove(battlerAtk, battlerDef, move)))
|
||||
&& ((gBattleMons[BATTLE_PARTNER(battlerDef)].status2 & STATUS2_CONFUSION)
|
||||
|| (!DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move) && aiData->abilities[BATTLE_PARTNER(battlerDef)] == ABILITY_OWN_TEMPO)
|
||||
|| (IsBattlerGrounded(BATTLE_PARTNER(battlerDef)) && AI_IsTerrainAffected(BATTLE_PARTNER(battlerDef), STATUS_FIELD_MISTY_TERRAIN))
|
||||
|| (DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), move))))
|
||||
{
|
||||
ADJUST_SCORE(-10);
|
||||
}
|
||||
break;
|
||||
case EFFECT_TRANSFORM:
|
||||
if (gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED
|
||||
|| (gBattleMons[battlerDef].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE))) //Leave out Illusion b/c AI is supposed to be fooled
|
||||
|
@ -2954,7 +2941,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
|||
case EFFECT_SWAGGER:
|
||||
if (gBattleMons[battlerAtkPartner].statStages[STAT_ATK] < MAX_STAT_STAGE
|
||||
&& HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)
|
||||
&& (!AI_CanBeConfused(battlerAtkPartner, TRUE)
|
||||
&& (!AI_CanBeConfused(battlerAtk, battlerAtkPartner, move, TRUE)
|
||||
|| atkPartnerHoldEffect == HOLD_EFFECT_CURE_CONFUSION
|
||||
|| atkPartnerHoldEffect == HOLD_EFFECT_CURE_STATUS))
|
||||
{
|
||||
|
@ -2964,7 +2951,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
|||
case EFFECT_FLATTER:
|
||||
if (gBattleMons[battlerAtkPartner].statStages[STAT_SPATK] < MAX_STAT_STAGE
|
||||
&& HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_SPECIAL)
|
||||
&& (!AI_CanBeConfused(battlerAtkPartner, TRUE)
|
||||
&& (!AI_CanBeConfused(battlerAtk, battlerAtkPartner, move, TRUE)
|
||||
|| atkPartnerHoldEffect == HOLD_EFFECT_CURE_CONFUSION
|
||||
|| atkPartnerHoldEffect == HOLD_EFFECT_CURE_STATUS))
|
||||
{
|
||||
|
@ -4773,7 +4760,6 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
|||
case EFFECT_WILL_O_WISP:
|
||||
case EFFECT_INGRAIN:
|
||||
case EFFECT_IMPRISON:
|
||||
case EFFECT_TEETER_DANCE:
|
||||
case EFFECT_TICKLE:
|
||||
case EFFECT_COSMIC_POWER:
|
||||
case EFFECT_BULK_UP:
|
||||
|
@ -4858,7 +4844,6 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
|||
case EFFECT_MIRROR_COAT:
|
||||
case EFFECT_FOCUS_PUNCH:
|
||||
case EFFECT_REVENGE:
|
||||
case EFFECT_TEETER_DANCE:
|
||||
case EFFECT_FILLET_AWAY:
|
||||
if (Random() & 1)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
|
|
|
@ -1134,7 +1134,6 @@ bool32 IsConfusionMoveEffect(u32 moveEffect)
|
|||
case EFFECT_CONFUSE:
|
||||
case EFFECT_SWAGGER:
|
||||
case EFFECT_FLATTER:
|
||||
case EFFECT_TEETER_DANCE:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
|
@ -2600,25 +2599,27 @@ bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 AI_CanBeConfused(u32 battler, u32 ability)
|
||||
bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability)
|
||||
{
|
||||
if ((gBattleMons[battler].status2 & STATUS2_CONFUSION)
|
||||
|| (ability == ABILITY_OWN_TEMPO)
|
||||
|| (IsBattlerGrounded(battler) && (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)))
|
||||
if ((gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
|
||||
|| (ability == ABILITY_OWN_TEMPO && !DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move))
|
||||
|| (IsBattlerGrounded(battlerDef) && (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN))
|
||||
|| gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD
|
||||
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 AI_CanConfuse(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove)
|
||||
{
|
||||
if (!AI_CanBeConfused(battlerDef, defAbility)
|
||||
|| AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] == AI_EFFECTIVENESS_x0
|
||||
|| gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD
|
||||
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
|
||||
|| DoesPartnerHaveSameMoveEffect(battlerAtkPartner, battlerDef, move, partnerMove))
|
||||
{
|
||||
if (gMovesInfo[move].target == MOVE_TARGET_FOES_AND_ALLY
|
||||
&& AI_CanBeConfused(battlerAtk, battlerDef, move, defAbility)
|
||||
&& !AI_CanBeConfused(battlerAtk, BATTLE_PARTNER(battlerDef), move, AI_DATA->abilities[BATTLE_PARTNER(battlerDef)]))
|
||||
return FALSE;
|
||||
|
||||
if (!AI_CanBeConfused(battlerAtk, battlerDef, move, defAbility)
|
||||
|| DoesPartnerHaveSameMoveEffect(battlerAtkPartner, battlerDef, move, partnerMove))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -3468,9 +3468,14 @@ void TryAddLastUsedBallItemSprites(void)
|
|||
|| (gLastThrownBall != 0 && !CheckBagHasItem(gLastThrownBall, 1)))
|
||||
{
|
||||
// we're out of the last used ball, so just set it to the first ball in the bag
|
||||
u16 firstBall;
|
||||
|
||||
// we have to compact the bag first bc it is typically only compacted when you open it
|
||||
CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]);
|
||||
gBallToDisplay = gBagPockets[BALLS_POCKET].itemSlots[0].itemId;
|
||||
|
||||
firstBall = gBagPockets[BALLS_POCKET].itemSlots[0].itemId;
|
||||
if (firstBall > ITEM_NONE)
|
||||
gBallToDisplay = firstBall;
|
||||
}
|
||||
|
||||
if (!CanThrowLastUsedBall())
|
||||
|
|
|
@ -4990,7 +4990,7 @@ static void TurnValuesCleanUp(bool8 var0)
|
|||
else
|
||||
{
|
||||
memset(&gProtectStructs[i], 0, sizeof(struct ProtectStruct));
|
||||
memset(&gQueuedStatBoosts[i], 0, sizeof(gQueuedStatBoosts));
|
||||
memset(&gQueuedStatBoosts[i], 0, sizeof(struct QueuedStatBoost));
|
||||
|
||||
if (gDisableStructs[i].isFirstTurn)
|
||||
gDisableStructs[i].isFirstTurn--;
|
||||
|
|
|
@ -1052,12 +1052,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
|
|||
.battleTvScore = 1,
|
||||
},
|
||||
|
||||
[EFFECT_TEETER_DANCE] =
|
||||
{
|
||||
.battleScript = BattleScript_EffectTeeterDance,
|
||||
.battleTvScore = 6,
|
||||
},
|
||||
|
||||
[EFFECT_HIT_ESCAPE] =
|
||||
{
|
||||
.battleScript = BattleScript_EffectHitEscape,
|
||||
|
|
|
@ -12053,9 +12053,9 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
|
|||
// const u8 gMonFootprint_Squawkabilly[] = INCBIN_U8("graphics/pokemon/squawkabilly/footprint.1bpp");
|
||||
#endif //P_FOOTPRINTS
|
||||
|
||||
const u32 gMonPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/green_plumage/normal.gbapal.lz");
|
||||
const u32 gMonShinyPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/green_plumage/shiny.gbapal.lz");
|
||||
const u8 gMonIcon_SquawkabillyGreenPlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/green_plumage/icon.4bpp");
|
||||
const u32 gMonPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/normal.gbapal.lz");
|
||||
const u32 gMonShinyPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/shiny.gbapal.lz");
|
||||
const u8 gMonIcon_SquawkabillyGreenPlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/icon.4bpp");
|
||||
|
||||
const u32 gMonPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/normal.gbapal.lz");
|
||||
const u32 gMonShinyPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/shiny.gbapal.lz");
|
||||
|
@ -12541,11 +12541,11 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
|
|||
#endif //P_FAMILY_DONDOZO
|
||||
|
||||
#if P_FAMILY_TATSUGIRI
|
||||
const u32 gMonFrontPic_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/front.4bpp.lz");
|
||||
const u32 gMonPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/normal.gbapal.lz");
|
||||
const u32 gMonBackPic_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/back.4bpp.lz");
|
||||
const u32 gMonShinyPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/shiny.gbapal.lz");
|
||||
const u8 gMonIcon_TatsugiriCurly[] = INCBIN_U8("graphics/pokemon/tatsugiri/curly/icon.4bpp");
|
||||
const u32 gMonFrontPic_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/front.4bpp.lz");
|
||||
const u32 gMonPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/normal.gbapal.lz");
|
||||
const u32 gMonBackPic_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/back.4bpp.lz");
|
||||
const u32 gMonShinyPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/shiny.gbapal.lz");
|
||||
const u8 gMonIcon_TatsugiriCurly[] = INCBIN_U8("graphics/pokemon/tatsugiri/icon.4bpp");
|
||||
#if P_FOOTPRINTS
|
||||
// const u8 gMonFootprint_Tatsugiri[] = INCBIN_U8("graphics/pokemon/tatsugiri/footprint.1bpp");
|
||||
#endif //P_FOOTPRINTS
|
||||
|
|
|
@ -7314,7 +7314,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
|
|||
.description = COMPOUND_STRING(
|
||||
"Confuses all Pokémon on\n"
|
||||
"the scene."),
|
||||
.effect = EFFECT_TEETER_DANCE,
|
||||
.effect = EFFECT_CONFUSE,
|
||||
.power = 0,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
|
|
35
test/battle/ability/dancer.c
Normal file
|
@ -0,0 +1,35 @@
|
|||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Dancer can copy a dance move immediately after it was used and allow the user of Dancer to still use its move")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_QUIVER_DANCE].danceMove == TRUE);
|
||||
PLAYER(SPECIES_WOBBUFFET)
|
||||
OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_QUIVER_DANCE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_QUIVER_DANCE, player);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
ABILITY_POPUP(opponent, ABILITY_DANCER);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_QUIVER_DANCE, opponent);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); // Same turn
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Dancer can copy Teeter Dance")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_TEETER_DANCE].danceMove == TRUE);
|
||||
PLAYER(SPECIES_WOBBUFFET)
|
||||
OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Item(ITEM_LUM_BERRY); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_TEETER_DANCE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, player);
|
||||
ABILITY_POPUP(opponent, ABILITY_DANCER);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, opponent);
|
||||
}
|
||||
}
|
58
test/battle/move_effect/confuse.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_TEETER_DANCE].effect == EFFECT_CONFUSE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Teeter Dance confuses target")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_TEETER_DANCE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, player);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent);
|
||||
MESSAGE("Foe Wobbuffet became confused!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Teeter Dance confusion is blocked by Own Tempo")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_TEETER_DANCE); }
|
||||
} SCENE {
|
||||
ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO);
|
||||
NONE_OF {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, player);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent);
|
||||
MESSAGE("Foe Wobbuffet became confused!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Teeter Dance can confuse foes and allies")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_TEETER_DANCE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, playerLeft);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft);
|
||||
MESSAGE("Foe Wobbuffet became confused!");
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, playerRight);
|
||||
MESSAGE("Wynaut became confused!");
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight);
|
||||
MESSAGE("Foe Wynaut became confused!");
|
||||
}
|
||||
}
|