Age 30
Seen 5 Days Ago
Posted February 8th, 2019
416 posts
6.5 Years
When I was working on my new Item Editor tool I did research into what the bytes in the Items data were... there were some pretty good lists that explain alot but there were still some unknown bytes.
I figured out a little info and wanted to share it, I will post my more complete list here but this thread is only about one byte in particular:

44 total bytes:

14 bytes for the name, a string in the same encoding as all in-game strings, finished by 0xFF
2 bytes for the item number, that is used for some integrity checks
2 bytes for the item market price
1 byte for the hold effect
1 byte used for item usage values, such as potion HP recovery or Repel steps
4 bytes for a pointer to a small description of the item, as seen in the market and in the bag screen
?1 byte for something else (key items); either 00, 01, 02 or 03(PokeBlock case)
1 byte set to 1 if key-item can be used from bag.
1 byte for the number of the pocket the item is stored in (tm case and berry bag included)
1 byte that usually allow to distinguish between between types of item
4 bytes pointer for item's THUMB routine start.
1 byte for item usage location
3 bytes that are always "0x00"
4 bytes for the battle routine start.
3 bytes that are always "0x00"
?1 byte that may do something; PokeBalls, Mail, Eon Ticket
I dont take credit for this whole list, just a few bolded changes

The bolded bytes above were previously unidentified (or still are).

This thread in only to talk about the first bolded byte, byte #18, it is now identified as the Hold Effect byte.

Byte #19 is also important in conjunction with Hold Effect byte, byte #19 is the Value byte.

I can only surmise that there is a table somewhere with pointers to THUMB scripts that actually handle the hold effects... but without knowing more about that I cannot go further than to figure out what each number placed in a the Hold Effect slot can do... so I did.

Hold Effects list:
00 None
01 Heal HP (used) (Takes Value)
02 Cure Paralysis (used)
03 Cure Sleep (used)
04 Cure Poison (used)
05 Cure Burn (used)
06 Cure Freeze (used)
07 Heal PP (used) (Takes Value)
08 Cure Confusion (used)
09 Cure All Status Effects (used)
0A Heal HP (may confuse) (used) (Takes Value)
0B Heal HP (may confuse) (used) (Takes Value)
0C Heal HP (may confuse) (used) (Takes Value)
0D Heal HP (may confuse) (used) (Takes Value)
0E Heal HP (may confuse) (used) (Takes Value)
0F Raises ATTACK in a pinch (used) (Takes Value)
10 Raises DEFENSE in a pinch (used) (Takes Value)
11 Raises SPEED in a pinch (used) (Takes Value)
12 Raises SP. ATK in a pinch (used) (Takes Value)
13 Raises SP. DEF in a pinch (used) (Takes Value)
14 Raises Critical-hit Ratio in a pinch (used) (Takes Value)
15 Raises one stat in a pinch (used) (Takes Value)
16 Lowers Opponents Accuracy (Takes Value)
17 Restores any lowered stat (used)
18 Promotes strong growth but lowers SPEED while it is held.
19 The holder gets a share of EXP. points without having to battle.
1A The holder may be able to strike first. (Takes Value)
1B Promotes friendly growth.
1C Cures Infatuation (used)
1D Powers up one move, which becomes the only usable one.
1E It may cause the foe to flinch upon taking damage. (Takes Value)
1F Boosts the power of BUG-type moves. (Takes Value)
20 Doubles the battle money if the holding POKéMON takes part. (Takes Value)
21 Repels wild POKéMON if the holder is first in the party.
22 Raises the SP. ATK and SP. DEF stats. (LATIOS\LATIAS only)
23 Raises the SP. ATK stat.
24 Raises the SP. DEF stat.
25 The holding POKéMON can flee from any wild POKéMON for sure.
26 The holding POKéMON is prevented from evolving.
27 The holding POKéMON may endure an attack, leaving just 1 HP. (Takes Value)
28 Extra EXP. points in battle.
29 Boosts the critical-hit ratio of the holding POKéMON.
2A Boosts the power of STEEL-type moves. (Takes Value)
2B Heals HP after every turn in battle. (Takes Value)
2C ??? DRAGON SCALE ??? (Takes Value)
2D Doubles SP. ATK, may paralize opponents. (PIKACHU only)
2E Boosts the power of GROUND-type moves. (Takes Value)
2F Boosts the power of ROCK-type moves. (Takes Value)
30 Boosts the power of GRASS-type moves. (Takes Value)
31 Boosts the power of DARK-type moves. (Takes Value)
32 Boosts the power of FIGHTING-type moves. (Takes Value)
33 Boosts the power of ELECTRIC-type moves. (Takes Value)
34 Boosts the power of WATER-type moves. (Takes Value)
35 Boosts the power of FLYING-type moves. (Takes Value)
36 Boosts the power of POISON-type moves. (Takes Value)
37 Boosts the power of ICE-type moves. (Takes Value)
38 Boosts the power of GHOST-type moves. (Takes Value)
39 Boosts the power of PSYCHIC-type moves. (Takes Value)
3A Boosts the power of FIRE-type moves. (Takes Value)
3B Boosts the power of DRAGON-type moves. (Takes Value)
3C Boosts the power of NORMAL-type moves. (Takes Value)
3D ?? UP-GRADE ??
3E Heals HP after hitting an opponent in battle. (Takes Value)
3F Raises Critical-Hit Ratio (CHANSEY only)
40 Raises DEFENSE (DITTO only)
41 It raises the ATTACK stat. (CUBONE/MAROWAK only)
42 Raises Critical-Hit Ratio (FARFETCH'D only)

So lets look at what the (Takes Value) means. It basically means we(hackers) can change how awesome these hold effects are. For instance, the Oran Berrys Hold Effect is 0x01 Heals HP... Hold Effect 0x01 Takes Value, and its Value byte is 0x0A or 10... Oran Berry Heals 10 HP... How do we make the Oran Berry heal 100 HP, put 0x64 in its Value byte.

Lets do a really fun one...
Focus Band has a Hold Effect of 0x27 he holding POKéMON may endure an attack, leaving just 1 HP. Hold Effect 0x27 Takes Values, and its Value Byte is again 0x0A, 10... this time its not an amount, its a percentage, the pokemon has a 10% chance of not dying... Lets try changing that to 100, put a 0x64 there... now your pokemon will NEVER die when holding this item... cool huh...

one more note on Value bytes, say you have a chancy and you wanna heal all its 401 HP... well 0xFF (the largest value) is only 255, but that really just means, all... the game interprets 0xFF as all, so if you need to heal all PP, HP, or whatever, 0xFF will work, even if the poke needs more than 255.

All you crazy ASM mongers can take this info, find the table, and figure out if there are any other bytes in the table (above 0x42)... then figure out how to write new effects, or stop berries from being used up... or whatever... I would appreciate any info to be posted here, maybe I will be able to incorporate it into my tool (have a checkbox for if item is used up or not)...

Hope it was informative.