shithub: pokecrystal

Download patch

ref: add58fb00d73495655243c4cf13b730bbc1b3242
parent: e671636bba211b30a15b86bf748989b6e61dcf0a
author: Eldred Habert <eldredhabert0@gmail.com>
date: Sun Mar 3 12:27:35 EST 2019

Fix "100% secondary effect" fix, add compatibility

The original fix was bugged (example: erroneous `pop hl` if `.failed` was jumped to).
Replaced with a less invasive fix, keeping all side effects from the original function; it's less intuitive, but more performant - and the tricky bit has been commented.
Also the new fix is more friendly to the compatibility patch I also added, by request of ShinyDragonHunter.

--- a/docs/bugs_and_glitches.md
+++ b/docs/bugs_and_glitches.md
@@ -175,22 +175,36 @@
 ```diff
 -	; BUG: 1/256 chance to fail even for a 100% effect chance,
 -	; since carry is not set if BattleRandom == [hl] == 255
+- 	call BattleRandom
 +	ld a, [hl]
-+	cp 100 percent
-+	jr z, .ok
- 	call BattleRandom
++	sub 100 percent
++	; If chance was 100%, RNG won't be called (carry not set)
++	; Thus chance will be subtracted from 0, guaranteeing a carry
++	call c, BattleRandom
  	cp [hl]
--	pop hl
--	ret c
-+	jr c, .ok
+	pop hl
+	ret c
 
  .failed
  	ld a, 1
  	ld [wEffectFailed], a
  	and a
-+.ok
-+	pop hl
  	ret
+```
+
+If you wish to keep compatibility with standard Pokémon Crystal, you can disable the fix during link battles by also applying the following edit in the same place:
+
+```diff
++	ld a, [wLinkMode]
++	cp LINK_COLOSSEUM
++	scf ; Force RNG to be called
++	jr z, .nofix ; Don't apply fix in link battles, for compatibility
+	ld a, [hl]
+	sub 100 percent
+	; If chance was 100%, RNG won't be called (carry not set)
+	; Thus chance will be subtracted from 0, guaranteeing a carry
++ .nofix
+	call c, BattleRandom
 ```
 
 ## Belly Drum sharply boosts Attack even with under 50% HP