ref: 417f3c7c7211687a40e3363f8ee9c7033a3f0201
parent: 4ee7e027bea9832568bee9de84ec4c4894976a31
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Sat Feb 16 10:45:55 EST 2019
Bug fix: allow Surfing across map connections
--- a/docs/bugs_and_glitches.md
+++ b/docs/bugs_and_glitches.md
@@ -1254,7 +1254,66 @@
([Video](https://www.youtube.com/watch?v=XFOWvMNG-zw))
-*To do:* Identify specific code causing this bug and fix it.
+**Fix:**
+
+First, edit `UsedSurfScript` in [engine/events/overworld.asm](/engine/events/overworld.asm):
+
+```diff
+ UsedSurfScript:
+ writetext UsedSurfText ; "used SURF!"
+ waitbutton
+ closetext
+
+ callasm .empty_fn ; empty function
+
+ copybytetovar wBuffer2
+ writevarcode VAR_MOVEMENT
+
+ special ReplaceKrisSprite
+ special PlayMapMusic
+-; step into the water (slow_step DIR, step_end)
+ special SurfStartStep
+- applymovement PLAYER, wMovementBuffer
+ end
+```
+
+Then edit `SurfStartStep` in [engine/overworld/player_object.asm](/engine/overworld/player_object.asm):
+
+```diff
+ SurfStartStep:
+- call InitMovementBuffer
+- call .GetMovementData
+- call AppendToMovementBuffer
+- ld a, movement_step_end
+- call AppendToMovementBuffer
+- ret
+-
+-.GetMovementData:
+ ld a, [wPlayerDirection]
+ srl a
+ srl a
+ maskbits NUM_DIRECTIONS
+ ld e, a
+ ld d, 0
+ ld hl, .movement_data
+ add hl, de
+- ld a, [hl]
+- ret
++ add hl, de
++ add hl, de
++ ld a, BANK(.movement_data)
++ jp StartAutoInput
+
+ .movement_data
+- slow_step DOWN
+- slow_step UP
+- slow_step LEFT
+- slow_step RIGHT
++ db D_DOWN, 0, -1
++ db D_UP, 0, -1
++ db D_LEFT, 0, -1
++ db D_RIGHT, 0, -1
+```
## Swimming NPCs aren't limited by their movement radius
--- a/engine/events/catch_tutorial.asm
+++ b/engine/events/catch_tutorial.asm
@@ -35,8 +35,8 @@
ldh [hJoyPressed], a
ld a, [wOptions]
push af
- and $f8
- add $3
+ and $ff ^ TEXT_DELAY_MASK
+ add TEXT_DELAY_MED
ld [wOptions], a
ld hl, .AutoInput
ld a, BANK(.AutoInput)