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를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.