Itemfinder routines and labels.

This commit is contained in:
entrpntr
2020-03-14 15:12:13 -04:00
parent 6231351906
commit 1e0807e4bf
8 changed files with 160 additions and 17 deletions

4
.gitignore vendored
View File

@@ -35,6 +35,10 @@ pokesilver.txt
.*.swp
# swap files for gedit
*~
# for vscode
.vscode
# osx files
.DS_STORE
# compiled graphics
*.2bpp

View File

@@ -217,13 +217,13 @@ UnknownText_0x1c0a4e::
line "out!"
done
UnknownText_0x1c0a77::
_ItemfinderItemNearbyText::
text "Yes! ITEMFINDER"
line "indicates there's"
cont "an item nearby."
prompt
UnknownText_0x1c0aa9::
_ItemfinderNopeText::
text "Nope! ITEMFINDER"
line "isn't responding."
prompt

View File

@@ -0,0 +1,83 @@
CheckForHiddenItems:
; Checks to see if there are hidden items on the screen that have not yet been found. If it finds one, returns carry.
call GetMapScriptsBank
ld [wBuffer1], a
; Get the coordinate of the bottom right corner of the screen, and load it in wBuffer3/wBuffer4.
ld a, [wXCoord]
add SCREEN_WIDTH / 4
ld [wBuffer4], a
ld a, [wYCoord]
add SCREEN_HEIGHT / 4
ld [wBuffer3], a
; Get the pointer for the first bg_event in the map...
ld hl, wCurMapBGEventsPointer
ld a, [hli]
ld h, [hl]
ld l, a
; ... before even checking to see if there are any BG events on this map.
ld a, [wCurMapBGEventCount]
and a
jr z, .nobgeventitems
; For i = 1:wCurMapBGEventCount...
.loop
; Store the counter in wBuffer2, and store the bg_event pointer in the stack.
ld [wBuffer2], a
push hl
; Get the Y coordinate of the BG event.
call .GetFarByte
ld e, a
; Is the Y coordinate of the BG event on the screen? If not, go to the next BG event.
ld a, [wBuffer3]
sub e
jr c, .next
cp SCREEN_HEIGHT / 2
jr nc, .next
; Is the X coordinate of the BG event on the screen? If not, go to the next BG event.
call .GetFarByte
ld d, a
ld a, [wBuffer4]
sub d
jr c, .next
cp SCREEN_WIDTH / 2
jr nc, .next
; Is this BG event a hidden item? If not, go to the next BG event.
call .GetFarByte
cp BGEVENT_ITEM
jr nz, .next
; Has this item already been found? If not, set off the Itemfinder.
ld a, [wBuffer1]
call GetFarHalfword
ld a, [wBuffer1]
call GetFarHalfword
ld d, h
ld e, l
ld b, CHECK_FLAG
call EventFlagAction
ld a, c
and a
jr z, .itemnearby
.next
; Restore the bg_event pointer and increment it by the length of a bg_event.
pop hl
ld bc, BG_EVENT_SIZE
add hl, bc
; Restore the BG event counter and decrement it. If it hits zero, there are no hidden items in range.
ld a, [wBuffer2]
dec a
jr nz, .loop
.nobgeventitems
xor a
ret
.itemnearby
pop hl
scf
ret
.GetFarByte:
ld a, [wBuffer1]
call GetFarByte
inc hl
ret

View File

@@ -0,0 +1,50 @@
ItemFinder:
farcall CheckForHiddenItems
jr c, .found_something
ld hl, .Script_FoundNothing
jr .resume
.found_something
ld hl, .Script_FoundSomething
.resume
call QueueScript
ld a, $1
ld [wItemEffectSucceeded], a
ret
.ItemfinderSound:
ld c, 4
.sfx_loop
push bc
ld de, SFX_SECOND_PART_OF_ITEMFINDER
call WaitPlaySFX
ld de, SFX_TRANSACTION
call WaitPlaySFX
pop bc
dec c
jr nz, .sfx_loop
ret
.Script_FoundSomething:
reloadmappart
special UpdateTimePals
callasm .ItemfinderSound
writetext .ItemfinderItemNearbyText
closetext
end
.Script_FoundNothing:
reloadmappart
special UpdateTimePals
writetext .ItemfinderNopeText
closetext
end
.ItemfinderItemNearbyText:
text_far _ItemfinderItemNearbyText
text_end
.ItemfinderNopeText:
text_far _ItemfinderNopeText
text_end

