Glitch City Laboratories Archives

Glitch City Laboratories closed on 1 September 2020 (announcement). This is an archived copy of an article from Glitch City Laboratories wiki.

A live version of this article is available at the Glitch City Wiki here.

You can join Glitch City Research Institute to ask questions or discuss current developments.

You may also download the archive of the wiki in .tar.gz or .xml.gz formats.

Substitute drain move not missing glitch

Miscellaneous glitches of and



Amazing Man (Red and Blue only) | Cable Club escape glitch | Celadon looping map trick | Champion Blue music muting glitch | Coastal Flooding | Confusion and Substitute glitch | Cooltrainer move | Cycling based glitch maps | Escape sprite handling glitch | Evolve without an evolutionary stone (Red and Blue only) | Evolving Raichu (Red and Blue only) | Expanded item pack | Expanded Pokédex | Focus Energy glitch | Get stuck in a wall | Ghost Bicycle glitch | Glitch encounter system | Glitch City RAM Manipulation | Infinite Blaine Door | Introduction Nidorino glitch (Red and Blue only) | Invisible PCs (Red and Blue only) | Invisible tree glitch | Item stack duplication glitch | Mute the music in the Pokémon League | Partial trapping move link battle glitch | Pokémon Tower Pokédex glitch | PP underflow glitches | Recovery move glitch | Rival's effect | See a Ghost without a Silph Scope | Selfdestruct and Substitute glitch | Silph Co. PC Glitch | Slot machine glitch | Stand on a tree | Statue behavior glitch (Red and Blue only) | Super effective move AI flaw (Red and Blue only) | Super Glitch | Surf down glitch | Swift miss glitch | Transform assumption glitch | Transform Empty Move Glitch | Trick Zone | Vending machine purchase glitch | Walk around with only fainted Pokémon (Red and Blue only) | Walking lag glitch | Walk on water through Surf | Walking Pikachu happiness glitch (Yellow only) | Wild appeared! | ZZAZZ Glitch



(view, talk, edit)




The Substitute drain move not missing is a minor battle glitch in English Pokémon Red, Blue, and Yellow, where HP draining moves don't miss against a substitute, even though they do in Pokémon Red, Green, and Pokémon Blue (Japanese) as well as in Pokémon Yellow (Japanese). It is considered a glitch in the English versions, because the disassembly shows that the games do contain the piece of code to make HP draining moves miss against a substitute, but it ceases to work due to the fix for the Swift miss glitch.

Furthermore, this glitch makes it possible to "drain HP" from a substitute. However, due to a quirk with the Generation I substitute mechanics, the drain effect will not happen if the draining move breaks the substitute. This is due to a separate check that removes the secondary effect of damaging moves only when the move breaks a substitute.

How to perform

When a Pokémon has a substitute and the opposing Pokémon uses an HP-draining move (including Absorb, Mega Drain, Leech Life, and Dream Eater), the move may hit.

Note that this glitch does not exist in any of the Japanese games.

Involved code

Source : Pokéred, Pokéyellow ld a, [de] ; [de] contains the effect of the move cp a, SWIFT_EFFECT ret z ; If the move is Swift, bypass the accuracy check altogether call CheckTargetSubstitute ; * Does the opponent have a substitute? jr z, .checkForDigOrFlyStatus ; * If not, skip the two checks below cp a, DRAIN_HP_EFFECT jp z, .moveMissed ; Draining moves should miss unconditionally against substitutes cp a, DREAM_EATER_EFFECT jp z, .moveMissed ; Same for Dream Eater .checkForDigOrFlyStatus

In the Japanese versions, the two lines marked with "*" are above ld a, [de] instead. As a result, they skip all three checks shown here, causing the Swift miss glitch.

In the English versions, those lines are moved down, fixing the Swift miss glitch. However, the function CheckTargetSubstitute overwrites register a with either 0 or 1, so the two checks below will always fail, making drain moves able to hit substitutes.

Video demonstration

  • REDIRECT Template:YouTube

    References

  • IceFlame's analysis of the code involved (see the linked pastebin)