Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Háčky

Pages: 1 ... 7 8 [9]
Oh, there’s one more glitch Pokémon you can trade across time.

Do the Ditto trick using a Rock/Ground-type Pokémon (Onix or the Geodude family) with a special stat of 182. Since the fossil/ghost Missingno. take their base stats in a wild battle from whatever your last encounter was, you’ll run into a Rock/Ground-type Kabutops fossil Missingno., which becomes Pupitar when traded to Generation II.

Doing this with the Aerodactyl fossil or ghost forms of Missingno. requires a Rock/Dark (Tyranitar) or Psychic/Flying (Lugia) Pokémon, which aren’t normally available in Generation I.

Something I wanted to document, although unfortunately it turns out not to be useful, is how the species index is converted between Generation I and Generation II. The conversion table (at $FBA26 in Gold/Silver, $FB91C in Crystal) is stored in order of Generation I indices, starting from 1, and each byte is the corresponding Generation II index (which is always the same as the Pokédex number). The first entry is $70, which means index number 1 (Rhydon) from Generation I becomes $70 when traded to Generation II. To convert a Generation II Pokémon back to Generation I format, the game reads through this table until it finds a value that matches, while keeping a running tally of how far into the table it is, so a Pokémon with index $73 (Kangaskhan) in Generation II will be converted to $02 in Generation I, because $73 is the second entry in the table.

The first 250 entries in the table are straightforward and well-documented; all Pokémon from Bulbasaur to Ho-Oh are given a conversion. Inexplicably, entries 251 and 252 are both $CA. (I guess it’s possible someone was trying to make a joke based on Wobbuffet’s name in Japanese?) The conversions for Generation I indices 253–255 and 0 come from the first four bytes of the following program code. Index 253 becomes $FA (Ho-Oh) and index 0 becomes $4F (Slowpoke), but the values for indices 254 and 255 represent a pointer which differs in some versions of the game:

Japanese Gold/Silver: $FE → $10 (Pidgey), $FF → $D1 (Snubbull)
Japanese Crystal: $FE → $65 (Electrode), $FF → $D2 (Granbull)
Korean Gold/Silver: $FE → $DB (Magcargo), $FF → $D1 (Snubbull)
International Gold/Silver: $FE → $1E (Nidorina), $FF → $D1 (Snubbull)
International Crystal: $FE → $34 (Meowth), $FF → $D2 (Granbull)

Since $FB–$FF and $00 never appear as values in the conversion table, there’s no way to get Celebi, an Egg, or any of the ????? variants into a Generation II game by trading them from Generation I. But what if you try to send those Pokémon from Generation II to Generation I? The game will keep searching past the end of the conversion table until it finds the value it’s looking for. Specifically, in the English versions, it will find the values at these positions (modulo 256):

Gold/Silver: $00 → $18 (Rhyhorn), $FB → ??, $FC → $65 (Wigglytuff), $FD → ??, $FE → $38 (Missingno.), $FF → $39 (Mankey)
Crystal: $00 → $18 (Rhyhorn), $FB → $63 (Omastar), $FC → $41 (Venonat), $FD → ??, $FE → $38 (Missingno.), $FF → $39 (Mankey)

$FB in Gold/Silver and $FD in all three games don’t appear anywhere in the remainder of the ROM bank containing the conversion table. When that happens, the game continues its search into RAM until it finds the value it’s looking for. That’s why trading Celebi from Gold/Silver back to Generation I using the Johto guard glitch gives unpredictable results—the converted species is based on the position that an $FB byte happens to be lying around in RAM.
Magnemite and Magneton don’t learn any moves with indices under 100 that correspond to key items

given that that function does not check moves, couldn't you just use 8F/ws m to force such a move onto the Pokémon?
Well, yes, but if you’re using 8F/ws m, you might as well set the catch rate/held item byte and whatever other stats you want to corrupt directly rather than relying on $FE to do the job.