View File

@@ -859,11 +859,11 @@ ReadCoordEvents:: ; 24d0 (0:24d0)
ReadSignposts:: ; 24e7 (0:24e7)
ld a, [hli]
ld c, a
ld [wd94b], a
ld [wCurMapBGEventCount], a
ld a, l
ld [wd94c], a
ld [wCurMapBGEventsPointer], a
ld a, h
ld [wd94d], a
ld [wCurMapBGEventsPointer + 1], a
ld a, c
and a
ret z
@@ -1981,7 +1981,7 @@ CheckFacingSign::
ld a, e
sub $4
ld e, a
ld a, [wd94b]
ld a, [wCurMapBGEventCount]
and a
ret z
ld c, a
@@ -1995,7 +1995,7 @@ CheckFacingSign::
ret
CheckIfFacingTileCoordIsSign:: ; 2b8f (0:2b8f)
ld hl, wd94c
ld hl, wCurMapBGEventsPointer
ld a, [hli]
ld h, [hl]
ld l, a

View File

@@ -66,7 +66,7 @@ _DoItemEffect:: ; e7a6 (3:67a6)
dw XSpeed
dw XSpecial
dw CoinCase
dw Itemfinder
dw ItemfinderEffect
dw PokeFlute
dw ExpShare
dw OldRod
@@ -2138,8 +2138,8 @@ UseRod:
farcall FishingRodFunction ; same bank
ret
Itemfinder: ; f5ff (3:75ff)
farcall ItemfinderFunction
ItemfinderEffect: ; f5ff (3:75ff)
farcall ItemFinder
ret
Elixer: ; f606

View File

@@ -626,8 +626,9 @@ INCLUDE "engine/events/misc_scripts.asm"
INCLUDE "engine/events/heal_machine_anim.asm"
INCLUDE "engine/events/whiteout.asm"
INCLUDE "engine/events/forced_movement.asm"
ItemfinderFunction:
dr $12947, $12e33
INCLUDE "engine/events/itemfinder.asm"
StartMenu:
dr $12994, $12e33
PartyMonItemName::
dr $12e33, $12fa0
@@ -1313,7 +1314,9 @@ SECTION "bank2d", ROMX, BANK[$2d]
dr $b4000, $b8000
SECTION "bank2e", ROMX, BANK[$2e]
dr $b8000, $ba378
dr $b8000, $ba300
INCLUDE "engine/events/checkforhiddenitems.asm"
TreeMonEncounter:
dr $ba378, $ba3a1

View File

@@ -2437,7 +2437,11 @@ wPredefAddress:: dw ; cfde
wFarCallBCBuffer:: dw ; cfe0
wcfe2:: ds 1 ; cfe2
wcfe3:: ds 1 ; cfe3
wFieldMoveSucceeded:: ds 1 ; cfe4
wFieldMoveSucceeded::
wItemEffectSucceeded::
db ; cfe4
wVramState:: ds 1
wcfe6:: ds 1 ; cfe6
wcfe7:: ds 1 ; cfe7
@@ -3394,9 +3398,8 @@ wCurMapWarpsPointer:: dw ; d946
wd948:: ds 1 ; d948
wd949:: ds 1 ; d949
wd94a:: ds 1 ; d94a
wd94b:: ds 1 ; d94b
wd94c:: ds 1 ; d94c
wd94d:: ds 1 ; d94d
wCurMapBGEventCount:: db ; d94b
wCurMapBGEventsPointer:: dw ; d94c
wd94e:: ds 1 ; d94e
wd94f:: ds 1 ; d94f
wd950:: ds 1 ; d950