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.

Fly Fishing Game river generation screenshot 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

  1. Generate fishable water - create river sections with anatomy, depth, current, structure, habitat, and hold scores.
  2. Read and approach - expose fish behavior, spook rules, visibility, cover, and approach angle through the playable exploration loop.
  3. Cast and resolve - handle line length, presentation, mending, hatch matching, takes, hooksets, and catch logging.

Technical highlights / stack

Engine
Godot 4.3 GDScript GL Compatibility
Simulation
Procedural generation FastNoiseLite Fish behavior
Data
SQLite godot-sqlite Logbook
Rendering
Sprite sheets Authored terrain modules Runtime transitions

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

River data model RiverData remains the gameplay source while the renderer maps it onto authored terrain modules.
Fish behavior Spook sensitivity accounts for size, cover, time of day, approach angle, difficulty, vibration, and exposure.
Casting state The controller moves through false casting, presentation, drift, result, and mending states with line-length timing.
Terrain modules Water, shoreline, gravel, fill, transitions, and props come from checked-in module atlases rather than pure color fields.

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

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.