pokegold-spaceworld/engine/items/item_effects.asm
luckytyphlosion e1659ecd41 Introduce linkerscript.
Addresses of sections will now be added to the linkerscript via `org`, and the section name will be the path/to/file. If there is more than one section in the file, then add a @SectionName after the path/to/file to describe the section.
2018-07-03 17:07:05 -04:00

79 lines
1.2 KiB
NASM
Executable File

INCLUDE "constants.asm"
SECTION "engine/items/item_effects.asm", ROMX
ApplyPPUp: ; 03:78f6
ld a, MON_MOVES
call GetPartyParamLocation
push hl
ld de, wStringBuffer1
predef FillPP
pop hl
ld c, MON_PP - MON_MOVES
ld b, 0
add hl, bc
ld de, wStringBuffer1 + 1
ld b, 0
.loop
inc b
ld a, b
cp NUM_MOVES + 1
ret z
ld a, [wce37]
dec a
jr nz, .use
ld a, [wMenuCursorY]
inc a
cp b
jr nz, .skip
.use
ld a, [hl]
and PP_UP_MASK
call nz, ComputeMaxPP
.skip
inc hl
inc de
jr .loop
ComputeMaxPP: ; 03:792B
push bc
; Divide the base PP by 5.
ld a, [de]
ldh [hDividend + 3], a
xor a
ldh [hDividend], a
ldh [hDividend + 1], a
ldh [hDividend + 2], a
ld a, 5
ldh [hDivisor], a
ld b, 4
call Divide
; Get the number of PP, which are bits 6 and 7 of the PP value stored in RAM.
ld a, [hl]
ld b, a
swap a
and $f
srl a
srl a
ld c, a
.loop
; Normally, a move with 40 PP would have 64 PP with three PP Ups.
; Since this would overflow into bit 6, we prevent that from happening
; by decreasing the extra amount of PP each PP Up provides, resulting
; in a maximum of 61.
ldh a, [hQuotient + 2]
cp $8
jr c, .okay
ld a, $7
.okay
add b
ld b, a
ld a, [wce37]
dec a
jr z, .no_pp_up
dec c
jr nz, .loop
.no_pp_up
ld [hl], b
pop bc
ret