diff options
| author | Rangi <35663410+Rangi42@users.noreply.github.com> | 2019-03-03 19:31:47 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-03-03 19:31:47 -0500 | 
| commit | 9e9f43bce776cfb92991bd601115c65baca07230 (patch) | |
| tree | b0ee2d9219481804d0c38f63aae98f3ed438ac5d /docs | |
| parent | eee79d7049232c50a17d7d445a2b2b65fed0e056 (diff) | |
| parent | f6e94dfd7903578e39ef419f04303937bedf9628 (diff) | |
Merge pull request #610 from ISSOtm/pursuit_fix
Fix Confusion and Pursuit bugs in #603
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/bugs_and_glitches.md | 83 | 
1 files changed, 81 insertions, 2 deletions
| diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index e59530db4..a24399931 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -247,7 +247,65 @@ This bug existed for all battles in Gold and Silver, and was only fixed for sing  ([Video](https://twitter.com/crystal_rby/status/874626362287562752)) -*To do:* Identify specific code causing this bug and fix it. +**Fix:** Edit the end of [hram.asm](/hram.asm) to create a new temporary variable: + +```diff + hClockResetTrigger:: db ; ffeb ++hIsConfusionDamage:: db ; ffec +``` + +Then edit `HitSelfInConfusion` in [engine/battle/effect_commands.asm](/engine/battle/effect_commands.asm): + +```diff + 	pop af + 	ld e, a ++	ld a, 1 ++	ldh [hIsConfusionDamage], a + 	ret +``` + +Then, in the same file, edit `BattleCommand_DamageCalc`: + +```diff + .skip_zero_damage_check + ++	xor a ; Not confusion damage ++	ldh [hIsConfusionDamage], a ++ ++ConfusionDamageCalc: + ; Minimum defense value is 1. + 	ld a, c + 	and a + 	jr nz, .not_dividing_by_zero + 	ld c, 1 + .not_dividing_by_zero +``` + +```diff + ; Item boosts ++	ldh a, [hIsConfusionDamage] ++	and a ++	jr nz, .DoneItem ; Item boosts don't apply to confusion damage + 	call GetUserItem +``` + +Finally, replace the calls in `CheckEnemyTurn` and `HitConfusion`, still in the same file: + +```diff + 	ld hl, HurtItselfText + 	call StdBattleTextBox + 	call HitSelfInConfusion +-	call BattleCommand_DamageCalc ++	call ConfusionDamageCalc + 	call BattleCommand_LowerSub +``` + +```diff + 	call HitSelfInConfusion +-	call BattleCommand_DamageCalc ++	call ConfusionDamageCalc + 	call BattleCommand_LowerSub +```  ## Moves that lower Defense can do so after breaking a Substitute @@ -345,7 +403,28 @@ Add this to the end of each file:  ([Video](https://www.youtube.com/watch?v=tiRvw-Nb2ME)) -*To do:* Identify specific code causing this bug and fix it. +**Fix:** Edit `PursuitSwitch` in [engine/battle/core.asm](/engine/battle/core.asm) + +```diff + 	ld a, $f0 + 	ld [wCryTracks], a + 	ld a, [wBattleMonSpecies] + 	call PlayStereoCry ++	ld a, [wCurBattleMon] ++	push af + 	ld a, [wLastPlayerMon] ++	ld [wCurBattleMon], a ++	call UpdateFaintedPlayerMon ++	pop af ++	ld [wCurBattleMon], a +-	ld c, a +-	ld hl, wBattleParticipantsNotFainted +-	ld b, RESET_FLAG +-	predef SmallFarFlagAction + 	call PlayerMonFaintedAnimation + 	ld hl, BattleText_MonFainted + 	jr .done_fainted +```  ## Lock-On and Mind Reader don't always bypass Fly and Dig | 