Another option I somehow forgot to consider is that you should be able to take any level 54 Pokémon with Attack of 100 or less and hybridize it with Magneton. That way, you can start with whatever Pokémon learns the move you want to turn into an item. (Conceivably, it should be possible to use a triple-shift for something other than Magnemite/Magneton if its first two moves correspond to its types, but I don’t know if there’s any way that would be feasible.)

Are there any glitch Pokémon that have the same type as its Generation II Pokémon? We could probably trade this glitch Pokémon into Generation II without 8F/ws m.
It looks like we’ve got no less than eight in the English versions, and one of them is even obtainable with the Ditto trick:

P ($CB) shares the Pokédex number of Pidgeotto in Red/Blue and becomes Noctowl.
O PkMn4 X ($CF) shares the Pokédex number of Beedrill in Red/Blue and becomes Ariados.
’N g ゥ¥ ($F8) shares the Pokédex number of Rattata in Red/Blue and becomes Snubbull.
4. . ($C5) shares the Pokédex number of Golduck in Yellow and becomes Totodile.
ゥ ($D4) shares the Pokédex number of Snorlax in Yellow and becomes Cleffa.
B ($D7) shares the Pokédex number of Pidgey in Yellow and becomes Togetic.
Z ゥ ($E5) shares the Pokédex number of Persian in Yellow and becomes Aipom.
▼ pゥ ($F5) shares the Pokédex number of Snorlax in Yellow and becomes Dunsparce.

Just a note: The abnormal Pokémon message may appear when trading between two Generation II games too.
I think (haven’t confirmed) it’s only the species and level that are checked, since types aren’t stored in the Pokémon data in Generation II.
As Torchickens has documented, taking a Pokémon with index number $FE in either Generation I or II into a trade or link battle with a Generation II game causes everything in the party to appear corrupted to the other game—shifted by one byte, to be more specific. Typically, this prevents trading, because everything will appear to be “abnormal” to the other game. (Note: I haven’t looked very far into exactly why this corruption happens, but the code starting at $2879E in Crystal looks extremely suspicious.)

What makes a Pokémon “abnormal”, anyway? The function at $FB57E in Crystal checks three things for Pokémon traded from Generation I:

1. The Pokémon must not be a hybrid, unless it’s an Egg. (There’s no way for a Generation I Pokémon to be seen as an Egg in Generation II, because $FD does not appear in the conversion table.)
2. The Pokémon’s level (offset $21 in the Generation I Pokémon data structure; offset $03 is ignored) must not be over 100.
3. The Pokémon’s types must be correct, unless it’s a Magnemite or Magneton (because they gained the Steel type in Generation II).

When $FE shifts the Generation I data structure, the least significant byte of the Pokémon’s remaining HP will become its species, its Type 2 will become its Type 1, its catch rate/held item will become its Type 2, and the least significant byte of its maximum HP will become its level. There are at least three ways to engineer things so that all these values will look okay after the corruption:

1. Get a Magneton with 54 HP remaining out of a total HP of 256 or higher.
2. Get any single-typed Pokémon in Generation II (except Normal or Bug type), with the same remaining HP as its index number in Generation I, and a total HP either less than 100 or between 256 and 356 (for example, a Krabby with 78/78 HP can be used, and you might be able to catch one of those by fishing in Whirl Islands 1F with a Super Rod). Give it the item with the same index number as its type: Fighting→Master Ball, Poision→BrightPowder, Ground→Great Ball, Rock→Poké Ball, Ghost→Moon Stone, Fire→Repel, Water→Max Elixer, Grass→Fire Stone, Electric→ThunderStone, Psychic→Water Stone, Dragon→HP Up, Dark→Protein. Then send it to Generation I normally (using the Johto guard glitch if necessary) before trading it back to Generation II with $FE corruption.
3. Get any Pokémon in Generation II with HP that corresponds to the Generation I index number of any single-typed Pokémon (except Normal or Bug type) which is the same as its own second type. Give it the item with the same index number as that Pokémon’s type. Send it to Generation I normally (using the Johto guard glitch if necessary), hybridize it with that Pokémon, and then trade it back to Generation II with $FE corruption.

