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.