Loading projects…
Un platformer 2D à défilement horizontal qui tourne entièrement dans le navigateur sur un seul canvas — sans moteur de jeu, sans fichiers image ou audio, sans backend. Sa signature : un style « rubber-hose » années 1930 façon Cuphead dessiné en direct sur l’API Canvas 2D, quatre boss multi-phases et un co-op en ligne pair-à-pair via un code à 4 lettres.
Courez à travers des niveaux en tuiles, ramassez des pièces, écrasez les ennemis, esquivez les pièges, parez les éclairs roses et terrassez quatre boss dessinés à la main — BARKBROOD le chêne ancestral, GRANITE le golem de pierre, RIME la flèche de glace et THE OVERCLOCK, un final aérien. Quatre biomes — prairie dorée, caverne de cristal, fonderie industrielle et arène nocturne — ont chacun leur palette et leur décor en parallaxe.
Tout l’arsenal du platforming est là : saut variable, accroupissement et chute rapide, dash, wall-jump, tir avec visée 8 directions, parade, plateformes mobiles et friables, checkpoints. Le jeu tourne aussi sur téléphone, avec des contrôles tactiles auto-détectés, un tir automatique et une mise en page qui respecte les encoches et la barre d’adresse mobile.
Le dépôt ne contient pas un seul fichier image ou audio. Le rendu Cuphead — courbes encrées, lignes « bouillonnantes » et étalonnage vintage chaleureux — est dessiné en direct à chaque frame sur l’API Canvas 2D, et un style pixel art « Mario » l’accompagne, commutable à tout moment. Chaque effet sonore et chaque musique est synthétisé avec la Web Audio API.
Sans moteur, sans assets, sans backend — tout ce qui s’affiche est dessiné, et tout ce qui s’entend est synthétisé, à l’exécution.
Appuyez sur C sur l’écran titre, partagez un code à 4 lettres, et un ami rejoint le même monde — mêmes ennemis, mêmes boss, dégâts combinés. La connexion est pair-à-pair via WebRTC : un broker public ne gère que la poignée de main initiale, puis toutes les données de jeu circulent directement entre les deux joueurs. L’hôte exécute la seule simulation autoritative tandis que le personnage du second joueur est prédit localement, pour des contrôles instantanés.
Le code est en TypeScript strict sur Vite, avec une boucle à pas fixe qui découple la physique du framerate. La couche de rendu ne mute jamais l’état, toutes les constantes de gameplay vivent dans un seul fichier, et chaque niveau ou boss est un fichier JSON — ajouter un stage ne demande aucun changement de physique.