From e62be0b3a900fff2f119299227398f11f33f8b47 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Sat, 1 Nov 2025 19:01:18 +0000 Subject: [PATCH 1/3] Fixes Sticky Barb never getting transferred to attacker + tests --- src/battle_hold_effects.c | 2 +- test/battle/hold_effect/sticky_barb.c | 48 +++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 test/battle/hold_effect/sticky_barb.c diff --git a/src/battle_hold_effects.c b/src/battle_hold_effects.c index ec47a3f8d9..270cbece62 100644 --- a/src/battle_hold_effects.c +++ b/src/battle_hold_effects.c @@ -588,7 +588,7 @@ static enum ItemEffect TryStickyBarbOnTargetHit(u32 battlerDef, u32 battlerAtk, && !DoesSubstituteBlockMove(battlerAtk, battlerDef, gCurrentMove) && IsBattlerAlive(battlerAtk) && CanStealItem(battlerAtk, battlerDef, item) - && item == ITEM_NONE) + && gBattleMons[battlerAtk].item == ITEM_NONE) { // No sticky hold checks. gEffectBattler = battlerDef; diff --git a/test/battle/hold_effect/sticky_barb.c b/test/battle/hold_effect/sticky_barb.c new file mode 100644 index 0000000000..65da61d30f --- /dev/null +++ b/test/battle/hold_effect/sticky_barb.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_STICKY_BARB].holdEffect == HOLD_EFFECT_STICKY_BARB); +} + +SINGLE_BATTLE_TEST("Sticky Barb hurts its holder at the end of the turn", s16 damage) +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_STICKY_BARB); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + } SCENE { + HP_BAR(player, captureDamage: &results[i].damage); + } THEN { + EXPECT_EQ(results[0].damage, player->maxHP / 8); + } +} + +SINGLE_BATTLE_TEST("Sticky Barb gets transferred if its holder is hit by a contact move") +{ + u32 move; + PARAMETRIZE { move = MOVE_SCRATCH; } + PARAMETRIZE { move = MOVE_GROWL; } + PARAMETRIZE { move = MOVE_HYPER_VOICE; } + GIVEN { + ASSUME(MoveMakesContact(MOVE_SCRATCH)); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_STICKY_BARB); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (MoveMakesContact(move)) + { + MESSAGE("The Sticky Barb attached itself to the opposing Wobbuffet!"); + MESSAGE("The opposing Wobbuffet was hurt by the Sticky Barb!"); + } + else + { + NOT MESSAGE("The Sticky Barb attached itself to the opposing Wobbuffet!"); + MESSAGE("Wobbuffet was hurt by the Sticky Barb!"); + } + } +} From c9c0b79dcb5fdecf7d1374963327f1a2c93e0bac Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Sat, 1 Nov 2025 19:02:27 +0000 Subject: [PATCH 2/3] Assumes for the other moves --- test/battle/hold_effect/sticky_barb.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/battle/hold_effect/sticky_barb.c b/test/battle/hold_effect/sticky_barb.c index 65da61d30f..124cdbbe3d 100644 --- a/test/battle/hold_effect/sticky_barb.c +++ b/test/battle/hold_effect/sticky_barb.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gItemsInfo[ITEM_STICKY_BARB].holdEffect == HOLD_EFFECT_STICKY_BARB); + ASSUME(GetItemHoldEffect(ITEM_STICKY_BARB) == HOLD_EFFECT_STICKY_BARB); } SINGLE_BATTLE_TEST("Sticky Barb hurts its holder at the end of the turn", s16 damage) @@ -28,6 +28,8 @@ SINGLE_BATTLE_TEST("Sticky Barb gets transferred if its holder is hit by a conta PARAMETRIZE { move = MOVE_HYPER_VOICE; } GIVEN { ASSUME(MoveMakesContact(MOVE_SCRATCH)); + ASSUME(!MoveMakesContact(MOVE_GROWL)); + ASSUME(!MoveMakesContact(MOVE_HYPER_VOICE)); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_STICKY_BARB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { From f206746bfa6988a585ddcf1c3e005ba136d77917 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Sat, 1 Nov 2025 19:33:51 +0000 Subject: [PATCH 3/3] Fix test --- test/battle/hold_effect/sticky_barb.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/battle/hold_effect/sticky_barb.c b/test/battle/hold_effect/sticky_barb.c index 124cdbbe3d..59c1e12270 100644 --- a/test/battle/hold_effect/sticky_barb.c +++ b/test/battle/hold_effect/sticky_barb.c @@ -6,17 +6,18 @@ ASSUMPTIONS ASSUME(GetItemHoldEffect(ITEM_STICKY_BARB) == HOLD_EFFECT_STICKY_BARB); } -SINGLE_BATTLE_TEST("Sticky Barb hurts its holder at the end of the turn", s16 damage) +SINGLE_BATTLE_TEST("Sticky Barb hurts its holder at the end of the turn") { + s16 damage; GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_STICKY_BARB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { } } SCENE { - HP_BAR(player, captureDamage: &results[i].damage); + HP_BAR(player, captureDamage: &damage); } THEN { - EXPECT_EQ(results[0].damage, player->maxHP / 8); + EXPECT_EQ(damage, player->maxHP / 8); } }