The Celebi Egg glitch
There was no way to legitimately catch Celebi in the main games. So players found another door, and it swings open on a single number the game happened to reuse.
Inside Generation II every move has an index number, and so does every Pokemon. They are two separate lists that were never meant to touch. But at slot 251 the move list holds Beat Up, and the Pokemon list holds Celebi. The Celebi Egg glitch is the art of getting the game to read one where it expects the other, so a move called Beat Up quietly becomes a legend, and hatches out of an Egg as the real thing.
The number 251
The whole glitch rests on a coincidence in the game's own data. Moves are numbered in one list, Pokemon in another, and the two were never meant to line up. But slide down to the very end of both lists and something strange happens at 251. Drag the dial and watch the two columns.
Why that matters
A Pokemon in memory is just a row of bytes in a fixed order: its species, its held item, then its four moves, and on from there. The game always reads the species from the first byte. But the moves are only a few bytes further along, so if the whole row gets nudged, a move can end up sitting where the species is read. Watch what happens when Beat Up, in move slot three, slides into the species spot.
First you need a bad clone
The byte shift does not happen by wishing for it. It rides on the cloning glitch, done wrong on purpose. Reset a fraction too early during a box save and you get a bad clone, a Pokemon built from a half-written, scrambled block of memory. That corrupted block is the raw material the Celebi trick reshapes. Step through how you get one.
New to cloning? Read the cloning glitch first, then come back.
Set up the Egg
Because the trick reads move slot three as the species, Beat Up has to sit in exactly that slot. Players breed two Sneasel that both know Beat Up, raised so the baby inherits it in the right position. Try it yourself: tap the four moves into the slots and get Beat Up into slot three.
The shuffle
This is the fiddly part, and there is no way around that. With the bad clone stabilized and the Beat Up Egg ready, you move Pokemon between your party and the boxes in a set order. Each deposit nudges the data blocks in memory, and the goal is to slide the Egg so the byte the game reads as its species lands on the Beat Up value. Step through it and watch that species number change.
Hatch it
The hard part is over. Now it is an ordinary Egg with an extraordinary secret, and Eggs hatch by walking. Hop on the Bicycle and ride in circles until the counter runs down. The game has no idea it is about to hand you a legend.
The level zero catch
There is one last trap. A hatched Celebi comes out at level zero, a level the game was never built to handle. If you take it straight into battle, the first time it tries to level up the math runs off the rails and its stats can come out corrupted. The safe move is to put it right back in the Day Care and let the couple raise it to level two or higher first. Then it behaves like any other Pokemon.
Does it work, and is it a real Celebi
Two questions everyone asks. First, where does it still run. The glitch lives in the games' own code, so it survives anywhere that code runs faithfully, though the save timing behind the bad clone is the fussy part. Second, and more interesting: is the Celebi you get a real one. Pick a platform, then read the verdict below.
Yes. Nothing here edits the game from outside; every byte is moved using the game's own menus. The Celebi that hatches is a normal, in-game Celebi, tradeable and usable like any other. It simply skipped the event it was meant to come from.
From the ROM
The entire glitch comes down to two lines in two different files of the Pokemon Crystal disassembly. One numbers the moves, the other numbers the Pokemon, and both put the number 251 on their last entry. Here they are, side by side.
Both are $FB, which is 251. Beat Up is the very last move the game defines (NUM_ATTACKS = 251), and Celebi is number 251 in the Pokemon list. The whole trick is arranging memory so the game reads the Beat Up byte where it expects a species. It is not a bug in one routine, it is two numbering systems that happened to collide at the end.
Beat Up is move 251. Celebi is Pokemon 251. The glitch is nothing more than getting the game to confuse the two.
Verified in the pokecrystal disassembly (move and species constants). Thanks to the glitch community that documented the party-shuffle method decades ago.
Go deeper: the cloning glitch (the bad clone you need first), the Ditto glitch (a stat read as a species, Gen 1) | browse the Glitchhouse.