summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2015-08-06 23:53:23 -0700
committerYamaArashi <shadow962@live.com>2015-08-06 23:53:23 -0700
commit8d30191707758a36b513c4368b9fdb7705730865 (patch)
tree4222a1d645e863c4055340a29df99e52c7fe78e3
parentf8a9c37a0019eb085c22c6e3ae53b16ff0cd4f6a (diff)
more info on the bide bug
-rwxr-xr-xengine/battle/core.asm16
1 files changed, 12 insertions, 4 deletions
diff --git a/engine/battle/core.asm b/engine/battle/core.asm
index 65549f7b..bc8fbc7d 100755
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -834,8 +834,17 @@ FaintEnemyPokemon: ; 0x3c567
.wild
ld hl, W_PLAYERBATTSTATUS1
res AttackingMultipleTimes, [hl]
- xor a
- ld [wPlayerNumHits], a
+; Bug. This only zeroes the high byte of the player's accumulated damage,
+; setting the accumulated damage to itself mod 256 instead of 0 as was probably
+; intended. That alone is problematic, but this mistake has another more severe
+; effect. This function's counterpart for when the player mon faints,
+; RemoveFaintedPlayerMon, zeroes both the high byte and the low byte. In a link
+; battle, the other player's Game Boy will call that function in response to
+; the enemy mon (the player mon from the other side's perspective) fainting,
+; and the states of the two Game Boys will go out of sync unless the damage
+; was congruent to 0 modulo 256.
+ xor a
+ ld [wPlayerBideAccumulatedDamage], a
ld hl, wEnemyStatsToDouble ; clear enemy statuses
ld [hli], a
ld [hli], a
@@ -1092,8 +1101,7 @@ RemoveFaintedPlayerMon: ; 3c741 (f:4741)
ld [wLowHealthAlarm], a ;disable low health alarm
call WaitForSoundToFinish
.skipWaitForSound
-; bug? if the player mon faints while the enemy mon is using bide,
-; the accumulated damage is overwritten. xxx what values can [wLowHealthAlarm] have here?
+; a is 0, so this zeroes the enemy's accumulated damage.
ld hl, wEnemyBideAccumulatedDamage
ld [hli], a
ld [hl], a