pokeyellow/engine/overworld/hidden_items.asm
2016-05-30 19:23:56 -04:00

172 lines
3.1 KiB
NASM
Executable File

HiddenItems: ; 75f74 (1d:5f74)
ld hl, HiddenItemCoords
call FindHiddenItemOrCoinsIndex
ld [wHiddenItemOrCoinsIndex], a
ld hl, wObtainedHiddenItemsFlags
ld a, [wHiddenItemOrCoinsIndex]
ld c, a
ld b, FLAG_TEST
predef FlagActionPredef
ld a, c
and a
jr nz, .itemAlreadyFound
call EnableAutoTextBoxDrawing
ld a, 1
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld a, [wHiddenObjectFunctionArgument] ; item ID
ld [wd11e], a
call GetItemName
tx_pre_jump FoundHiddenItemText
.itemAlreadyFound
ld a, $ff
ld [hItemAlreadyFound], a
ret
INCLUDE "data/hidden_item_coords.asm"
FoundHiddenItemText: ; 76050 (1d:6050)
TX_FAR _FoundHiddenItemText
TX_ASM
ld a, [wHiddenObjectFunctionArgument] ; item ID
ld b, a
ld c, 1
call GiveItem
jr nc, .bagFull
ld hl, wObtainedHiddenItemsFlags
ld a, [wHiddenItemOrCoinsIndex]
ld c, a
ld b, FLAG_SET
predef FlagActionPredef
ld a, SFX_GET_ITEM_2
call PlaySoundWaitForCurrent
call WaitForSoundToFinish
jp TextScriptEnd
.bagFull
call WaitForTextScrollButtonPress ; wait for button press
xor a
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld hl, HiddenItemBagFullText
call PrintText
jp TextScriptEnd
HiddenItemBagFullText: ; 76089 (1d:6089)
TX_FAR _HiddenItemBagFullText
db "@"
HiddenCoins: ; 7608e (1d:608e)
ld b, COIN_CASE
predef GetQuantityOfItemInBag
ld a, b
and a
jr z, .doNotPickUpCoins
ld hl, HiddenCoinCoords
call FindHiddenItemOrCoinsIndex
ld [wHiddenItemOrCoinsIndex], a
ld hl, wObtainedHiddenCoinsFlags
ld a, [wHiddenItemOrCoinsIndex]
ld c, a
ld b, FLAG_TEST
predef FlagActionPredef
ld a, c
and a
jr nz, .doNotPickUpCoins
xor a
ld [hUnusedCoinsByte], a
ld [hCoins], a
ld [hCoins + 1], a
ld a, [wHiddenObjectFunctionArgument]
sub COIN
cp 10
jr z, .bcd10
cp 20
jr z, .bcd20
cp 40
jr z, .bcd20 ; should be bcd40
jr .bcd100
.doNotPickUpCoins
ld a, $ff
ld [hItemAlreadyFound], a
ret
.bcd10
ld a, $10
ld [hCoins + 1], a
jr .bcdDone
.bcd20
ld a, $20
ld [hCoins + 1], a
jr .bcdDone
.bcd40 ; due to a typo, this is never used
ld a, $40
ld [hCoins + 1], a
jr .bcdDone
.bcd100
ld a, $1
ld [hCoins], a
.bcdDone
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
predef AddBCDPredef
ld hl, wObtainedHiddenCoinsFlags
ld a, [wHiddenItemOrCoinsIndex]
ld c, a
ld b, FLAG_SET
predef FlagActionPredef
call EnableAutoTextBoxDrawing
ld a, [wPlayerCoins]
cp $99
jr nz, .roomInCoinCase
ld a, [wPlayerCoins + 1]
cp $99
jr nz, .roomInCoinCase
tx_pre_id DroppedHiddenCoinsText
jr .done
.roomInCoinCase
tx_pre_id FoundHiddenCoinsText
.done
jp PrintPredefTextID
INCLUDE "data/hidden_coins.asm"
FoundHiddenCoinsText: ; 76143 (1d:6143)
TX_FAR _FoundHiddenCoinsText
db $10,"@"
DroppedHiddenCoinsText: ; 76149 (1d:6149)
TX_FAR _FoundHiddenCoins2Text
db $10
TX_FAR _DroppedHiddenCoinsText
db "@"
FindHiddenItemOrCoinsIndex: ; 76153 (1d:6153)
ld a, [wHiddenObjectY]
ld d, a
ld a, [wHiddenObjectX]
ld e, a
ld a, [wCurMap]
ld b, a
ld c, -1
.loop
inc c
ld a, [hli]
cp $ff ; end of the list?
ret z ; if so, we're done here
cp b
jr nz, .next1
ld a, [hli]
cp d
jr nz, .next2
ld a, [hli]
cp e
jr nz, .loop
ld a, c
ret
.next1
inc hl
.next2
inc hl
jr .loop