Use constants for damage limits in CalculateDamage

Fixes #255
This commit is contained in:
Rangi 2020-07-05 15:01:29 -04:00
parent b30b14f322
commit 155695cbfe
2 changed files with 39 additions and 29 deletions

View file

@ -13,6 +13,10 @@ BATTLE_TYPE_NORMAL EQU 0
BATTLE_TYPE_OLD_MAN EQU 1 BATTLE_TYPE_OLD_MAN EQU 1
BATTLE_TYPE_SAFARI EQU 2 BATTLE_TYPE_SAFARI EQU 2
; damage limits before type effectiveness
MIN_NEUTRAL_DAMAGE EQU 2
MAX_NEUTRAL_DAMAGE EQU 999
; fixed damage constants ; fixed damage constants
SONICBOOM_DAMAGE EQU 20 SONICBOOM_DAMAGE EQU 20
DRAGON_RAGE_DAMAGE EQU 40 DRAGON_RAGE_DAMAGE EQU 40

View file

@ -4485,37 +4485,42 @@ CalculateDamage:
ld b, 4 ld b, 4
call Divide call Divide
; Update wCurDamage.
; Capped at MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE: 999 - 2 = 997.
ld hl, wDamage ld hl, wDamage
ld b, [hl] ld b, [hl]
ld a, [hQuotient + 3] ld a, [hQuotient + 3]
add b add b
ld [hQuotient + 3], a ld [hQuotient + 3], a
jr nc, .asm_3dfd0 jr nc, .dont_cap_1
ld a, [hQuotient + 2] ld a, [hQuotient + 2]
inc a inc a
ld [hQuotient + 2], a ld [hQuotient + 2], a
and a and a
jr z, .asm_3e004 jr z, .cap
.asm_3dfd0 .dont_cap_1
ld a, [hQuotient] ld a, [hQuotient]
ld b, a ld b, a
ld a, [hQuotient + 1] ld a, [hQuotient + 1]
or a or a
jr nz, .asm_3e004 jr nz, .cap
ld a, [hQuotient + 2] ld a, [hQuotient + 2]
cp 998 / $100 cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100
jr c, .asm_3dfe8 jr c, .dont_cap_2
cp 998 / $100 + 1
jr nc, .asm_3e004
ld a, [hQuotient + 3]
cp 998 % $100
jr nc, .asm_3e004
.asm_3dfe8 cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + 1
jr nc, .cap
ld a, [hQuotient + 3]
cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) % $100
jr nc, .cap
.dont_cap_2
inc hl inc hl
ld a, [hQuotient + 3] ld a, [hQuotient + 3]
ld b, [hl] ld b, [hl]
add b add b
@ -4525,36 +4530,37 @@ CalculateDamage:
ld b, [hl] ld b, [hl]
adc b adc b
ld [hl], a ld [hl], a
jr c, .asm_3e004 jr c, .cap
ld a, [hl] ld a, [hl]
cp 998 / $100 cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100
jr c, .asm_3e00a jr c, .dont_cap_3
cp 998 / $100 + 1
jr nc, .asm_3e004 cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + 1
jr nc, .cap
inc hl inc hl
ld a, [hld] ld a, [hld]
cp 998 % $100 cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) % $100
jr c, .asm_3e00a jr c, .dont_cap_3
.asm_3e004 .cap
; cap at 997 ld a, (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) / $100
ld a, 997 / $100
ld [hli], a ld [hli], a
ld a, 997 % $100 ld a, (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) % $100
ld [hld], a ld [hld], a
.asm_3e00a .dont_cap_3
; add 2 ; Add back MIN_NEUTRAL_DAMAGE (capping at 999).
inc hl inc hl
ld a, [hl] ld a, [hl]
add 2 add MIN_NEUTRAL_DAMAGE
ld [hld], a ld [hld], a
jr nc, .done jr nc, .dont_floor
inc [hl] inc [hl]
.dont_floor
.done ; Returns nz and nc.
; minimum damage is 1
ld a, 1 ld a, 1
and a and a
ret ret