(Normal is index $00, which corresponds with an item named ?, and Bug is $07, which corresponds with a Teru-sama. There are no pure Flying, Steel, or Ice-types in Generation II.)

When a corrupted Pokémon is received, its name and OT will be missing the first letter, its current HP will be its original level × 256, it may have multiple status conditions based on its type, it will be holding an item based on the index number of its first move, and its fourth move will be based on the least significant byte of the OT ID number and have PP based on its original level. Its stats, experience points, IVs, and EVs will probably be greatly increased, except for Special Attack and Special Defense which have to be recalculated.

Another thing I’ve noticed is that, if you put two $FE Pokémon in your party, everything will be shifted by two bytes, three $FEs will shift everything by three bytes, and so on. A three-byte shift would turn a Pokémon’s level into its species, its first two moves into its two types, and the least significant byte of its Attack stat into its level.

This might be the easiest method: get a level 54 Magneton, which should have less than 100 Attack unless its EV is too high, and corrupt it with three $FEs in the party. You can teach it TM33 Reflect as its third move so that it will be holding a GS Ball, or TM44 Rest so it will hold a Sacred Ash. (Unfortunately, Magnemite and Magneton don’t learn any moves with indices under 100 that correspond to key items, so this method won’t provide everything needed to corrupt the Balls pocket.)

It should be even easier to mess around with this in a trade between two Generation II games, if there’s a convenient way to obtain ????? ($FE). Obviously it can be done with arbitrary code execution, but I don’t know how much setup that would require.
I went looking for some information on how the Game Boy handles memory banks, and found some—it turns out that banks $8–C are actually used to access the real-time clock. Each of those banks represents a single byte of the RTC data, and that single byte can be read or written at any address in the SRAM space ($A000–BFFF).

When the game needs to access the RTC or save data, it has to turn on SRAM access before reading/writing anything, then turn it off when it’s done. When the game is trying to read the description of ?, SRAM access is disabled. I don’t think anyone has documented what the MBC actually does if a game tries to read from SRAM when it’s disabled. The real hardware clearly does something different than the emulators.

One theory I had was that the data being read is somehow related to the RTC value, which would explain the long strings of repeating values that change periodically. I tried reducing the text speed, thinking that might increase the length of repetition, but there wasn’t any noticeable effect.

With further experimentation, it seems like the description of ? is somehow hardware-dependent—on my GBA SP, I normally get that ?????CCCCC stuff, but on my GBC, with the same cartridge, the game crashes to a blank screen when it shows the description. Having my GameShark plugged into my GBA SP tends to cause descriptions that won’t scroll like that PC PC PC one. Having my GameShark plugged into my GBC gave me something similar to the ?????CCCCC description. In one instance, with the GBC+GS, I got a description that scrolled for several lines, then filled the entire screen with left parentheses and other scattered symbols, cut the music, and started playing the low-health alarm sound! After a while, the screen went blank and the sound stopped. This all sort of reminds me of Super Glitch, and makes me want to believe there’s some set of circumstances in which this item will do something aside from just breaking the game.

As for Gold and Silver, my guess was wrong: the reason those versions have no problem with this item is that the pointer table for item descriptions (at $1B8000) has 256 entries.
When I was moving emulation stuff to my new computer, I had a feeling I was forgetting something…  ;D

When the breakpoint triggers on $A793, the SRAM has bank $C loaded, which doesn’t actually exist. (R/B/Y/G/S/C all use a 32 KiB save, which is four banks. The mail data I was looking at before is in bank 0.) BGB shows this bank as filled with $FF.

