Tous les projets

Jouable dans le navigateur

ChronoRider

Un jeu de moto en contre-la-montre né d'une game jam en 2024, à cinq et en 48 h. On y pilote sur un parcours de plus de 11 000 pixels, en jonglant entre l'accélération, l'inclinaison en l'air et une poignée de pièges qu'on déclenche à la volée. Écrit en Python, il tourne aujourd'hui dans le navigateur, sur ordinateur comme au doigt.

Cliquez dans la fenêtre pour donner le clavier au jeu.

Commandes

Clavier

Accélérer et reculer
S'incliner en l'air
Espace
Sauter
B
Lâcher le ballon-météorite
Échap
Pause
Clic
Déclencher un piège

Tactile

Coins bas
Reculer (gauche), accélérer (droite)
Juste au-dessus
S'incliner
Centre
Sauter
Coin haut gauche
Pause et ballon

À propos du projet

  • Un parcours de plus de 11 000 pixels, avec des pièges à déclencher en chemin : un ballon-météorite, un nuage de pluie qui ralentit, un mur qui tombe, une bourrasque qui inverse la marche.
  • Porté d'un exécutable Python vers WebAssembly avec pygbag : jouable en un clic, sans installation ni téléchargement.
  • Des commandes tactiles écrites pour la version web, pour jouer au doigt comme au clavier.

Le portage vers le navigateur

Écrit en Python avec pygame, le jeu ne s'exécutait que sur un poste où l'environnement était installé. Le portage en WebAssembly, via pygbag, le rend jouable en un clic : sans installation, sans téléchargement.

Le portage n'a pas consisté à recompiler. Il a fallu rendre la boucle de jeu asynchrone pour qu'elle rende la main au navigateur à chaque image, déplacer tous les chargements de ressources après la création de l'écran, convertir l'audio en OGG faute de décodeur MP3 côté WebAssembly, et écrire des commandes tactiles qui n'existaient pas.

Deux optimisations dont dépendait la jouabilité

Le décor de fond est une seule image de 16001 × 3271 pixels : 200 Mo en mémoire une fois décodée, de quoi faire tomber un onglet. Comme la caméra ne se déplace jamais verticalement, seule une bande de 768 pixels est réellement visible — la recadrer à la compilation a divisé le coût par quatre.

Les collisions, elles, parcouraient les 4 844 objets de la carte quatre fois par image, soit plus de 12 000 comparaisons. Tenable sur un processeur de bureau, pas dans un interpréteur compilé en WebAssembly. Un découpage de la carte en cellules a ramené ce chiffre à quelques dizaines.

4,7 Mo

Téléchargement

60 img/s

Cadence

~4 s

Chargement

Détails

Rôle
Developer · Game jam & web port
Année
2024
Développé avec
PythonpygamepygbagWebAssemblyTiled
Ouvrir le jeu

Envie de voir le reste ?

Tout ce que j'ai conçu, développé et livré, dans un index filtrable.