Fly Fishing Game
A playable Godot prototype where river structure drives fishing behavior.
Fly Fishing Game turns procedural river anatomy, fish holding logic, casting, mending, hatch matching, and authored SNES-style terrain modules into a full fishing loop.
What it solves
Fishing games can collapse into random bite probability if the water, fish, cast, fly choice, and presentation do not interact.
This prototype treats river anatomy as gameplay data. Pools, riffles, runs, fords, pocket water, exposure, current, structure, hatches, and approach angle all feed the fishing loop.
Current build: procedural river sections, sprite-based angler
and fish systems, and a renderer driven by authored water,
shoreline, gravel, terrain, and prop modules.
Who this is for
- Players who want fishing to depend on reading water
- Godot developers interested in procedural gameplay systems
- Designers balancing simulation detail against readable UI
- Pixel-art builders joining authored tiles with generated worlds
What it does
Fly Fishing Game is a 16-bit style fly-fishing prototype set on a side-scrolling river inspired by the Madison. The current loop lets the player configure a session, scout water, approach fish, manage line, cast, mend, match the hatch, respond to takes, and log catches.
The river simulation models pool-riffle-run cycles, fords, pocket water, exposure, species-specific holding preferences, V-seam spawn offsets, rock and boulder eddies, and seeded section streaming. Fish behavior uses directional vision, intrusion memory, exposure-adjusted spook sensitivity, hatch state, fly matching, and hookset timing.
Workflow covered
- Generate fishable water - create river sections with anatomy, depth, current, structure, habitat, and hold scores.
- Read and approach - expose fish behavior, spook rules, visibility, cover, and approach angle through the playable exploration loop.
- Cast and resolve - handle line length, presentation, mending, hatch matching, takes, hooksets, and catch logging.
Technical highlights / stack
Why it matters
This is product and systems work in game form: model the real domain deeply enough that player choices matter, then build a UI and renderer that make the hidden state understandable.
Technical notes
RiverData remains the gameplay source while the
renderer maps it onto authored terrain modules.
Hard parts
- Making procedural rivers feel like readable fishable water instead of noise.
- Keeping simulation and rendering decoupled while still visually coherent.
- Tuning fish spook, cover, fly rejection, line slap, wading, and hook timing together.
- Making casting readable without turning it into an unrelated timing minigame.
- Reducing visual seams at shoreline corners, bank transitions, and section boundaries.
Engineering takeaways
- Centralizing spook rules made later behavior changes much cheaper.
- Noise helps texture, but convincing rivers need explicit anatomy templates.
- Separating generation from rendering protected gameplay during art rewrites.
- Terrain selection needs deterministic validation before blending can hide seams.
Current scope
Works now
- Session configuration
- Exploration and fish approach
- Casting, drift, and mending
- Fly matching and hooksets
- Catch logbook
Core systems
- RiverGenerator
- RiverRenderer
- CastingController
- SpookCalculator
- Terrain module pipeline
Still improving
- Bank material transitions
- Section-boundary continuity
- Visual smoke passes
- Windows, Android, and iOS support
Related work
What to do next
Review the source if you want to inspect the river generator, renderer split, casting controller, fish behavior, or terrain module pipeline.