From f30a9542eebb2db4fb7245b324fea649787b8352 Mon Sep 17 00:00:00 2001 From: MissingNoL Date: Thu, 27 May 2021 22:21:55 -0700 Subject: [PATCH 01/31] Problem: Photon Geyser is calculating as Shell Side Arm?? Needs: Poison effect, contact move for Shell Side Arm --- asm/macros/battle_script.inc | 8 ++++ data/battle_scripts_1.s | 8 ++++ include/battle.h | 2 + include/constants/battle_move_effects.h | 4 +- include/constants/battle_script_commands.h | 2 + src/battle_main.c | 3 ++ src/battle_script_commands.c | 49 ++++++++++++++++++++++ src/battle_util.c | 7 +++- src/data/battle_moves.h | 10 ++--- 9 files changed, 85 insertions(+), 8 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 9fa3fe0c32..b5d21abc4c 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1726,6 +1726,14 @@ .4byte \ptr .endm + .macro photongeysercheck + various BS_ATTACKER, VARIOUS_PHOTON_GEYSER_CHECK + .endm + + .macro shellsidearmcheck + various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK + .endm + .macro trysetfairylock ptr:req various BS_ATTACKER, VARIOUS_TRY_FAIRY_LOCK .4byte \ptr diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 77eddc8ab6..5445839619 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -367,6 +367,14 @@ gBattleScriptsForMoveEffects:: @ 82D86A8 .4byte BattleScript_EffectFairyLock .4byte BattleScript_EffectAllySwitch .4byte BattleScript_EffectSleepHit + .4byte BattleScript_EffectPhotonGeyser + .4byte BattleScript_EffectShellSideArm + +BattleScript_EffectShellSideArm: + shellsidearmcheck + +BattleScript_EffectPhotonGeyser: + photongeysercheck BattleScript_EffectSleepHit: setmoveeffect MOVE_EFFECT_SLEEP diff --git a/include/battle.h b/include/battle.h index 82a9175388..2195e0a21c 100644 --- a/include/battle.h +++ b/include/battle.h @@ -858,4 +858,6 @@ extern u8 gBattleControllerData[MAX_BATTLERS_COUNT]; extern bool8 gHasFetchedBall; extern u8 gLastUsedBall; +extern bool8 gSwapDamageCategory; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + #endif // GUARD_BATTLE_H diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 74418d2c73..b9cf928542 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -351,7 +351,9 @@ #define EFFECT_FAIRY_LOCK 345 #define EFFECT_ALLY_SWITCH 346 #define EFFECT_SLEEP_HIT 347 // Relic Song +#define EFFECT_PHOTON_GEYSER 348 +#define EFFECT_SHELL_SIDE_ARM 349 -#define NUM_BATTLE_MOVE_EFFECTS 348 +#define NUM_BATTLE_MOVE_EFFECTS 350 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index faaf8f17e0..28ba1a5d48 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -173,6 +173,8 @@ #define VARIOUS_DESTROY_ABILITY_POPUP 102 #define VARIOUS_TOTEM_BOOST 103 #define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 104 +#define VARIOUS_PHOTON_GEYSER_CHECK 105 +#define VARIOUS_SHELL_SIDE_ARM_CHECK 106 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_main.c b/src/battle_main.c index 77470246f2..739d33a3ea 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -229,6 +229,7 @@ EWRAM_DATA u16 gPartnerSpriteId = 0; EWRAM_DATA struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA bool8 gHasFetchedBall = FALSE; EWRAM_DATA u8 gLastUsedBall = 0; +EWRAM_DATA bool8 gSwapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky // IWRAM common vars void (*gPreBattleCallback1)(void); @@ -2928,6 +2929,8 @@ static void BattleStartClearSetData(void) gBattleStruct->arenaLostOpponentMons = 0; gBattleStruct->mega.triggerSpriteId = 0xFF; + + gSwapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky } void SwitchInClearSetData(void) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fc0eedcbc4..2a761e5c6c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7126,6 +7126,55 @@ static void Cmd_various(void) switch (gBattlescriptCurrInstr[2]) { + case VARIOUS_PHOTON_GEYSER_CHECK: + { + u32 attStat = gBattleMons[gActiveBattler].attack; + u8 atkStage = gBattleMons[gActiveBattler].statStages[STAT_ATK]; + u32 spaStat = gBattleMons[gActiveBattler].spAttack; + + attStat *= gStatStageRatios[atkStage][0]; + attStat /= gStatStageRatios[atkStage][1]; + + atkStage = gBattleMons[gActiveBattler].statStages[STAT_SPATK]; + spaStat *= gStatStageRatios[atkStage][0]; + spaStat /= gStatStageRatios[atkStage][1]; + + if (attStat > spaStat) + gSwapDamageCategory = TRUE; + } + case VARIOUS_SHELL_SIDE_ARM_CHECK: // according to DaWoblefet, 0% chance GameFreak actually checks this way, but this is the only functional explanation at the moment + { + u32 attStat = gBattleMons[gBattlerAttacker].attack; + u8 atkStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; + u32 attStatDef = gBattleMons[gBattlerTarget].attack; + u32 physical; + + u32 spaStat = gBattleMons[gBattlerAttacker].spAttack; + u32 spaStatDef = gBattleMons[gBattlerTarget].spAttack; + u32 special; + + attStat *= gStatStageRatios[atkStage][0]; + attStat /= gStatStageRatios[atkStage][1]; + + atkStage = gBattleMons[gBattlerTarget].statStages[STAT_ATK]; + attStatDef *= gStatStageRatios[atkStage][0]; + attStatDef /= gStatStageRatios[atkStage][1]; + + physical = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * 90 * attStat) / attStatDef) / 50); + + atkStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; + spaStat *= gStatStageRatios[atkStage][0]; + spaStat /= gStatStageRatios[atkStage][1]; + + atkStage = gBattleMons[gBattlerTarget].statStages[STAT_SPATK]; + spaStatDef *= gStatStageRatios[atkStage][0]; + spaStatDef /= gStatStageRatios[atkStage][1]; + + special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * 90 * spaStat) / spaStatDef) / 50); + + if (((physical > special) || (physical == special && (Random() % 2) == 0))) + gSwapDamageCategory = TRUE; + } // Roar will fail in a double wild battle when used by the player against one of the two alive wild mons. // Also when an opposing wild mon uses it againt its partner. case VARIOUS_JUMP_IF_ROAR_FAILS: diff --git a/src/battle_util.c b/src/battle_util.c index 07c1500666..e657a4e960 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8367,8 +8367,11 @@ bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId) u8 GetBattleMoveSplit(u32 moveId) { if (IS_MOVE_STATUS(moveId) || B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) - return gBattleMoves[moveId].split; - else if (gBattleMoves[moveId].type < TYPE_MYSTERY) + if (gSwapDamageCategory == TRUE) // Photon Geyser, Shell Side Arm, Light That Burns the Sky + return SPLIT_PHYSICAL; + else + return gBattleMoves[moveId].split; + else if (gBattleMoves[moveId].type < TYPE_MYSTERY || gSwapDamageCategory == TRUE) // Photon Geyser, Shell Side Arm, Light That Burns the Sky return SPLIT_PHYSICAL; else return SPLIT_SPECIAL; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 61050e44fd..0e27bb5885 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -10343,15 +10343,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_PHOTON_GEYSER] = { - .effect = EFFECT_PLACEHOLDER, // Needs a custom move effect + .effect = EFFECT_PHOTON_GEYSER, .power = 100, .type = TYPE_PSYCHIC, .accuracy = 100, .pp = 5, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_SPECIAL, }, @@ -11178,12 +11178,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_SHELL_SIDE_ARM] = { - .effect = EFFECT_PLACEHOLDER, //TODO + .effect = EFFECT_SHELL_SIDE_ARM, .power = 90, .type = TYPE_POISON, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, From 0f09055cfea6a1faf43c7775f7ed7e19aada1536 Mon Sep 17 00:00:00 2001 From: MissingNoL Date: Fri, 28 May 2021 11:11:03 -0700 Subject: [PATCH 02/31] Fixes and added Poison chance to Shell Side Arm (needs contact on physical) --- data/battle_scripts_1.s | 3 ++ src/battle_script_commands.c | 100 ++++++++++++++++++----------------- src/battle_util.c | 9 ++-- src/data/battle_moves.h | 4 +- 4 files changed, 60 insertions(+), 56 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5445839619..795518380f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -372,9 +372,12 @@ gBattleScriptsForMoveEffects:: @ 82D86A8 BattleScript_EffectShellSideArm: shellsidearmcheck + setmoveeffect MOVE_EFFECT_POISON + goto BattleScript_EffectHit BattleScript_EffectPhotonGeyser: photongeysercheck + goto BattleScript_EffectHit BattleScript_EffectSleepHit: setmoveeffect MOVE_EFFECT_SLEEP diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2a761e5c6c..e387423bc4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7126,55 +7126,6 @@ static void Cmd_various(void) switch (gBattlescriptCurrInstr[2]) { - case VARIOUS_PHOTON_GEYSER_CHECK: - { - u32 attStat = gBattleMons[gActiveBattler].attack; - u8 atkStage = gBattleMons[gActiveBattler].statStages[STAT_ATK]; - u32 spaStat = gBattleMons[gActiveBattler].spAttack; - - attStat *= gStatStageRatios[atkStage][0]; - attStat /= gStatStageRatios[atkStage][1]; - - atkStage = gBattleMons[gActiveBattler].statStages[STAT_SPATK]; - spaStat *= gStatStageRatios[atkStage][0]; - spaStat /= gStatStageRatios[atkStage][1]; - - if (attStat > spaStat) - gSwapDamageCategory = TRUE; - } - case VARIOUS_SHELL_SIDE_ARM_CHECK: // according to DaWoblefet, 0% chance GameFreak actually checks this way, but this is the only functional explanation at the moment - { - u32 attStat = gBattleMons[gBattlerAttacker].attack; - u8 atkStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; - u32 attStatDef = gBattleMons[gBattlerTarget].attack; - u32 physical; - - u32 spaStat = gBattleMons[gBattlerAttacker].spAttack; - u32 spaStatDef = gBattleMons[gBattlerTarget].spAttack; - u32 special; - - attStat *= gStatStageRatios[atkStage][0]; - attStat /= gStatStageRatios[atkStage][1]; - - atkStage = gBattleMons[gBattlerTarget].statStages[STAT_ATK]; - attStatDef *= gStatStageRatios[atkStage][0]; - attStatDef /= gStatStageRatios[atkStage][1]; - - physical = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * 90 * attStat) / attStatDef) / 50); - - atkStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; - spaStat *= gStatStageRatios[atkStage][0]; - spaStat /= gStatStageRatios[atkStage][1]; - - atkStage = gBattleMons[gBattlerTarget].statStages[STAT_SPATK]; - spaStatDef *= gStatStageRatios[atkStage][0]; - spaStatDef /= gStatStageRatios[atkStage][1]; - - special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * 90 * spaStat) / spaStatDef) / 50); - - if (((physical > special) || (physical == special && (Random() % 2) == 0))) - gSwapDamageCategory = TRUE; - } // Roar will fail in a double wild battle when used by the player against one of the two alive wild mons. // Also when an opposing wild mon uses it againt its partner. case VARIOUS_JUMP_IF_ROAR_FAILS: @@ -8429,6 +8380,57 @@ static void Cmd_various(void) gBattlescriptCurrInstr += 7; // exit if loop failed (failsafe) } return; + case VARIOUS_PHOTON_GEYSER_CHECK: + { + u32 attStat = gBattleMons[gActiveBattler].attack; + u8 atkStage = gBattleMons[gActiveBattler].statStages[STAT_ATK]; + u32 spaStat = gBattleMons[gActiveBattler].spAttack; + + attStat *= gStatStageRatios[atkStage][0]; + attStat /= gStatStageRatios[atkStage][1]; + + atkStage = gBattleMons[gActiveBattler].statStages[STAT_SPATK]; + spaStat *= gStatStageRatios[atkStage][0]; + spaStat /= gStatStageRatios[atkStage][1]; + + if (attStat > spaStat) + gSwapDamageCategory = TRUE; + break; + } + case VARIOUS_SHELL_SIDE_ARM_CHECK: // 0% chance GameFreak actually checks this way according to DaWobblefet, but this is the only functional explanation at the moment + { + u32 attStat = gBattleMons[gBattlerAttacker].attack; + u8 atkStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; + u32 attStatDef = gBattleMons[gBattlerTarget].attack; + u32 physical; + + u32 spaStat = gBattleMons[gBattlerAttacker].spAttack; + u32 spaStatDef = gBattleMons[gBattlerTarget].spAttack; + u32 special; + + attStat *= gStatStageRatios[atkStage][0]; + attStat /= gStatStageRatios[atkStage][1]; + + atkStage = gBattleMons[gBattlerTarget].statStages[STAT_ATK]; + attStatDef *= gStatStageRatios[atkStage][0]; + attStatDef /= gStatStageRatios[atkStage][1]; + + physical = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * 90 * attStat) / attStatDef) / 50); + + atkStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; + spaStat *= gStatStageRatios[atkStage][0]; + spaStat /= gStatStageRatios[atkStage][1]; + + atkStage = gBattleMons[gBattlerTarget].statStages[STAT_SPATK]; + spaStatDef *= gStatStageRatios[atkStage][0]; + spaStatDef /= gStatStageRatios[atkStage][1]; + + special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * 90 * spaStat) / spaStatDef) / 50); + + if (((physical > special) || (physical == special && (Random() % 2) == 0))) + gSwapDamageCategory = TRUE; + break; + } } gBattlescriptCurrInstr += 3; diff --git a/src/battle_util.c b/src/battle_util.c index e657a4e960..5703770021 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8366,12 +8366,11 @@ bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId) u8 GetBattleMoveSplit(u32 moveId) { + if (gSwapDamageCategory == TRUE) // Photon Geyser, Shell Side Arm, Light That Burns the Sky + return SPLIT_PHYSICAL; if (IS_MOVE_STATUS(moveId) || B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) - if (gSwapDamageCategory == TRUE) // Photon Geyser, Shell Side Arm, Light That Burns the Sky - return SPLIT_PHYSICAL; - else - return gBattleMoves[moveId].split; - else if (gBattleMoves[moveId].type < TYPE_MYSTERY || gSwapDamageCategory == TRUE) // Photon Geyser, Shell Side Arm, Light That Burns the Sky + return gBattleMoves[moveId].split; + else if (gBattleMoves[moveId].type < TYPE_MYSTERY) return SPLIT_PHYSICAL; else return SPLIT_SPECIAL; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 0e27bb5885..89b2e29aac 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -10348,7 +10348,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .type = TYPE_PSYCHIC, .accuracy = 100, .pp = 5, - .secondaryEffectChance = 100, + .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, @@ -11183,7 +11183,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .type = TYPE_POISON, .accuracy = 100, .pp = 10, - .secondaryEffectChance = 100, + .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, From c4b700a8e7e9298610bf439380dc86383f0b0f22 Mon Sep 17 00:00:00 2001 From: MissingNoL Date: Sat, 5 Jun 2021 13:47:05 -0700 Subject: [PATCH 03/31] Only thing left is making IsMoveMakingContact work when hitting King's Shield, etc. --- src/battle_script_commands.c | 2 +- src/battle_util.c | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e387423bc4..422738795c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4708,7 +4708,7 @@ static void Cmd_moveend(void) switch (gBattleScripting.moveendState) { case MOVEEND_PROTECT_LIKE_EFFECT: - if (gBattleMoves[gCurrentMove].flags & FLAG_MAKES_CONTACT) + if (gBattleMoves[gCurrentMove].flags & FLAG_MAKES_CONTACT) // needs to be IsMoveMakingContact, but this file does not reference include/battle_util.h or src/battle_util.c { if (gProtectStructs[gBattlerTarget].spikyShielded && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { diff --git a/src/battle_util.c b/src/battle_util.c index 5703770021..fb41105913 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4556,7 +4556,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && TARGET_TURN_DAMAGED - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + && (IsMoveMakingContact(move, gBattlerAttacker))) { switch (gBattleMons[gBattlerAttacker].ability) { @@ -4745,7 +4745,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE) && GetBattlerAbility(gBattlerAttacker) != ABILITY_WATER_VEIL @@ -4764,7 +4764,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && gBattleMons[gBattlerTarget].hp != 0 && (Random() % 3) == 0 @@ -4832,7 +4832,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED && IsBattlerAlive(battler) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (IsMoveMakingContact(move, gBattlerAttacker)) && !(gStatuses3[gBattlerAttacker] & STATUS3_PERISH_SONG)) { if (!(gStatuses3[battler] & STATUS3_PERISH_SONG)) @@ -6665,7 +6665,10 @@ u32 GetBattlerHoldEffectParam(u8 battlerId) bool32 IsMoveMakingContact(u16 move, u8 battlerAtk) { if (!(gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) - return FALSE; + if (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gSwapDamageCategory == TRUE) + return TRUE; + else + return FALSE; else if (GetBattlerAbility(battlerAtk) == ABILITY_LONG_REACH) return FALSE; else if (GetBattlerHoldEffect(battlerAtk, TRUE) == HOLD_EFFECT_PROTECTIVE_PADS) @@ -7135,7 +7138,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(1.3)); break; case ABILITY_TOUGH_CLAWS: - if (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + if (IsMoveMakingContact(move, battlerAtk)) MulModifier(&modifier, UQ_4_12(1.3)); break; case ABILITY_STRONG_JAW: From 517763bc9f31721813eb283b6fadce88e23bc825 Mon Sep 17 00:00:00 2001 From: MissingNoL <84547991+MissingNoL@users.noreply.github.com> Date: Sat, 5 Jun 2021 16:38:37 -0700 Subject: [PATCH 04/31] Update src/battle_util.c Changed an `if` to `else if` Co-authored-by: LOuroboros --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index fb41105913..0d4a7f18af 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8371,7 +8371,7 @@ u8 GetBattleMoveSplit(u32 moveId) { if (gSwapDamageCategory == TRUE) // Photon Geyser, Shell Side Arm, Light That Burns the Sky return SPLIT_PHYSICAL; - if (IS_MOVE_STATUS(moveId) || B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) + else if (IS_MOVE_STATUS(moveId) || B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) return gBattleMoves[moveId].split; else if (gBattleMoves[moveId].type < TYPE_MYSTERY) return SPLIT_PHYSICAL; From 921b80de7c138a0c0320187ae2a383d22a390f13 Mon Sep 17 00:00:00 2001 From: MissingNoL <84547991+MissingNoL@users.noreply.github.com> Date: Sat, 5 Jun 2021 16:40:03 -0700 Subject: [PATCH 05/31] Update battle_script_commands.h Properly aligned the list of number IDs --- include/constants/battle_script_commands.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 28ba1a5d48..3976d4375a 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -173,8 +173,8 @@ #define VARIOUS_DESTROY_ABILITY_POPUP 102 #define VARIOUS_TOTEM_BOOST 103 #define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 104 -#define VARIOUS_PHOTON_GEYSER_CHECK 105 -#define VARIOUS_SHELL_SIDE_ARM_CHECK 106 +#define VARIOUS_PHOTON_GEYSER_CHECK 105 +#define VARIOUS_SHELL_SIDE_ARM_CHECK 106 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 From d69cfcff7043a1a97d0835747dd727f1a3709d34 Mon Sep 17 00:00:00 2001 From: MissingNoL <84547991+MissingNoL@users.noreply.github.com> Date: Sat, 5 Jun 2021 16:43:19 -0700 Subject: [PATCH 06/31] Update battle_script_commands.c Included src/battle_util.c to call IsMoveMakingContact --- src/battle_script_commands.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 422738795c..bb81b2cbc6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -53,6 +53,7 @@ #include "constants/rgb.h" #include "data.h" #include "constants/party_menu.h" +#include "src/battle_util.c" extern struct MusicPlayerInfo gMPlayInfo_BGM; @@ -4708,7 +4709,7 @@ static void Cmd_moveend(void) switch (gBattleScripting.moveendState) { case MOVEEND_PROTECT_LIKE_EFFECT: - if (gBattleMoves[gCurrentMove].flags & FLAG_MAKES_CONTACT) // needs to be IsMoveMakingContact, but this file does not reference include/battle_util.h or src/battle_util.c + if (IsMoveMakingContact(move, gBattlerAttacker)) { if (gProtectStructs[gBattlerTarget].spikyShielded && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { From caf2548830d67dd9e6de97c8b29cc1ddbe777c2a Mon Sep 17 00:00:00 2001 From: MissingNoL Date: Sun, 6 Jun 2021 21:40:38 -0700 Subject: [PATCH 07/31] Included `battle_util.h`, fixed parameter `IsMoveMakingContact` --- src/battle_script_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1dadeadb1d..bc1b48cfca 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -54,7 +54,7 @@ #include "constants/rgb.h" #include "data.h" #include "constants/party_menu.h" -#include "src/battle_util.c" +#include "battle_util.h" extern struct MusicPlayerInfo gMPlayInfo_BGM; @@ -4781,7 +4781,7 @@ static void Cmd_moveend(void) switch (gBattleScripting.moveendState) { case MOVEEND_PROTECT_LIKE_EFFECT: - if (IsMoveMakingContact(move, gBattlerAttacker)) + if (IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) { if (gProtectStructs[gBattlerTarget].spikyShielded && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { From d5b5090d521522abe6d7d377b1475ebdee68dcc3 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 27 Oct 2021 09:36:00 -0300 Subject: [PATCH 08/31] Fixed BattleScript_EffectPhotonGeyser --- data/battle_scripts_1.s | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 447c329e0a..c6ae2e8487 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -399,7 +399,28 @@ BattleScript_EffectShellSideArm: goto BattleScript_EffectHit BattleScript_EffectPhotonGeyser: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage photongeysercheck + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET, FALSE, NULL + goto BattleScript_MoveEnd BattleScript_EffectPlasmaFists: attackcanceler From ad95fa3d15abfe3080e00beab69225c2bc288bf7 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 27 Oct 2021 10:03:27 -0300 Subject: [PATCH 09/31] Updated Shell Side Arm's description --- src/data/text/move_descriptions.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index e204fb1961..037261e321 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -2839,7 +2839,7 @@ static const u8 sMETEOR_BEAMDescription[] = _( "Sp. Attack before attacking."); static const u8 sSHELL_SIDE_ARMDescription[] = _( - "Uses higher of physical and\n" + "Deals better of physical and\n" "special damage. May poison."); static const u8 sMISTY_EXPLOSIONDescription[] = _( From de157919b060e70cb430050b176ef487c28b0753 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 27 Oct 2021 11:05:01 -0300 Subject: [PATCH 10/31] Added animations for Shell Side Arm --- data/battle_anim_scripts.s | 45 +++++++++++++++++++++++++++++++++++++- src/battle_anim_new.c | 9 ++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 994bc5cc10..30a4ccc612 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -13995,7 +13995,50 @@ Move_METEOR_BEAM:: end @to do: Move_SHELL_SIDE_ARM:: - end @to do: + launchtask AnimTask_ShellSideArm 0x5 0x0 + jumpargeq 0x0, TRUE, Move_SHELL_SIDE_ARM_PHYSICAL + jumpargeq 0x0, FALSE, Move_SHELL_SIDE_ARM_SPECIAL +Move_SHELL_SIDE_ARM_PHYSICAL: @ Modified Body Slam, placeholder + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 6, 6, RGB_MAGENTA + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER + waitforvisualfinish + delay 11 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2 + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end +Move_SHELL_SIDE_ARM_SPECIAL: @ Modified Snipe Shot, placeholder + loadspritegfx ANIM_TAG_IMPACT_2 + loadspritegfx ANIM_TAG_LEER + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT_2, 0, 6, 6, RGB_MAGENTA + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LEER, 0, 6, 6, RGB_MAGENTA + launchtemplate gLeerSpriteTemplate 0x82, 2 0x18 -12 + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 0x20 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + launchtemplate gSnipeShotBallTemplate 0x82, 3, 0 0 24, + waitforvisualfinish + launchtask AnimTask_ShakeMon2 2 5 1 4 0 8, 1 + waitforvisualfinish + end Move_MISTY_EXPLOSION:: end @to do: diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index d04483e6b1..3bc45939fb 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -5064,3 +5064,12 @@ void AnimTask_PrimalReversion(u8 taskId) gBattleAnimArgs[0] = 0; DestroyAnimVisualTask(taskId); } + +void AnimTask_ShellSideArm(u8 taskId) +{ + if (gSwapDamageCategory) + gBattleAnimArgs[0] = TRUE; + else + gBattleAnimArgs[0] = FALSE; + DestroyAnimVisualTask(taskId); +} From 8c35a6806014cede7354f0e6c47eb075223ce507 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 27 Oct 2021 11:19:39 -0300 Subject: [PATCH 11/31] Quick syntax tweaks --- asm/macros/battle_script.inc | 16 ++++++++-------- include/battle.h | 1 - src/battle_util.c | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index b838cb6d28..4a8570a1a0 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1731,14 +1731,6 @@ .4byte \ptr .endm - .macro photongeysercheck - various BS_ATTACKER, VARIOUS_PHOTON_GEYSER_CHECK - .endm - - .macro shellsidearmcheck - various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK - .endm - .macro trysetfairylock ptr:req various BS_ATTACKER, VARIOUS_TRY_FAIRY_LOCK .4byte \ptr @@ -1866,6 +1858,14 @@ various BS_ATTACKER, VARIOUS_APPLY_PLASMA_FISTS .endm + .macro photongeysercheck + various BS_ATTACKER, VARIOUS_PHOTON_GEYSER_CHECK + .endm + + .macro shellsidearmcheck + various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK + .endm + @ helpful macros .macro setstatchanger stat:req, stages:req, down:req setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7 diff --git a/include/battle.h b/include/battle.h index 00b2c2f25b..b5dabaded3 100644 --- a/include/battle.h +++ b/include/battle.h @@ -918,7 +918,6 @@ extern u8 gBattleControllerData[MAX_BATTLERS_COUNT]; extern bool8 gHasFetchedBall; extern u8 gLastUsedBall; extern u16 gLastThrownBall; - extern bool8 gSwapDamageCategory; // Photon Geyser, Shell Side Arm, Light That Burns the Sky #endif // GUARD_BATTLE_H diff --git a/src/battle_util.c b/src/battle_util.c index f79ce62b29..7797b47511 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -7271,7 +7271,7 @@ bool32 IsMoveMakingContact(u16 move, u8 battlerAtk) { if (!(gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) { - if (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gSwapDamageCategory == TRUE) + if (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gSwapDamageCategory) return TRUE; else return FALSE; @@ -9077,7 +9077,7 @@ bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId) u8 GetBattleMoveSplit(u32 moveId) { - if (gSwapDamageCategory == TRUE) // Photon Geyser, Shell Side Arm, Light That Burns the Sky + if (gSwapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky return SPLIT_PHYSICAL; else if (IS_MOVE_STATUS(moveId) || B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) return gBattleMoves[moveId].split; From 74c85b581890f014a6031f233494fa37e96a4b3b Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Wed, 3 Nov 2021 17:23:33 +1300 Subject: [PATCH 12/31] Implement Relic Song's form change Meloetta transforms into its pirouette form after using Relic Song, unless it has Sheer Force or the move has no effect. It also has a chance to put both targets to sleep. --- data/battle_scripts_1.s | 40 ++++++++++++++++++++++--- include/battle_scripts.h | 1 + include/constants/battle.h | 3 +- include/constants/battle_config.h | 2 ++ include/constants/battle_move_effects.h | 2 +- src/battle_ai_main.c | 2 +- src/battle_script_commands.c | 10 +++++++ src/battle_util.c | 5 ++-- src/data/battle_moves.h | 3 +- 9 files changed, 58 insertions(+), 10 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index df0048ad9c..5bdada7b8f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -367,7 +367,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectGeomancy @ EFFECT_GEOMANCY .4byte BattleScript_EffectFairyLock @ EFFECT_FAIRY_LOCK .4byte BattleScript_EffectAllySwitch @ EFFECT_ALLY_SWITCH - .4byte BattleScript_EffectSleepHit @ EFFECT_SLEEP_HIT + .4byte BattleScript_EffectRelicSong @ EFFECT_RELIC_SONG .4byte BattleScript_EffectAttackerDefenseDownHit @ EFFECT_ATTACKER_DEFENSE_DOWN_HIT .4byte BattleScript_EffectHit @ EFFECT_BODY_PRESS .4byte BattleScript_EffectEerieSpell @ EFFECT_EERIE_SPELL @@ -734,9 +734,30 @@ BattleScript_EffectAttackerDefenseDownHit: setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit -BattleScript_EffectSleepHit: - setmoveeffect MOVE_EFFECT_SLEEP - goto BattleScript_EffectHit +BattleScript_EffectRelicSong: + setmoveeffect MOVE_EFFECT_RELIC_SONG | MOVE_EFFECT_CERTAIN + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + argumentstatuseffect + tryfaintmon BS_TARGET, FALSE, NULL + goto BattleScript_MoveEnd BattleScript_EffectAllySwitch: attackcanceler @@ -6939,6 +6960,17 @@ BattleScript_AttackerFormChangeEnd3:: call BattleScript_AttackerFormChange end3 +BattleScript_AttackerFormChangeMoveEffect:: + waitmessage 1 + handleformchange BS_ATTACKER, 0 + handleformchange BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE, NULL + waitanimation + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + handleformchange BS_ATTACKER, 2 + end3 + BattleScript_BallFetch:: call BattleScript_AbilityPopUp printstring STRINGID_FETCHEDPOKEBALL diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 403af9515e..753dc5127a 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -404,5 +404,6 @@ extern const u8 BattleScript_PrimalReversion[]; extern const u8 BattleScript_HyperspaceFuryRemoveProtect[]; extern const u8 BattleScript_SelectingNotAllowedMoveGorillaTactics[]; extern const u8 BattleScript_WanderingSpiritActivates[]; +extern const u8 BattleScript_AttackerFormChangeMoveEffect[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/constants/battle.h b/include/constants/battle.h index 918c3e7f0d..438b5660ce 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -357,7 +357,8 @@ #define MOVE_EFFECT_INCINERATE 0x44 #define MOVE_EFFECT_BUG_BITE 0x45 #define MOVE_EFFECT_RECOIL_HP_25 0x46 -#define NUM_MOVE_EFFECTS 0x47 +#define MOVE_EFFECT_RELIC_SONG 0x47 +#define NUM_MOVE_EFFECTS 0x48 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index 41fee089de..0e7b75d6de 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -47,6 +47,8 @@ #define SPECIES_GRENINJA_ASH 10017 #define SPECIES_HOOPA 0 #define SPECIES_HOOPA_UNBOUND 10018 + #define SPECIES_MELOETTA 0 + #define SPECIES_MELOETTA_PIROUETTE 10019 #endif // Items with peculiar battle effects. diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 62b49a1910..8d3df5ec0f 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -350,7 +350,7 @@ #define EFFECT_GEOMANCY 344 #define EFFECT_FAIRY_LOCK 345 #define EFFECT_ALLY_SWITCH 346 -#define EFFECT_SLEEP_HIT 347 +#define EFFECT_RELIC_SONG 347 #define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 348 #define EFFECT_BODY_PRESS 349 #define EFFECT_EERIE_SPELL 350 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 84fa7b6349..c06bb73946 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -4305,7 +4305,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if (!IsBattlerGrounded(battlerDef)) score += 3; break; - case EFFECT_SLEEP_HIT: // Relic Song + case EFFECT_RELIC_SONG: #if (defined SPECIES_MELOETTA && defined SPECIES_MELOETTA_PIROUETTE) if (AI_DATA->atkSpecies == SPECIES_MELOETTA && gBattleMons[battlerDef].defense < gBattleMons[battlerDef].spDefense) score += 3; // Change to pirouette if can do more damage diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9e779da1ba..d88bf9944c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3393,6 +3393,13 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite; } break; + case MOVE_EFFECT_RELIC_SONG: + if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA) + { + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect); + } + break; } } } @@ -8282,6 +8289,9 @@ static void Cmd_various(void) case VARIOUS_ARGUMENT_STATUS_EFFECT: switch (gBattleMoves[gCurrentMove].argument) { + case STATUS1_SLEEP: + gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP; + break; case STATUS1_BURN: gBattleScripting.moveEffect = MOVE_EFFECT_BURN; break; diff --git a/src/battle_util.c b/src/battle_util.c index 224cb1af14..ca1021dfa0 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8957,6 +8957,7 @@ void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) { {SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU}, {SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND}, + {SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA}, {SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH}, {SPECIES_DARMANITAN_ZEN_MODE, SPECIES_DARMANITAN}, {SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED}, @@ -8971,8 +8972,8 @@ void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) {SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT}, }; - if (isSwitchingOut) // Don't revert Mimikyu Busted or Ash-Greninja when switching out - i = 2; + if (isSwitchingOut) // Don't revert Mimikyu, Greninja, Meloetta when switching out + i = 3; else i = 0; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 97d61202a4..0d3f231686 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -8614,7 +8614,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_RELIC_SONG] = { - .effect = EFFECT_SLEEP_HIT, + .effect = EFFECT_RELIC_SONG, .power = 75, .type = TYPE_NORMAL, .accuracy = 100, @@ -8624,6 +8624,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .argument = STATUS1_SLEEP, }, [MOVE_SECRET_SWORD] = From 18b87416d5f2a9b912a9ade9b932e9a25893ce68 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Wed, 3 Nov 2021 17:56:16 +1300 Subject: [PATCH 13/31] Fixes - Fix Sheer Force interaction (needed after adding | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN) - Fix "X Transformed!" target - Allow switching between both forms - Allow form change if target is KO'ed --- data/battle_scripts_1.s | 3 ++- src/battle_script_commands.c | 14 +++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5bdada7b8f..7e52d7d062 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -735,7 +735,7 @@ BattleScript_EffectAttackerDefenseDownHit: goto BattleScript_EffectHit BattleScript_EffectRelicSong: - setmoveeffect MOVE_EFFECT_RELIC_SONG | MOVE_EFFECT_CERTAIN + setmoveeffect MOVE_EFFECT_RELIC_SONG | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring @@ -6966,6 +6966,7 @@ BattleScript_AttackerFormChangeMoveEffect:: handleformchange BS_ATTACKER, 1 playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE, NULL waitanimation + copybyte sBATTLER, gBattlerAttacker printstring STRINGID_PKMNTRANSFORMED waitmessage B_WAIT_TIME_LONG handleformchange BS_ATTACKER, 2 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d88bf9944c..d510a27462 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3394,10 +3394,18 @@ void SetMoveEffect(bool32 primary, u32 certain) } break; case MOVE_EFFECT_RELIC_SONG: - if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA) + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE) { - gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect); + if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA) + { + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect); + } + else if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE) + { + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect); + } } break; } From 6ce1f01b8c92539659687658d1d6041841147382 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Wed, 3 Nov 2021 19:45:03 +1300 Subject: [PATCH 14/31] Hunger Switch and Aura Wheel Implement the ability Hunger Switch and the move Aura Wheel. --- data/battle_scripts_1.s | 12 ++++++++++-- include/constants/battle_config.h | 4 ++++ include/constants/battle_move_effects.h | 3 ++- src/battle_main.c | 4 ++++ src/battle_util.c | 17 +++++++++++++++++ src/data/battle_moves.h | 2 +- src/data/pokemon/base_stats.h | 4 ++-- 7 files changed, 40 insertions(+), 6 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index df0048ad9c..8b2d14dc89 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -392,10 +392,18 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSparklySwirl @ EFFECT_SPARKLY_SWIRL .4byte BattleScript_EffectPlasmaFists @ EFFECT_PLASMA_FISTS .4byte BattleScript_EffectHyperspaceFury @ EFFECT_HYPERSPACE_FURY + .4byte BattleScript_EffectAuraWheel @ EFFECT_AURA_WHEEL + +BattleScript_EffectAuraWheel: @ Aura Wheel can only be used by Morpeko + jumpifspecies BS_ATTACKER, SPECIES_MORPEKO, BattleScript_EffectSpeedUpHit + jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectSpeedUpHit + printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_EffectHyperspaceFury: - jumpifspecies BS_ATTACKER, SPECIES_TREECKO, BattleScript_EffectHyperspaceFuryUnbound - jumpifspecies BS_ATTACKER, SPECIES_MUDKIP, BattleScript_ButHoopaCantUseIt + jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHyperspaceFuryUnbound + jumpifspecies BS_ATTACKER, SPECIES_HOOPA, BattleScript_ButHoopaCantUseIt printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index 41fee089de..defc442262 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -47,6 +47,10 @@ #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 #endif // Items with peculiar battle effects. diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 62b49a1910..7acb56c93b 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -375,7 +375,8 @@ #define EFFECT_SPARKLY_SWIRL 369 #define EFFECT_PLASMA_FISTS 370 #define EFFECT_HYPERSPACE_FURY 371 +#define EFFECT_AURA_WHEEL 372 -#define NUM_BATTLE_MOVE_EFFECTS 372 +#define NUM_BATTLE_MOVE_EFFECTS 373 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/battle_main.c b/src/battle_main.c index ad02854bd2..12324ef96b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5221,6 +5221,10 @@ void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk) { gBattleStruct->dynamicMoveType = 0x80 | TYPE_ELECTRIC; } + else if (move == MOVE_AURA_WHEEL && gBattleMons[battlerAtk].species == SPECIES_MORPEKO_HANGRY) + { + gBattleStruct->dynamicMoveType = 0x80 | TYPE_DARK; + } // Check if a gem should activate. GET_MOVE_TYPE(move, moveType); diff --git a/src/battle_util.c b/src/battle_util.c index 224cb1af14..54a755f0e2 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4562,6 +4562,22 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; + case ABILITY_HUNGER_SWITCH: + if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + { + if (gBattleMons[battler].species == SPECIES_MORPEKO) + { + gBattleMons[battler].species = SPECIES_MORPEKO_HANGRY; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + } + else if (gBattleMons[battler].species == SPECIES_MORPEKO_HANGRY) + { + gBattleMons[battler].species = SPECIES_MORPEKO; + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + } + effect++; + } + break; } } break; @@ -8969,6 +8985,7 @@ void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) {SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI}, {SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT}, {SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT}, + {SPECIES_MORPEKO_HANGRY, SPECIES_MORPEKO} }; if (isSwitchingOut) // Don't revert Mimikyu Busted or Ash-Greninja when switching out diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 97d61202a4..51c760166c 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11038,7 +11038,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_AURA_WHEEL] = { - .effect = EFFECT_SPEED_UP_HIT, + .effect = EFFECT_AURA_WHEEL, .power = 110, .type = TYPE_ELECTRIC, .accuracy = 100, diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index 141631643b..0014b44378 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -6848,7 +6848,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .abilities = {ABILITY_STURDY, ABILITY_NONE}, + .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -7552,7 +7552,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, + .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, From 5141e84296caff64a298cb46d1cb7f06cd6f35b3 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Wed, 3 Nov 2021 20:01:09 +1300 Subject: [PATCH 15/31] Fix base stats Clean up mess from testing. --- src/data/pokemon/base_stats.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index 0014b44378..141631643b 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -6848,7 +6848,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE}, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -7552,7 +7552,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .abilities = {ABILITY_HUNGER_SWITCH, ABILITY_NONE}, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, From b9c23f7c62d74570bf62987c9fc58091b27f21e7 Mon Sep 17 00:00:00 2001 From: Blackforest92 Date: Wed, 3 Nov 2021 16:29:09 +0700 Subject: [PATCH 16/31] Update waterfall, trick room, & focus blast BG --- data/battle_anim_scripts.s | 18 ++++++++++++-- .../battle_anims/backgrounds/dark_void.bin | Bin 2048 -> 0 bytes .../battle_anims/backgrounds/dark_void.pal | 19 --------------- .../battle_anims/backgrounds/dark_void.png | Bin 7041 -> 0 bytes .../backgrounds/new/dark_void.bin | Bin 2048 -> 2048 bytes .../backgrounds/new/dark_void.pal | 16 ++++++------- .../backgrounds/new/dark_void.png | Bin 7041 -> 0 bytes .../backgrounds/new/focus_blast.bin | Bin 896 -> 896 bytes .../backgrounds/new/focus_blast.png | Bin 3537 -> 984 bytes .../backgrounds/new/magic_room.pal | 12 +++++----- .../backgrounds/new/trick_room.bin | Bin 896 -> 896 bytes .../backgrounds/new/trick_room.pal | 12 +++++----- .../backgrounds/new/trick_room.png | Bin 2137 -> 1718 bytes .../backgrounds/new/waterfall.bin | Bin 2048 -> 2048 bytes .../backgrounds/new/waterfall.pal | 8 +++---- .../backgrounds/new/waterfall.png | Bin 5092 -> 814 bytes .../backgrounds/new/wonder_room.pal | 12 +++++----- .../battle_anims/backgrounds/trick_room.png | Bin 2043 -> 0 bytes .../backgrounds/trick_room_map.bin | Bin 1280 -> 0 bytes include/graphics.h | 1 - src/battle_anim.c | 2 +- src/graphics.c | 22 +++++------------- 22 files changed, 53 insertions(+), 69 deletions(-) delete mode 100644 graphics/battle_anims/backgrounds/dark_void.bin delete mode 100644 graphics/battle_anims/backgrounds/dark_void.pal delete mode 100644 graphics/battle_anims/backgrounds/dark_void.png delete mode 100644 graphics/battle_anims/backgrounds/new/dark_void.png delete mode 100644 graphics/battle_anims/backgrounds/trick_room.png delete mode 100644 graphics/battle_anims/backgrounds/trick_room_map.bin diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 03d72f3ea4..cfe95371de 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1893,7 +1893,7 @@ Move_AURA_SPHERE: monbg ANIM_ATK_PARTNER monbgprio_28 ANIM_ATTACKER setalpha 12, 8 - call SetHighSpeedBg + call SetAuraSphereBG playsewithpan SE_M_SKY_UPPERCUT, 0 delay 60 createsprite gAuraSphereBlast, ANIM_TARGET, 3, 0 @@ -1908,6 +1908,10 @@ Move_AURA_SPHERE: delay 1 end +SetAuraSphereBG: + fadetobg BG_AURA_SPHERE + goto SetHighSpeedBgFade + Move_ROCK_POLISH: loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_SPARKLE_3 @@ -2378,7 +2382,7 @@ Move_FOCUS_BLAST: monbg ANIM_ATK_PARTNER monbgprio_28 ANIM_ATTACKER setalpha 12, 8 - call SetHighSpeedBg + call SetFocusBlastBG createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 2, 0 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER waitforvisualfinish @@ -2391,6 +2395,10 @@ Move_FOCUS_BLAST: delay 1 end +SetFocusBlastBG: + fadetobg BG_FOCUS_BLAST + goto SetHighSpeedBgFade + Move_ENERGY_BALL: loadspritegfx ANIM_TAG_ENERGY_BALL monbg ANIM_TARGET @@ -3437,6 +3445,7 @@ Move_GUNK_SHOT: monbg ANIM_DEF_PARTNER monbgprio_28 ANIM_TARGET setalpha 12, 8 + call SetGunkShotBG createvisualtask AnimTask_ShakeMon 5, 5, ANIM_ATTACKER, 0, 2, 40, 1 delay 6 panse_1B SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 @@ -3464,6 +3473,7 @@ Move_GUNK_SHOT: call GunkShotImpact call PoisonBubblesEffect waitforvisualfinish + call UnsetHighSpeedBg clearmonbg ANIM_DEF_PARTNER blendoff end @@ -3479,6 +3489,10 @@ GunkShotImpact: createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, 15, 1, 1 createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, -15, 1, 1 return +SetGunkShotBG: + fadetobg BG_GUNK_SHOT + goto SetHighSpeedBgFade + Move_IRON_HEAD: loadspritegfx ANIM_TAG_GUST diff --git a/graphics/battle_anims/backgrounds/dark_void.bin b/graphics/battle_anims/backgrounds/dark_void.bin deleted file mode 100644 index 97b879f01ba8ebc08c92d30497c894a1a7b186c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeH`W0Rg)6h-HaZF8-pgO1IPZM$RJwr!_l+qP|IY}=lBlA3=pUAJznefB-)!?{&E zL<~a2Bo?uWLtNq!p9CZ%5s3poNpO>rjO3&sC8Q3JlqG_4l&1m}sYGR}P?c&_rv^2t zMQ!R(mwMEv0S#$HW17&EW;CY-Eont-+7L-w+R>g4bfgoV=|We!(VZUjq!+#ELtpyQ zp8*VH5Q7=QP=+y_5sYLMqZz|k#xb4=Ok@(1nZi`2F`XIAWEQiT!(8Sup9L&r5sO*E zQkJot6|7_xQNhoISj`&NvMx{|*0X_)Y+^H8*c#N^*#64j!A^Fun?3AhANx7LK@M@4 zBOK)z$2q}CPH~zuoaG$nxxhs(ahWSz$y!A)*)n>*a)9`|{`Lmu&%Cp_gD&w0V? zyuq8i#oN5YyS&Hye87i%#K(NXr+miee8HD|#n*hpw|vL<{J@X=#LxV~ul&aE{K236 z#ozqHYle(rOk)|_IL0-e@l9Yt6Pef~CN-JKO<_t?nc6g_HJ$0rU`8{U*(_!iHJjND zGlx0NWp2aGV_x%_-vSo2kcBN`QHxpJ5|%VXDN9=>V2HATddZh3!g7|kLQq$^Beaj3%_?g&RZ%F&K-tm7Q-1SdMl$xd;q z)12-MXFAK-&T+2uobLh`y2!;YajDB(?h04B$|zU6#JKX6m zce}^E?sLBfJm?`0d&Hw2^SCEG=_yZp#3~?@CWcYb6c+pE<_KH`%=5=p)(_7y5 ij(5H1eINMHM?Ut6PkrWdUj%c}`H#+jbpHRZ`TrM_mOTvs diff --git a/graphics/battle_anims/backgrounds/dark_void.pal b/graphics/battle_anims/backgrounds/dark_void.pal deleted file mode 100644 index f4cf0f09d3..0000000000 --- a/graphics/battle_anims/backgrounds/dark_void.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -131 131 131 -123 123 123 -115 115 115 -106 106 106 -98 98 98 -82 82 82 -65 65 65 -49 49 49 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/battle_anims/backgrounds/dark_void.png b/graphics/battle_anims/backgrounds/dark_void.png deleted file mode 100644 index 2922f89d3f24a6bb835fe3b53f62bedbd96029c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7041 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 diff --git a/graphics/battle_anims/backgrounds/new/dark_void.bin b/graphics/battle_anims/backgrounds/new/dark_void.bin index 97b879f01ba8ebc08c92d30497c894a1a7b186c8..274b971db6077f17e2f02b8620be277d724c249b 100644 GIT binary patch literal 2048 zcmajcRaOE300q$_1|}sYNQl6IV-XS(``?x9;GOxrpR;%8){TFzUAc7OuXATkogDgc zANMq@`@Y%p)vn(rZ`<<4rVXEc^3ezHy|eDEHLG?^Ubf_o*Is$)h36JM z^VAcMEqG+btW@W>O-G-&cdi#EwC98uty6HYm!$T=5Wa>X?_lqi!t{Y{?!CQpBpr@zV5-{k3U z^7J=(`kOrcO`iTHPk)oAzsb|zn>_tZp8h6Jf0L)b$2LD%H+lM- F{2%-zDKG#4 literal 2048 zcmeH`W0Rg)6h-HaZF8-pgO1IPZM$RJwr!_l+qP|IY}=lBlA3=pUAJznefB-)!?{&E zL<~a2Bo?uWLtNq!p9CZ%5s3poNpO>rjO3&sC8Q3JlqG_4l&1m}sYGR}P?c&_rv^2t zMQ!R(mwMEv0S#$HW17&EW;CY-Eont-+7L-w+R>g4bfgoV=|We!(VZUjq!+#ELtpyQ zp8*VH5Q7=QP=+y_5sYLMqZz|k#xb4=Ok@(1nZi`2F`XIAWEQiT!(8Sup9L&r5sO*E zQkJot6|7_xQNhoISj`&NvMx{|*0X_)Y+^H8*c#N^*#64j!A^Fun?3AhANx7LK@M@4 zBOK)z$2q}CPH~zuoaG$nxxhs(ahWSz$y!A)*)n>*a)9`|{`Lmu&%Cp_gD&w0V? zyuq8i#oN5YyS&Hye87i%#K(NXr+miee8HD|#n*hpw|vL<{J@X=#LxV~ul&aE{K236 z#ozqHYle(rOk)|_IL0-e@l9Yt6Pef~CN-JKO<_t?nc6g_HJ$0rU`8{U*(_!iHJjND zGlx0NWp2aGV_x%_-vSo2kcBN`QHxpJ5|%VXDN9=>V2HATddZh3!g7|kLQq$^Beaj3%_?g&RZ%F&K-tm7Q-1SdMl$xd;q z)12-MXFAK-&T+2uobLh`y2!;YajDB(?h04B$|zU6#JKX6m zce}^E?sLBfJm?`0d&Hw2^SCEG=_yZp#3~?@CWcYb6c+pE<_KH`%=5=p)(_7y5 ij(5H1eINMHM?Ut6PkrWdUj%c}`H#+jbpHRZ`TrM_mOTvs diff --git a/graphics/battle_anims/backgrounds/new/dark_void.pal b/graphics/battle_anims/backgrounds/new/dark_void.pal index f4cf0f09d3..6aa0b26a6d 100644 --- a/graphics/battle_anims/backgrounds/new/dark_void.pal +++ b/graphics/battle_anims/backgrounds/new/dark_void.pal @@ -2,14 +2,14 @@ JASC-PAL 0100 16 0 0 0 -131 131 131 -123 123 123 -115 115 115 -106 106 106 -98 98 98 -82 82 82 -65 65 65 -49 49 49 +48 48 48 +72 72 72 +88 88 88 +120 120 120 +0 0 0 +0 0 0 +0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/dark_void.png b/graphics/battle_anims/backgrounds/new/dark_void.png deleted file mode 100644 index 2922f89d3f24a6bb835fe3b53f62bedbd96029c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7041 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 diff --git a/graphics/battle_anims/backgrounds/new/focus_blast.bin b/graphics/battle_anims/backgrounds/new/focus_blast.bin index 98e3e8e16b63fe73c0fb8cc7adc2cc1630bd3359..25c569a1465844e30b2dbf039894446f4cc7e984 100644 GIT binary patch literal 896 zcmWN|S35EQ00rPDlqf2DJ8^L2*dbeHWbe%EUH|{?``-IEfB-5`i7EsULN&suK`kPP zq7LaA z#ZGpxoo#Go3!B-*Mm8|PIDsVk&<|n&gBXG^j1)#-jA9Jq80Q#AX^t?(VTwZ>PSaE^nv%C_nvp1^NzQ@mB`s@3t6KGnm%ZdgFL>S=&w17}PJ7x@p7eyFr25n^YCwY;k~FN8 zMr4g@Oye5&m`81oIOSo>Lmu>i>3;V)X*jNg8q}yJHLFFfYE!#9)Tu6Yt4F=+b&tE< zBomp*LRPX7L3VPGlU(E`Pf#Rz$w&Th7oZ@8C`=KGQjFr1 z0Hh?PLPk-V=)h7YP+7`Ro(fc?5|yb!RjN^)8q}l~wZov8qknNG^PnnX-0Ee z5JN02X+>+=5Jy|u(Vh-;q!XQqrwd)_Mt6G9lV0?u4}IxJe+Dp+K@4UHLm9?!Mlh05 zjAjgDNnjk~nZQIQF_|e$Wg63&!AugF#cbvmXSEO(fD_KP{ zt69TZ*0G)qY-AIg*}_(~@i33@D37t79qeQmkMjgi@)S?=47=IGvpmQ1yue=e@ggs= zp937^5HIrzucqj=)P6ms-$=dQ4E+{|Il@tn1%8`%LLN`a6M;^0iqo9oUEbq;KHx0p z_>hnIm{0hW&p6KoJ`ehWi(KMMzT#`X;d00;T;&?qxxu%5$M^h@+CTCWH@U^n{KBvN z7IZt%9e(Ez{^T$I<{$2IkAL}(|GCdYrZKJQOm7A=n#s&&F{{~(FuOU-X)be{$4K*< z&-@m!poJ`K5sO;P;+7D#q@|3qw9$d0En`{BS>6g(w33yrVpXeI-5S=kmbI;8UF%uj z1~#;jjcsC6o7vnJ#u#f$TiMz+#@W_(wzorYM>~b=Y`k6UYB#&v!=CoCw|(quKl=v_ zaG--6>=1`K%;Ao3q@x_|7{{96ILAA|iB58|Q=IBFr#r)$COXU6&T+2uobLh`y2!;Y fajDB(?h2D!=_-@MYIRs82CZ?e>s;@K@VC(i6Oa3q diff --git a/graphics/battle_anims/backgrounds/new/focus_blast.png b/graphics/battle_anims/backgrounds/new/focus_blast.png index 8720658a784516bc636fe2156fc769109f312fda..7c8755f59a7d5666663c87dab82325fa8146d99b 100644 GIT binary patch delta 937 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 literal 896 zcmYL`RajI}6h_5iU;g6Rzv*sxbkY9lW5ljenVJKnP zwQ$1|3nPdmQj5@ni6TT8uEl$(G`kk>L7JT;SR5wZ>M#qFV$#j}f4As1hwZOhb(8LP z_mtbsj%Yv;L#$Af6RZ7qv}o<$dyJ-VyL&3$lgY2-q`*N+Qjr>+G^8aR>B&GwGLe}q zWF;Hf$w5wXk()f^B_H`IKtT#om?9LV7{w_;NlH=yOIp#IHngQ3?dd>AI?r62tn zz(Co`AUT5>!cc}WoDqy<6r&l#SjI7)2~1=XlbOO)rZJrv%#@wXVm5P_D{UV0g$r27 zA{MiRr7UAPD_F@YR>&DV<%2_v0Lb54}00iehzSuLmcJ^ zM>)oEPH>V_oaPKJ&T>w8o(sZ@ToSstZ14(KxyE&FaFbiy<_=E%F87GjuW_FTVh?#F zbn1_JV&qeU&vh($Fi=cX zMF0Q*n7H_Wpzvsj*idl5I9R9{IEax!7=Hi&0D(?i^#A|>32;bRa{vGi!~g&e!~vBn z4jTXf1}sTLK~!jg?ODls+cpr!D}Zuzhm`s*Qt@4us=L#CxpNWT{}DngvtnqsjlZ5c z2MYi(KW4{}cCON`&{He~zaJ9tyF;PwUjrz{{{j9}fYo*W5Yk`olOIFOdAME+ z>u}Cb;$NA$jC-iQLB~^Xd5S8pPzWUv&LR`Q~-+%7XK|c~CXO7FscerUTW5=w-w>HeH5t;1q5&X+% z8Bv}*tS28DiIVIuG@X<3l^8%~?uJI4IIpt*WcvacB8CdEq@b~wldZk5#mPSt*6PO9 z9^1@X_5??UjMHjJ$KvxN+0k_%ODdr5_@~XBW&bM00oN4@*^*F=8}gXdK!3q^Vndm^ z!J;*cI=v)UdVeef6$hEFTJ~fOu6$KLQv>kmmEH4xFP8#UJO!}YeRq$FgzM5K76}qy zm0fNv+jnx|yXQwR0G{edYuqY@Nc}{k!;OaQNqJ??C5VDQ?FxWMb)r`-{i=_UXX>&F ztL*34l6Kun7omQfyU!>n{(pG0s5jQjO@egw`C>6-H(b}MA0I^>3!rsfQos8t7oe!N z{OfJeE(R@9sAn_)t?Qx+-og(HIv0H7x>!n=k`e(0fGRn-yK7eVIOG6*QwB0M>cw&4h#eaD*0T!zs@B{>!QcAP{ZSEHSeY2FKv;i=JH_@f#4|fZo&E3M^zJQDcQUVyc zTQ;}+b3I7_Y^bjjFn<%oBnQ|~-{ikM0{|sv*vM&}z==+n=hUScxoanI-c0FSCHZdT zZl*Q?BY2S8zz*KbZvc6uZZZUPty7?lSLz(IZ|;D2%Yx7JFlNknk@&aDO z7Ys9qmkG9y&}fc#j+g;3nyLGF14{&0!FqQANuDdf;(?92p9z+xM(_xmrmXev8wEh9N7&?W4aShw1}5t zU)GWeym+#bHIiCn)`i@82OIG2XJI!yRjXJLww*l~Ks;g=TRL}q8P&#lR^_6-0x0JA$w zL>`f_7`GUU$;2gBBU{d$pEZ#)dH|Y6!u&=fK))v zglz0dxflz8>U#tWPed_6+dAF&@wky%^AbZ3950x%k~XuGHFiP1XUM6X@d;LUr{0sK zJuYI#?SY>k-CgVvamQ~&{R~q_b*fT;cMOWsNPhrs=O`1A7i7E`HNZpl$NSA0#*qYI zr98_c3?gD`!bconk?$h1ENsOT2aryaiKq-hXbfPM3^Ebbe<0~B1|V&&vP#L*8vt4W zHJ28({?DWZ7~h*3UotBKn(sfVGU++{e@X_>3hP8{qKaAA znF1^yM3wpo(+Z#xQJZ8@0PQyrEfT-iBQIzfKpU)0%qFoI$1g+&9I8s$2q^#n002ov JPDHLkV1m_VA$R}) delta 2135 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 N002ovPDHLkV1m*T11kUk diff --git a/graphics/battle_anims/backgrounds/new/waterfall.bin b/graphics/battle_anims/backgrounds/new/waterfall.bin index 076beeff2fe1ba44277bad014102fbcc7c3180bc..eb2085cb29530c90e242b6f08d485c95a2d228ba 100644 GIT binary patch literal 2048 zcmajc*;WAn00!YhB(gVK z<%9PwT{w5{Y{?!CQpBpr@zV5-{k3U z^7J=(`kOrcO`iTHPk)oAzsb|zn>_tZp8h6Jf0L)b$2LD%H+lM- F{2!U)2`~Tv literal 2048 zcmXw21(a1s6yxK%xG#`Ef-dgv?(XjH?(E|3&f@NFEmWZH?nUbEUOIf}nUmZkcix;g zb7mrlgpoAL$&ef=kP@koI`}k5i*!hj42TIXMi~QVLgv6(kQLdG9XXIQxCn9~ci=q8 zi&*4CeiQ&e6ht8iMqv~|Q4~XQlt3Ixq7+J_49cP$%A*1*q7o{j3aX+Ss-p&Kq84hS z4(g&F>Z1V~q7fRS37VoAnxh3;q7_=B4cej|+M@$Hq7yo!3%a5kx}yhrq8ECj5Bj1X z`eOhFVh{#n2!>)9hGPUqViZPW48~#{#$y5|ViG1}3Z`Njreg+XVism&4(4JW;*o&) zSb&9C6!y0mORyBnf?AFhfmdP`R$~p;Vjb3F12$q4HitZdE!c`}*dEp4112^#$p2jnH7SG{%ynq++5?;nDconbVb-aN$ z@fP03J9roG;eC975AhK`#x2~&9o)qy_!OVvb9{j>@fE(tH~1Fc;d}gmAMq1@#xM94 zzu|ZMfj{vV{>DG}7x$2a5hi6aCT9w!WGbd+8m47Bre_AmFe5WDGqW(953?~lBgny= z%*EWy!@P`TKIRWu0fJ;f7NY3jV_ldwOE^VSU2c;tj`8)$VP0;CTz-PY|a*J$yRL5Hf+mwY|jqt$WH9c zF6_!~?9LwS$zJTuKJ3eW?9Txl$Uz*;AsotK9L^CO$x$55F&xWr9M1`y$Vr^cDV)k_ zoX#1X$yuDuIh@ORjAsJpa{(7}5f^g_mvR}Ga|Ks&6<2c&*K!@#a|1VW6E|}Uw{jb| za|aW-le@T^d%`aE2JGX09tiay5AiUM@FpYn4`pKUtyWftP8imS}NMi?mP+G+zmd z*F4SD9L?4&&D0D{*ECJl6iwD7O$;;l1l%9HLrv5!?Nnk=JHm;^JnU@OHf`0GsN1Yf z+Ncd$uXS3hH6c6oaMpuW!Yhxi_Q0Lg2_4rl9Sw8hqw|jFuny^<4rssjX|G<<%X&#K z>IFTo=k%Iprr$8=rS^r#-uRbA0#UD8Ee(0QHHS)I{o{h;sloxasK z`dVMJeZl8_&S!nbr+q5qCj(CSxR3d$kNB_;`Cv#6c)$0B Hx;NlI69yLt diff --git a/graphics/battle_anims/backgrounds/new/waterfall.pal b/graphics/battle_anims/backgrounds/new/waterfall.pal index 1ae2f0ef99..69a25c589c 100644 --- a/graphics/battle_anims/backgrounds/new/waterfall.pal +++ b/graphics/battle_anims/backgrounds/new/waterfall.pal @@ -2,10 +2,10 @@ JASC-PAL 0100 16 0 0 0 -131 205 230 -123 180 213 -115 156 205 -115 139 164 +128 200 232 +120 176 216 +112 152 200 +112 136 160 0 0 0 0 0 0 0 0 0 diff --git a/graphics/battle_anims/backgrounds/new/waterfall.png b/graphics/battle_anims/backgrounds/new/waterfall.png index 2fa27759f34a96ef3f362b934933b038629c3501..3ddb1a0a2662eacdca77c95a78e0e55b8c203be0 100644 GIT binary patch delta 798 zcmV+(1L6GSC$0uKiBL{Q4GJ0x0000DNk~Le0001h0000W1Oos704NM?761SMFi=cX zMF0Q*fXL{0u-I^z$Z&|DkwF-dPzir|U}`!5000SaNLh0L01m_e01m_fl`9S#0007{ zNkl0ZA^^ErB1^Q}sp`(!6_8QE z>`bjv>n(qp@@*_b7U!VSIpwCA0eDnS8Mfqlol|`R(3Vi>s$5AMzOT-A2^p$3xlU`_ zZlkmeUO~U&O6;9fd*^Z#DLH??#IrU#MU_Im;qsoHtIjnL8YW?-xHIxQbI!t+lN5T1 zRdv~L`$ze*vNo<8OfS4q^$Bpp+7fFVuI62hc@+uH%G4#u6l-bJqsA+{uIaT&UAdir zF!!)fJP)SsZc2@D9A9F zyRPE40)VDGxCH=tUu0(8b_F;D3nx3k@E}Y8D|Hh9guL69dbH*XZc@Dzj5H`f)3yU_ zDgc*KW8)rB5V8RP`Joz%Hl+iAxiJp|w_tB!9RPS69SYR72Nbw9e_enr_Pqp|c0BA* zegMQ`0H6T31lN23&`^JL>j2<ZmpW?;Y*|IJdqDK)tc6 zjq2m4P!Ri^0q7rqFuMVUiLQE$fPv2mhzsy8YaUMk#Oi1&rh;0Lep3)nz!xnsn;i=5 z@*tiHJU(7NcI#%pIi~gn{RaH_<~kIN`4?b%aKzsMXT5XQ^@{m7Kzy`tDfnG{Q|9*y cK5Fmr2brLoW|qNUAOHXW07*qoM6N<$g2s+ilK=n! literal 5092 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 S`O;MX>!Y!D&bBNJ5c3m?gK+-< diff --git a/graphics/battle_anims/backgrounds/trick_room_map.bin b/graphics/battle_anims/backgrounds/trick_room_map.bin deleted file mode 100644 index 3d0041baaa897abd0ec1395b944b28a804c89c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmeIuMVA#<6hPs|-Q7Q&;1b;3-GW1Kcc+11!QF#HBf+I{|7DzaCop30CQP`s_CDuU ztv#uN3MiN*IdKXp>^nt%*fZ~ce$Vtp6_YKQzPJ*yCDWHwO15PB(#pt|OkY+x6`gOb1k&gN^5Pj)lPdI{Hdc(I_sjV zZo2ECr(SyNqi@{$1^rV$z(9ixHpEcF3^&3^ql`AjSmTU0!9JPXB~= z*&W^!-*W8@a_vk0H+g^Zfz%&#$YDnu4Igvd2`8P3{j@XAI_G@y1s7xg&!zBXSHf3a zOZ{~>+;mHx+wO$#x)=W6eGg(j^eFt;lW?A=$Z`18v@_QfB V{Fwa7=QO`0e+}pSKEM1Ad;`R~qc8vf diff --git a/include/graphics.h b/include/graphics.h index 78d9f2c420..34eef131e1 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4941,7 +4941,6 @@ extern const u32 gBattleAnimBgImage_SpacialRend[]; extern const u32 gBattleAnimBgPalette_SpacialRend[]; extern const u32 gBattleAnimBgTilemap_SpacialRendOpponent[]; extern const u32 gBattleAnimBgTilemap_SpacialRendPlayer[]; -extern const u32 gBattleAnimBgImage_DarkVoid[]; extern const u32 gBattleAnimBgPalette_DarkVoid[]; extern const u32 gBattleAnimBgTilemap_DarkVoid[]; extern const u32 gBattleAnimBgPalette_Dark[]; diff --git a/src/battle_anim.c b/src/battle_anim.c index 44a382296b..b52ef05922 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -2059,7 +2059,7 @@ const struct BattleAnimBackground gBattleAnimBackgroundTable[] = [BG_ROCK_WRECKER] = {gBattleAnimBgImage_Hurricane, gBattleAnimBgPalette_RockWrecker, gBattleAnimBgTilemap_Hurricane}, [BG_SPACIAL_REND_ON_OPPONENT] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_SpacialRendOpponent}, [BG_SPACIAL_REND_ON_PLAYER] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_SpacialRendPlayer}, - [BG_DARK_VOID] = {gBattleAnimBgImage_DarkVoid, gBattleAnimBgPalette_DarkVoid, gBattleAnimBgTilemap_DarkVoid}, + [BG_DARK_VOID] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_DarkVoid, gBattleAnimBgTilemap_DarkVoid}, [BG_WATER] = {gBattleAnimBgImage_HydroPump, gBattleAnimBgPalette_HydroPump, gBattleAnimBgTilemap_HydroPump}, [BG_NIGHTMARE] = {gBattleAnimBgImage_Nightmare, gBattleAnimBgPalette_Nightmare, gBattleAnimBgTilemap_Nightmare}, [BG_LEAF_STORM] = {gBattleAnimBgImage_LeafStorm, gBattleAnimBgPalette_LeafStorm, gBattleAnimBgTilemap_LeafStorm}, diff --git a/src/graphics.c b/src/graphics.c index 5ba3af42bb..153d75c712 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1397,10 +1397,6 @@ const u32 gBattleAnimBgPalette_MagmaStorm[] = INCBIN_U32("graphics/battle_anims/ //new battle bgs const u32 gBattleAnimBgPalette_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/giga_impact.gbapal.lz"); -//const u32 gBattleAnimBgImage_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/trick_room.4bpp.lz"); -//const u32 gBattleAnimBgPalette_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/trick_room.gbapal.lz"); -//const u32 gBattleAnimBgTilemap_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/trick_room_map.bin.lz"); - const u32 gBattleAnimBgImage_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.4bpp.lz"); const u32 gBattleAnimBgPalette_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.gbapal.lz"); const u32 gBattleAnimBgTilemap_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.bin.lz"); @@ -1412,11 +1408,6 @@ const u32 gBattleAnimBgPalette_SpacialRend[] = INCBIN_U32("graphics/battle_anims const u32 gBattleAnimBgTilemap_SpacialRendOpponent[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend_opponent.bin.lz"); const u32 gBattleAnimBgTilemap_SpacialRendPlayer[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend_player.bin.lz"); -const u32 gBattleAnimBgImage_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/dark_void.4bpp.lz"); -const u32 gBattleAnimBgPalette_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/dark_void.gbapal.lz"); -const u32 gBattleAnimBgTilemap_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/dark_void.bin.lz"); - - const u32 gBattleAnimBgPalette_SludgeWave[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sludge_wave.gbapal.lz"); const u32 gBattleAnimBgImage_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast_tiles.4bpp.lz"); @@ -1441,10 +1432,6 @@ const u32 gBattleAnimBgImage_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle const u32 gBattleAnimBgPalette_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.gbapal.lz"); const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin.lz"); -//const u32 gBattleAnimBgImage_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.4bpp.lz"); -//const u32 gBattleAnimBgPalette_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.gbapal.lz"); -//const u32 gBattleAnimBgTilemap_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.bin.lz"); - const u32 gBattleAnimBgPalette_DynamaxCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dynamax_cannon.gbapal.lz"); const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.4bpp.lz"); @@ -1497,8 +1484,6 @@ const u32 gBattleAnimBgImage_LeafStorm[] = INCBIN_U32("graphics/battle_anims/bac const u32 gBattleAnimBgPalette_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.gbapal.lz"); const u32 gBattleAnimBgTilemap_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.bin.lz"); -const u32 gBattleAnimBgPalette_MagicRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/magic_room.gbapal.lz"); - const u32 gBattleAnimBgImage_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.4bpp.lz"); const u32 gBattleAnimBgPalette_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.gbapal.lz"); const u32 gBattleAnimBgTilemap_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.bin.lz"); @@ -1553,6 +1538,10 @@ const u32 gBattleAnimBgImage_TrickRoom[] = INCBIN_U32("graphics/battle_anims/bac const u32 gBattleAnimBgPalette_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.gbapal.lz"); const u32 gBattleAnimBgTilemap_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.bin.lz"); +const u32 gBattleAnimBgPalette_MagicRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/magic_room.gbapal.lz"); + +const u32 gBattleAnimBgPalette_WonderRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/wonder_room.gbapal.lz"); + const u32 gBattleAnimBgImage_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.4bpp.lz"); const u32 gBattleAnimBgPalette_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.gbapal.lz"); const u32 gBattleAnimBgTilemap_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.bin.lz"); @@ -1565,7 +1554,8 @@ const u32 gBattleAnimBgImage_Waterfall[] = INCBIN_U32("graphics/battle_anims/bac const u32 gBattleAnimBgPalette_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.gbapal.lz"); const u32 gBattleAnimBgTilemap_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.bin.lz"); -const u32 gBattleAnimBgPalette_WonderRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/wonder_room.gbapal.lz"); +const u32 gBattleAnimBgPalette_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.gbapal.lz"); +const u32 gBattleAnimBgTilemap_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.bin.lz"); const u32 gBattleAnimBgImage_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.4bpp.lz"); const u32 gBattleAnimBgPalette_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.gbapal.lz"); From 4466fbd930af4a7b32521936ca40220aaeb1dccc Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Wed, 3 Nov 2021 21:36:33 -0400 Subject: [PATCH 17/31] ai version of CanPoisonType, CanBePoisoned and IsAbilityOnSide --- include/battle_ai_util.h | 2 +- src/battle_ai_main.c | 2 +- src/battle_ai_util.c | 40 +++++++++++++++++++++++++++++++--------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index b8cd53c072..304a8149db 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -54,6 +54,7 @@ bool32 IsRecycleEncouragedItem(u16 item); bool32 CanKnockOffItem(u8 battler, u16 item); bool32 IsAbilityOfRating(u16 ability, s8 rating); s8 GetAbilityRating(u16 ability); +u32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); // stat stage checks bool32 AnyStatIsRaised(u8 battlerId); @@ -120,7 +121,6 @@ bool32 IsSemiInvulnerable(u8 battlerDef, u16 move); // status checks bool32 AI_CanBeBurned(u8 battler, u16 ability); -bool32 AI_CanBePoisoned(u8 battler, u16 ability); bool32 AI_CanBeConfused(u8 battler, u16 ability); bool32 AI_CanSleep(u8 battler, u16 ability); bool32 IsBattlerIncapacitated(u8 battler, u16 ability); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 84fa7b6349..5263369472 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3999,7 +3999,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 2; break; case HOLD_EFFECT_TOXIC_ORB: - if (!ShouldPoisonSelf(battlerAtk, AI_DATA->atkAbility) && AI_CanBePoisoned(battlerDef, AI_DATA->defAbility)) + if (!ShouldPoisonSelf(battlerAtk, AI_DATA->atkAbility)) score += 2; break; case HOLD_EFFECT_FLAME_ORB: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 9640df2b40..bf10666f60 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1065,6 +1065,16 @@ bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgM return FALSE; } +u32 AI_IsAbilityOnSide(u32 battlerId, u32 ability) +{ + if (IsBattlerAlive(battlerId) && AI_GetAbility(battlerId) == ability) + return battlerId + 1; + else if (IsBattlerAlive(BATTLE_PARTNER(battlerId)) && AI_GetAbility(BATTLE_PARTNER(battlerId)) == ability) + return BATTLE_PARTNER(battlerId) + 1; + else + return 0; +} + // does NOT include ability suppression checks s32 AI_GetAbility(u32 battlerId) { @@ -2613,20 +2623,32 @@ bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, return TRUE; } -bool32 AI_CanBePoisoned(u8 battler, u16 ability) +static bool32 AI_CanPoisonType(u8 battlerAttacker, u8 battlerTarget) { - if (ability == ABILITY_IMMUNITY - || IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL) - || gBattleMons[battler].status1 & STATUS1_ANY - || IsAbilityStatusProtected(battler) - || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) + return ((AI_GetAbility(battlerAttacker) == ABILITY_CORROSION && gBattleMoves[gCurrentMove].split == SPLIT_STATUS) + || !(IS_BATTLER_OF_TYPE(battlerTarget, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerTarget, TYPE_STEEL))); +} + +static bool32 AI_CanBePoisoned(u8 battlerAtk, u8 battlerDef) +{ + u16 ability = AI_GetAbility(battlerDef); + + if (!(AI_CanPoisonType(battlerAtk, battlerDef)) + || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD + || gBattleMons[battlerDef].status1 & STATUS1_ANY + || ability == ABILITY_IMMUNITY + || ability == ABILITY_COMATOSE + || AI_IsAbilityOnSide(battlerDef, ABILITY_PASTEL_VEIL) + || gBattleMons[battlerDef].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battlerDef) + || AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; } bool32 ShouldPoisonSelf(u8 battler, u16 ability) { - if (AI_CanBePoisoned(battler, ability) && ( + if (AI_CanBePoisoned(battler, battler) && ( ability == ABILITY_MARVEL_SCALE || ability == ABILITY_POISON_HEAL || ability == ABILITY_QUICK_FEET @@ -2641,7 +2663,7 @@ bool32 ShouldPoisonSelf(u8 battler, u16 ability) bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove) { - if (!AI_CanBePoisoned(battlerDef, defAbility) + if (!AI_CanBePoisoned(battlerAtk, battlerDef) || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0 || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) @@ -2744,7 +2766,7 @@ bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGe || atkGender == defGender || atkGender == MON_GENDERLESS || defGender == MON_GENDERLESS - || IsAbilityOnSide(battlerDef, ABILITY_AROMA_VEIL)) + || AI_IsAbilityOnSide(battlerDef, ABILITY_AROMA_VEIL)) return FALSE; return TRUE; } From 012877bdc157d2ad04afcb9b47e03ae7eafd9434 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Wed, 3 Nov 2021 21:49:46 -0400 Subject: [PATCH 18/31] fix ai's def magic guard check --- src/battle_ai_main.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 84fa7b6349..767ef4e35c 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -578,6 +578,21 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) { switch (AI_DATA->defAbility) { + case ABILITY_MAGIC_GUARD: + switch (moveEffect) + { + case EFFECT_POISON: + case EFFECT_WILL_O_WISP: + case EFFECT_TOXIC: + case EFFECT_LEECH_SEED: + score -= 5; + break; + case EFFECT_CURSE: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) + score -= 5; + break; + } + break; case ABILITY_VOLT_ABSORB: case ABILITY_MOTOR_DRIVE: case ABILITY_LIGHTNING_ROD: @@ -2949,7 +2964,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } } - // ability checks + // attacker ability checks switch (AI_DATA->atkAbility) { case ABILITY_MOXIE: @@ -2960,21 +2975,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 8; // prioritize killing target for stat boost } break; - case ABILITY_MAGIC_GUARD: - switch (moveEffect) - { - case EFFECT_POISON: - case EFFECT_WILL_O_WISP: - case EFFECT_TOXIC: - case EFFECT_LEECH_SEED: - score -= 5; - break; - case EFFECT_CURSE: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) - score -= 5; - break; - } - break; } // ability checks // move effect checks From 060ae35c7cc1c638e09b2a3ae4391fd309264080 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Wed, 3 Nov 2021 21:53:28 -0400 Subject: [PATCH 19/31] fix curse magic guard check --- src/battle_ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 767ef4e35c..857908ef7a 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -588,7 +588,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 5; break; case EFFECT_CURSE: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage. score -= 5; break; } From e930dae278e8b3d2385956f353ca9b93d40bc4bb Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Thu, 4 Nov 2021 15:40:26 +1300 Subject: [PATCH 20/31] Remove ability pop up for Hunger Switch Morpeko should change form each turn without showing its ability. --- data/battle_scripts_1.s | 5 +++++ include/battle_scripts.h | 1 + src/battle_util.c | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a81d17f845..af4e969927 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6980,6 +6980,7 @@ BattleScript_AttackerFormChange:: call BattleScript_AbilityPopUp printstring STRINGID_EMPTYSTRING3 waitmessage 1 +BattleScript_AttackerFormChangeNoPopup:: handleformchange BS_ATTACKER, 0 handleformchange BS_ATTACKER, 1 playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE, NULL @@ -6991,6 +6992,10 @@ BattleScript_AttackerFormChangeEnd3:: call BattleScript_AttackerFormChange end3 +BattleScript_AttackerFormChangeEnd3NoPopup:: + call BattleScript_AttackerFormChangeNoPopup + end3 + BattleScript_BallFetch:: call BattleScript_AbilityPopUp printstring STRINGID_FETCHEDPOKEBALL diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 12212ff94a..035087fad3 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -407,5 +407,6 @@ extern const u8 BattleScript_WanderingSpiritActivates[]; extern const u8 BattleScript_MirrorArmorReflect[]; extern const u8 BattleScript_GooeyActivates[]; extern const u8 BattleScript_PastelVeilActivates[]; +extern const u8 BattleScript_AttackerFormChangeEnd3NoPopup[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/src/battle_util.c b/src/battle_util.c index b17c827555..a1e39f3293 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4578,12 +4578,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (gBattleMons[battler].species == SPECIES_MORPEKO) { gBattleMons[battler].species = SPECIES_MORPEKO_HANGRY; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup); } else if (gBattleMons[battler].species == SPECIES_MORPEKO_HANGRY) { gBattleMons[battler].species = SPECIES_MORPEKO; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup); } effect++; } From 6b10801ee8f511d5cd3ed413c8016274798c94c9 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Thu, 4 Nov 2021 10:43:33 -0400 Subject: [PATCH 21/31] convert AI_IsabilityOnSide to bool --- include/battle_ai_util.h | 2 +- src/battle_ai_util.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 304a8149db..b6df2168ea 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -54,7 +54,7 @@ bool32 IsRecycleEncouragedItem(u16 item); bool32 CanKnockOffItem(u8 battler, u16 item); bool32 IsAbilityOfRating(u16 ability, s8 rating); s8 GetAbilityRating(u16 ability); -u32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); +bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); // stat stage checks bool32 AnyStatIsRaised(u8 battlerId); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index bf10666f60..a080349799 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1065,14 +1065,14 @@ bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgM return FALSE; } -u32 AI_IsAbilityOnSide(u32 battlerId, u32 ability) +bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability) { if (IsBattlerAlive(battlerId) && AI_GetAbility(battlerId) == ability) - return battlerId + 1; + return TRUE; else if (IsBattlerAlive(BATTLE_PARTNER(battlerId)) && AI_GetAbility(BATTLE_PARTNER(battlerId)) == ability) - return BATTLE_PARTNER(battlerId) + 1; + return TRUE; else - return 0; + return FALSE; } // does NOT include ability suppression checks From 671cbabc3daa2fe217e26fa1598778f2c418ab7f Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 4 Nov 2021 17:18:26 -0300 Subject: [PATCH 22/31] Added a battle config for the Soul Dew --- include/constants/battle_config.h | 1 + src/battle_util.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index 41fee089de..792d12a9b1 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -166,6 +166,7 @@ #define B_X_ITEMS_BUFF GEN_7 // In Gen7+, the X Items raise a stat by 2 stages instead of 1. #define B_MENTAL_HERB GEN_5 // In Gen5+, the Mental Herb cures Infatuation, Taunt, Encore, Torment, Heal Block, and Disable #define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items. +#define B_SOUL_DEW_BOOST GEN_7 // In Gens3-6, Soul Dew boosts the power of Lati@s' stats. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. diff --git a/src/battle_util.c b/src/battle_util.c index 5a9d47df98..f2b1860022 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8059,7 +8059,10 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, holdEffectModifier); break; case HOLD_EFFECT_SOUL_DEW: - if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER)) + if (((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) + && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && B_SOUL_DEW_BOOST <= GEN_6) + || ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) + && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON) && B_SOUL_DEW_BOOST >= GEN_7)) MulModifier(&modifier, holdEffectModifier); break; case HOLD_EFFECT_GEMS: From 9a3739d2bdc439c9189ad8d62b6ee480be09347c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 4 Nov 2021 21:00:39 -0300 Subject: [PATCH 23/31] Review changes --- src/battle_util.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index f2b1860022..c9fefe61b2 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8059,10 +8059,11 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, holdEffectModifier); break; case HOLD_EFFECT_SOUL_DEW: - if (((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) - && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && B_SOUL_DEW_BOOST <= GEN_6) - || ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) - && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON) && B_SOUL_DEW_BOOST >= GEN_7)) + #if B_SOUL_DEW_BOOST >= GEN_7 + if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON)) + #else + if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER)) + #endif MulModifier(&modifier, holdEffectModifier); break; case HOLD_EFFECT_GEMS: @@ -8475,6 +8476,14 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, if (!usesDefStat) MulModifier(&modifier, UQ_4_12(1.5)); break; +#if B_SOUL_DEW_BOOST <= GEN_6 + case HOLD_EFFECT_SOUL_DEW: + if ((gBattleMons[battlerDef].species == SPECIES_LATIAS || gBattleMons[battlerDef].species == SPECIES_LATIOS) + && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + && !usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); + break; +#endif } // sandstorm sp.def boost for rock types From bf786c6c9a8069be877aea3b5723d7a46660b7cb Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Fri, 5 Nov 2021 18:22:52 +1300 Subject: [PATCH 24/31] Fix Magma Storm Fix the strings and animation displayed when Magma Storm. Also move gTrappingMoves to battle_script_message.c as it's only sued in this file, and this allows ARRAY_COUNT(sTrappingMoves) to replace the constant in SetMoveEffect. --- data/battle_anim_scripts.s | 27 +++++++++++++++++++++++++++ include/battle_message.h | 1 - include/constants/battle_anim.h | 3 ++- include/constants/battle_string_ids.h | 2 +- src/battle_anim_throw.c | 2 ++ src/battle_message.c | 24 ++++++++++-------------- src/battle_script_commands.c | 9 +++++++-- 7 files changed, 49 insertions(+), 19 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index cfe95371de..4198f64104 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -24037,6 +24037,7 @@ General_TurnTrap: jumpargeq 0, TRAP_ANIM_WHIRLPOOL, Status_Whirlpool jumpargeq 0, TRAP_ANIM_CLAMP, Status_Clamp jumpargeq 0, TRAP_ANIM_SAND_TOMB, Status_SandTomb + jumpargeq 0, TRAP_ANIM_MAGMA_STORM, Status_MagmaStorm jumpargeq 0, TRAP_ANIM_INFESTATION, Status_Infestation goto Status_BindWrap Status_BindWrap: @@ -24063,6 +24064,32 @@ Status_FireSpin: stopsound end +Status_MagmaStorm: + loadspritegfx ANIM_TAG_SMALL_EMBER + fadetobg BG_MAGMA_STORM + waitbgfadeout + createvisualtask AnimTask_MoveSeismicTossBg, 3 + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 5, 8 + createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + call FireSpinEffect + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + call FireSpinEffect + createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7) + call FireSpinEffect + restorebg + waitbgfadeout + setarg 7, 0xFFF + waitbgfadein + stopsound + clearmonbg ANIM_DEF_PARTNER + blendoff + end + Status_Whirlpool: loadspritegfx ANIM_TAG_WATER_ORB monbg ANIM_DEF_PARTNER diff --git a/include/battle_message.h b/include/battle_message.h index e8b362c9ee..5c10f9e04a 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -310,6 +310,5 @@ extern const u8 gText_BattleTourney[]; extern const u16 gMissStringIds[]; extern const u16 gStatUpStringIds[]; -extern const u16 gTrappingMoves[]; #endif // GUARD_BATTLE_MESSAGE_H diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index c7871bd154..7df75794e2 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -565,7 +565,8 @@ #define TRAP_ANIM_WHIRLPOOL 2 #define TRAP_ANIM_CLAMP 3 #define TRAP_ANIM_SAND_TOMB 4 -#define TRAP_ANIM_INFESTATION 5 +#define TRAP_ANIM_MAGMA_STORM 5 +#define TRAP_ANIM_INFESTATION 6 // Weather defines for battle animation scripts. #define ANIM_WEATHER_NONE 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 74105f3bfe..8fba7597c9 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -410,7 +410,7 @@ #define STRINGID_PKMNTWISTEDDIMENSIONS 406 #define STRINGID_POINTEDSTONESFLOAT 407 #define STRINGID_CLOAKEDINMYSTICALMOONLIGHT 408 -#define STRINGID_TRAPPERBYSWIRLINGMAGMA 409 +#define STRINGID_TRAPPEDBYSWIRLINGMAGMA 409 #define STRINGID_VANISHEDINSTANTLY 410 #define STRINGID_PROTECTEDTEAM 411 #define STRINGID_SHAREDITSGUARD 412 diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 207d1255d6..f325cba07a 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -2496,6 +2496,8 @@ void AnimTask_GetTrappedMoveAnimId(u8 taskId) gBattleAnimArgs[0] = TRAP_ANIM_CLAMP; else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_SAND_TOMB) gBattleAnimArgs[0] = TRAP_ANIM_SAND_TOMB; + else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_MAGMA_STORM) + gBattleAnimArgs[0] = TRAP_ANIM_MAGMA_STORM; else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_INFESTATION) gBattleAnimArgs[0] = TRAP_ANIM_INFESTATION; else diff --git a/src/battle_message.c b/src/battle_message.c index 60b7f5203d..f52f6be7e4 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1200,7 +1200,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNTWISTEDDIMENSIONS - 12] = sText_PkmnTwistedDimensions, [STRINGID_POINTEDSTONESFLOAT - 12] = sText_PointedStonesFloat, [STRINGID_CLOAKEDINMYSTICALMOONLIGHT - 12] = sText_CloakedInMysticalMoonlight, - [STRINGID_TRAPPERBYSWIRLINGMAGMA - 12] = sText_TrappedBySwirlingMagma, + [STRINGID_TRAPPEDBYSWIRLINGMAGMA - 12] = sText_TrappedBySwirlingMagma, [STRINGID_VANISHEDINSTANTLY - 12] = sText_VanishedInstantly, [STRINGID_PROTECTEDTEAM - 12] = sText_ProtectedTeam, [STRINGID_SHAREDITSGUARD - 12] = sText_SharedItsGuard, @@ -1535,16 +1535,17 @@ const u16 gFirstTurnOfTwoStringIds[] = [B_MSG_TURN1_FREEZE_SHOCK] = STRINGID_CLOAKEDINAFREEZINGLIGHT, }; -// Index copied from move's index in gTrappingMoves +// Index copied from move's index in sTrappingMoves const u16 gWrappedStringIds[] = { - STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND - STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP - STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN - STRINGID_PKMNCLAMPED, // MOVE_CLAMP - STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL - STRINGID_PKMNTRAPPEDBYSANDTOMB,// MOVE_SAND_TOMB - STRINGID_INFESTATION, // MOVE_INFESTATION + STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND + STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP + STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN + STRINGID_PKMNCLAMPED, // MOVE_CLAMP + STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL + STRINGID_PKMNTRAPPEDBYSANDTOMB, // MOVE_SAND_TOMB + STRINGID_TRAPPEDBYSWIRLINGMAGMA, // MOVE_MAGMA_STORM + STRINGID_INFESTATION, // MOVE_INFESTATION }; const u16 gMistUsedStringIds[] = @@ -1755,11 +1756,6 @@ const u16 gCaughtMonStringIds[] = [B_MSG_LANETTES_BOX_FULL] = STRINGID_PKMNBOXLANETTESPCFULL, }; -const u16 gTrappingMoves[] = -{ - MOVE_BIND, MOVE_WRAP, MOVE_FIRE_SPIN, MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, MOVE_INFESTATION, 0xFFFF -}; - const u16 gRoomsStringIds[] = { STRINGID_PKMNTWISTEDDIMENSIONS, STRINGID_TRICKROOMENDS, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6f0fec8a7e..dd49d0493b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -279,6 +279,11 @@ static const s32 sExperienceScalingFactors[] = 159767, }; +static const u16 sTrappingMoves[] = +{ + MOVE_BIND, MOVE_WRAP, MOVE_FIRE_SPIN, MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, MOVE_MAGMA_STORM, MOVE_INFESTATION, 0xFFFF +}; + #define STAT_CHANGE_WORKED 0 #define STAT_CHANGE_DIDNT_WORK 1 @@ -2978,9 +2983,9 @@ void SetMoveEffect(bool32 primary, u32 certain) for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; ; gBattleCommunication[MULTISTRING_CHOOSER]++) { - if (gBattleCommunication[MULTISTRING_CHOOSER] > 5) + if (gBattleCommunication[MULTISTRING_CHOOSER] > ARRAY_COUNT(sTrappingMoves)) break; - if (gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove) + if (sTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove) break; } } From 3f1ce399e640c4e43c889e11cded0a1b94a1c90d Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Fri, 5 Nov 2021 18:37:45 +1300 Subject: [PATCH 25/31] Account for terminator in sTrappingMoves --- src/battle_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index dd49d0493b..b81639db0c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2983,7 +2983,7 @@ void SetMoveEffect(bool32 primary, u32 certain) for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; ; gBattleCommunication[MULTISTRING_CHOOSER]++) { - if (gBattleCommunication[MULTISTRING_CHOOSER] > ARRAY_COUNT(sTrappingMoves)) + if (gBattleCommunication[MULTISTRING_CHOOSER] > ARRAY_COUNT(sTrappingMoves) - 1) break; if (sTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove) break; From d15eeeb8eb7724697438e0e2269dc7d53348dbba Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 5 Nov 2021 10:37:41 -0300 Subject: [PATCH 26/31] Fixed the comment for B_SOUL_DEW_BOOST --- include/constants/battle_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index 792d12a9b1..faf57a40cd 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -166,7 +166,7 @@ #define B_X_ITEMS_BUFF GEN_7 // In Gen7+, the X Items raise a stat by 2 stages instead of 1. #define B_MENTAL_HERB GEN_5 // In Gen5+, the Mental Herb cures Infatuation, Taunt, Encore, Torment, Heal Block, and Disable #define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items. -#define B_SOUL_DEW_BOOST GEN_7 // In Gens3-6, Soul Dew boosts the power of Lati@s' stats. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. +#define B_SOUL_DEW_BOOST GEN_7 // In Gens3-6, Soul Dew boosts Lati@s' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. From 13029cd3b38049b880212e247234eb2ae2c2cfa5 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 5 Nov 2021 10:50:21 -0300 Subject: [PATCH 27/31] Tweaked VARIOUS_PHOTON_GEYSER_CHECK and VARIOUS_SHELL_SIDE_ARM_CHECK --- src/battle_script_commands.c | 56 ++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 73dcca97c4..a89487ce82 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8996,50 +8996,50 @@ static void Cmd_various(void) return; case VARIOUS_PHOTON_GEYSER_CHECK: { - u32 attStat = gBattleMons[gActiveBattler].attack; - u8 atkStage = gBattleMons[gActiveBattler].statStages[STAT_ATK]; - u32 spaStat = gBattleMons[gActiveBattler].spAttack; + u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack; + u8 attackerAtkStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; + u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack; - attStat *= gStatStageRatios[atkStage][0]; - attStat /= gStatStageRatios[atkStage][1]; + attackerAtkStat *= gStatStageRatios[attackerAtkStage][0]; + attackerAtkStat /= gStatStageRatios[attackerAtkStage][1]; - atkStage = gBattleMons[gActiveBattler].statStages[STAT_SPATK]; - spaStat *= gStatStageRatios[atkStage][0]; - spaStat /= gStatStageRatios[atkStage][1]; + attackerAtkStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; + attackerSpAtkStat *= gStatStageRatios[attackerAtkStage][0]; + attackerSpAtkStat /= gStatStageRatios[attackerAtkStage][1]; - if (attStat > spaStat) + if (attackerAtkStat > attackerSpAtkStat) gSwapDamageCategory = TRUE; break; } case VARIOUS_SHELL_SIDE_ARM_CHECK: // 0% chance GameFreak actually checks this way according to DaWobblefet, but this is the only functional explanation at the moment { - u32 attStat = gBattleMons[gBattlerAttacker].attack; - u8 atkStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; - u32 attStatDef = gBattleMons[gBattlerTarget].attack; + u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack; + u32 targetDefStat = gBattleMons[gBattlerTarget].defense; + u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack; + u32 targetSpDefStat = gBattleMons[gBattlerTarget].spDefense; + u8 statStage; u32 physical; - - u32 spaStat = gBattleMons[gBattlerAttacker].spAttack; - u32 spaStatDef = gBattleMons[gBattlerTarget].spAttack; u32 special; - attStat *= gStatStageRatios[atkStage][0]; - attStat /= gStatStageRatios[atkStage][1]; + statStage = = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; + attackerAtkStat *= gStatStageRatios[statStage][0]; + attackerAtkStat /= gStatStageRatios[statStage][1]; - atkStage = gBattleMons[gBattlerTarget].statStages[STAT_ATK]; - attStatDef *= gStatStageRatios[atkStage][0]; - attStatDef /= gStatStageRatios[atkStage][1]; + statStage = gBattleMons[gBattlerTarget].statStages[STAT_ATK]; + targetDefStat *= gStatStageRatios[statStage][0]; + targetDefStat /= gStatStageRatios[statStage][1]; - physical = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * attStat) / attStatDef) / 50); + physical = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * attackerAtkStat) / targetDefStat) / 50); - atkStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; - spaStat *= gStatStageRatios[atkStage][0]; - spaStat /= gStatStageRatios[atkStage][1]; + statStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; + attackerSpAtkStat *= gStatStageRatios[statStage][0]; + attackerSpAtkStat /= gStatStageRatios[statStage][1]; - atkStage = gBattleMons[gBattlerTarget].statStages[STAT_SPATK]; - spaStatDef *= gStatStageRatios[atkStage][0]; - spaStatDef /= gStatStageRatios[atkStage][1]; + statStage = gBattleMons[gBattlerTarget].statStages[STAT_SPATK]; + targetSpDefStat *= gStatStageRatios[statStage][0]; + targetSpDefStat /= gStatStageRatios[statStage][1]; - special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * spaStat) / spaStatDef) / 50); + special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * attackerSpAtkStat) / targetSpDefStat) / 50); if (((physical > special) || (physical == special && (Random() % 2) == 0))) gSwapDamageCategory = TRUE; From b23d5db5981b100f5d241a3cba3c0fee68b47a1d Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 5 Nov 2021 13:02:16 -0300 Subject: [PATCH 28/31] Oops --- src/battle_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 97a7b034fc..ec7c6effa2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9032,7 +9032,7 @@ static void Cmd_various(void) u32 physical; u32 special; - statStage = = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; + statStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; attackerAtkStat *= gStatStageRatios[statStage][0]; attackerAtkStat /= gStatStageRatios[statStage][1]; From 14ebba04afd2972b2f79ca89159ff643a7f698d9 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Sat, 6 Nov 2021 12:43:57 +1300 Subject: [PATCH 29/31] Align comment with others Co-authored-by: Eduardo Quezada D'Ottone --- data/battle_scripts_1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 30facd40d8..a85b2e2a7c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -367,7 +367,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectGeomancy @ EFFECT_GEOMANCY .4byte BattleScript_EffectFairyLock @ EFFECT_FAIRY_LOCK .4byte BattleScript_EffectAllySwitch @ EFFECT_ALLY_SWITCH - .4byte BattleScript_EffectRelicSong @ EFFECT_RELIC_SONG + .4byte BattleScript_EffectRelicSong @ EFFECT_RELIC_SONG .4byte BattleScript_EffectAttackerDefenseDownHit @ EFFECT_ATTACKER_DEFENSE_DOWN_HIT .4byte BattleScript_EffectHit @ EFFECT_BODY_PRESS .4byte BattleScript_EffectEerieSpell @ EFFECT_EERIE_SPELL From 4bdbef9a9d25d8e547c2bd97e962df3b43d95e05 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 5 Nov 2021 22:21:50 -0300 Subject: [PATCH 30/31] Use the right defensive target stats during Shell Side Arm calculation --- src/battle_script_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ec7c6effa2..938c4bf54a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9036,7 +9036,7 @@ static void Cmd_various(void) attackerAtkStat *= gStatStageRatios[statStage][0]; attackerAtkStat /= gStatStageRatios[statStage][1]; - statStage = gBattleMons[gBattlerTarget].statStages[STAT_ATK]; + statStage = gBattleMons[gBattlerTarget].statStages[STAT_DEF]; targetDefStat *= gStatStageRatios[statStage][0]; targetDefStat /= gStatStageRatios[statStage][1]; @@ -9046,7 +9046,7 @@ static void Cmd_various(void) attackerSpAtkStat *= gStatStageRatios[statStage][0]; attackerSpAtkStat /= gStatStageRatios[statStage][1]; - statStage = gBattleMons[gBattlerTarget].statStages[STAT_SPATK]; + statStage = gBattleMons[gBattlerTarget].statStages[STAT_SPDEF]; targetSpDefStat *= gStatStageRatios[statStage][0]; targetSpDefStat /= gStatStageRatios[statStage][1]; From c2e8c1058fdd73c97a9b3e112bf03962e05d5aea Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 5 Nov 2021 23:07:26 -0300 Subject: [PATCH 31/31] Force set gSwapDamageCategory's initial value in Photon Geyser's and Shell Side Arm's calculations --- src/battle_script_commands.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 938c4bf54a..78872b638b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9011,6 +9011,8 @@ static void Cmd_various(void) u8 attackerAtkStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack; + gSwapDamageCategory = FALSE; + attackerAtkStat *= gStatStageRatios[attackerAtkStage][0]; attackerAtkStat /= gStatStageRatios[attackerAtkStage][1]; @@ -9032,6 +9034,8 @@ static void Cmd_various(void) u32 physical; u32 special; + gSwapDamageCategory = FALSE; + statStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; attackerAtkStat *= gStatStageRatios[statStage][0]; attackerAtkStat /= gStatStageRatios[statStage][1];