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를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Secret Hitman 5. Repository created by Codex acting on behalf of @virakngauv.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A one-round, host-driven multiplayer word game built with Next.js, React, TypeScript, and Socket.IO.README 전문 보기 ↗A one-round, host-driven multiplayer word game built with Next.js, React, TypeScript, and Socket.IO.
There are no gameplay timers. New identities join as participants while clue creation remains open, then enter in read-only spectator mode after guessing starts. Reconnecting browsers recover their original seat from a private local token while the in-memory room still exists.
Requirements: Node.js 22.9.0+ and pnpm 11.
pnpm install
cp .env.example .env.local
pnpm dev
This starts:
http://127.0.0.1:3000http://127.0.0.1:3200To test on a trusted local network:
WEB_HOST=0.0.0.0 HOST=0.0.0.0 pnpm dev
pnpm format:check
pnpm lint
pnpm typecheck
pnpm test
pnpm build
pnpm test:e2e
# Also verify enabled pack UI (managed test server, no Clerk credentials):
PW_WORD_PACKS=1 pnpm exec playwright test e2e/word-packs.spec.ts
The automated multiplayer tests use isolated browser contexts so each player receives a different local identity. The managed e2e stack uses ports 3125 and 3225 to avoid colliding with normal development.
The frontend can be deployed to Vercel. Run the game server as exactly one long-lived Node.js instance; horizontal scaling without a shared room adapter would split room state.
Set NEXT_PUBLIC_GAME_SERVER_URL to an HTTPS endpoint on the frontend and set ALLOWED_ORIGINS to the frontend origin on the game server. Production clients refuse insecure socket endpoints; HTTP is available only in development for local/LAN testing.
The App Platform example opts into TRUST_DIGITALOCEAN_PROXY=true, using the provider's do-connecting-ip header rather than trusting a private address range. Enable this only behind that managed ingress, which sets the header; never use it on a directly reachable server. Missing or invalid headers fall back to the peer IP for conservative rate limiting.
Base hosting and guest play require no account. The original Movies and Travel packs are public development samples, not an approved commercial catalog. Their full pools ship only with server code, but are readable in this public repository. The catalog and socket snapshots expose descriptions and sampled boards, never full pools. Do not put private content into this repository without a separate content delivery decision.
Clerk Next.js 7.9.1, backend 3.17.1, and UI 1.32.2 are pinned for this integration.
The provider imports the installed UI implementation, and next.config.ts pins
the browser ClerkJS runtime to 6.31.0 through the SDK-supported
NEXT_PUBLIC_CLERK_JS_VERSION setting. Upgrade these together and repeat configured
Clerk account/billing verification. Use a Clerk
development instance with individual-user Billing. Create a user Plan with
Features pack_movies_v1 and pack_travel_v1; do not enable trials or complimentary
offers. The backend uses fresh subscription items and their millisecond periods,
not the parent subscription status or client claims. Canceled items retain access
until period end; past-due items cannot start new premium rounds. This conservative
development policy needs approval before launch.
Set both Clerk keys, CLERK_ISSUER, and CLERK_AUTHORIZED_PARTIES in both Next.js
and the standalone Node process. pnpm dev loads .env.local for both processes
and defaults the web hostname to localhost. Shell variables take precedence,
and a missing .env.local does not prevent startup. Standalone pnpm dev:server
and production commands still require exported variables or deployment configuration.
Use exact frontend origins and optionally CLERK_AUDIENCE if your tokens include a
configured audience. Partial configuration disables protected use. Never expose
CLERK_SECRET_KEY under a NEXT_PUBLIC_ name.
When ENABLE_WORD_PACKS=true, Next.js requires a non-empty
CLERK_AUTHORIZED_PARTIES list. An absent or blank list fails closed with HTTP 503;
the deployment environment check rejects incomplete launch configuration. The
production game process also refuses to start with missing Clerk configuration.
When the flag is off, Clerk configuration is unused and cannot block Base play.
Lobby login and signup open separate tabs so OAuth cannot unload the game tab.
The root layout is dynamic: the server reads ENABLE_WORD_PACKS and the secret
key availability at request time, rather than baking these gates into static HTML.
The public Clerk publishable key and public game-server URL still need their
intended values at Next.js build time. The secret stays server-side. Set the same
release flag in both Next.js and the standalone game-server deployment, and
restart/redeploy both processes together when changing it. Do not set a public
browser environment variable as an independent release switch.
The example allowlist covers localhost development only. If opening the app at
a LAN address, custom hostname, or different port, add that exact frontend origin
to CLERK_AUTHORIZED_PARTIES in both processes. Next.js allowedDevOrigins only
permits development requests; it does not authorize Clerk sessions. Plain HTTP
LAN sockets cannot carry account tokens: use localhost or HTTPS for premium play.
Origin entries must have no trailing slash, path, query, fragment, or credentials.
Default Clerk session tokens have no audience claim. Leave CLERK_AUDIENCE unset
for those tokens. If customizing session tokens with an audience, configure the
same expected value; audience-bearing tokens are denied without that setting.
Token issue/not-before times permit five seconds of clock skew, while token expiry
and paid subscription period boundaries remain strict. Keep server clocks synchronized.
ENABLE_WORD_PACKS is the single application release flag and defaults to false.
Off is a dark deployment: no pack selector, Buy buttons, Clerk account controls,
or shop is rendered; pricing/account/sign-in/sign-up routes and the access API
return 404. Clerk middleware is bypassed. The game server advertises only Base
and rejects premium selection/start requests regardless of client behavior.ENABLE_WORD_PACKS=true launches the complete feature: account integration,
catalog, host selection, authorization, and Clerk purchase UI. Prices and offers
come from Clerk. Configure and approve the target instance before enabling it./account provides Clerk's account/subscription UI plus an access preview.
It is protected when Clerk is configured. The lobby's Buy links open the shop
in a modal, preserving the browser's game identity.Before live charges, the owner must approve recurring terms, intervals/prices, exact catalog and Feature mapping, future pack inclusion, past-due policy, content rights/public source availability, and a support/refund process. Verify Clerk's current currency, geographic, tax/VAT, 3DS, and refund limitations. A gateway refund must not be assumed to end Clerk subscription access. Do not add direct Stripe Checkout, an app payment ledger, or billing webhooks as a workaround.
For a pre-launch deployment, leave ENABLE_WORD_PACKS=false in both processes.
Keep test/non-launch Clerk Plans non-public while testing. Plan visibility is a
separate provider-side safeguard, not another application flag. Review every
public Plan before enabling the release flag. pnpm deploy:check-env validates
launch configuration and reads all pages of user Plans when the feature is enabled.
It requires every public non-default user Plan to cover every enabled premium
pack's Feature slug from the deployed catalog and rejects Plans with free trials;
default/private Plans cannot satisfy this check. This matches the unfiltered
pricing table, where a buyer can choose any public Plan. This verifies availability,
not approval of prices or terms. Review the individual Plan descriptions and
included packs before approving offers. Disabled deployments do not contact Clerk.
After launch, do not use the release flag merely to pause sales: switching it
off also hides account management and denies new paid rounds for existing users.
To pause new offers while retaining paid hosting and subscription management,
leave the release flag on and make non-default user Plans non-public in Clerk.
Keep Billing, subscriptions, and Feature attachments intact. Verify /pricing,
the shop, /account, avatar billing, and any hosted account UI with both a free
user and an existing paid subscriber. Provider Plan visibility is not a guarantee
that already-open checkouts are revoked; verify that procedure separately.
Do not add direct checkout links for private Plan IDs.
The launch check deliberately fails while all offers are private; do not make
Plans public just to pass it during a sales pause. Existing deployments can keep
serving subscribers with private Plans. A deployment during that pause requires
separate review of the deployment procedure, rather than treating the launch
check as successful.
Development release verification must exercise Clerk sign-in/account switching,
checkout cancel/failure/success and access refresh, cancellation through exact
expiry, renewal, past-due/recovery, revoked sessions, and provider outage with a
real development instance. Automated adapter tests do not replace these provider
flows. The frontend advertises its current and minimum compatible game protocol
versions plus supported capabilities. The server currently accepts the inclusive
16–17 range: overlapping releases negotiate the highest shared version, log a
token-free protocol_version_drift warning, and keep the compatible Base flow
available. Features outside the client's advertised capabilities return a typed
command error instead of rejecting the socket. The known v16 handshake does not
include range metadata, so the server recognizes that exact legacy shape and
retains its 50-character name and 40-character hint payload contract while v16
remains in the compatibility window. Malformed authentication, ranges, or
capability arrays are rejected as invalid sessions; well-formed clients without
protocol overlap receive the actionable reload/update message. Deploy the server
before the frontend when expanding the range or adding optional capabilities;
deploy the frontend before the server when raising the compatibility floor.
Advance the minimum only after traffic logs show the retiring version is no
longer in use, and document that removal in the same release. A rollback must
retain overlap with both adjacent releases so compatible clients can reconnect,
but replacing the in-memory game-server process still loses active rooms unless
the deployment provides graceful state handoff or a shared room adapter. Verify
no premium pools or credentials appear in browser bundles, public responses, or
logs before enabling a paid catalog.
The lobby avatar has an explicit “Sign out and stay in room” action that ends
the Clerk session without navigation, retaining the independent anonymous game seat. Verify the actual configured Clerk avatar action beyond the
three-second leave grace period, then select/start Base. The Next.js middleware
and socket authorizer both use CLERK_AUTHORIZED_PARTIES as the token-origin
allowlist.