Add confusion + items/selfdestruct fix
This commit is contained in:
@@ -231,7 +231,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))
|
([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
|
## Moves that lower Defense can do so after breaking a Substitute
|
||||||
|
Reference in New Issue
Block a user