I tried using a GameShark to give myself a ? on cartridge, and the results were more interesting. One time I got the same freezing effect that happens on emulators. One time the game reset to “This Game Pak is designed only for use on the Game Boy Color.” One time I got a description that started with “ PC PC PC PC PC PC PC PC PC PC PC PC PC”, and had a blinking scroll arrow, but the game wouldn’t respond to any buttons. But the effect that happened most of the time, and the only one I saw more than once, is a description that contains a lot of repeating ???, CCC, MMM, interspersed with the occasional 5, text box border, and such. That description doesn’t freeze the game—I could scroll through it, but I never reached the end (if there is one).
I’ve wanted to get back to playing with this, but seeing your latest video finally convinced me to make some time for it.

$D958 is the radio station that the Pokégear is tuned to. While this is fantastically trivial to modify, the range of stations consists of even numbers between $00 and $50, which I don’t think includes anything of particular interest. (I suppose you could tune to station 8.5, hex $20, to get free Rare Candies…)

As you’ve already figured, you can access TMs/HMs from the Balls pocket simply by depositing them into the PC, but that byte-shift method to generate an item will work as long as the last item in the Balls pocket has a quantity equivalent to a ball. If, for example, the last item before Cancel has quantity 1, then byte-shifting the Balls pocket will result in Master Ball ×255. Since Master Balls belong in the Balls pocket, tossing them will work, and you can byte-shift again to turn the new quantity into an item.

Also, I’ve figured out that ? (item $00) is not quite as evil in Crystal as I thought it was. The game only freezes when it tries to display the item’s description, which means that you can scroll past it after you’ve pressed Select to swap an item so that the text box says “Where should this be moved to?” instead of showing the description for the item under the cursor. So, if you expand an empty Balls pocket to 255 items, press Select on an item in your PC with quantity 64, scroll down to the 217th item (easier said than done!), and press A to swap it, you’ll set the flag for Kurt to accept your GS Ball (and also mess up whatever else is stored in $DA88 and $DA89).

What I don’t understand is why ?’s description freezes the game in Crystal. The pointer table for item descriptions, starting at $1C8987 in the Crystal ROM, only has 255 defined entries, and the 256th should be used for the description of ?. In Crystal (and I’m guessing G/S as well, though I didn’t look), that pointer is $A793 (taken from the first two bytes of “The best BALL. It never misses.”), which lands somewhere in the middle of the mail data in SRAM. In my game, it looks like $A793 ought to be read as the properly-terminated string “road” (the end of Kenya the Spearow’s mail message); I don’t see anything there that should crash the game.
By filling the Key Items pocket with items obtained through the Time Capsule or Celebi glitch, the duplicate key item glitch can be used to corrupt the Balls pocket, giving it access to memory beyond where that pocket is supposed to end. This allows you to use almost any item stored in your PC an unlimited number of times in the field. In Gold/Silver, it can be used to manipulate memory beyond that, but unfortunately only the PC aspect works in Crystal.

1. Deposit all of your balls into the PC, so that the Balls pocket is empty.
2. Collect enough key items that your Key Items pocket is full. If you try to take another key item from a Pokémon, it should say “Item storage space full.” The pocket holds 25 items, and in it you’ll need to have two of a key item with an index number greater than 100, and two of a key item with an index less than 100. For illustration, I’ll use two Machine Parts and two SecretPotions.
3. Move the two Machine Parts to the bottom two slots in the list, then swap them. The second item and the Cancel button will be replaced by a Blk Apricorn and Iron. (The Iron will be something else if you use a different item with index > 100. I like the idea that the remnant of a Machine Part is Iron, though. :P )
4. Swap the two SecretPotions into the bottom two slots in the list (including the slot that used to be the Cancel button), then swap them. The second SecretPotion should disappear.
5. Switch to the Balls pocket and scroll down.

Key items > 100: Card Key, Machine Part, Lost Item, Basement Key, Pass, SquirtBottle, Rainbow Wing (Crystal only: GS Ball, Blue Card, Egg Ticket)
Key items < 100: Bicycle, Coin Case, Itemfinder, Old Rod, Good Rod, Super Rod, Red Scale, SecretPotion, S.S. Ticket, Mystery Egg, Silver Wing (Crystal only: Clear Bell)

