Uploaded March 2016 | Updated September 2026, 3 weeks ago
Source: github.com/PikalaxALT/pokecrystal/blob/master/engine/anim_hp_bar.asm#L189-L192
The delays applied during the animation of health bars of above 48 maximum HP are buggy. In a nutshell:
Intended delay during the depletion of a full HP bar (in miliseconds, approximately): 48 * 33 + 48 * Max_HP / 10
Actual delay during the depletion of a full HP bar (in miliseconds, approximately): Max_HP * 33
The HP bar is 48 pixels long. On Pokemon with over 48 maximum HP, a single pixel may represent more than 1 HP. It was intended that, during the HP bar animation, a small delay (adjusted a little depending on the value of the maximum HP) would be introduced whenever the number of pixels changed, but due to an oversight, the small delay occurs on every single 1 HP difference. The game tries to compare the old HP bar length value to the current HP bar length value in order to determine whether to apply the delay or not; however, due to a misplaced instruction, it erroneously compares it to the Pokemon maximum's HP instead (which is not even a value in pixels). Since the compared values never match, the game thinks that the number of pixels changes on every single iteration, and proceeds to animate the HP bar (with no effect if the HP bar length didn't actually change) and to apply the small delay.
To fix it:
- Pokemon Crystal (U): Write 7B C1 D1 E1 starting from address D723
- Pokemon Gold/Silver (U): Write 7B C1 D1 E1 starting from address D729
Source: github.com/PikalaxALT/pokecrystal/blob/master/engine/anim_hp_bar.asm#L189-L192
The delays applied during the animation of health bars of above 48 maximum HP are buggy. In a nutshell:
Intended delay during the depletion of a full HP bar (in miliseconds, approximately): 48 * 33 + 48 * Max_HP / 10
Actual delay during the depletion of a full HP bar (in miliseconds, approximately): Max_HP * 33
The HP bar is 48 pixels long. On Pokemon with over 48 maximum HP, a single pixel may represent more than 1 HP. It was intended that, during the HP bar animation, a small delay (adjusted a little depending on the value of the maximum HP) would be introduced whenever the number of pixels changed, but due to an oversight, the small delay occurs on every single 1 HP difference. The game tries to compare the old HP bar length value to the current HP bar length value in order to determine whether to apply the delay or not; however, due to a misplaced instruction, it erroneously compares it to the Pokemon maximum's HP instead (which is not even a value in pixels). Since the compared values never match, the game thinks that the number of pixels changes on every single iteration, and proceeds to animate the HP bar (with no effect if the HP bar length didn't actually change) and to apply the small delay.
To fix it:
- Pokemon Crystal (U): Write 7B C1 D1 E1 starting from address D723
- Pokemon Gold/Silver (U): Write 7B C1 D1 E1 starting from address D729





![Pokemon Pyrite - Modified Obedience System
This video shows one of the features of the GBC hack Pokemon Pyrite: modified obedience checks that affect both traded and non-traded Pokemon. Countine reading...
This follows the purpose of preventing the player from overtraining Pokemon to make the game easier or from playing an overlevelled solo run (which usually makes the game easier and less entertaining as well).
Continue reading for details.
If Pokemon Level Badge Level → Pokemon will always obey.
If Pokemon Level = Badge Level + 1 → Pokemon will disobey 13% of the times aprox.
If Pokemon Level = Badge Level + 2 → Pokemon will disobey 25-26% of the times aprox.
If Pokemon Level = Badge Level + 3 → Pokemon will disobey 37-39% of the times aprox.
If Pokemon Level = Badge Level + 4 → Pokemon will disobey 50-52% of the times aprox.
From there, the chances of not obeying increase slowly, and are comparable to:
[ Pokemon Level / (Badge level + Pokemon Level ) ] * 100%
The higher [Pokemon Level - Badge Level] is, the higher is the chance for worse effects to happen (begin to nap, hit due to confusion...). This part works similarly to the way it does in the original game.
***********************************************************
You can follow the progression of the hack here:
http://hax.iimarck.us/post/16385/
A Beta version, playable up to the Johto League included, will be released in around 15 days time.
Check my Youtube Channel! - https://www.youtube.com/user/CrystaL12RG/videos Pokemon Pyrite - Modified Obedience System](https://i.ytimg.com/vi/UkkIF21_kMM/mqdefault.jpg)


![Pokemon R/B/Y - Level 1 / 171 Psywave infinite loop
In the first generation, Psywave deals damage equal to a number randomly generated between 1 and aproximately 15 * attackers level.
When Psywave is used, the game generates a random 1-byte number (between 0 and 255) and loops until the number generated follows these two conditions:
- Its not 0, if its the player turn
- Its lower than [attackers level + attackers level/2], rounded down.
If the level is 1, the 0 number is ignored as a result of the first condition and all the remaining numbers are ignored as a result of the second condition, causing the game to loop indefinitely hopelessly searching for a number it cant find.
If the level is 171, the sum 171 + 171/2 gives out a result of exactly 256; since it has to fit in one byte, 256 rolls over to 0... meaning that the non-0 condition alone causes the infinite loop. Pokemon R/B/Y - Level 1 / 171 Psywave infinite loop](https://i.ytimg.com/vi/VyIFL_-l2o4/mqdefault.jpg)

