Allow fishing while surfing - pret/pokecrystal GitHub Wiki
Generation III games introduced the ability to fish while surfing; while Gen I and II games do not allow the player to do this. Thankfully, this is fairly simple to implement.
These tutorial uses the code that the author, The Void, contributed to Rangi's Polished Crystal.
Table of Contents
- Add new player surfing sprites
- Remove check in fishing event code
- Add new fishing sprite tiles
- Load unique fishing sprite tiles while surfing
- Prevent fishing on top of NPCs
1) Add new player surfing sprites
Sadly, Gens I and II reused pokemon sprites while the player is surfing. We will need to add custom surfing sprites that incorporate the default player sprite so that we can eventually support fishing while surfing.
Instead of rehashing other tutorials, follow the tutorial for adding new overworld sprites here: Add a new overworld sprite.
Add the following two sprites:
CHRIS_SURF
KRIS_SURF
Once you add both sprites, there is one final thing to do. Go to data/sprites/player_sprites.asm:
ChrisStateSprites:
db PLAYER_NORMAL, SPRITE_CHRIS
db PLAYER_BIKE, SPRITE_CHRIS_BIKE
- db PLAYER_SURF, SPRITE_SURF
+ db PLAYER_SURF, SPRITE_CHRIS_SURF
db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
db PLAYER_RUN, SPRITE_CHRIS_RUN
db -1 ; end
KrisStateSprites:
db PLAYER_NORMAL, SPRITE_KRIS
db PLAYER_BIKE, SPRITE_KRIS_BIKE
- db PLAYER_SURF, SPRITE_SURF
+ db PLAYER_SURF, SPRITE_KRIS_SURF
db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
db PLAYER_RUN, SPRITE_KRIS_RUN
db -1 ; end
2) Remove check in fishing event code
Remove the following check from engine/events/overworld.asm
:
.FishTable:
dw .TryFish
dw .FishNoBite
dw .FishGotSomething
dw .FailFish
dw .FishNoFish
dw .FishGotItem
.TryFish:
; BUG: You can fish on top of NPCs (see docs/bugs_and_glitches.md)
ld a, [wPlayerState]
- cp PLAYER_SURF
- jr z, .fail
cp PLAYER_SURF_PIKA
jr z, .fail
call GetFacingTileCoord
call GetTileCollision
dec a ; cp WATER_TILE
jr z, .facingwater
.fail
ld a, $3
ret
3) Add new fishing sprite tiles
Add the following new fishing sprite tiles to the folder gfx/overworld/
:
chris_surf_fish.png
kris_surf_fish.png
4) Load unique fishing sprite tiles while surfing
Add the following to engine/events/fishing_gfx.asm
LoadFishingGFX:
ldh a, [rVBK]
push af
xor a
ldh [rVBK], a
+ ld a, [wPlayerState]
+ cp PLAYER_SURF
+ jr z, .surfing
+
ld de, FishingGFX
ld a, [wPlayerGender]
bit 0, a
jr z, .got_gender
ld de, KrisFishingGFX
+ jr .got_gender
+.surfing
+
+ ld de, SurfFishingGFX
+ ld a, [wPlayerGender]
+ bit 0, a
+ jr z, .got_gender
+ ld de, KrisSurfFishingGFX
.got_gender
ld hl, vTiles0 tile $02
call .LoadGFX
ld hl, vTiles0 tile $06
call .LoadGFX
ld hl, vTiles0 tile $0a
call .LoadGFX
pop af
ldh [rVBK], a
ret
.LoadGFX:
lb bc, BANK(FishingGFX), 2
push de
call Get2bpp
pop de
ld hl, 2 tiles
add hl, de
ld d, h
ld e, l
ret
FishingGFX:
INCBIN "gfx/overworld/chris_fish.2bpp"
KrisFishingGFX:
INCBIN "gfx/overworld/kris_fish.2bpp"
+
+SurfFishingGFX:
+INCBIN "gfx/overworld/chris_surf_fish.2bpp"
+
+KrisSurfFishingGFX:
+INCBIN "gfx/overworld/kris_surf_fish.2bpp"
+
5) Prevent fishing on top of NPCs
And with that, we can now fish while surfing!
As a final extra bit, make sure you fix the bug that allows you to fish on top on NPCs! Check the bug docs.