A reimplementation of the old procedurally generated platformer "Tranquility"
  • TypeScript 90.5%
  • JavaScript 6.6%
  • HTML 2.9%
Find a file
Max Bucknell a1f61f9cb6
All checks were successful
ci/woodpecker/push/checks/2 Pipeline was successful
ci/woodpecker/push/checks/3 Pipeline was successful
ci/woodpecker/push/checks/1 Pipeline was successful
ci/woodpecker/tag/release Pipeline was successful
Fix CI Release (#6)
Reviewed-on: #6
2026-05-29 05:45:52 +00:00
.husky Initial commit. 2026-05-28 13:58:35 -04:00
.woodpecker Fix CI Release (#6) 2026-05-29 05:45:52 +00:00
docs/images Initial commit. 2026-05-28 13:58:35 -04:00
src Tweaks to colours and physics 2026-05-29 00:39:38 -04:00
.gitignore Initial commit. 2026-05-28 13:58:35 -04:00
.prettierignore Initial commit. 2026-05-28 13:58:35 -04:00
.prettierrc Initial commit. 2026-05-28 13:58:35 -04:00
DELIVERABLES.md Improve CI, add release support (#5) 2026-05-29 05:28:39 +00:00
esbuild.config.mjs Initial commit. 2026-05-28 13:58:35 -04:00
eslint.config.js Initial commit. 2026-05-28 13:58:35 -04:00
index.html Initial commit. 2026-05-28 13:58:35 -04:00
package.json Fix CI Release (#6) 2026-05-29 05:45:52 +00:00
pnpm-lock.yaml Initial commit. 2026-05-28 13:58:35 -04:00
pnpm-workspace.yaml Initial commit. 2026-05-28 13:58:35 -04:00
README.md Fix CI Release (#6) 2026-05-29 05:45:52 +00:00
tsconfig.json Initial commit. 2026-05-28 13:58:35 -04:00

Trankwebity

An interactive love letter to Tranquility, the 3D first-person abstract platformer with procedurally generated levels and reactive music. The best demonstration I can find of the original game is on YouTube.

This is a game I have very fond memories of playing as a child, and I've always been tempted to try to recreate it. Beyond being inspired by it, and as faithful a reimplementation of the orignal game as my memory allows, this is in no way affiliated with, endorsed by, or connected to TQworld, LLC, William A. Romanowski, or any original rights holders.

Original Tranquility gameplay screenshot

Screenshot from the original game. Image sourced from MobyGames.

Development

This is a TypeScript project, using pnpm. The game engine is driven by Three.js and Tone.js. It runs entirely in the browser, there is no server side component. So it should be able to live forever!

This project was developed with the assistance of Cursor, as a toy to help me learn about the application.

Setup

pnpm install
pnpm dev        # dev server at http://localhost:3000
pnpm build      # production bundle in dist/ (also runs in CI)
pnpm typecheck  # TypeScript strict check
pnpm lint       # ESLint
pnpm format     # Prettier

Releases

Releases are published to Forgejo when a semver git tag is pushed (e.g. v0.0.2).

git tag v0.0.2
git push origin v0.0.2

Woodpecker runs .woodpecker/release.yml: build → tranquility-<version>.tar.gzForgejo release with plugin-generated sha256sum.txt. Configure a forgejo_token secret in Woodpecker (scopes: write:repository, read:misc).

Version numbering: use SemVer (MAJOR.MINOR.PATCH). While the game is pre-1.0, stay on 0.y.z — bump minor for milestone features (e.g. Phase 5 platforms → 0.5.0), patch for fixes. Pre-releases use -rc.1 suffixes (v0.5.0-rc.1); the release plugin can mark those as pre-releases when needed.

Roadmap

Implementation is organized into incremental phases. See DELIVERABLES.md for the full agent-facing roadmap with acceptance criteria.

Phase Status Description
0 Done Project bootstrap (pnpm, esbuild, TypeScript, ESLint, Prettier)
1 Done README and deliverables documentation
2 Done Starfield void + fixed ground platform
3 Done Camera look + click-to-move
4 Done Gravity + bounce physics
5 Platform models + placement
6 Spinner goal + room loop
7 Procedural level generation
8 Procedural audio
9 Mobile / touch input

References