diff options
author | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-07-05 15:01:29 -0400 |
---|---|---|
committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-07-05 15:12:29 -0400 |
commit | 155695cbfe35133bae1e6affae7f0a90457cfe9f (patch) | |
tree | 1cb0e17d4a6cc3ad1a968332f76f74c25c55dbfe | |
parent | b30b14f3224e2e96b76ad5cba088eec601a72856 (diff) |
Use constants for damage limits in CalculateDamage
Fixes #255
-rw-r--r-- | constants/battle_constants.asm | 4 | ||||
-rwxr-xr-x | engine/battle/core.asm | 62 |
2 files changed, 38 insertions, 28 deletions
diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm index e45ad7f1..bdcd2b98 100644 --- a/constants/battle_constants.asm +++ b/constants/battle_constants.asm @@ -13,6 +13,10 @@ BATTLE_TYPE_NORMAL EQU 0 BATTLE_TYPE_OLD_MAN EQU 1 BATTLE_TYPE_SAFARI EQU 2 +; damage limits before type effectiveness +MIN_NEUTRAL_DAMAGE EQU 2 +MAX_NEUTRAL_DAMAGE EQU 999 + ; fixed damage constants SONICBOOM_DAMAGE EQU 20 DRAGON_RAGE_DAMAGE EQU 40 diff --git a/engine/battle/core.asm b/engine/battle/core.asm index f89dc781..935764aa 100755 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -4485,37 +4485,42 @@ CalculateDamage: ld b, 4 call Divide +; Update wCurDamage. +; Capped at MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE: 999 - 2 = 997. ld hl, wDamage ld b, [hl] ld a, [hQuotient + 3] add b ld [hQuotient + 3], a - jr nc, .asm_3dfd0 + jr nc, .dont_cap_1 ld a, [hQuotient + 2] inc a ld [hQuotient + 2], a and a - jr z, .asm_3e004 + jr z, .cap -.asm_3dfd0 +.dont_cap_1 ld a, [hQuotient] ld b, a ld a, [hQuotient + 1] or a - jr nz, .asm_3e004 + jr nz, .cap ld a, [hQuotient + 2] - cp 998 / $100 - jr c, .asm_3dfe8 - cp 998 / $100 + 1 - jr nc, .asm_3e004 + cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + jr c, .dont_cap_2 + + cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + 1 + jr nc, .cap + ld a, [hQuotient + 3] - cp 998 % $100 - jr nc, .asm_3e004 + cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) % $100 + jr nc, .cap -.asm_3dfe8 +.dont_cap_2 inc hl + ld a, [hQuotient + 3] ld b, [hl] add b @@ -4525,36 +4530,37 @@ CalculateDamage: ld b, [hl] adc b ld [hl], a - jr c, .asm_3e004 + jr c, .cap ld a, [hl] - cp 998 / $100 - jr c, .asm_3e00a - cp 998 / $100 + 1 - jr nc, .asm_3e004 + cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + jr c, .dont_cap_3 + + cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + 1 + jr nc, .cap + inc hl ld a, [hld] - cp 998 % $100 - jr c, .asm_3e00a + cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) % $100 + jr c, .dont_cap_3 -.asm_3e004 -; cap at 997 - ld a, 997 / $100 +.cap + ld a, (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) / $100 ld [hli], a - ld a, 997 % $100 + ld a, (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) % $100 ld [hld], a -.asm_3e00a -; add 2 +.dont_cap_3 +; Add back MIN_NEUTRAL_DAMAGE (capping at 999). inc hl ld a, [hl] - add 2 + add MIN_NEUTRAL_DAMAGE ld [hld], a - jr nc, .done + jr nc, .dont_floor inc [hl] +.dont_floor -.done -; minimum damage is 1 +; Returns nz and nc. ld a, 1 and a ret |