mirror of
https://github.com/pret/pokeyellow.git
synced 2026-05-14 14:59:52 -05:00
236 lines
3.5 KiB
NASM
236 lines
3.5 KiB
NASM
; only used for setting bit 2 of wd736 upon entering a new map
|
|
IsPlayerStandingOnWarp: ; c0a6 (3:40a6)
|
|
ld a, [wNumberOfWarps]
|
|
and a
|
|
ret z
|
|
ld c, a
|
|
ld hl, wWarpEntries
|
|
.loop
|
|
ld a, [wYCoord]
|
|
cp [hl]
|
|
jr nz, .nextWarp1
|
|
inc hl
|
|
ld a, [wXCoord]
|
|
cp [hl]
|
|
jr nz, .nextWarp2
|
|
inc hl
|
|
ld a, [hli] ; target warp
|
|
ld [wDestinationWarpID], a
|
|
ld a, [hl] ; target map
|
|
ld [$ff8b], a
|
|
ld hl, wd736
|
|
set 2, [hl] ; standing on warp flag
|
|
ret
|
|
.nextWarp1
|
|
inc hl
|
|
.nextWarp2
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
CheckForceBikeOrSurf: ; c0d2 (3:40d2)
|
|
ld hl, wd732
|
|
bit 5, [hl]
|
|
ret nz
|
|
ld hl, ForcedBikeOrSurfMaps
|
|
ld a, [wYCoord]
|
|
ld b, a
|
|
ld a, [wXCoord]
|
|
ld c, a
|
|
ld a, [wCurMap]
|
|
ld d, a
|
|
.loop
|
|
ld a, [hli]
|
|
cp $ff
|
|
ret z ;if we reach FF then it's not part of the list
|
|
cp d ;compare to current map
|
|
jr nz, .incorrectMap
|
|
ld a, [hli]
|
|
cp b ;compare y-coord
|
|
jr nz, .incorrectY
|
|
ld a, [hli]
|
|
cp c ;compare x-coord
|
|
jr nz, .loop ; incorrect x-coord, check next item
|
|
ld a, [wCurMap]
|
|
cp SEAFOAM_ISLANDS_4
|
|
ld a, $2
|
|
ld [wSeafoamIslands4CurScript], a
|
|
jr z, .forceSurfing
|
|
ld a, [wCurMap]
|
|
cp SEAFOAM_ISLANDS_5
|
|
ld a, $2
|
|
ld [wSeafoamIslands5CurScript], a
|
|
jr z, .forceSurfing
|
|
;force bike riding
|
|
ld hl, wd732
|
|
set 5, [hl]
|
|
ld a, $1
|
|
ld [wWalkBikeSurfState], a
|
|
ld [wWalkBikeSurfStateCopy], a
|
|
call ForceBikeOrSurf
|
|
ret
|
|
.incorrectMap
|
|
inc hl
|
|
.incorrectY
|
|
inc hl
|
|
jr .loop
|
|
.forceSurfing
|
|
ld a, $2
|
|
ld [wWalkBikeSurfState], a
|
|
ld [wWalkBikeSurfStateCopy], a
|
|
call ForceBikeOrSurf
|
|
ret
|
|
|
|
INCLUDE "data/force_bike_surf.asm"
|
|
|
|
IsPlayerFacingEdgeOfMap: ; c148 (3:4148)
|
|
push hl
|
|
push de
|
|
push bc
|
|
ld a, [wSpriteStateData1 + 9] ; player sprite's facing direction
|
|
srl a
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, .functionPointerTable
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wYCoord]
|
|
ld b, a
|
|
ld a, [wXCoord]
|
|
ld c, a
|
|
ld de, .returnaddress
|
|
push de
|
|
jp [hl]
|
|
.returnaddress
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
.functionPointerTable
|
|
dw .facingDown
|
|
dw .facingUp
|
|
dw .facingLeft
|
|
dw .facingRight
|
|
|
|
.facingDown
|
|
ld a, [wCurMapHeight]
|
|
add a
|
|
dec a
|
|
cp b
|
|
jr z, .setCarry
|
|
jr .resetCarry
|
|
|
|
.facingUp
|
|
ld a, b
|
|
and a
|
|
jr z, .setCarry
|
|
jr .resetCarry
|
|
|
|
.facingLeft
|
|
ld a, c
|
|
and a
|
|
jr z, .setCarry
|
|
jr .resetCarry
|
|
|
|
.facingRight
|
|
ld a, [wCurMapWidth]
|
|
add a
|
|
dec a
|
|
cp c
|
|
jr z, .setCarry
|
|
jr .resetCarry
|
|
.resetCarry
|
|
and a
|
|
ret
|
|
.setCarry
|
|
scf
|
|
ret
|
|
|
|
IsWarpTileInFrontOfPlayer: ; c197 (3:4197)
|
|
push hl
|
|
push de
|
|
push bc
|
|
call _GetTileAndCoordsInFrontOfPlayer
|
|
ld a, [wCurMap]
|
|
cp SS_ANNE_5
|
|
jr z, .ssAnne5
|
|
ld a, [wSpriteStateData1 + 9] ; player sprite's facing direction
|
|
srl a
|
|
ld c, a
|
|
ld b, 0
|
|
ld hl, .warpTileListPointers
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wTileInFrontOfPlayer]
|
|
ld de, $1
|
|
call IsInArray
|
|
.done
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
.warpTileListPointers: ; c1c0 (3:41c0)
|
|
dw .facingDownWarpTiles
|
|
dw .facingUpWarpTiles
|
|
dw .facingLeftWarpTiles
|
|
dw .facingRightWarpTiles
|
|
|
|
.facingDownWarpTiles
|
|
db $01,$12,$17,$3D,$04,$18,$33,$FF
|
|
|
|
.facingUpWarpTiles
|
|
db $01,$5C,$FF
|
|
|
|
.facingLeftWarpTiles
|
|
db $1A,$4B,$FF
|
|
|
|
.facingRightWarpTiles
|
|
db $0F,$4E,$FF
|
|
|
|
.ssAnne5
|
|
ld a, [wTileInFrontOfPlayer]
|
|
cp $15
|
|
jr nz, .notSSAnne5Warp
|
|
scf
|
|
jr .done
|
|
.notSSAnne5Warp
|
|
and a
|
|
jr .done
|
|
|
|
IsPlayerStandingOnDoorTileOrWarpTile: ; c1e6 (3:41e6)
|
|
push hl
|
|
push de
|
|
push bc
|
|
callba IsPlayerStandingOnDoorTile ; 6:6785
|
|
jr c, .done
|
|
ld a, [wCurMapTileset]
|
|
add a
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, WarpTileIDPointers
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld de, $1
|
|
aCoord 8, 9
|
|
call IsInArray
|
|
jr nc, .done
|
|
ld hl, wd736
|
|
res 2, [hl]
|
|
.done
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
INCLUDE "data/warp_tile_ids.asm" |