Held item
An item a creature carries into battle, whose effect the battle code reads on its own, with no turn spent to use it.
On this page
In the Pokémon games from Gold and Silver on, each item record carries a held effect and a parameter, and battle routines check the holder’s item as they run1. The Quick Claw shows the parameter at work: 60 in 256 in Gold and Silver2, 20% in Ruby and Sapphire3. Pokémon FireRed and LeafGreen order turns as Pokémon Emerald does, Quick Claw included, except that they withhold the third badge’s Speed bonus in link battles alone, where Emerald also withholds it in recorded-link and Frontier battles4,5.
Pokémon Crystal keeps Gold and Silver’s BrightPowder and Quick Claw code unchanged6,2. A held Smoke Ball in Crystal always escapes a wild battle7.
- Pokémon Gold and Silver (1999). Each item carries a held effect and a parameter that battle code reads.1,2,6
- Pokémon Crystal (2000). Gold and Silver's held effects: a Scope Lens, a BrightPowder, a Quick Claw, and a Smoke Ball.8,9,10,7
- Pokémon Ruby and Sapphire (2002). Items carry a hold effect and a parameter; the Quick Claw's is 20%.3
- Pokémon Emerald (2004). A Scope Lens, a Smoke Ball, a Macho Brace, and a Quick Claw.11,12,5
Games
| Game | Year | How | Note |
|---|---|---|---|
| Pokémon Gold and Silver | 1999 | each item carries a held effect and a parameter that battle code reads | |
| Pokémon Crystal | 2000 | Gold and Silver's held effects: a Scope Lens, a BrightPowder, a Quick Claw, and a Smoke Ball | |
| Pokémon Ruby and Sapphire | 2002 | items carry a hold effect and a parameter; the Quick Claw's is 20% | |
| Pokémon Emerald | 2004 | a Scope Lens, a Smoke Ball, a Macho Brace, and a Quick Claw | |
| Pokémon Platinum | 2008 | the critical-rate items, as in Emerald | |
| Pokémon HeartGold and SoulSilver | 2009 | a Cleanse Tag or Pure Incense on the lead Pokémon cuts the encounter rate to two thirds |
Every claim about this mechanic, by game (19)
References
- ^ abEach Gold and Silver item record carries a held effect and a parameter, which battle code reads from the item a Pokémon holds; Quick Claw's is 60, BrightPowder's 20, Leftovers' 10, and Scope Lens's
HELD_CRITICAL_UPhas 0.Codepret/pokegoldHow we know
155; QUICK_CLAW 156 item_attribute 100, HELD_QUICK_CLAW, 60, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 155–156 at fc702b6 · upstream ↗ 289; SCOPE_LENS 290 item_attribute 200, HELD_CRITICAL_UP, 0, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 289–290 at fc702b6 · upstream ↗ 302; LEFTOVERS 303 item_attribute 200, HELD_LEFTOVERS, 10, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 302–303 at fc702b6 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abcGold and Silver order moves by priority, 3 for Protect and Endure, 2 for the priority-hit moves, 0 for Vital Throw and the force-switch, Counter, and Mirror Coat effects, and 1 for the rest; at equal priority a held Quick Claw goes first when a random byte is below its value, 60, about 23% of the time, and otherwise the higher Speed goes first, with a tie split evenly; Crystal keeps the routine.Codepret/pokegoldrevised
How we know
433 call CompareMovePriority ⋮ 445 cp HELD_QUICK_CLAW ⋮ 448 cp HELD_QUICK_CLAW ⋮ 450 call BattleRandom 451 cp e
engine/battle/core.asm lines 431–452 at fc702b6 · upstream ↗ 781GetMovePriority: 782; Return the priority (0-3) of move a. ⋮ 786 ; Vital Throw goes last. 787 cp VITAL_THROW
engine/battle/core.asm lines 781–792 at fc702b6 · upstream ↗ 1MoveEffectPriorities: 2 db EFFECT_PROTECT, 3 3 db EFFECT_ENDURE, 3 4 db EFFECT_PRIORITY_HIT, 2 5 db EFFECT_FORCE_SWITCH, 0 6 db EFFECT_COUNTER, 0 7 db EFFECT_MIRROR_COAT, 0
data/moves/effects_priorities.asm lines 1–8 at fc702b6 · upstream ↗ 155; QUICK_CLAW 156 item_attribute 100, HELD_QUICK_CLAW, 60, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 155–156 at fc702b6 · upstream ↗ 485.speed_check 486 ld de, wBattleMonSpeed 487 ld hl, wEnemyMonSpeed 488 ld c, 2 489 call CompareBytes 490 jr z, .speed_tie 491 jp nc, .player_first 492 jp .enemy_first ⋮ 494.speed_tie ⋮ 498 call BattleRandom 499 cp 50 percent + 1 ⋮ 501 jp .enemy_first
engine/battle/core.asm lines 485–501 at fc702b6 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^ abRuby and Sapphire's
GetWhoStrikesFirstputs the higher-priority move first; at equal priority the higher adjusted Speed goes first, and a tie is a coin flip. Adjusted Speed applies stat stages, doubles for Swift Swim in rain or Chlorophyll in sun, takes ×1.1 for the player's Pokémon with the third badge outside link battles, halves with a Macho Brace, and quarters under paralysis; a held Quick Claw sets it to the maximum when a per-turn random number is below its parameter, 20, as a percent of 0xFFFF.Codepret/pokerubyrevisedHow we know
4594 // Check for abilities that boost speed in weather. ⋮ 4599 bank1SpeedMultiplier = 2; ⋮ 4615 // Calculate adjusted speed for first mon. 4616 bank1AdjustedSpeed = (gBattleMons[bank1].speed * bank1SpeedMultiplier) 4617 * gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][0] / gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][1]; ⋮ 4631 if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBattlerSide(bank1) == 0) 4632 bank1AdjustedSpeed = (bank1AdjustedSpeed * 110) / 100; ⋮ 4634 if (heldItemEffect == HOLD_EFFECT_MACHO_BRACE) 4635 bank1AdjustedSpeed /= 2; ⋮ 4637 if (gBattleMons[bank1].status1 & STATUS1_PARALYSIS) 4638 bank1AdjustedSpeed /= 4; ⋮ 4640 if (heldItemEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (heldItemEffectParam * 0xFFFF) / 100) ⋮
src/battle_main.c lines 4594–4641 at 5784633 · upstream ↗ 4701 if (gBattleMoves[bank1Move].priority != 0 || gBattleMoves[bank2Move].priority != 0) ⋮ 4703 if (gBattleMoves[bank1Move].priority == gBattleMoves[bank2Move].priority) ⋮ 4705 if (bank1AdjustedSpeed == bank2AdjustedSpeed && (Random() & 1)) 4706 strikesFirst = 2; 4707 else if (bank1AdjustedSpeed < bank2AdjustedSpeed) 4708 strikesFirst = 1; ⋮ 4711 strikesFirst = 1; ⋮ 4713 else ⋮ 4715 if (bank1AdjustedSpeed == bank2AdjustedSpeed && (Random() & 1)) 4716 strikesFirst = 2; 4717 else if (bank1AdjustedSpeed < bank2AdjustedSpeed) 4718 strikesFirst = 1;
src/battle_main.c lines 4701–4718 at 5784633 · upstream ↗ 2932 .name = _("QUICK CLAW"), ⋮ 2935 .holdEffect = HOLD_EFFECT_QUICK_CLAW, 2936 .holdEffectParam = 20,
src/data/items_en.h lines 2932–2936 at 5784633 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^FireRed and LeafGreen's
GetWhoStrikesFirstis Emerald's rule: the higher-priority move first, then the higher adjusted Speed, with a tie a coin flip, and a Quick Claw that sets Speed to the maximum on its roll. It differs only in withholding the third badge's ×1.1 Speed in link battles alone, where Emerald also withholds it in recorded-link and Frontier battles.Codepret/pokefirered · pret/pokeemeraldrevisedHow we know
3442 // badge boost 3443 if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) ⋮ 3451 if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100) 3452 speedBattler1 = UINT_MAX;
src/battle_main.c lines 3442–3452 at ce6406d · upstream ↗ 3505 if (gBattleMoves[moveBattler1].priority != 0 || gBattleMoves[moveBattler2].priority != 0) ⋮ 3508 if (gBattleMoves[moveBattler1].priority == gBattleMoves[moveBattler2].priority) ⋮ 3510 if (speedBattler1 == speedBattler2 && Random() & 1) ⋮ 3516 else if (gBattleMoves[moveBattler1].priority < gBattleMoves[moveBattler2].priority) 3517 strikesFirst = 1; // battler2's move has greater priority
src/battle_main.c lines 3505–3517 at ce6406d · upstream ↗ 4639 // badge boost 4640 if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) ⋮ 4653 if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100) 4654 speedBattler1 = UINT_MAX;
src/battle_main.c lines 4639–4654 at 731ad5b · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^ ab
GetWhoStrikesFirstputs the higher-priority move first; at equal priority the higher Speed goes first, after stat stages, Swift Swim or Chlorophyll in their weather, the third badge's ×1.1 for the player, Macho Brace, paralysis's ×¼, and a Quick Claw that triggers; a tie is a coin flip.Codepret/pokeemeraldHow we know
4595u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) ⋮ 4609 else ⋮ 4615 else ⋮ 4618 else ⋮ 4633 else ⋮ 4644 speedBattler1 = (speedBattler1 * 110) / 100; ⋮ 4650 if (gBattleMons[battler1].status1 & STATUS1_PARALYSIS) 4651 speedBattler1 /= 4; ⋮ 4653 if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100) 4654 speedBattler1 = UINT_MAX; ⋮ 4667 else ⋮ 4687 if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100) ⋮
src/battle_main.c lines 4595–4750 at 731ad5b · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^ abGold and Silver's
BattleCommand_CheckHit, which Crystal keeps unchanged, subtracts a target's BrightPowder value (20) from the stage-scaled accuracy byte, lets a byte of 255 always hit, and otherwise hits on a random byte below it.Codepret/pokegold · pret/pokecrystalHow we know
1595 cp HELD_BRIGHTPOWDER ⋮ 1602 sub c ⋮ 1609 cp -1 1610 jr z, .Hit ⋮ 1612 call BattleRandom 1613 cp b 1614 jr nc, .Miss
engine/battle/effect_commands.asm lines 1595–1614 at fc702b6 · upstream ↗ 15; BRIGHTPOWDER 16 item_attribute 10, HELD_BRIGHTPOWDER, 20, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
data/items/attributes.asm lines 15–16 at fc702b6 · upstream ↗ engine/battle/effect_commands.asm#L1546-L1850 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abCrystal keeps Red and Blue's escape formula: Speed at least the foe's escapes, and otherwise a random byte is compared with plus 30 for each earlier attempt; a held Smoke Ball always escapes, and Mean Look or a trapping move prevents it.Codepret/pokecrystal
How we know
3700 ld a, [wBattleMode] 3701 dec a 3702 jp nz, .cant_run_from_trainer ⋮ 3704 ld a, [wEnemySubStatus5] 3705 bit SUBSTATUS_CANT_RUN, a 3706 jp nz, .cant_escape ⋮ 3708 ld a, [wPlayerWrapCount] ⋮ 3710 jp nz, .cant_escape ⋮ 3719 cp HELD_ESCAPE ⋮ 3731 ld a, [wNumFleeAttempts] 3732 inc a 3733 ld [wNumFleeAttempts], a ⋮
engine/battle/core.asm lines 3700–3792 at 97187cd · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^
BattleCommand_Criticalsums a critical level, +1 for Focus Energy, +2 for a high-critical move, and +1 for a Scope Lens, then rolls against 17, 32, 64, 85, or 128 in 256 for levels 0 to 4; Chansey with a Lucky Punch and Farfetch'd with a Stick get level 2 and skip the other bonuses.Codepret/pokecrystalHow we know
1145 cp LUCKY_PUNCH 1146 jr nz, .FocusEnergy ⋮ 1148; +2 critical level 1149 ld c, 2 1150 jr .Tally ⋮ 1154 jr nz, .FocusEnergy ⋮ 1157 jr nz, .FocusEnergy ⋮ 1159; +2 critical level 1160 ld c, 2 1161 jr .Tally ⋮ 1166 bit SUBSTATUS_FOCUS_ENERGY, a 1167 jr z, .CheckCritical ⋮
engine/battle/effect_commands.asm lines 1120–1207 at 97187cd · upstream ↗ 1CriticalHitChances: 2 db 1 out_of 15 ; 0 3 db 1 out_of 8 ; +1 4 db 1 out_of 4 ; +2 5 db 1 out_of 3 ; +3 6 db 1 out_of 2 ; +4
data/battle/critical_hit_chances.asm lines 1–8 at 97187cd · upstream ↗ 1CriticalHitMoves: 2 db KARATE_CHOP 3 db RAZOR_WIND 4 db RAZOR_LEAF 5 db CRABHAMMER 6 db SLASH 7 db AEROBLAST 8 db CROSS_CHOP
data/moves/critical_hit_moves.asm lines 1–9 at 97187cd · upstream ↗ 25; e.g. 1 out_of 2 == 50 percent + 1 == $80 26DEF out_of EQUS "* $100 /"
macros/data.asm lines 25–26 at 97187cd · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^
BattleCommand_CheckHitscales the accuracy byte by the accuracy and evasion stages, subtracts 20 if the target holds a BrightPowder, and then hits on a random byte below it; an accuracy of 255 always hits.Codepret/pokecrystalHow we know
1584.BrightPowder: ⋮ 1587 ld a, b 1588 cp HELD_BRIGHTPOWDER ⋮ 1594 ld a, b 1595 sub c ⋮ 1600.skip_brightpowder 1601 ld a, b 1602 cp -1 1603 jr z, .Hit ⋮ 1605 call BattleRandom 1606 cp b 1607 jr nc, .Miss
engine/battle/effect_commands.asm lines 1584–1608 at 97187cd · upstream ↗ 4AccuracyLevelMultipliers: 5 db 33, 100 ; -6 = 33% ⋮ 11 db 1, 1 ; 0 = 100% ⋮ 17 db 3, 1 ; +6 = 300%
data/battle/accuracy_multipliers.asm lines 1–17 at 97187cd · upstream ↗ 16 item_attribute 10, HELD_BRIGHTPOWDER, 20, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSEdata/items/attributes.asm lines 15–16 at 97187cd · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^Crystal ranks moves by priority: 3 for Protect and Endure, 2 for Quick Attack, Mach Punch, and ExtremeSpeed, 1 for most moves, and 0 for Roar, Whirlwind, Counter, Mirror Coat, and Vital Throw; at equal priority a held Quick Claw goes first on a random byte below 60, then higher Speed, then a coin flip.Codepret/pokecrystal
How we know
477.use_move 478 ld a, [wBattlePlayerAction] 479 and a ; BATTLEPLAYERACTION_USEMOVE? 480 jp nz, .player_first 481 call CompareMovePriority 482 jr z, .equal_priority ⋮ 486.equal_priority ⋮ 493 cp HELD_QUICK_CLAW ⋮ 496 cp HELD_QUICK_CLAW ⋮ 498 call BattleRandom 499 cp e 500 jr nc, .speed_check ⋮
engine/battle/core.asm lines 477–540 at 97187cd · upstream ↗ 829GetMovePriority: 830; Return the priority (0-3) of move a. ⋮ 834 ; Vital Throw goes last. 835 cp VITAL_THROW ⋮ 849 ld a, BASE_PRIORITY
engine/battle/core.asm lines 829–850 at 97187cd · upstream ↗ 1MoveEffectPriorities: 2 db EFFECT_PROTECT, 3 3 db EFFECT_ENDURE, 3 4 db EFFECT_PRIORITY_HIT, 2 5 db EFFECT_FORCE_SWITCH, 0 6 db EFFECT_COUNTER, 0 7 db EFFECT_MIRROR_COAT, 0
data/moves/effects_priorities.asm lines 1–8 at 97187cd · upstream ↗ 156 item_attribute 100, HELD_QUICK_CLAW, 60, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSEdata/items/attributes.asm lines 155–156 at 97187cd · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^
Cmd_critcalcsums a critical stage, +2 for Focus Energy, +1 for a high-critical move (including Sky Attack, Blaze Kick, and Poison Tail), +1 for a Scope Lens, and +2 for Chansey with a Lucky Punch or Farfetch'd with a Stick, capped at 4; a 16-bitRandom()taken modulo 16, 8, 4, 3, or 2 must be 0, a chance of 1/16, 1/8, 1/4, 21,846 in 65,536 (slightly over 1/3), or 1/2, and a target with Battle Armor or Shell Armor is never hit critically.Codepret/pokeemeraldHow we know
605// The chance is 1/N for each stage. 606static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2};
src/battle_script_commands.c lines 605–606 at 731ad5b · upstream ↗ 1267 critChance = 2 * ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0) 1268 + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) ⋮ 1272 + (holdEffect == HOLD_EFFECT_SCOPE_LENS) ⋮ 1279 if ((gBattleMons[gBattlerTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBattlerTarget].ability != ABILITY_SHELL_ARMOR) ⋮ 1282 && !(Random() % sCriticalHitChance[critChance])) 1283 gCritMultiplier = 2;
src/battle_script_commands.c lines 1267–1285 at 731ad5b · upstream ↗ 11u16 Random(void) ⋮ 15 return gRngValue >> 16;
src/random.c lines 11–16 at 731ad5b · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^
TryRunFromBattlealways escapes with a Smoke Ball, or with the Run Away ability outside the Battle Pyramid. Otherwise, in a single battle outside the Pyramid, it escapes when the player's Pokémon is at least as fast as the foe, or when , stored in a byte, exceeds a random byte, for earlier attempts.Codepret/pokeemeraldrevisedHow we know
412 u8 speedVar; ⋮ 416 else ⋮ 421 if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) ⋮ 425 effect++; ⋮ 427 else if (gBattleMons[battler].ability == ABILITY_RUN_AWAY) ⋮ 429 if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) ⋮ 431 gBattleStruct->runTries++; ⋮ 434 if (speedVar > (Random() & 0xFF)) ⋮ 438 effect++; ⋮ 441 else ⋮ 445 effect++; ⋮ 450 effect++; ⋮
src/battle_util.c lines 407–475 at 731ad5b · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Revised after a check by a second AI model, 2026-10-21: The run formula holds only in single battles outside the Battle Pyramid.
Sources
Code
- pret contributors. 2026. “pokegold: disassembly of Pokémon Gold and Silver.” pret. Commit fc702b6. pret/pokegold @ fc702b6 · licence, all uses
- pret contributors. 2026. “pokeruby: decompilation of Pokémon Ruby and Sapphire.” pret. Commit 5784633. pret/pokeruby @ 5784633 · licence, all uses
- pret contributors. 2026. “pokefirered: decompilation of Pokémon FireRed and LeafGreen.” pret. Commit ce6406d. pret/pokefirered @ ce6406d · licence, all uses
- pret contributors. 2026. “pokeemerald: decompilation of Pokémon Emerald.” pret. Commit 731ad5b. pret/pokeemerald @ 731ad5b · licence, all uses
- pret contributors. 2026. “pokecrystal: disassembly of Pokémon Crystal.” pret. Commit 97187cd. pret/pokecrystal @ 97187cd · licence, all uses