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
Play a drifting game on an island with solo, tandem and multiplayer modes
AI summary · website content
GamesHTML · JavaScriptGitHub @shanlihenriderussy-rgbOnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗
Jeu de drift mobile en 3D, jouable dans le navigateur. Inspiration FR Legends. Lance la voiture, tiens l'angle, clippe les murs, encaisse le combo. Aucune installation, aucun compte, aucune pub. Tout reste sur ton appareil.
| 🛣️ 6 pistes | Docks de Minato (nuit), Col d'Akane (coucher de soleil), Piton Volcan (jour), Quai de Shiohama (aube), Col de Yukimi (neige, adhérence ×0,88), Corniche de Kaigan (crépuscule). |
| 🏝️ L'île, monde ouvert | 2,1 × 1,5 km, 15 routes, 10 carrefours, 9 km de bitume, relief jusqu'à 110 m. Circulation (5 modèles, roulage à gauche), 4 pilotes rivaux à défier (touge, tandem de rue), 6 habitants à qui parler, radars, zones de glisse, belvédères photo, 12 daruma dorés, carte et GPS. |
| 👥 Multijoueur | Jusqu'à 4 pilotes sur l'île, pair à pair (WebRTC), sans compte ni serveur de jeu : invitation par code ou lien, messages rapides, course et battle de drift lancées par l'hôte. |
| 📖 Aventure | « Le Tour de l'Île » : 6 chapitres × 3 missions, 7 personnages, archives à collectionner, défis de rue. |
| 🎯 3 modes | Run noté (note de S à D), Tandem (chasse le leader), Libre (entraînement). En run noté, ton fantôme (meilleur run de la piste) roule en transparence et le HUD affiche l'écart de points en direct. |
| 🔧 Atelier | 3 voitures, carrosserie, 12 peintures × 5 finitions, 6 livrées, 5 jantes, fumée colorée, 6 pièces de perf × 3 niveaux, réglages freins et suspension. |
| 🎬 Moments forts | En fin de run, les 3 meilleurs instants (gros combo, clip, frôlé, angle record) ; replay cinématique (poursuite, travelling, bord de piste, ralenti sur les clips et les frôlés). Les 8 derniers enregistrements des pistes se revoient depuis la Carrière. |
| 💴 Carrière | Yens fictifs (aucun achat réel), 36 défis, bonus quotidien, records par piste. |
| 📱 Tactile d'abord | Boutons déplaçables et redimensionnables, miroir gauche/droite, clavier et manette aussi. |
| ⚡ Fluide sur petit Android | Physique à 120 Hz interpolée, résolution dynamique, 65–68 appels de dessin par image. |
| Action | Tactile | Clavier |
|---|---|---|
| Gaz / frein | GAZ / FREIN | ↑ ↓ ou Z S / W S |
| Braquer | ‹ › | ← → ou Q D / A D |
| Frein à main (lancer la glisse) | FREIN À MAIN | Espace |
| Vue (caméra) | 👁 | C |
| Se replacer | menu pause | R |
| Interagir (île) | bouton contextuel en bas | E |
| Carte et GPS (île) | menu pause | M |
| Klaxon · messages rapides (session) | 📯 👋 GG ➜ 🔥 | H · 1 à 4 |
Manette compatible. Le geste de base : prends de la vitesse, braque, tire le frein à main un court instant, puis tiens les gaz.
Moteur et rendu
InstancedMesh, shaders précompilésSimulation
Son et interface
Qualité et livraison
node:test (106) : économie, physique, tracés, île, vie de l'île, multijoueur, aventurebuild.mjs assemble src/* en un seul index.htmlmainZéro dépendance npm en production. Pas de framework, pas de bundler : un script Node concatène les sources, le navigateur fait le reste.
flowchart LR
A["src/*.js<br>src/head.html<br>src/body.html"] -->|node build.mjs| B["index.html<br>(fichier unique)"]
L["assets/logo.webp<br>assets/favicon.svg"] -->|intégrés en data URI| B
B -->|push sur main| V["Vercel"]
V --> P["sideways-drift-club.vercel.app"]
C["Three.js r128<br>cdnjs"] -.chargé au runtime.-> P
| Outil | Usage |
|---|---|
| Node.js ≥ 18 | Build (build.mjs) et tests (node --test) |
| Playwright + Chromium | Captures, bot expert, mesures de perf et d'audio (tools/) |
| Vercel | Hébergement statique, déploiement à chaque merge sur main |
| Claude (Anthropic) | Conception et code assistés par IA (mention dans l'écran d'aide) |
| Outils d'IA générative | Logo et visuels |
Le jeu est une PWA : il s'installe comme une appli, en plein écran, sans store.
| Appareil | Étapes |
|---|---|
| Android (Chrome) | Ouvre le jeu → menu ⋮ → Installer l'application (ou Ajouter à l'écran d'accueil). |
| iPhone / iPad (Safari) | Ouvre le jeu → bouton Partager → Sur l'écran d'accueil. |
| Ordinateur (Chrome, Edge) | Icône d'installation dans la barre d'adresse, ou joue directement dans l'onglet. |
Mise à jour côté joueur : rien à faire. Le jeu n'a pas de cache hors ligne (pas de service worker) : chaque ouverture charge la dernière version. Ta progression (localStorage) est conservée.
git clone https://github.com/shanlihenriderussy-rgb/Sideways-Drift-Club.git
cd Sideways-Drift-Club
node build.mjs # régénère index.html
npx serve . # ou : python3 -m http.server 8000
Ouvre http://localhost:3000 (ou :8000). Un simple double-clic sur index.html fonctionne aussi.
Hors ligne (tests, captures) :
mkdir -p vendor
curl -o vendor/three.min.js https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js
node build.mjs --local # test.html, Three.js depuis vendor/
node --test tests/*.test.js # 80 tests
git checkout main && git pull.src/ (jamais dans index.html, il est généré).node --test tests/*.test.js # tout doit passer
node build.mjs # régénère index.html
Nouveau tracé → tests/tracks.test.js impose : pas de recoupement, ≥ 5 virages, 900–1 900 m, un seul type de clip par virage.src/ et index.html ensemble (conventional commits : feat(piste): …, fix(atelier): …).main. Au merge, Vercel redéploie en ligne en ~1 min.node build.mjs --local
node tools/readme-shots.js # docs/screenshots/*.jpg (bot au volant)
node tools/readme-banner.js # docs/brand/banner.jpg
| Rôle | Couleur |
|---|---|
| Action, argent, combo | |
| Rubriques, tandem | |
| Alertes | |
| Fond |
Direction : « Télémétrie de nuit ». La 3D est le sujet, l'interface s'efface.
| Fichier | Rôle |
|---|---|
src/physics.js | Modèle bicyclette, pneus saturés, régulateur d'angle de drift (assistance) ; lit les champs de fiche tunée (steerRate, driftSteer, angleBoost, rollK, brakeK, brakeRear, hbK, latBal, damp, camber) et l'adhérence de piste (grip) |
src/economy.js | Portefeuille en yens, catalogue de l'atelier, gains de fin de run, défis, bonus quotidien, fiche tunée. Logique pure, testée |
src/track.js | 6 tracés, échantillonnage, virages et clips (un type par virage, règle des tracés officiels), barème (par), adhérence (grip, neige) |
src/world.js | Ciel (nuages, étoiles), crêtes, route et murs par lieu, décor instancié par thème, tribune, eau animée. Thèmes dawn, snow, dusk = palettes posées sur une famille de décor (decor) |
src/car.js | Voitures procédurales : caisse lissée (loft), habitacle, livrée peinte, pièces modulaires, roues instanciées |
src/fx.js | Fumée colorée (points), traces de gomme (envoi GPU partiel), étincelles |
src/audio.js | Moteur, turbo, crissement synthétisés (Web Audio) |
src/ai.js | Leader tandem sur trajectoire précalculée |
src/story.js | Aventure « Le Tour de l'Île » : 6 chapitres × 3 missions, dialogues, objectifs, exploration (archives, défis de rue, rencontres). Logique pure, testée |
src/island.js | L'île : monde ouvert continu (9 km de routes, carrefours, relief, volcan, mer), recherche de route, terrain (partie pure, testée) et rendu Three.js, dont circulation instanciée (~15 appels de dessin pour tout le trafic), habitants, radars, arches de zone, étiquettes flottantes |
src/isleai.js | Vie de l'île : GPS (plus court chemin), circulation (suivi de voie, distance d'arrêt, klaxon, dépassement), rivaux en glisse, activités à étoiles, habitants et belvédères. Logique pure, testée |
src/ghost.js | Fantôme du record : échantillon toutes les 0,1 s (position, cap, dérive, points), stockage compact vérifié (), relecture interpolée. Logique pure, testée |
sdc:profile.story.sdc:profile.isle.Réglages → Personnaliser : déplacer chaque bouton, taille générale + taille par bouton, transparence, miroir, réinitialisation. Disposition enregistrée par orientation (localStorage, clé sdc:touchLayout). Un doigt peut glisser d'un bouton à l'autre sans lâcher (hit-test + hystérésis de 28 px). Zoom : bloqué sur la surface de jeu (touch-action: none, garde touchend, gesture*), autorisé dans les menus (pan-y pinch-zoom) ; le viewport ne l'interdit pas (WCAG 1.4.4).
sdc:profile : solde, voitures, pièces, défis, 40 derniers mouvements) restent en localStorage sur l'appareil du joueur.sdc:ghostssrc/replay.js | Moments forts : choix des 3 meilleurs instants sans chevauchement, découpe de la trajectoire, enregistrements vérifiés (sdc:recs, 8 au plus), lecture interpolée. Logique pure, testée |
src/net.js | Multijoueur pair à pair : session hôte/invités avec relais, état compact à 15 Hz, interpolation 120 ms, filtrage de tout ce qui vient du réseau, codes d'invitation compressés, transport WebRTC. Partie pure testée |
src/shop.js | Atelier : 6 rayons, aperçu avant achat, barre d'achat |
src/game.js | Boucle (pas fixe 120 Hz + interpolation), caméra, score, collisions, entrées, interface, carrière |
assets/favicon.svg, icons/, manifest.webmanifest | Favicon (intégré au build), icônes d'application, manifeste PWA |
docs/ | Visuels de cette page : screenshots/, brand/ (bannière, logos PNG, boutons) |
tests/ | node --test tests/*.test.js : économie, effets physiques des réglages, tracés, île, vie de l'île, multijoueur, aventure |
tools/ | Bancs d'essai : physique (Node), captures, tour complet, bot expert, perf, CPU ralenti, analyse audio, visuels du README (Playwright) |