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_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

View file

@ -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
ld a, [hQuotient + 3]
cp 998 % $100
jr nc, .asm_3e004
cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100
jr c, .dont_cap_2
.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
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