- The Backdooms est un jeu HTML qui s’exécute directement depuis un code QR, développé en s’inspirant de DOOM 1993 et de The Backrooms
- Ce projet a été conçu pour tester les limites du stockage et de la compression dans les codes QR, et pour démontrer une méthode innovante d’hébergement d’applications web légères à l’intérieur d’un code QR
- Le jeu peut être lancé en scannant le code QR sans connexion Internet, et il est distribué sous une forme extrêmement compressée
- Grâce à l’API DecompressionStream, le jeu peut s’exécuter dynamiquement dans le navigateur
- Compatible avec les navigateurs mobiles modernes, et les codes QR peuvent être générés avec Python et des bibliothèques de codes QR
Aperçu du projet
- The Backdooms est un jeu HTML qui s’exécute directement depuis un code QR, développé en s’inspirant de DOOM 1993 et de The Backrooms
- Conçu pour tester les limites du stockage et de la compression des codes QR, et pour démontrer une méthode innovante d’hébergement d’applications web légères à l’intérieur d’un code QR
Fonctionnalités
- Entièrement hors ligne : après avoir scanné le code QR, il est possible de jouer sans connexion Internet
- Compression extrême : le résultat final est compressé à l’extrême à l’aide de la compression Zlib, d’un flux de décompression Gzip et de l’encodage base64
- Page web auto-extractible : utilise l’API
DecompressionStream pour exécuter dynamiquement le jeu dans le navigateur
- Compatible mobile : fonctionne sur les navigateurs mobiles récents prenant en charge l’API DecompressionStream (Edge, Yandex, Opera)
Installation et dépendances
- Techniquement, seul un navigateur web moderne est nécessaire, mais pour générer le code QR d’un jeu d’environ 2,5 kb, il faut Python 3.7+, la bibliothèque
qrcode et pillow
Utilisation
1️⃣ Convertir le jeu en code QR
- Exécuter le script avec la commande suivante :
python3 QRGEN.py <your-game.html> <output-qrcode.png>
2️⃣ Scanner le code QR
- Utiliser un smartphone ou un lecteur QR pour ouvrir directement le jeu dans le navigateur web
3️⃣ Jouer immédiatement 🎮
- Profitez de The Backdooms sans téléchargement ni installation
Analyse technique
Workflow de compression
- Lecture du HTML en entrée : lit le contenu HTML fourni depuis un fichier ou une source d’entrée
- Compression Zlib + décompression GZip : compresse le HTML avec Zlib et utilise le DecompressionStream de GZip pour obtenir la meilleure compression possible
- Encodage Base64 : encode les données compressées en Base64 afin de les conserver sous forme textuelle et de pouvoir les inclure en toute sécurité dans un fichier HTML
- Inclusion dans un wrapper HTML : un wrapper HTML auto-extractible en JavaScript est généré. Ce wrapper inclut une fonction de l’API DecompressionStream qui décompresse automatiquement le contenu à l’ouverture dans le navigateur
- Conversion en URI de données : convertit l’ensemble du HTML au format
data:text/html;base64,... afin de pouvoir le stocker et le partager facilement sans fichier physique
Logique de génération du code QR
- Le système tente d’abord de générer la plus petite version possible du code QR en utilisant
qr.make(fit=True), ce qui ajuste dynamiquement la taille du QR selon la longueur du contenu
- Si la version requise dépasse 40 (limite du standard des codes QR), il force la version 40 avec
fit=False
- Il utilise le niveau de correction d’erreur le plus bas, L, qui autorise la capacité maximale de données, afin d’y faire tenir autant de données que possible
- Si les données ne tiennent toujours pas dans un QR v40 niveau L, le processus échoue et renvoie un message d’erreur indiquant que les données sont trop volumineuses pour être encodées dans un code QR
Résultat
- En cas de succès, le code QR est généré et affiché
- En cas d’échec, le processus s’arrête avec un message d’erreur indiquant que les données sont trop volumineuses pour être encodées dans un code QR
Licence
- Ce projet est publié sous licence MIT et peut être utilisé, modifié et partagé librement
Crédits
- id Software, qui a développé DOOM
- matttkc, qui a proposé cette idée il y a 5 ans
- Toby Fox, qui a composé l’incroyable musique d’Undertale ; la version hébergée sur GitHub de ce jeu utilise une version 8 bits de Bonetrousle
- Développé par Kuber Mehta
1 commentaires
Commentaire Hacker News
Il m’arrive de lancer des projets aléatoires de temps en temps, et c’était encore le cas ici. Je l’avais réalisé en une semaine au début de l’année sans le partager, mais j’ai décidé de le faire cette fois
Projet suivant : créer un LLM sous forme de QR code
Projet vraiment génial. J’ai découvert les URL
data:. Je connaissais le schéma d’URIdata:, mais je ne savais pas qu’on pouvait l’utiliser comme URL complète. Je m’étais demandé s’il était possible de mettre un jeu entier dans un QR code, mais j’avais laissé tomber en pensant, à tort, qu’il fallait un lien HTTP(s). Ce travail m’a énormément inspiré : est-il possible de mettre un jeu entier dans un QR code ? [lien YouTube]J’aimerais que vous ajoutiez quelques captures d’écran au dépôt. Je regarde depuis mon téléphone et, pour une raison inconnue, je n’ai vu que 3 boutons et un écran noir
Je l’ai scanné avec le lecteur de QR code par défaut de l’iPhone, et j’ai obtenu « aucune donnée utilisable »
Il faudrait mettre à jour le CSS du canvas avec
image-rendering: pixelatedpour que l’image soit nette au lieu d’être floueContinue à créer des choses géniales, kuberwastaken
Projet impressionnant. J’attends qu’un « QR code auto-contenu » soit ajouté à canitrundoom (je ne sais pas si cela pourrait être validé techniquement)
Ce projet donne l’impression de se rapprocher de Snow Crash. Je me suis demandé si mon cerveau était en train d’être altéré juste en regardant le QR code :-D Travail incroyable
Très sympa. Petite précision toutefois : DOOM n’utilisait pas le raycasting. Ce projet ressemble davantage à Wolfenstein 3D, et Wolf3D, lui, utilisait le raycasting