The last two item pockets in RAM are the Key Items and Balls pockets, at D5E1–D5FB and D5FC–D615 in Gold/Silver. In the first swap, the pertinent memory will look like this, if you chose Machine Part:

Code: [Select]
D5E1: $19  25 key items

(the SecretPotions are up here somewhere)

D5F9: $80  Machine Part
D5FA: $80  Machine Part   →  $1C  Iron         (×99)
D5FB: $FF  Cancel         →  $63  Blk Apricorn  (×0)
D5FC: $00  0 balls
D5FD: $FF  Cancel

In the second swap:

Code: [Select]
D5E1: $19  25 key items   →  $18  24 key items

(the Iron and Blk Apricorn are up here somewhere)

D5F9: $80  Machine Part
D5FA: $43  SecretPotion
D5FB: $43  SecretPotion   →  $43  (hidden)
D5FC: $00  0 balls        →  $FF  255 balls
D5FD: $FF  Cancel

The game tries to merge what it sees as a stack of 67 SecretPotions and a stack of 0 SecretPotions into a single stack of 67 SecretPotions, which decrements the Key Items count (hiding the second SecretPotion, because the Cancel button is supposed to be where the first SecretPotion is now) and shifts the rest of the list back one byte until an $FF is found, which is actually the Cancel button for the Balls pocket. Now the Balls pocket is thought to have 255 items in it, which gives it access to 485 bytes of memory past where the pocket is supposed to end. The first 12 items are the Cancel buttons which fill the empty spaces in your Balls pocket; as long as a Cancel button appears on the screen, any item below it will be invisible, but once you scroll far enough that the Cancel button is off-screen, the items will appear. Items 14–63 will be the items stored in your PC. I don’t know what all lies beyond item 63, but event flags start at item 222 (D7B7). The quantity of item 13 is the number of items in the PC; if you take an item with quantity 255 somewhere in the list (you should be able to find one from an event flag) and swap it into the 13th slot (making sure that the item in the 13th slot isn’t the same item), you can corrupt the PC items list in the same way, which opens up access to another 26 bytes: the list ends with the quantity of the 255th item at D7FC for the Balls pocket, and D816 for the PC.

Since all of your PC items are now accessible from the Balls pocket, you can use them anywhere you want without having to withdraw them. You can also use these items as many times as you want because, as long as they’re not any kind of Poké Ball, the quantity is never depleted. When an item is used up, and the game tries to decrement the item’s quantity, it only looks in the pocket that the item is supposed to be in; if the item is in the wrong pocket, the game won’t be able to find it and the quantity will stay the same. This is the same reason that the duplicate key item glitch allows you to use an infinite number of a regular item from the Key Items pocket. (With either glitch, if an item is in both the pocket it’s supposed to be and another pocket, using the item from either pocket will deplete the one that’s in the correct pocket—e.g., throwing a Master Ball from the Key Items pocket will use up the Master Ball in the Balls pocket if there is one; using a Rare Candy stored in your PC through the Balls pocket will use up a Rare Candy in your Items pocket if you have one there.)

In Crystal, this glitch can’t be used to its full potential because the item menu will freeze when it tries to display the item ? (index $00). Since there are lots of $00 bytes in the space after the PC item data, this makes it impossible to use this glitch to mess with event flags, which is disappointing, because I’d hoped to use it to enable the GS Ball event. With special preparation, though, it can still be used to access the PC items. This should be a safe method in Crystal:

