lp177

BOLT — Chrono Rush

Jeu de plateforme hommage à Sonic, jouable dans le navigateur

Jeu webjuillet 2026TypeScriptCanvas 2DWeb AudioViteVitestService Worker

Jouer en ligne Code source Sonic Physics Guide

Jeu de plateforme de fan dans l’esprit de Sonic, en TypeScript et Canvas 2D sans moteur de jeu : physique tirée du Sonic Physics Guide, boucles à 360°, 42 actes sur quatre biomes. Graphismes, police, musique et bruitages sont tous générés par le code.

But du projet

Un hommage non officiel aux Sonic 2D de la Mega Drive, sans aucune ressource tirée des jeux commerciaux et sans lien avec SEGA. Les personnages (BOLT, Dr. Yolk), les niveaux, la musique et les graphismes sont originaux ; seul le modèle de déplacement est emprunté, à partir du Sonic Physics Guide rédigé par la communauté.

Scénario : Dr. Yolk a brisé le Chrono Core en quatre éclats et figé quatre régions à l’heure qui lui convient. Il faut traverser ces quatre « heures volées » pour reprendre les éclats.

Fonctionnalités

  • Campagne de 42 actes en quatre biomes (Duskmere Coast, Otherwhile Foundry, The Underwhen, Noon Tomorrow), chacun avec son boss, sans écran de chargement.
  • Physique classique : vitesse au sol, pentes, roulade, spin dash, boucles complètes à 360°, avec trois réglages volontairement plus nerveux que le guide.
  • Niveaux à plusieurs routes : route haute, route du milieu et grottes, qui se séparent et se rejoignent ; pas de chute mortelle.
  • Mécaniques variées : deltaplane, wagonnets sur rails, plateformes de lumière, pièges annoncés à l’avance.
  • Exploration : 5 cristaux et 3 salles secrètes par acte, bilan avec rang de S à D, records et succès ; sélection des actes déjà terminés.
  • Dix morceaux de musique et environ quatre-vingts bruitages synthétisés en WebAudio, dans l’esprit FM/PSG de la Mega Drive.
  • Clavier entièrement reconfigurable, manette (avec vibration) et commandes tactiles.
  • Options d’accessibilité (volumes, tremblement d’écran, flashs, filtre CRT) ; prefers-reduced-motion est respecté.
  • Installable et jouable hors ligne ; les mises à jour sont proposées sur l’écran titre, jamais en pleine partie.

Fonctionnement

  • Simulation à pas fixe de 60 Hz ; chaque image est interpolée entre deux pas, ce qui garde un défilement régulier sur un écran 60, 144 ou 240 Hz. Si le GPU ne suit pas, le jeu descend à 60 images/s puis baisse sa résolution de rendu.
  • Rendu : interface en 640×360 logiques, terrain de jeu de 427×240 pixels monde, dessinés à la résolution réelle de l’écran. Le terrain est une carte de tuiles (tableaux de hauteurs et de largeurs, deux couches de collision pour les boucles) convertie en polygones lisses.
  • Tout est procédural : sprites, décors, police BOLT Display, musique (petit tracker WebAudio) et bruitages. Le jeu complet pèse environ 110 Ko compressés et ne fait aucune requête réseau après le chargement.
  • Logique sans DOM : physique, entités, boss et niveaux tournent dans Node, ce qui permet une large suite de tests Vitest. Un « contrat d’acte » rejoue chaque niveau de trois façons (débutant, joueur qui ne saute jamais, joueur qui roule dans chaque pente) et échoue en cas d’impasse.
  • Hors ligne : un service worker précharge les fichiers produits par le build ; la version du cache est une empreinte de leur contenu.
  • La CI GitHub Actions vérifie les types, lance les tests, construit le site et échoue si le dossier docs/ publié n’est pas à jour.

Captures d’écran

Jouer

Le jeu se joue directement dans le navigateur, sans installation ni compte : lp177.github.io/sonictribute.

Pour le lancer en local (Node.js 20 ou plus) :

npm install
npm run dev        # serveur de développement
npm test           # tests unitaires
npm run build      # build de production dans docs/
npm run preview    # sert le build localement

Le build est un site entièrement statique : le dossier docs/ peut être copié sur n’importe quel hébergeur.

Contrôles

ActionTouches par défaut
Se déplacerFlèches ou ZQSD (AZERTY)
SauterEspace ou W (AZERTY)
Rouler↓ en mouvement
Spin dash↓ + Espace (taper pour charger, relâcher ↓)
PauseÉchap ou P
Valider, faire avancer une cinématiqueEntrée ou la touche de saut
Passer une cinématiqueÉchap

Les touches sont enregistrées par position physique : les valeurs par défaut correspondent à WASD en QWERTY et à ZQSD en AZERTY, et l’interface affiche les lettres réellement gravées sur le clavier. Tout est modifiable dans Settings. À la manette : stick ou croix pour se déplacer, n’importe quel bouton de façade pour sauter, Start pour la pause. Sur écran tactile : stick flottant sur la moitié gauche, bouton de saut en bas à droite.