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.