diff options
| author | Rangi <remy.oukaour+rangi42@gmail.com> | 2019-02-16 15:45:55 -0500 | 
|---|---|---|
| committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2019-02-16 15:45:55 -0500 | 
| commit | 417f3c7c7211687a40e3363f8ee9c7033a3f0201 (patch) | |
| tree | 9b4a01569923ac6584d5079ae9d380486bfbcc9d /docs | |
| parent | 4ee7e027bea9832568bee9de84ec4c4894976a31 (diff) | |
Bug fix: allow Surfing across map connections
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/bugs_and_glitches.md | 61 | 
1 files changed, 60 insertions, 1 deletions
| diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 852a1138d..03207c338 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -1254,7 +1254,66 @@ This bug prevents you from using blocksets with more than 128 blocks.  ([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 | 
