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
Classement, boosters, cartes et duels. Saison hivernale.
Translation pending
GamesTypeScript · CSSGitHub @TchatGPTOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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.Read the full 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.