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.
This commit is contained in:
Eldred Habert 2019-03-03 17:27:35 +01:00 committed by GitHub
parent e671636bba
commit add58fb00d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 8 deletions

View File

@ -175,24 +175,38 @@ This bug existed for all battles in Gold and Silver, and was only fixed for sing
```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
*Fixing this bug will break compatibility with standard Pokémon Crystal for link battles.*