pokegold/engine/items.asm
2018-08-21 16:27:04 -04:00

552 lines
6.7 KiB
NASM
Executable File

ReceiveItem_:: ; d1e2 (3:51e2)
call CheckBagOrPC
jp nz, PutItemInPocketOrPC
push hl
call CheckItemPocket
pop de
ld a, [wItemAttributeParamBuffer]
dec a
ld hl, .Jumptable
rst JumpTable
ret
.Jumptable
dw ReceiveNormalItem
dw ReceiveKeyItem
dw ReceiveBall
dw ReceiveTMHM
ReceiveNormalItem:
ld h, d
ld l, e
jp PutItemInPocketOrPC
ReceiveKeyItem:
ld h, d
ld l, e
jp PutItemInKeyItemPocket
ReceiveBall:
ld hl, wNumBalls
jp PutItemInPocketOrPC
ReceiveTMHM:
ld h, d
ld l, e
ld a, [wd002]
ld c, a
call GetTMHMNumber
jp PutItemInTMPocket
TossItem_:: ; d21a (3:521a)
call CheckBagOrPC
jr nz, remove_item_from_bag_or_pc
push hl
call CheckItemPocket
pop de
ld a, [wItemAttributeParamBuffer]
dec a
ld hl, .Jumptable ; $522d
rst JumpTable
ret
.Jumptable
dw RemoveNormalItem
dw RemoveKeyItem
dw RemoveBall
dw RemoveTMHM
RemoveBall:
ld hl, wNumBalls
jp RemoveItemAndQuantity
RemoveTMHM:
ld h, d
ld l, e
ld a, [wd002]
ld c, a
call GetTMHMNumber
jp RemoveTMorHM
RemoveKeyItem:
ld h, d
ld l, e
jp RemoveItemWithoutQuantity
RemoveNormalItem:
ld h, d
ld l, e
remove_item_from_bag_or_pc
jp RemoveItemAndQuantity
CheckItem_:: ; d251 (3:5251)
call CheckBagOrPC
jr nz, check_item_in_bag_or_pc
push hl
call CheckItemPocket
pop de
ld a, [wItemAttributeParamBuffer]
dec a
ld hl, .Jumptable
rst JumpTable
ret
.Jumptable
dw CheckNormalItem
dw CheckKeyItem
dw CheckBall
dw CheckTMHM
CheckBall:
ld hl, wNumBalls
jp CheckItemWithQuantity
CheckTMHM:
ld h, d
ld l, e
ld a, [wd002]
ld c, a
call GetTMHMNumber
jp CheckTMorHM
CheckKeyItem:
ld h, d
ld l, e
jp CheckItemWithoutQuantity
CheckNormalItem:
ld h, d
ld l, e
check_item_in_bag_or_pc
jp CheckItemWithQuantity
CheckBagOrPC: ; d288 (3:5288)
ld a, l
cp wNumItems % $100
ret nz
ld a, h
cp wNumItems / $100
ret
GetPocketCapacity: ; d290 (3:5290)
ld c, MAX_ITEMS
ld a, e
cp wNumItems % $100
jr nz, .asm_d29b
ld a, d
cp wNumItems / $100
ret z
.asm_d29b
ld c, MAX_PC_ITEMS
ld a, e
cp wPCItems % $100
jr nz, .asm_d2a6
ld a, d
cp wPCItems / $100
ret z
.asm_d2a6
ld c, MAX_BALLS
ret
PutItemInPocketOrPC: ; d2a9 (3:52a9)
ld d, h
ld e, l
inc hl
ld a, [wd002]
ld c, a
ld b, $0
.asm_d2b2
ld a, [hli]
cp $ff
jr z, .asm_d2ca
cp c
jr nz, .asm_d2c7
ld a, $63
sub [hl]
add b
ld b, a
ld a, [wItemQuantityChangeBuffer]
cp b
jr z, .asm_d2d3
jr c, .asm_d2d3
.asm_d2c7
inc hl
jr .asm_d2b2
.asm_d2ca
call GetPocketCapacity
ld a, [de]
cp c
jr c, .asm_d2d3
and a
ret
.asm_d2d3
ld h, d
ld l, e
ld a, [wd002]
ld c, a
ld a, [wItemQuantityChangeBuffer]
ld [wItemQuantityBuffer], a
.asm_d2df
inc hl
ld a, [hli]
cp $ff
jr z, .asm_d2fc
cp c
jr nz, .asm_d2df
ld a, [wItemQuantityBuffer]
add [hl]
cp $64
jr nc, .asm_d2f3
ld [hl], a
jr .asm_d30a
.asm_d2f3
ld [hl], $63
sub $63
ld [wItemQuantityBuffer], a
jr .asm_d2df
.asm_d2fc
dec hl
ld a, [wd002]
ld [hli], a
ld a, [wItemQuantityBuffer]
ld [hli], a
ld [hl], $ff
ld h, d
ld l, e
inc [hl]
.asm_d30a
scf
ret
RemoveItemAndQuantity: ; d30c (3:530c)
ld d, h
ld e, l
ld a, [hli]
ld c, a
ld a, [wd003]
cp c
jr nc, .asm_d325
ld c, a
ld b, $0
add hl, bc
add hl, bc
ld a, [wd002]
cp [hl]
inc hl
jr z, .asm_d334
ld h, d
ld l, e
inc hl
.asm_d325
ld a, [wd002]
ld b, a
.asm_d329
ld a, [hli]
cp b
jr z, .asm_d334
cp $ff
jr z, .asm_d354
inc hl
jr .asm_d329
.asm_d334
ld a, [wItemQuantityChangeBuffer]
ld b, a
ld a, [hl]
sub b
jr c, .asm_d354
ld [hl], a
ld [wItemQuantityBuffer], a
and a
jr nz, .asm_d352
dec hl
ld b, h
ld c, l
inc hl
inc hl
.asm_d348
ld a, [hli]
ld [bc], a
inc bc
cp $ff
jr nz, .asm_d348
ld h, d
ld l, e
dec [hl]
.asm_d352
scf
ret
.asm_d354
and a
ret
CheckItemWithQuantity: ; d356 (3:5356)
ld a, [wd002]
ld c, a
.asm_d35a
inc hl
ld a, [hli]
cp $ff
jr z, .asm_d365
cp c
jr nz, .asm_d35a
scf
ret
.asm_d365
and a
ret
PutItemInKeyItemPocket: ; d367 (3:5367)
ld hl, wItemsEnd
ld a, [hli]
cp $19
jr nc, .asm_d37f
ld c, a
ld b, $0
add hl, bc
ld a, [wd002]
ld [hli], a
ld [hl], $ff
ld hl, wNumKeyItems
inc [hl]
scf
ret
.asm_d37f
and a
ret
RemoveItemWithoutQuantity: ; d381 (3:5381)
ld a, [wd003]
ld e, a
ld d, $0
ld hl, wItemsEnd
ld a, [hl]
cp e
jr nc, .asm_d394
call FindAndTossKeyItem
ret nc
jr .asm_d397
.asm_d394
dec [hl]
inc hl
add hl, de
.asm_d397
ld d, h
ld e, l
inc hl
.asm_d39a
ld a, [hli]
ld [de], a
inc de
cp $ff
jr nz, .asm_d39a
scf
ret
FindAndTossKeyItem: ; d3a3 (3:53a3)
ld hl, wItemsEnd
ld a, [wd002]
ld c, a
.asm_d3aa
inc hl
ld a, [hl]
cp c
jr z, .asm_d3b5
cp $ff
jr nz, .asm_d3aa
xor a
ret
.asm_d3b5
ld a, [wNumKeyItems]
dec a
ld [wNumKeyItems], a
scf
ret
CheckItemWithoutQuantity: ; d3be (3:53be)
ld a, [wd002]
ld c, a
ld hl, wKeyItems
.asm_d3c5
ld a, [hli]
cp c
jr z, .asm_d3cf
cp $ff
jr nz, .asm_d3c5
and a
ret
.asm_d3cf
scf
ret
PutItemInTMPocket: ; d3d1 (3:53d1)
dec c
ld b, $0
ld hl, wTMsHMs
add hl, bc
ld a, [wItemQuantityChangeBuffer]
add [hl]
cp $64
jr nc, .asm_d3e3
ld [hl], a
scf
ret
.asm_d3e3
and a
ret
RemoveTMorHM: ; d3e5 (3:53e5)
dec c
ld b, $0
ld hl, wTMsHMs
add hl, bc
ld a, [wItemQuantityChangeBuffer]
ld b, a
ld a, [hl]
sub b
jr c, .asm_d406
ld [hl], a
ld [wItemQuantityBuffer], a
jr nz, .asm_d404
ld a, [wcfd2]
and a
jr z, .asm_d404
dec a
ld [wcfd2], a
.asm_d404
scf
ret
.asm_d406
and a
ret
CheckTMorHM: ; d408 (3:5408)
dec c
ld b, $0
ld hl, wTMsHMs
add hl, bc
ld a, [hl]
and a
ret z
scf
ret
GetTMHMNumber:: ; d414 (3:5414)
ld a, c
cp ITEM_C3
jr c, .asm_d41f
cp ITEM_DC
jr c, .asm_d41e
dec a
.asm_d41e
dec a
.asm_d41f
sub $bf
inc a
ld c, a
ret
GetNumberedTM:
ld a, c
cp ITEM_C3 - (TM01 - 1)
jr c, .asm_d42f
cp ITEM_DC - (TM01 - 1) - 1
jr c, .asm_d42e
inc a
.asm_d42e
inc a
.asm_d42f
add TM01
dec a
ld c, a
ret
CheckTossableItem_:: ; d434 (3:5434)
ld a, $4
call GetItemAttr
bit 7, a
jr nz, ItemAttr_ReturnCarry
and a
ret
CheckSelectableItem:
ld a, $4
call GetItemAttr
bit 6, a
jr nz, ItemAttr_ReturnCarry
and a
ret
CheckItemPocket: ; d44a (3:544a)
ld a, $5
call GetItemAttr
and $f
ld [wItemAttributeParamBuffer], a
ret
CheckItemContext:
ld a, $6
call GetItemAttr
and $f
ld [wItemAttributeParamBuffer], a
ret
CheckItemMenu:
ld a, $6
call GetItemAttr
swap a
and $f
ld [wItemAttributeParamBuffer], a
ret
GetItemAttr: ; d46d (3:546d)
push hl
push bc
ld hl, ItemAttributes
ld c, a
ld b, $0
add hl, bc
xor a
ld [wItemAttributeParamBuffer], a
ld a, [wd002]
dec a
ld c, a
ld a, $7
call AddNTimes
ld a, BANK(ItemAttributes)
call GetFarByte
pop bc
pop hl
ret
ItemAttr_ReturnCarry
ld a, $1
ld [wItemAttributeParamBuffer], a
scf
ret
GetItemPrice:
push hl
push bc
ld a, $0
call GetItemAttr
ld e, a
ld a, $1
call GetItemAttr
ld d, a
pop bc
pop hl
ret