public 3d-motion repository

drysland

// dammafra/drysland

🥇 First place in Three.js Journey Challenge 017 | Relaxing pipe-connection game built with Three.js, featuring online save support and mobile-friendly gameplay

$ git log --oneline --stat
stars:79forks:27updated:2026-05-15
README.md
readonly

🏝️ Drysland

Vite Three.js	Vercel Firebase TailwindCSS

🥇 1st place in the Three.js Journey Challenge 017

Try it live here 👉 drysland.dammafra.dev

Inspired by classic pipe-connection games, Drysland is a relaxing, minimalist puzzle experience where you restore the flow of a river across a parched island by rotating and reconnecting its broken segments to bring water — and life — back to the land.

Each level in Drysland is a procedurally generated island that gradually increases in size and difficulty. Pipe networks are created using a simplified version of the Growing Tree algorithm, ensuring each puzzle is both solvable and unique.

Cover

Technologies Used

Setup

# Install dependencies (only the first time)
npm install

# Run the local server at localhost:5173
npm run dev

# Build for production in the dist/ directory
npm run build

Features

TBD

Level Generation

All levels in Drysland are guaranteed to be solvable. The game uses a custom adaptation of the Growing Tree algorithm, commonly used for maze generation.

The core idea is to “carve” one or more continuous paths through a fixed-size hexagonal grid, primarily using a depth-first traversal (DFS).

Once the main paths are generated, the algorithm performs a second pass to insert additional connections between blocks along the existing routes, subtly increasing the complexity without breaking solvability.

Finally, all tiles are randomly rotated to scramble the solution and form the playable puzzle.

The algorithm is configurable, the main parameters currently in use are:

  • Traversal strategy: defines the node selection method during path carving (e.g. DFS, BFS, or hybrid approaches).
  • Grid radius: determines the size of the hexagonal level.
  • Grid coverage: controls how much of the grid is used to generate the main path(s).
  • Extra link probability: chance to add additional connections between blocks during the second pass.
  • Dead-end preservation: percentage of dead ends that are intentionally left untouched to preserve challenge and variety.

These parameters allow for fine-tuning the level structure and difficulty, and can be adjusted to explore different types of puzzle layouts. There’s room to explore more sophisticated path-building strategies.

Save System & Sync

Log in

Cover

Drysland automatically saves your progress locally using the browser’s local storage, so you can pick up right where you left off. For cross-device play, you can optionally log in with a Google account to sync your progress across multiple devices. If differences are detected between the local and cloud save data, a simple conflict resolution system will help you choose which version to keep.

Graphics Settings

Settings

Drysland offers a simple toggle between Quality and Performance modes. This setting adjusts shadows, water effects, and other visual details to strike a balance between visual fidelity and smooth performance. Your preference is saved and applied automatically each time you return.

Mobile-Friendly

Drysland is optimized for mobile devices, providing a smooth and engaging experience on smartphones and tablets. It adapts to smaller screens, ensuring easy interaction and navigation on touch interfaces.

Mobile Main Menu

|

Mobile Level Start

|

Mobile Gameplay

|

Mobile Level Complete

|

Credits

Check out the credits section in the project for a full list of resources used

Credits

Feedback

If you have any suggestions, feel free to reach out!

License

© 2025 Francesco Dammacco
This project is licensed under the GNU Affero General Public License v3.0.
See the LICENSE file for details.

metadata.json
JavaScriptfirebasegamedevGSAPtailwindcssThree.jsvercel

[INFO] 2 topics link to curated motion topic pages.