diff --git a/engine/overworld/map_setup.asm b/engine/overworld/map_setup.asm index 9e759d397..cc641b172 100644 --- a/engine/overworld/map_setup.asm +++ b/engine/overworld/map_setup.asm @@ -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 diff --git a/home/map_objects.asm b/home/map_objects.asm index 32ffbafba..10208dd11 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -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.