Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A radar for GeoFS
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A modern, real-time flight radar for the GeoFS flight simulator. RadarThing tracks live traffic, records flight history, overlays weather and airport data, and gives pilots and controllers a cleaner operating picture than the original GeoFS radar.
Tampermonkey installs are persistent. Console installs use the same hosted loader, but they need to be run again after a full GeoFS page reload.
Core tracking is free. RadarThing PRO unlocks more aviation data and analytics.
| Free | PRO |
|---|---|
| Live aircraft tracking | Everything in Free |
| Search, filters, multi-select, and follow mode | Full NOTAM access with decoded text |
| Flight recording and replay | AIRMET and SIGMET overlays |
| Remote autopilot commands | Global airport charts and procedures |
| Basic flight stats | Full flight history and advanced analytics |
| Precipitation overlay | Radar Mode and chart-focused workflows |
| Live ATC indicators and audio | Shareable flight cards |
| Aircraft image uploads | Subscription management through Stripe |
Editable userscript source files live in:
userscript.jsseabus.jsuserscript-src/radarthing-runtime.jsuserscript-src/config.jsonscripts/build-userscript.mjsGenerated userscript files are built into public/userscript/ and radarthing.user.js. Do not hand-edit or commit those generated artifacts. Rebuild them from source instead:
pnpm run build:userscript
To test unpublished userscript changes in GeoFS, run pnpm run build:userscript:dev and install the generated radarthing.dev.user.js in Tampermonkey. This standalone build uses the current branch code and sends ACARS requests to http://localhost:3000; run pnpm dev for the local website and API. Disable the regular RadarThing userscript while testing to avoid loading both copies. The local app needs its Convex functions configured for ACARS publishing.
The public install flow is:
/userscript redirects Tampermonkey users to /userscript/radarthing.user.js./loader./userscript/latest.json.ACARS entries can be published from the GeoFS panel after saving an active flight, provided the GeoFS ID is linked to a RadarThing account. They appear on RadarThing as soon as the pilot publishes or removes them. A local word filter checks text before publication; edit src/lib/acars-moderation.ts to update its blocked words. Viewer reports and blocked submissions are reviewed by RT ID at /admin/acars-moderation.
Aircraft SVG icons in public/icons/aircraft/adsb-radar/ are by ADS-B Radar for macOS: https://adsb-radar.com, App Store listing.
App: Next.js 15, React 19, TypeScript, Tailwind CSS, shadcn-style UI components
Data: Convex for users, flight history, charts, aircraft images, virtual airlines, challenges, and moderation data
Realtime: SSE traffic stream served by the companion ../radar-sse service
Mapping: Leaflet with custom aircraft markers, weather overlays, chart overlays, and map layer presets
Auth and billing: Clerk, Stripe, UploadThing, Resend, and PostHog
Install dependencies:
pnpm install
If pnpm is not installed yet, enable it through Corepack first:
corepack enable
Run checks:
pnpm lint
pnpm typecheck
pnpm run check
Format code:
pnpm run format:write
Supporting services:
pnpm run cf # Cloudflare tunnel
pnpm run stripe # Stripe webhook listener
Convex development:
pnpm run convex:dev
After changing files in convex/, run Convex locally and deploy the Convex changes with the project deploy process.
Production Convex backups are exported by the Convex Backup GitHub Actions workflow and uploaded to UploadThing.
UploadThing free apps do not allow private files, so backups are encrypted locally before upload and stored as .zip.enc files. Treat BACKUP_ENCRYPTION_KEY like a production database password: keep it in a password manager. If this key is lost, existing encrypted backups cannot be restored.
Backup filenames are target-aware and human-readable, for example:
radarthing-prod-db-only-2026-05-07_08-00-00Z.zip.enc
radarthing-prod-db-and-files-2026-05-07_08-00-00Z.zip.enc
Required GitHub Actions repository secrets:
CONVEX_DEPLOY_KEY
UPLOADTHING_TOKEN
BACKUP_ENCRYPTION_KEY
Generate the encryption key with:
openssl rand -base64 48
Trigger a manual backup from GitHub:
The workflow runs daily at 08:00 UTC and prunes encrypted UploadThing backups older than 30 days.
Run the backup locally:
pnpm run backup:convex -- --label prod --retention-days 30
Sync production data into the default Convex dev deployment for local testing:
pnpm run sync:convex:prod-to-dev
The sync script exports a backup of the current dev deployment first, then
replaces the default dev deployment with production data via
convex import --replace-all. It refuses to run if CONVEX_DEPLOY_KEY is set.
Include Convex file storage:
pnpm run backup:convex -- --label prod --include-file-storage --retention-days 30
Decrypt a downloaded backup:
BACKUP_ENCRYPTION_KEY="<same key used for backups>" pnpm run backup:convex -- \
--decrypt ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zip.enc \
--output ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zip
Restore with Convex after decrypting, preferably into a non-production deployment first:
pnpm exec convex import ./radarthing-prod-db-only-2026-05-07_08-00-00Z.zip
Environment variables are validated in src/env.js using T3 Env. Server-side variables include Clerk, Stripe, UploadThing, and Resend keys. Client-side variables must use the NEXT_PUBLIC_ prefix. Add new variables to .env.example when introducing them.
Found a bug or have a suggestion? Open an issue on GitHub or join the RadarThing Discord from the homepage.
Guide copy lives in content/guides/*.md as plain Markdown. Edit those files to update the public /guides/[slug] pages; JSX is not needed for article content. The server renders Markdown with react-markdown (raw HTML is not enabled).
To add a guide, create a Markdown file with one H1 title and add its slug, title, and description to src/lib/guides.ts. That registry drives navigation, static routes, metadata, and sitemap entries. Use root-relative links for site pages. Check instructions against the current UI and subscription limits before publishing.