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,即可验证所有权并自行管理介绍。
一分钟完成验证Ligue hivernale Call of Duty Warzone : classement, economie de flocons, boosters, cartes bonus/malus et hotel des ventes entre joueurs. Next.js + TypeScript, logique de jeu entierement cote serveur.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Ligue hivernale Call of Duty: Warzone de la chaîne Twitch de Lriaa : un classement de saison, des flocons, des boosters de cartes ouverts à l'antenne, et des duels entre joueurs. Suite de Summer Ligue, sur une base neuve : les roues sont remplacées par des boosters et des cartes, et toute la logique de jeu est décidée côté serveur. 1 kill = 1 point. Top 1 : +20, Top 2 : +15, Top 3 : +8. Soixante games par joueur au plus. Les flocons ❄ — la monnaie de la saison.查看完整 README ↗
Ligue hivernale Call of Duty: Warzone de la chaîne Twitch de Lriaa : un classement de saison, des flocons, des boosters de cartes ouverts à l'antenne, et des duels entre joueurs.
Suite de Summer Ligue, sur une base neuve : les roues sont remplacées par des boosters et des cartes, et toute la logique de jeu est décidée côté serveur.
Next.js 16 · React 19 · Tailwind CSS v4 · Postgres (Supabase) · Vercel.
Le score d'une game
score = kills + points de classement + bonus de la carte jouée dessus
1 kill = 1 point. Top 1 : +20, Top 2 : +15, Top 3 : +8. Soixante games par joueur au plus.
Les flocons ❄ — la monnaie de la saison.
Les subs Twitch profitent à toute la ligue, jamais à un joueur en particulier.
| Tous les… | Ce qui tombe |
|---|---|
| 50 subs | un Booster Commu |
| 100 subs | Avalanche : les flocons des games doublés pendant une heure |
| 200 subs | un Booster Folie |
| 500 subs | Tempête de neige : un Booster Commu tous les 20 subs, pendant quatre jours |
Un sub payé compte pour un, quel que soit son niveau ; les subs Prime ne comptent pas. Un sub T3, ou cinq subs offerts, valent en plus un Booster Perso à qui les paie.
Les boosters — quatre, une carte chacun, et aucun ne s'achète.
| Booster | Pour qui | Quand |
|---|---|---|
| Perso | un joueur | un sub T3, ou cinq subs offerts |
| Commu | ceux que le sort désigne | tous les 50 subs |
| Folie | ceux que le sort désigne — rien sous rare | tous les 200 subs |
| Finisseur | un joueur | sa dernière game de la saison |
La streameuse les ouvre à l'antenne. Le serveur tire la carte, puis, pour un booster de la ligue, le ou les joueurs sur qui elle tombe, dans la même transaction. L'écran et l'overlay ne font que dérouler ce tirage.
Les cartes — quatre raretés : commune, rare, ultra rare, légendaire. Une carte se joue sur une game, le plus souvent la prochaine, puis disparaît. Elle pèse au plus ce que sa rareté autorise : 6 points pour une commune, 15 pour une rare, 20 pour une ultra rare, 25 pour une légendaire. Une carte n'a aucune valeur en flocons : elle ne s'achète, ne s'échange ni ne se revend.
Le catalogue compte pour l'instant une carte par rareté, le temps de repenser les cartes.
npm install
cp .env.example .env.local # puis compléter
npm run dev
Sans DATABASE_URL, le site écrit dans un fichier local (.data/league.json) ; avec, il
utilise Postgres. La connexion passe par Twitch : il faut une application Twitch
(TWITCH_CLIENT_ID, TWITCH_CLIENT_SECRET) et la chaîne de la ligue
(TWITCH_BROADCASTER_LOGIN).
| Commande | Effet |
|---|---|
npm run dev | Serveur de développement |
npm run build | Build de production |
npm test | Tests du domaine et des services |
npm run typecheck | Vérification TypeScript |
npm run cartes | Régénère l'index des illustrations de cartes et de boosters |
npm run importe-base | Verse un fichier .data/league.json dans une base Postgres vide |
app/
├─ page.tsx Accueil : classement, subs de la saison ; déconnecté, la ligue expliquée
├─ boosters/ Ouverture des boosters, cartes de la saison
├─ duels/ Duels de flocons entre joueurs
├─ joueurs/[slug]/ Profil public
├─ regles/ Règles, lues depuis le code
├─ admin/ Modération : joueurs, saison, overlays, journal
├─ overlay/ Overlays OBS : booster, duel, subs
└─ api/ Toutes les écritures passent par ici
lib/
├─ domain/ Règles pures, sans entrée-sortie — testées
│ ├─ rules.ts Constantes de saison, flocons, chance, paliers de subs
│ ├─ catalog.ts Raretés, cartes, boosters
│ ├─ scoring.ts Score des games et classement
│ └─ rng.ts Tirages (serveur uniquement)
├─ db/ Stockage, transactions sérialisées
├─ auth/ Connexion Twitch, sessions signées
├─ api/ Garde des routes, validation Zod, réponses
├─ security/ Limitation de débit
└─ services/ Boosters, effets des cartes, grand livre, subs, duels, overlays
Une règle structure tout le reste : lib/domain ne fait aucune entrée-sortie. C'est
ce qui rend les règles testables en isolation, et ce qui garantit qu'une même règle ne
peut pas diverger entre l'affichage et le serveur.
Le site est conçu pour qu'un joueur ne puisse rien décider depuis son navigateur. Le
détail est dans docs/SECURITE.md. En résumé :
server-only.Fait pour la Winter Ligue.