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,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗The buzzer for the Spooky Sheet Datarails Halloween scavenger hunt.
/) enter their name, get sorted into the smallest team automatically, and see one big buzzer plus a HUD with their name, team, their own points and their team's score./admin) sees who buzzed first, then Approve (+1 to that player and +1 to their team) or Decline. Either way the buzzer is released for everyone. A Top hunters leaderboard ranks players by their own points.The first buzz is decided atomically in Redis, so if two people hit it at the same moment exactly one of them wins.
Import the repo: Vercel → Add New… → Project → pick this repo. Framework preset: Other. No build command needed.
Add a free Redis database. The simplest way is to create it on Upstash directly:
us-east-1), plan Free.UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN.(If you'd rather go through Vercel, Storage → Create Database → Upstash for Redis creates the same database and adds the env vars for you. Each Upstash account gets one free database. If you see only paid plans there, that account already has one: use the direct route above with a different login.)
Set the host password: Settings → Environment Variables → add ADMIN_PASSWORD with a password only you know.
Redeploy (Deployments → ⋯ → Redeploy) so the new env vars are picked up.
Then:
https://<your-app>.vercel.app with everyone (the admin page has a Copy link button for the Zoom chat).https://<your-app>.vercel.app/admin yourself and log in with ADMIN_PASSWORD.| Host action | How |
|---|---|
| Approve the first buzz (+1 to the player and their team) | ✓ Approve or A |
| Decline it | ✗ Decline or D |
| Lock buzzers between items so nobody buzzes early | 🔒 Lock buzzers or L (press again to open) |
| Fix a team score | − / + on the Scareboard (team only) |
| Fix a player's points | Tap the player in the list → −1 / +1 (changes their team's score too) |
| Rename / add / remove teams | Edit the name in place, + Team / − Team |
| Remove a player who left | Tap the player → Remove player |
| Wipe team and player points, keep players | ↺ Reset scores |
| Start over (everyone re-enters their name) | 🧹 New game |
Team balancing. Each new player joins the team with the fewest players (ties are random). Whenever teams get uneven (you remove a player, or add or remove a team), the most recently joined players of the biggest team are moved to the smallest. Moved players see a message saying which team they're on now.
public/: static pages (index.html = player, admin.html = host), the shared theme and the fonts and Bob artwork from the main game.api/: Vercel functions: state (public state), join, buzz, admin (password protected).lib/game.js: game logic. Joining, buzzing and judging are Lua scripts, so each one runs atomically in Redis.Players poll /api/state about once a second. Vercel's CDN and the function itself share one database read per second, so the load doesn't grow with the number of players. When you buzz, the result comes straight back from the server. With the admin page open, a live game uses about 40k Redis commands an hour. That's well inside Upstash's free 500K commands a month, so close the admin tab when you're not playing.
# .env.local
UPSTASH_REDIS_REST_URL=... # from your Upstash database
UPSTASH_REDIS_REST_TOKEN=...
ADMIN_PASSWORD=boo
npm run dev # http://localhost:3000 and http://localhost:3000/admin
There are no dependencies. You need Node 22 or newer (vercel dev works too).