diff options
author | pikalaxalt <PikalaxALT@gmail.com> | 2016-06-22 10:20:18 -0400 |
---|---|---|
committer | pikalaxalt <PikalaxALT@gmail.com> | 2016-06-22 10:20:18 -0400 |
commit | d0b87558f5a0910135c999dad498818eb00b554f (patch) | |
tree | a06eb19464aef19c3b1ecb940c28379ba621d1d3 | |
parent | 0ef3ebcd141148c5c30879c57677c0971f48a9fe (diff) |
engine/items.asm
-rwxr-xr-x | engine/items.asm | 551 | ||||
-rw-r--r-- | main.asm | 22 |
2 files changed, 554 insertions, 19 deletions
diff --git a/engine/items.asm b/engine/items.asm new file mode 100755 index 00000000..387f4ba2 --- /dev/null +++ b/engine/items.asm @@ -0,0 +1,551 @@ +ReceiveItem_:: ; d1e2 (3:51e2) + call CheckBagOrPC + jp nz, PutItemInPocketOrPC + push hl + call CheckItemPocket + pop de + ld a, [wd03f] + 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, [wd03f] + 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, [wd03f] + 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, [wd009] + 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, [wd009] + ld [wd00a], a +.asm_d2df + inc hl + ld a, [hli] + cp $ff + jr z, .asm_d2fc + cp c + jr nz, .asm_d2df + ld a, [wd00a] + add [hl] + cp $64 + jr nc, .asm_d2f3 + ld [hl], a + jr .asm_d30a + +.asm_d2f3 + ld [hl], $63 + sub $63 + ld [wd00a], a + jr .asm_d2df + +.asm_d2fc + dec hl + ld a, [wd002] + ld [hli], a + ld a, [wd00a] + 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, [wd009] + ld b, a + ld a, [hl] + sub b + jr c, .asm_d354 + ld [hl], a + ld [wd00a], 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, [wd009] + 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, [wd009] + ld b, a + ld a, [hl] + sub b + jr c, .asm_d406 + ld [hl], a + ld [wd00a], 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 [wd03f], a + ret + +CheckItemContext: + ld a, $6 + call GetItemAttr + and $f + ld [wd03f], a + ret + +CheckItemMenu: + ld a, $6 + call GetItemAttr + swap a + and $f + ld [wd03f], 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 [wd03f], 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 [wd03f], 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 @@ -405,18 +405,10 @@ FlagPredef: INCLUDE "engine/health.asm" INCLUDE "event/overworld.asm" +INCLUDE "engine/items.asm" -ReceiveItem_:: IF DEF(GOLD) - dr $d1e2, $d21a -TossItem_:: - dr $d21a, $d251 -CheckItem_:: - dr $d251, $d414 -GetTMHMNumber:: - dr $d414, $d434 -CheckTossableItem_:: - dr $d434, $d62d + dr $d4a4, $d62d AnimateHPBar_: dr $d62d, $d892 @@ -463,15 +455,7 @@ Functionf900: ENDC IF DEF(SILVER) - dr $d1e0, $d218 -TossItem_:: - dr $d218, $d24f -CheckItem_:: - dr $d24f, $d412 -GetTMHMNumber:: - dr $d412, $d432 -CheckTossableItem_:: - dr $d432, $d62b + dr $d4a2, $d62b AnimateHPBar_: dr $d62b, $d890 |