Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

Tidewater

An island fishing game for the browser. Cast from the pier, the beach or your own boat, fight the fish, sell your catch to Joe at the fish stand, and spend it on better gear at Marta's chandlery. Around it is a real-time tropical island and ocean: swim the reef, drive the boat out to deep water, and watch a humpback breach. It runs directly on WebGPU and WGSL with its own small rendering engine, no framework.

Play it: https://dgreenheck.github.io/tidewater/

Fishing off the pier at golden hour

The beach in the late afternoon

Requirements

  • A browser with WebGPU: a recent Chrome, Edge or Safari.
  • A capable GPU. It targets 60 fps at 2560×1267 on an Apple M5 Pro, and dynamic resolution scales the render down on slower machines.
  • The first load compiles several hundred shaders, which can take a minute or more. Later visits are faster because the browser caches them.

Features

Fishing

  • A spinning rod and reel that cast, reel and bend under load, with the bail, rotor and crank animated.
  • Bites that depend on the water (shallows, pier, reef, bay, deep water), depth and time of day, across 18 Caribbean species.
  • A line-tension fight: keep the tension in the green band, ease off when the fish runs.
  • A full-screen catch card with the fish's length and weight, a fish log with records, and a cooler.
  • Joe's fish stand buys your catch; Marta's chandlery sells line, reels, rods, a bigger hold, fuel, a rebuilt engine, a fish finder and deck floodlights for night fishing.
  • Walk the deck and the wheelhouse while the boat drifts; the boat burns fuel.
  • A first-play guide, contextual tips and a minimap. Progress is saved in the browser.

Ocean

  • Four-cascade FFT ocean (Tessendorf spectra) with foam, whitecaps, wind streaks and swell.
  • Depth-aware breaking waves with peeling shoulders, whitewater, spray and foam lace.
  • A shallow-water simulation for swash running up and down the sand.
  • Boat wake and bow spray, and a whale wake.
  • Caustics on the seabed and in the water, with light shafts.
  • A split underwater/above-water view at the waterline, with water droplets on the lens after surfacing.
  • Refraction of the seabed through the surface, including behind the pier and boats.

Sky

  • Physically based atmosphere (Hillaire 2020) with a sun, moon and stars.
  • Volumetric cumulus and wispy cirrus with cloud shadows on the land.
  • Aerial perspective and sea haze.
  • God rays, and a lens flare with occlusion.

World

  • An island with a beach, hills, headlands and rocks.
  • A fishing village, a pier, and the vendors' stalls built from Poly Haven scans.
  • Realistic vendor characters (Microsoft Rocketbox) with skinned animation.
  • A coral reef with fish.
  • Palms, bananas, monstera, elephant ear, heliconia, bird of paradise, broadleaf trees, shrubs and dune grass, with impostors and dithered LOD fades.
  • Beach debris.
  • Birds, crabs and marine snow.
  • A humpback whale with an escort of fish, blows, fluke dives and breaches.

Lighting and post

  • Cascaded shadows with contact-hardening penumbrae, and screen-space contact shadows.
  • Ground bounce light.
  • GTAO ambient occlusion.
  • Temporal upscaling and sharpening.
  • Bloom, auto exposure and motion blur.
  • Night lighting from lanterns, windows and the boat, plus a flashlight that also works underwater.

Audio

  • Positional audio from real CC0 field recordings: surf timed to each breaking wave, wind, birds, the boat engine, footsteps by surface, underwater ambience, whale song, and the rod and reel (casts, the bail, reeling, the drag, line snaps, splashes).

Controls

KeyAction
W A S DMove
MouseLook (click to capture the mouse, Esc to release)
ShiftSprint / boat boost
SpaceJump / swim up
CCrouch / dive
EInteract: board the boat, take or leave the helm, step ashore, trade with the fish buyer or the chandlery
VBoat camera at the helm (1st / 3rd person)
RTake out / put away the fishing rod
Left mouseHold to wind up, release to cast · strike when a fish takes the bait · hold to reel
Right mouseReel an empty line in
I or TabCooler / fish hold and the fish log
FFree camera
LFlashlight
TPause time
MMute
HSettings panel
PPhoto mode
F1 or ?All controls

Fishing

Walk the deck of the boat while it drifts, or fish from the pier and the beach. Cast, wait for the bobber to dip and strike when it's pulled under, then play the fish: keep the line tension in the green band, ease off when it runs. Different water holds different fish (the shallows, the pier, the reef, the bay and deep water offshore), and some bite best at dawn, dusk or night. Sell your catch to Joe at the fish stand on the beach by the pier, and spend it at Marta's chandlery by the boathouse: stronger line, a faster reel, a longer rod, a bigger fish hold, a larger fuel tank, a rebuilt engine, a fish finder and deck floodlights for night fishing. The boat burns diesel at the helm; fill up at the chandlery. Progress is saved in the browser.

The settings panel (H) exposes the sea state, time of day, sun azimuth, clouds, haze, post-processing and more.

URL options

Add these to the URL, for example ?fly&noAudio:

OptionEffect
flyStart in the free camera
noAudioDisable sound
noCloudsSkip the volumetric clouds
noHazeSkip the haze and sun shafts
noCausticsSkip caustics
noVegSkip vegetation
noSimSkip the swash (shallow-water) simulation

Running locally

npm install
npm run dev      # http://127.0.0.1:5189
npm run build    # static build in dist/

Every push to main deploys to GitHub Pages through .github/workflows/deploy.yml.

Project layout

FolderContents
src/game/The fishing game: rod, bites, the fight, catch card, cooler and log, vendors and stalls, guide, minimap, HUD
src/engine/The rendering engine: math, scene graph and geometry, GPU resources, WGSL shader composition, materials, lighting and shadows
src/ocean/FFT ocean, water surface and material, shore waves, breakers, swash, wake, caustics, underwater lighting
src/sky/Atmosphere, clouds, sky and environment
src/world/Terrain, village, pier, reef, fish, vegetation, rocks, debris, wildlife, whale, boat
src/post/Post chain: AO, underwater composite, haze, TAAU, motion blur, bloom, lens flare, droplets
src/materials/Shared lighting: shadow filtering, bounce light, contact shadows, local lights, LOD fades
src/player/Walking, swimming, the boat and the free camera
src/audio/The sample-based soundscape
src/ui/Settings panel, loading screen and HUD
tools/Scripts that fetch and convert the characters, stall props and fishing sounds
test/Headless engine smoke test and game-logic tests (npm test), and HUD / loader dev pages

Credits and license

The code is released under the MIT license; see LICENSE. Third-party assets (CC0 audio from Freesound, CC0 scans from Poly Haven, MIT characters from Microsoft Rocketbox, OFL / Apache fonts) and technique references are listed in CREDITS.md.

关于 About

Coastal town built with Opus 5.5

语言 Languages

JavaScript97.6%
CSS1.8%
HTML0.3%
Python0.3%
Shell0.1%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
2
Total Commits
峰值: 2次/周
Less
More

核心贡献者 Contributors