1. Fill the 50 item slots in your PC. (I’m not 100% sure if this is a necessary precaution, since my PC was already full when I tried it, but I think it is.)
2. Fill the 12 slots of the Balls pocket, which can be done by buying multiple stacks of 99 Poké Balls, or by obtaining every type of ball in the game, including the Park Ball. Put a stack of exactly 63 Poké Balls in the first slot. (The type of ball doesn’t technically matter, but this stack will be deleted.)
3. Collect enough key items that your Key Items pocket is full. You’ll need to have three of a key item with an index number greater than 100, and three of a key item with an index less than 88 (use the same list as above; there are no key items between 88 and 100). Again, I’ll use Machine Part and SecretPotion.
4. Move the two Machine Parts to the bottom two slots in the list, then swap them. The second item and the Cancel button will be replaced by a Blk Apricorn and Iron.
5. Swap the two SecretPotions into the bottom two slots in the list (including the slot that used to be the Cancel button), then swap them. The second SecretPotion should disappear, and the contents of the Balls pocket will shift by one byte. That pocket will now appear to have 6 items (because the Poké Ball at the top had index $05, and there’s an item where the Cancel button should be). The specific items correspond to the quantities of the first 6 items that were there before; the first item should be Ether ($3F = decimal 63).
6. Take a key item from a Pokémon. Your Key Items pocket will be full again, and the Cancel button in the Key Items pocket will be restored in its proper position.
7. Repeat steps 4 and 5. This will shift the contents of the Balls pocket by one more byte. The pocket will now have 63 items: items 1–11 are the balls that were in the pocket at the start, items 12–13 are Cancel buttons, and items 14–63 are the items in your PC.

If you haven’t ever filled the Balls pocket, the last byte of the pocket (D8F0) is set to $00. Since this value becomes the 13th item when the pocket is expanded, this would normally cause a freeze if you try to scroll past it to reach the PC items. But when the pocket is filled, that byte is changed to $FF to terminate the list, and it retains that value even if you later remove items from the pocket. I’m not sure, but I believe this also happens for the PC—if you’ve never filled it, the unused bytes will be $00, but after it has been filled once, any unused item slots will be $FF. If so, this glitch would still work even if the PC hasn’t been filled, but the game would freeze if you tried to scroll down past the Cancel button at the end of the PC items in the Balls pocket.
Did you mean $CFEB (RB: $CFEC)?. That seems to be the correct memory address.
Um, yeah, that one. ;D

Incidentally, there seems to be more than one enemy catch rate address. Another $D006 (RB: $D007) is the actual catch rate when throwing the Poké Ball, which can be halved or doubled by throwing bait or rock (also through the use of the Boulder Badge (bait) or the CascadeBadge (bait)), respectively.
Wow, I had no idea those items actually affected the catch rate. I thought they just played the animation and skipped your turn; I never thought to use the CascadeBadge in a legendary Pokémon battle. :P It’s too bad the game doesn’t read the catch rate it stores in the held item slot from there (it actually comes from a third location, Y: $D0BF / RB: $D0C0), or that would be a convenient way to manipulate held items.

It's weird that Kadabra's catch rate changes when caught in Yellow. I guess for some reason Game Freak didn't want to make Kadabra just a little bit harder to catch.
That possible, I suppose, but it’s still hard to imagine what prompted them to distinguish Kadabra caught in Yellow (Route 8) from those caught in Red/Green/Blue (Cerulean Cave) in the first place. They did significantly reduce Dragonair’s catch rate in Yellow, but it wasn’t actually catchable in the prior games (available only by evolution, and from the Game Corner in Japanese Blue), so it seems likely that that change had nothing to do with future held items, but that they just thought it was too easy to catch once they made it available in the Safari Zone. Also, if they had intended to give Dragonair from Yellow a special held item, I’d think it would be a Dragon Fang, not Protein. Perhaps they simply forgot about the change, and that’s why its catch rate went back to the Red/Green/Blue value in all future games.

If Kadabra isn't the only Pokémon that has a changing catch rate, perhaps that's where the mystery catch rates are used?
I had the same thought, that some Pokémon might have been given those catch rates in Yellow in anticipation of a special held item that was later scrapped, but it turns out Kadabra is the only one that gets this treatment.

