mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-11-14 09:06:41 +13:00
repeated critical move table and recomment MoreCalculateDamage
This commit is contained in:
parent
d32e480f03
commit
ffc0b8f9de
165
main.asm
165
main.asm
|
|
@ -65144,124 +65144,161 @@ Func_3df1c: ; 3df1c (f:5f1c)
|
||||||
ret
|
ret
|
||||||
|
|
||||||
MoreCalculateDamage: ; 3df65 (f:5f65)
|
MoreCalculateDamage: ; 3df65 (f:5f65)
|
||||||
ld a, [$ff00+$f3] ;FFF3 decides which address to use
|
; input:
|
||||||
|
; b: attack
|
||||||
|
; c: opponent defense
|
||||||
|
; d: base power
|
||||||
|
; e: level
|
||||||
|
|
||||||
|
ld a, [$ff00+$f3] ; whose turn?
|
||||||
and a
|
and a
|
||||||
ld a, [W_PLAYERMOVEEFFECT]
|
ld a, [W_PLAYERMOVEEFFECT]
|
||||||
jr z, .next
|
jr z, .effect
|
||||||
ld a, [$cfcd]
|
ld a, [$cfcd]
|
||||||
.next
|
.effect
|
||||||
cp a, 7 ;effect to halve opponent defense [suicide moves]
|
|
||||||
jr nz, .next2
|
; EXPLODE_EFFECT halves defense.
|
||||||
.halveDefense
|
cp a, EXPLODE_EFFECT
|
||||||
srl c ;explosion and selfdestruct will halve the defense...
|
jr nz, .ok
|
||||||
jr nz, .next2
|
srl c
|
||||||
inc c ;...with a minimum value of 1 [it is used as a divisor later on]
|
jr nz, .ok
|
||||||
.next2
|
inc c ; ...with a minimum value of 1 (used as a divisor later on)
|
||||||
cp a, $1d
|
.ok
|
||||||
jr z, .next3
|
|
||||||
|
; Multi-hit attacks may or may not have 0 bp.
|
||||||
|
cp a, TWO_TO_FIVE_ATTACKS_EFFECT
|
||||||
|
jr z, .skipbp
|
||||||
cp a, $1e
|
cp a, $1e
|
||||||
jr z, .next3
|
jr z, .skipbp
|
||||||
cp a, $26 ;OHKO?
|
|
||||||
|
; Calculate OHKO damage based on remaining HP.
|
||||||
|
cp a, OHKO_EFFECT
|
||||||
jp z, Func_3e016
|
jp z, Func_3e016
|
||||||
ld a, d ;if attack base power zero then do nothing
|
|
||||||
|
; Don't calculate damage for moves that don't do any.
|
||||||
|
ld a, d ; base power
|
||||||
and a
|
and a
|
||||||
ret z
|
ret z
|
||||||
.next3
|
.skipbp
|
||||||
|
|
||||||
xor a
|
xor a
|
||||||
ld hl, $ff95 ;multiplication address
|
ld hl, H_DIVIDEND
|
||||||
ldi [hl], a ;init to zero
|
ldi [hl], a
|
||||||
ldi [hl], a
|
ldi [hl], a
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
ld a, e
|
|
||||||
add a ;A = level *2
|
; Multiply level by 2
|
||||||
jr nc, .noCarry
|
ld a, e ; level
|
||||||
.carry
|
add a
|
||||||
|
jr nc, .nc
|
||||||
push af
|
push af
|
||||||
ld a, 1 ;add carry for level if needed
|
ld a, 1
|
||||||
ld [hl], a ;level high byte [previously zero]
|
ld [hl], a
|
||||||
pop af
|
pop af
|
||||||
.noCarry
|
.nc
|
||||||
inc hl
|
inc hl
|
||||||
ldi [hl], a ;level low byte
|
ldi [hl], a
|
||||||
ld a, 5 ;[divisor] = 5
|
|
||||||
|
; Divide by 5
|
||||||
|
ld a, 5
|
||||||
ldd [hl], a
|
ldd [hl], a
|
||||||
push bc
|
push bc
|
||||||
ld b, 4
|
ld b, 4
|
||||||
call Divide ;divide level by 5
|
call Divide
|
||||||
pop bc
|
pop bc
|
||||||
inc [hl] ;+2 [?]
|
|
||||||
|
; Add 2
|
||||||
inc [hl]
|
inc [hl]
|
||||||
inc hl ;8bit multiplier
|
inc [hl]
|
||||||
|
|
||||||
|
inc hl ; multiplier
|
||||||
|
|
||||||
|
; Multiply by attack base power
|
||||||
ld [hl], d
|
ld [hl], d
|
||||||
call Multiply ;*multiply by attack base power
|
call Multiply
|
||||||
|
|
||||||
|
; Multiply by attack stat
|
||||||
ld [hl], b
|
ld [hl], b
|
||||||
call Multiply ;*multiply by attacker attack stat
|
call Multiply
|
||||||
|
|
||||||
|
; Divide by defender's defense stat
|
||||||
ld [hl], c
|
ld [hl], c
|
||||||
ld b, 4
|
ld b, 4
|
||||||
call Divide ;*divide by defender defense stat
|
call Divide
|
||||||
ld [hl], $32
|
|
||||||
ld b, 4
|
|
||||||
call Divide ;divide above result by 50
|
|
||||||
ld hl, W_DAMAGE ;[stuff below I never got to, was only interested in stuff above]
|
|
||||||
|
|
||||||
|
; Divide by 50
|
||||||
|
ld [hl], 50
|
||||||
|
ld b, 4
|
||||||
|
call Divide
|
||||||
|
|
||||||
|
ld hl, W_DAMAGE
|
||||||
ld b, [hl]
|
ld b, [hl]
|
||||||
ld a, [$FF00+$98]
|
ld a, [H_QUOTIENT + 3]
|
||||||
add b
|
add b
|
||||||
ld [$FF00+$98], a
|
ld [H_QUOTIENT + 3], a
|
||||||
jr nc, .asm_3dfd0
|
jr nc, .asm_3dfd0
|
||||||
ld a, [$FF00+$97]
|
|
||||||
|
ld a, [H_QUOTIENT + 2]
|
||||||
inc a
|
inc a
|
||||||
ld [$FF00+$97], a
|
ld [H_QUOTIENT + 2], a
|
||||||
and a
|
and a
|
||||||
jr z, .asm_3e004
|
jr z, .asm_3e004
|
||||||
|
|
||||||
.asm_3dfd0
|
.asm_3dfd0
|
||||||
ld a, [H_DIVIDEND] ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
ld a, [H_QUOTIENT]
|
||||||
ld b, a
|
ld b, a
|
||||||
ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND)
|
ld a, [H_QUOTIENT + 1]
|
||||||
or a
|
or a
|
||||||
jr nz, .asm_3e004
|
jr nz, .asm_3e004
|
||||||
ld a, [$FF00+$97]
|
|
||||||
cp $3
|
ld a, [H_QUOTIENT + 2]
|
||||||
|
cp 998 / $100
|
||||||
jr c, .asm_3dfe8
|
jr c, .asm_3dfe8
|
||||||
cp $4
|
cp 998 / $100 + 1
|
||||||
jr nc, .asm_3e004
|
jr nc, .asm_3e004
|
||||||
ld a, [$FF00+$98]
|
ld a, [H_QUOTIENT + 3]
|
||||||
cp $e6
|
cp 998 % $100
|
||||||
jr nc, .asm_3e004
|
jr nc, .asm_3e004
|
||||||
|
|
||||||
.asm_3dfe8
|
.asm_3dfe8
|
||||||
inc hl
|
inc hl
|
||||||
ld a, [$FF00+$98]
|
ld a, [H_QUOTIENT + 3]
|
||||||
ld b, [hl]
|
ld b, [hl]
|
||||||
add b
|
add b
|
||||||
ld [hld], a
|
ld [hld], a
|
||||||
ld a, [$FF00+$97]
|
|
||||||
|
ld a, [H_QUOTIENT + 2]
|
||||||
ld b, [hl]
|
ld b, [hl]
|
||||||
adc b
|
adc b
|
||||||
ld [hl], a
|
ld [hl], a
|
||||||
jr c, .asm_3e004
|
jr c, .asm_3e004
|
||||||
|
|
||||||
ld a, [hl]
|
ld a, [hl]
|
||||||
cp $3
|
cp 998 / $100
|
||||||
jr c, .asm_3e00a
|
jr c, .asm_3e00a
|
||||||
cp $4
|
cp 998 / $100 + 1
|
||||||
jr nc, .asm_3e004
|
jr nc, .asm_3e004
|
||||||
inc hl
|
inc hl
|
||||||
ld a, [hld]
|
ld a, [hld]
|
||||||
cp $e6
|
cp 998 % $100
|
||||||
jr c, .asm_3e00a
|
jr c, .asm_3e00a
|
||||||
|
|
||||||
.asm_3e004
|
.asm_3e004
|
||||||
ld a, $3
|
ld a, 997 / $100
|
||||||
ld [hli], a
|
ld [hli], a
|
||||||
ld a, $e5
|
ld a, 997 % $100
|
||||||
ld [hld], a
|
ld [hld], a
|
||||||
|
|
||||||
.asm_3e00a
|
.asm_3e00a
|
||||||
inc hl
|
inc hl
|
||||||
ld a, [hl]
|
ld a, [hl]
|
||||||
add $2
|
add 2
|
||||||
ld [hld], a
|
ld [hld], a
|
||||||
jr nc, .asm_3e012
|
jr nc, .done
|
||||||
inc [hl]
|
inc [hl]
|
||||||
.asm_3e012
|
.done
|
||||||
ld a, $1
|
|
||||||
|
ld a, 1
|
||||||
and a
|
and a
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
@ -65271,7 +65308,14 @@ Func_3e016: ; 3e016 (f:6016)
|
||||||
dec a
|
dec a
|
||||||
ret
|
ret
|
||||||
|
|
||||||
INCBIN "baserom.gbc",$3e01e,$3e023 - $3e01e
|
|
||||||
|
UnusedHighCriticalMoves: ; 3e01e (f:601e)
|
||||||
|
db KARATE_CHOP
|
||||||
|
db RAZOR_LEAF
|
||||||
|
db CRABHAMMER
|
||||||
|
db SLASH
|
||||||
|
db $FF
|
||||||
|
; 3e023
|
||||||
|
|
||||||
; determines if attack is a critical hit
|
; determines if attack is a critical hit
|
||||||
; azure heights claims "the fastest pokémon (who are,not coincidentally,
|
; azure heights claims "the fastest pokémon (who are,not coincidentally,
|
||||||
|
|
@ -65350,6 +65394,7 @@ HighCriticalMoves: ; 3e08e (f:608e)
|
||||||
db SLASH
|
db SLASH
|
||||||
db $FF
|
db $FF
|
||||||
|
|
||||||
|
|
||||||
; function to determine if Counter hits and if so, how much damage it does
|
; function to determine if Counter hits and if so, how much damage it does
|
||||||
HandleCounterMove: ; 3e093 (f:6093)
|
HandleCounterMove: ; 3e093 (f:6093)
|
||||||
ld a,[H_WHOSETURN] ; whose turn
|
ld a,[H_WHOSETURN] ; whose turn
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue