conflicts

This commit is contained in:
AlexOn1ine 2025-05-30 19:20:32 +02:00
commit f4c64a2d79
7 changed files with 40 additions and 14 deletions

View File

@ -7722,8 +7722,9 @@ BattleScript_SupersweetSyrupLoopIncrement:
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_SupersweetSyrupLoop
copybyte sBATTLER, gBattlerAttacker
destroyabilitypopup
restoretarget
restoretarget
pause B_WAIT_TIME_MED
tryintimidatejectpack
end3
BattleScript_SupersweetSyrupWontDecrease:

View File

@ -82,19 +82,19 @@ enum {
(gBattleControllerExecFlags & (1u << battler))
#define MARK_BATTLE_CONTROLLER_MESSAGE_OUTBOUND_OVER_LINK(battler) \
gBattleControllerExecFlags |= (1u << battler) << (32 - MAX_BATTLERS_COUNT)
gBattleControllerExecFlags |= ((1u << battler) << (32 - MAX_BATTLERS_COUNT))
#define MARK_BATTLE_CONTROLLER_MESSAGE_SYNCHRONIZED_OVER_LINK(battler) \
gBattleControllerExecFlags &= ~((1 << 28) << (battler))
#define MARK_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \
gBattleControllerExecFlags |= (1u << battler) << ((playerId) << 2)
gBattleControllerExecFlags |= ((1u << battler) << ((playerId) << 2))
#define MARK_BATTLE_CONTROLLER_IDLE_FOR_PLAYER(battler, playerId) \
gBattleControllerExecFlags &= ~(1u << battler) << ((playerId) * 4)
gBattleControllerExecFlags &= ~((1u << battler) << ((playerId) * 4))
#define IS_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \
(gBattleControllerExecFlags & (1u << battler) << ((playerId) * 4))
(gBattleControllerExecFlags & ((1u << battler) << ((playerId) * 4)))
// This actually checks if a specific controller is active on any player or if
// *any* controller is pending sync over link communications, but the macro name

View File

@ -268,9 +268,9 @@ enum MoveEndEffects
MOVEEND_SKY_DROP_CONFUSE,
MOVEEND_UPDATE_LAST_MOVES,
MOVEEND_MIRROR_MOVE,
MOVEEND_DEFROST,
MOVEEND_NEXT_TARGET, // Everything up until here is handled for each strike of a spread move
MOVEEND_MULTIHIT_MOVE,
MOVEEND_DEFROST,
MOVEEND_SECOND_MOVE_BLOCK,
MOVEEND_ITEM_EFFECTS_ATTACKER,
MOVEEND_ABILITY_BLOCK,

18
test/battle/defrost.c Normal file
View File

@ -0,0 +1,18 @@
#include "global.h"
#include "test/battle.h"
DOUBLE_BATTLE_TEST("Defrost: A fire type spread move will thaw both targets")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); }
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_HEAT_WAVE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAT_WAVE, playerLeft);
STATUS_ICON(opponentLeft, freeze: FALSE);
STATUS_ICON(opponentRight, freeze: FALSE);
}
}

View File

@ -161,12 +161,16 @@ SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Eject Butt
}
}
DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after intimidate")
DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after an ability stat drop")
{
u32 speed;
u32 species, ability;
PARAMETRIZE { speed = 1; }
PARAMETRIZE { speed = 11; }
PARAMETRIZE { species = SPECIES_EKANS; ability = ABILITY_INTIMIDATE; speed = 1; }
PARAMETRIZE { species = SPECIES_EKANS; ability = ABILITY_INTIMIDATE; speed = 11; }
PARAMETRIZE { species = SPECIES_DIPPLIN; ability = ABILITY_SUPERSWEET_SYRUP; speed = 1; }
PARAMETRIZE { species = SPECIES_DIPPLIN; ability = ABILITY_SUPERSWEET_SYRUP; speed = 11; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_EJECT_PACK); }
@ -174,7 +178,7 @@ DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after
PLAYER(SPECIES_WOBBUFFET) { Speed(3); }
OPPONENT(SPECIES_WYNAUT) { Speed(4); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
OPPONENT(SPECIES_EKANS) { Speed(6); Ability(ABILITY_INTIMIDATE); }
OPPONENT(species) { Speed(6); Ability(ability); }
} WHEN {
TURN {
SWITCH(opponentLeft, 2);
@ -184,14 +188,18 @@ DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after
SEND_OUT(playerLeft, 2);
}
} SCENE {
ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE);
ABILITY_POPUP(opponentLeft, ability);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
if (speed == 11) {
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
} else {
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
}
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
}
}

View File

@ -80,7 +80,7 @@ DOUBLE_BATTLE_TEST("Heal Bell/Aromatherapy cures the entire party of the user fr
case STATUS1_FROSTBITE: STATUS_ICON(playerLeft, frostbite: FALSE); STATUS_ICON(playerRight, frostbite: FALSE); break;
}
for (j = 0; j < PARTY_SIZE; j++)
EXPECT_EQ(GetMonData(&gPlayerParty[i], MON_DATA_STATUS), STATUS1_NONE);
EXPECT_EQ(GetMonData(&gPlayerParty[j], MON_DATA_STATUS), STATUS1_NONE);
}
}

View File

@ -3,7 +3,6 @@
DOUBLE_BATTLE_TEST("Spread Moves: Ability and Item effects activate correctly after a multi target move")
{
// TODO: Might be a bug, verify on cardridge
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); }
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_COVERT_CLOAK); }