Here’s the rather ordinary section of code at 0F3F4 in the Red/Blue ROM that copies the relevant part of a caught Pokémon’s data into your party (de points to the appropriate location in your party data):
Code: [Select]
ld hl, $D0BE  ; location of enemy Pokémon’s types
ldi a, (hl)   ; copy type 1
ld (de), a
inc de
ldi a, (hl)   ; copy type 2
ld (de), a
inc de
ldi a, (hl)   ; copy catch rate
ld (de), a

In Yellow, that code is found at 0F270, and it’s the same except that it copies starting from $D0BD instead of $D0BE, and that there’s something tacked on at the end which is not so ordinary:
Code: [Select]
ld a, ($CF90) ; enemy Pokémon’s species
cp a, $26     ; is it Kadabra?
jr nz, 3
ld a, $60     ; if so, change the catch rate to 96,
ld (de), a    ; overwriting the value that was just written

That code only runs if you have space in your party; the similar code at 0E7FB runs after a caught Pokémon’s data has been copied to Bill’s PC:
Code: [Select]
ld a, ($CF90) ; enemy Pokémon’s species
cp a, $26     ; is it Kadabra?
jr nz, 5
ld a, $60     ; if so, change the catch rate to 96,
ld ($DA9C), a ; overwriting the value for the first Pokémon in the PC box

I'm just speculating here, though. I wonder if Japanese Blue and Pocket Monsters Pikachu have different catch rates?
No, Japanese Blue has the same catch rates as Japanese Red/Green, English Red/Blue, and every Generation II and later game; Japanese Yellow has the same catch rates as English Yellow, with the changes to Dragonair and Dragonite.

The next possibility I can think of for where those catch rates might be used is in Pokémon Stadium. I’m not familiar with that game, but according to Bulbapedia, some Pokémon won in it will hold a Normal Box (167) or Gorgeous Box (168) when traded to a Generation II game, so it’s possible that the game performs other catch-rate shenanigans as well. However, I’m inclined to think the missing numbers are not the result of such a special event, since they’re all multiples of 5, like most actual catch rates, whereas the indices for those Boxes, Pikachu’s Light Ball (163), and Kadabra’s TwistedSpoon (96) are not.
Now with 8F, there's finally a way to replicate it without Celebi glitch, but its probably possible with the remaining HP glitch, although I've never tried this before.
I thought there might have been a way to shift the data like that in Generation I, but I didn’t know what it was. Using that glitch as-is should shift a Pokémon’s second move into the held item slot, which makes the requirements similar to the Celebi glitch. I wonder if there’s a way to shift another interesting byte there?

In pursuit of the mystery catch rates 135/195/220/250, I checked the Japanese Red/Green, and found they have the same catch rates as other games. The only species which have changed between versions are Dragonair and Dragonite, which have catch rates of 27 (Protein) and 9 (Antidote, not that there are any wild Dragonite from which you can claim this spectacular prize) in Yellow, but both have 45 (→ Bitter Berry) in every other game. However, I was surprised to find that, contrary to what some sources claim, Pikachu and Kadabra have the same catch rates in Yellow, according to its base stats table, as in any other game.

Memory address 0xCFED holds the catch rate of the current opponent in battle. If you monitor Prof. Oak’s battle with Pikachu at the start of the game, you’ll see that its catch rate is 190, but when he gives Pikachu to you, it will have a stored catch rate of 163 (Light Ball) at 0xD171. It’s understandable that there would be a special marker like that for the starter Pikachu in Yellow, but I can’t understand what happens to Kadabra. When you encounter Kadabra in the wild, it has a catch rate of 100. Once you catch it, it will appear in your party or PC with a stored catch rate of 96 (TwistedSpoon). This is the only way to legitimately get a TwistedSpoon in Generation II: catch a wild Kadabra in Yellow, on Route 8, with a 5% encounter rate, and trade it through the Time Capsule. If you thought it was smarter to catch the more common Level 15+ Abra on this same route and use a single Rare Candy to evolve it, then you won’t get a TwistedSpoon. If you managed to catch Kadabra at Level 51 in Cerulean Cave in Red/Blue, you won’t get a TwistedSpoon. I know Gold/Silver were in development at the same time as Yellow, so they may have programmed this with held items in mind, but why write a special routine to change Kadabra’s held item after it’s caught instead of just editing the species catch rate itself? Why go to the trouble of changing anything, when Kadabra’s catch rate of 100 was already unique among Generation I Pokémon? Why is Kadabra the only Pokémon that does this? Is Kadabra the only Pokémon that does this? Without finding the code that carries out this bait-and-switch, it’s hard to be certain.
I don’t know if this is a new discovery or just something that’s not been well-documented, but it is possible to obtain arbitrary items in Generation II by modifying a Pokémon’s catch rate/held item byte using glitches in Generation I before trading it through the Time Capsule.

