No description
Find a file
2026-03-12 16:34:43 -07:00
app new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
docs rebuild 2026-03-12 16:34:43 -07:00
generated parallelize script loads 2025-12-02 22:06:20 -08:00
public improve audio support 2026-03-04 12:15:24 -08:00
reference WaterBlock tiling to match T2/Torque, improve CLAUDE.md 2025-12-11 22:07:29 -08:00
relay new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
scripts new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
src rebuild 2026-03-12 16:34:43 -07:00
.dockerignore begin live server support 2026-03-09 12:38:40 -07:00
.env.example new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
.gitignore begin live server support 2026-03-09 12:38:40 -07:00
.nvmrc wip 2025-11-12 19:23:30 -08:00
.prettierignore format with Prettier 2025-11-29 09:08:20 -08:00
.prettierrc format with Prettier 2025-11-29 09:08:20 -08:00
CLAUDE.md begin live server support 2026-03-09 12:38:40 -07:00
eslint.config.mjs new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
fly.toml begin live server support 2026-03-09 12:38:40 -07:00
next-env.d.ts rebuild 2026-03-12 16:34:43 -07:00
next.config.ts new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
package-lock.json new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
package.json new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
README.md new UI, unify map/demo/live architecture more, cleanup 2026-03-12 16:25:04 -07:00
screenshot.png cleanup, add README 2025-11-12 20:00:14 -08:00
TorqueScript.pegjs parallelize script loads 2025-12-02 22:06:20 -08:00
tsconfig.json begin live server support 2026-03-09 12:38:40 -07:00
vitest.config.ts improve Torque GUI markup parsing 2026-02-19 19:39:01 -08:00

T2 MapGenius™

Map inspector for Tribes 2.

Screenshot of map inspector

Usage

👉 Open the app!

Camera Controls

Click inside the map preview area to capture the mouse.

Key Action
W Forward
A Left
S Backward
D Right
Space Up
Shift Down
Esc Release mouse
Left click Next observer camera
Scroll/mouse wheel up Increase speed
Scroll/mouse wheel down Decrease speed

Development

Install dependencies:

npm install

Run the dev server:

npm start

Relay Server

The relay server bridges WebSocket connections from the browser to Tribes 2 game servers via UDP. This is necessary because browsers can't open UDP sockets directly.

Local development

First, obtain TribesNext account credentials:

npm run login

This prompts for your TribesNext username and password, downloads the account certificate and encrypted key, and writes them to .env.local.

Then run the relay (or use npm run start:both to run it alongside the Next.js dev server):

npm run relay:dev

Deploying to Fly.io

The relay is configured for Fly.io deployment via relay/Dockerfile and fly.toml. It needs a persistent volume to hold game assets (~1.5 GB) used for the CRC integrity check.

1. Create the app and volume:

fly launch          # creates the app (adjust app name in fly.toml if needed)
fly volumes create gamedata --region ord --size 3

2. Set account credentials as secrets:

Run npm run login locally first if you haven't already, then copy the values from .env.local:

fly secrets set \
  T2_ACCOUNT_NAME=... \
  T2_ACCOUNT_PASSWORD=... \
  T2_ACCOUNT_CERTIFICATE=... \
  T2_ACCOUNT_ENCRYPTED_KEY=...

3. Deploy:

fly deploy

4. Populate game assets on the volume:

SSH into the running machine and clone the repo to get docs/base/:

fly ssh console

Then inside the machine:

apt-get update && apt-get install -y git
git clone --depth 1 --filter=blob:none --sparse \
  https://github.com/exogen/t2-mapper.git /tmp/t2-mapper
cd /tmp/t2-mapper
git sparse-checkout set docs/base
mv docs/base /data/base
rm -rf /tmp/t2-mapper

This only needs to be done once — the volume persists across deploys.

Environment variables (all optional, with defaults):

Variable Default Description
RELAY_PORT 8765 WebSocket listen port
GAME_BASE_PATH docs/base relative to relay Path to extracted game assets
MANIFEST_PATH public/manifest.json relative to project root Path to resource manifest
T2_MASTER_SERVER master.tribesnext.com Master server for server list queries

Running scripts

tsx is included to run TypeScript files directly.

Example:

tsx scripts/generate-manifest.ts