diff options
author | YamaArashi <shadow962@live.com> | 2015-08-06 23:53:23 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2015-08-06 23:53:23 -0700 |
commit | 8d30191707758a36b513c4368b9fdb7705730865 (patch) | |
tree | 4222a1d645e863c4055340a29df99e52c7fe78e3 /engine | |
parent | f8a9c37a0019eb085c22c6e3ae53b16ff0cd4f6a (diff) |
more info on the bide bug
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/battle/core.asm | 16 |
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 |