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 ↗Jogo web de gerenciamento de futebol: escolha um clube, monte elenco e tática, jogue a temporada rodada a rodada no campo 2D e acompanhe tabela, artilharia, cartões e lesões. Jogadores têm personalidade que influencia o jogo, a narração dos lances decisivos e os relatórios de olheiro são gerados por IA.
Tudo é fictício: ligas, clubes, cidades, estádios e jogadores são gerados por código. Escudos são SVG procedurais. Há uma blocklist de combinações de nomes famosos (
src/data/leagues.ts).
drizzle/)claude-haiku-5-5 (só no servidor)src/billing/src/
engine/ motor de partida (puro, determinístico) + testes
seed/ geração procedural de ligas, clubes e jogadores (arquétipos)
data/ ligas fictícias e pools de nomes (JSON por país)
career/ regras da carreira: calendário, rodadas, suspensões, lesões, moral, temporada
ai/ narração, olheiro, templates de fallback, limites e log de tokens
billing/ planos + provedor de pagamento (Stripe hoje; interface para trocar)
db/ schema Drizzle, conexão, migrate
app/ páginas e rotas de API
components/ UI (escudo SVG, campo 2D, centro de partida)
npm install
cp .env.example .env.local # preencha DATABASE_URL e AUTH_SECRET (mínimo)
npm run db:setup # aplica migrations + seed (8 ligas, 154 clubes, 3.850 jogadores)
npm run dev # http://localhost:3000
AUTH_SECRET: npx auth secret ou openssl rand -base64 32.
Sem ANTHROPIC_API_KEY o jogo funciona normalmente com narração/relatórios por template. Sem Stripe, a tela de planos aparece com o botão desabilitado.
| Script | O que faz |
|---|---|
npm test | testes (motor, inclusive o estatístico de 1.000 jogos; regras de carreira; calendário) |
npm run smoke | teste de ponta a ponta no banco: cria usuário/carreira, faz substituição ao vivo, joga a temporada inteira e inicia a seguinte |
npm run db:generate | gera nova migration após mudar src/db/schema.ts |
npm run db:migrate / db:seed / db:setup | migrations / seed determinístico (upsert, pode rodar de novo) |
npm run db:setup:http | o mesmo via HTTPS (driver HTTP do Neon) — use quando a porta 5432 estiver bloqueada |
npm run typecheck / lint / build | checagens |
...-pooler...?sslmode=require)..env.local, rode npm run db:setup..env.example. Defina APP_URL com a URL pública (ex.: https://seu-app.vercel.app).https://SEU_DOMINIO/api/auth/callback/google e preencha AUTH_GOOGLE_ID/AUTH_GOOGLE_SECRET. Sem eles, o botão do Google não aparece.STRIPE_PRICE_ID_PREMIUM;STRIPE_SECRET_KEY = chave sk_test_...;https://SEU_DOMINIO/api/billing/webhook com os eventos checkout.session.completed, customer.subscription.created|updated|deleted → STRIPE_WEBHOOK_SECRET;stripe listen --forward-to localhost:3000/api/billing/webhook;ANTHROPIC_API_KEY. Limites diários por usuário: AI_DAILY_NARRATION_LIMIT (padrão 40) e AI_DAILY_SCOUT_LIMIT (padrão 60).npm run dev, crie conta em /registro, entre/saia. Com Google configurado, teste o botão.npm run db:setup; confira no banco: select league_id, count(*), avg(strength) from clubs group by 1;. Rodar o seed de novo gera exatamente os mesmos dados.npm test. O teste “estatísticas realistas em 1.000 jogos” exige ~2,2–2,8 gols, ~3,4–4,6 amarelos e vermelho em 8–17% dos jogos (hoje: ≈2,44 gols, ≈3,6 amarelos, ≈12% com vermelho, 46% vitórias do mandante). Também testa determinismo, modo rápido = modo detalhado e que mudanças no meio do jogo preservam o trecho anterior.npm run smoke faz tudo isso automaticamente.ANTHROPIC_API_KEY, abra um jogador (relatório do olheiro é gerado uma vez e fica salvo) e assista a uma partida (selo “IA” na narração). Uso de tokens em ai_usage_log. Sem chave/limite estourado/erro → templates.createCareer) e carreiras premium ficam travadas se o plano cair (getCareer). Assine com o cartão 4242 4242 4242 4242; o webhook muda users.plan para premium.pg em vez de @neondatabase/serverless: o processamento da rodada precisa de transação interativa com SELECT ... FOR UPDATE (evita processar a rodada duas vezes). O pg funciona com a URL pooled do Neon na Vercel e também com Postgres local.ENGINE_VERSION..npmrc com legacy-peer-deps por conflitos de peer deps (next-auth beta / vitest) com Next 16.thinking desligado, effort: low, max_tokens baixo, timeout curto). A narração chega em segundo plano; o playback nunca espera por ela.src/career/calendar.ts, cup.ts).club_transactions (src/career/economy.ts).src/career/market.ts, transfers.ts). Entre temporadas a IA também negocia entre si.src/career/academy.ts).Narração por voz, IA ligada por padrão, contratos/rescisões, divisões inferiores para os demais países e chat entre técnicos.