Fix CheckOnWater while on a space tile (#34) [bugfix to aa91909388]

This commit is contained in:
xCrystal 2024-01-04 22:30:40 +01:00
parent 0df29e5aaf
commit 9198f4d4b1
2 changed files with 16 additions and 5 deletions

View File

@ -93,12 +93,11 @@ SkipUpdateMapSprites:
ret
CheckUpdatePlayerSprite:
nop
call .CheckBiking
call .CheckForcedBiking
jr c, .ok
call .CheckSurfing
jr c, .ok
call .CheckSurfing2
call .ResetSurfingOrBikingState
jr c, .ok
ret
@ -106,7 +105,7 @@ CheckUpdatePlayerSprite:
call UpdatePlayerSprite
ret
.CheckBiking:
.CheckForcedBiking:
and a
ld hl, wBikeFlags
bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl]
@ -116,7 +115,7 @@ CheckUpdatePlayerSprite:
scf
ret
.CheckSurfing2:
.ResetSurfingOrBikingState:
ld a, [wPlayerState]
cp PLAYER_NORMAL
jr z, .nope

View File

@ -78,13 +78,25 @@ GetPlayerTile::
ret
CheckOnWater::
; return z if on water, nz otherwise.
; if tile permission is SPACE_TILE, wPlayerState dictates whether player is on water or not.
; otherwise the current tile permission being LAND_TILE or WATER_TILE dictates it.
ld a, [wPlayerTile]
call GetTileCollision
cp SPACE_TILE
jr z, .check_player_state
sub WATER_TILE
ret z
and a
ret
.check_player_state
ld a, [wPlayerState]
cp PLAYER_SURF
ret z
cp PLAYER_SURF_PIKA
ret
GetTileCollision::
; Get the collision type of tile a.