Présentation du port
Quake‑SRP est une version du moteur original de Quake (1996) publiée sous licence GPL, entièrement réécrite en Rust sans aucune instruction unsafe. Le projet compile le code Rust en WebAssembly (WASM) et le charge dans le navigateur, ce qui permet de jouer sans installation locale. Le partage inclut l'épisode shareware de 9,1 Mo et le code source est disponible sur GitHub.
Architecture et rendu logiciel
Le rendu s'effectue entièrement par logiciel ; aucune API graphique GPU n'est invoquée, ce qui élimine les dépendances externes et simplifie le sandbox du navigateur. Le moteur utilise les primitives de dessin du canvas HTML5 via les bindings WASM, traduisant les appels de rasterisation du moteur original en opérations de pixel manipulation en Rust. Cette approche garantit la portabilité mais impose une charge CPU importante, surtout sur les machines à faible fréquence.
Gestion des entrées et stockage
Le port expose les contrôles classiques (WASD, souris, gamepad) ainsi que les touches idiosyncratiques (F1‑F12, ~ pour la console). Les entrées sont capturées via les API JavaScript d'événements clavier et gamepad, puis transmises au code Rust via wasm‑bindgen. Les sauvegardes de parties et les fichiers de mission (pak1.pak, pak0.pak) sont stockés dans le stockage local du navigateur, ce qui permet de charger des extensions comme Scourge of Armagon ou Dissolution of Eternity sans recharger la page. Les captures d'écran sont générées au format .pcx et conservées dans le même espace de stockage.
Analyse des performances et limites
Le moteur expose deux variables de configuration : wasm_showfps pour afficher le compteur d'images et host_maxfps, limité à 60 fps par défaut, afin d'éviter la saturation du thread principal du navigateur. En l'absence d'accélération GPU, le taux de rafraîchissement dépend fortement de la puissance du processeur et du moteur JavaScript du navigateur. Les tests indiquent que les navigateurs modernes (Chrome, Edge) maintiennent un gameplay fluide à 30‑60 fps sur des CPU de milieu de gamme, mais les performances chutent rapidement sur des appareils mobiles ou des machines virtuelles. Le choix du Rust « safe » élimine les risques de corruption mémoire, ce qui renforce la sécurité du WASM exécuté, mais ne compense pas les limitations inhérentes au rendu logiciel.