The item a Generation I Pokémon holds when traded to a Generation II game is determined by the byte which stored the species’ catch rate in Generation I. The developers deliberately arranged some item index numbers in Generation II so that certain Pokémon would hold certain items when traded from Generation I—e.g., Lucky Punch, which boosts Chansey’s critical hit ratio, was given the index number 0x1E corresponding with Chansey’s unique catch rate of 30 so that Chansey traded from Generation I would hold it. However, the most common catch rate numbers correspond to item index numbers which were intentionally left blank (Teru-sama and dummy TMs/HMs), except for the Card Key, which is a key item that cannot be legitimately held. When a Generation I Pokémon with one of these catch rates is traded to Generation II, it receives a held item determined by a table which can be found at offsets 286D6–286ED in the Gold/Silver ROM and 28785–2879C in Crystal:

Catch rate 25: Leftovers (instead of 0x19 Teru-sama)
Catch rate 45: Bitter Berry (instead of 0x2D Teru-sama)
Catch rate 50: Gold Berry (instead of 0x32 Teru-sama)
Catch rate 90: Berry (instead of 0x5A Teru-sama)
Catch rate 100: Berry (instead of 0x64 Teru-sama)
Catch rate 120: Berry (instead of 0x78 Teru-sama)
Catch rate 127: Berry (instead of 0x7F Card Key)
Catch rate 135: Berry (instead of 0x87 Teru-sama)
Catch rate 190: Berry (instead of 0xBE Teru-sama)
Catch rate 195: Berry (instead of 0xC3 dummy TM04)
Catch rate 220: Berry (instead of 0xDC dummy TM28)
Catch rate 250: Berry (instead of 0xFA HM08)
Catch rate 255: Berry (instead of 0xFF HM13)

(Curiously, no Pokémon in Red/Blue/Yellow actually has a catch rate of 135, 195, 220, or 250. Maybe those catch rates exist in the Japanese Red/Green? The developers clearly thought it was necessary to reserve indices 195 and 220 by placing dummy items between the real TM04 and TM05, and between TM27 and the real TM28.)

If an item index/catch rate doesn’t appear in this table, it is left alone by the Time Capsule. This allows a Pokémon holding an item to be traded to Generation I and retain that held item when traded back to Generation II. If we use 8F or ws m to modify a Pokémon’s stored catch rate in a Generation I game, it will hold the corresponding item when traded to Generation II, even if it is a key item or Teru-sama, as long is it is not one of the items converted by the table above. This program will change the first party Pokémon’s held item to any desired value:

Code: [Select]
Lemonade      ×XX
ThunderStone ×114 [in Red/Blue] or ×113 [in Yellow]
TM09         ×119

3E XX      ld a, XX
21 7½ D1   ld hl, $D172 [in Red/Blue] or $D171 [in Yellow]
77         ld (hl), a
C9         ret

This may be an easier way to obtain key items for item duplication than using the Celebi glitch, since once the program is set up, you can quickly give several Pokémon different items that you want. It can also be used to obtain the glitch items HM10–HM12 (but not HM13, because its index 0xFF is a valid catch rate), for which the Celebi glitch would require glitch moves.
Pages: 1 ... 7 8 [9]