7 ms·
Show HN: I made a Doom-like game fit inside a QR code
I sometimes pick up random projects just because I can, this was one of those times. I made it as a week long project a while back this year but never shared here, so thought to go for it haha.
I created a game inspired by Doom and the backrooms called The Backdooms under 2.4kb in minified html. (for reference, this entire post would be around 1.8kB haha)
I had to use a not popular way of using GZip with Zlib headers (had to write my own script for compressing it, also in the repo) to eventually convert it a size 40 QR code that works right in your browser using Decompressionstream API.
This is of course a very oversimplified description of it, using a lot of the same technologies that DOOM had but combining it with infinite seed based map generation in 2.4kb (QR codes can only store 3kb, which includes changing formats) was pretty hard.
Here are some links about it if you want to nerd out and read more:
Repository Link (MIT License): https://github.com/Kuberwastaken/backdooms https://github.com/Kuberwastaken/backdooms
A Hosted (slightly improved) version of The Backdooms: https://kuberwastaken.github.io/backdooms/ https://kuberwastaken.github.io/backdooms/
Game Trailer: https://www.youtube.com/shorts/QWPr10cAuGc https://www.youtube.com/shorts/QWPr10cAuGc
My Linkedin post about it: https://www.linkedin.com/feed/update/urn:li:activity:7295667546089799681/ https://www.linkedin.com/feed/update/urn:li:activity:7295667...
(PS: You'd need something like https://qrscanner.org/ https://qrscanner.org/ or something that can scan bigger QR codes and put the text data onto your browser to play it)
My Blogs documenting the process and development in detail:
https://kuberwastaken.github.io/blog/Projects/How-I-Managed-To-Get-Doom-In-A-QR-Code https://kuberwastaken.github.io/blog/Projects/How-I-Managed-...
https://kuberwastaken.github.io/blog/Projects/How-I-Managed-To-Make-HTML-Game-Compression-So-Much-Better https://kuberwastaken.github.io/blog/Projects/How-I-Managed-...
- kartik_malik 2y agoWhat you mean doom like ?
- tempodox 2y agoWow!
- deleted 2y ago[deleted]
- x3n0ph3n3 2y agoI think your trailer video link is bad.
- croisillon 2y agocorrect link: https://www.youtube.com/shorts/QWPr10cAuGc https://www.youtube.com/shorts/QWPr10cAuGc
- kuberwastaken 2y agoFixed it! My bad haha
- r1chardnl 2y agoYour game trailer links to a short called "Fly me to the moon - 19 September 2024". I think this is a mistake?
- kuberwastaken 2y agoShould be fixed, sorry haha
- dylan604 2y agoNever gonna give you up lives on in new ways
- jasonjmcghee 2y agoYou should update the css for the canvas to be `image-rendering: pixelated` so things look crisp rather than blurry!
- kuberwastaken 2y agoI tried that but this just looks more fun and retro haha
- the_arun 2y agoMy iPhone camera says - "No Usable Data found" when I scan the QR code. On a different context, loading a game in QR code also made me to think, can anyone inject a malware script using QR codes?
- deleted 2y ago[deleted]
- KeplerBoy 2y agoSure if the parser is broken anything might happen. Historically there have been exploits for Sony's PSP using modified .tiff images or an exploit for the Nintendo 3DS where a modified .m4a file could be used.
- kuberwastaken 2y agoYou'd need something like https://qrscanner.org/ https://qrscanner.org/ because most phones suck at scanning larger QR codes. Also, it won't work on your phone, can't put in that compatibility with size restraints, sadly
- conradev 2y agoI got it to work with a shortcut: https://www.icloud.com/shortcuts/d4793e08d64d4ff1b7ea725b944e616b https://www.icloud.com/shortcuts/d4793e08d64d4ff1b7ea725b944...
- kuberwastaken 2y agoThat is seriously cool, didn't know those could do that haha
- ustad 2y agoWhats that doing? I get some error about some gallery???
- giarc 2y agoI scanned on an iPhone using native QR code scanner and it says "no usable data found".
- kuberwastaken 2y agoHey thanks for checking it out! You'd need something like https://qrscanner.org/ https://qrscanner.org/ because most phones suck at scanning larger QR codes. Also, it won't work on your phone, can't put in that compatibility with size restraints, sadly.
- iainmerrick 2y agoYou mean the game doesn't work on mobile at all? What kind of device do you use to scan the QR code, then?
- lelandbatey 2y agoYou do not need to scan a QR code via a physical camera in your hand directly; any general purpose computer can run a QR code parsing program which accepts arbitrary images as input. It's so easy to do that there exist web pages which implement said QR code scanning in JS. Thus, the parent poster has recommended that you save the QR code .png file to your disk and then use such a piece of software, such as the website they linked, to extract the data encoded in that QR code. That is how you can use nearly any general-purpose computer to scan a QR code.
- kuberwastaken 2y agoIndeed! Thank you for explaining this in a way better way :)
- iainmerrick 2y agoOr... use a URL. I'm sure the number of people who've ever scanned a QR code on a desktop computer is more than zero, but not much more.
- deadbabe 2y agoHow can there not be even one screenshot of the game in the readme?
- kuberwastaken 2y agoBecause it kept evolving and it was more related to the development than the game itself. But if you want to skip the friction of scanning the QR code, you can directly play a hosted version at: https://kuberwastaken.github.io/backdooms/ https://kuberwastaken.github.io/backdooms/
- ant6n 2y agoDoesnt work on iOS (ipad). A screenshot would be nice.
- kuberwastaken 2y agoYeah, touch devices suck with it but here's the trailer with some gameplay if you really wanna see how it is: https://www.youtube.com/shorts/QWPr10cAuGc https://www.youtube.com/shorts/QWPr10cAuGc
- kuberwastaken 2y agoHey just wanted to update, I Managed to add kind of some mobile touch support here, so if you get an alternate chromium based browser, you can put in the URI to play on mobile too!
- deadbabe 2y agoIt doesn’t work, but I don’t really care to play I just want to see the screenshots of what you made.
- kuberwastaken 2y agoHeyo, update: I added a GIF to the repo, hope it's better :)
- 2y ago
- jerjerjer 2y agoYear 3567: automatic interstellar probe finds remnants a technical alien civilization. Year 3678, Show HN: I compiled DOOM for an alien CPU architecture. Vernor Vinge kind of touches this topic a bit in his Zones of Thought series.
- kuberwastaken 2y agoHaha I solemnly promise that I'll compile DOOM for an alien CPU architecture if we ever get access to one!
- leni536 2y agoHow fitting https://www.smbc-comics.com/comic/2011-02-17 https://www.smbc-comics.com/comic/2011-02-17
- flkenosad 2y agoHow could one theoretically reverse-engineer a CPU?
- flkenosad 2y agoWith an electron microscope possibly.
- DougMerritt 2y agoSometimes, sometimes just optical, but in any case, there's even a guy, Ken Sherriff, who has been doing this as a hobby for ages. It's not like this is merely theoretical. https://www.righto.com/search/label/reverse-engineering https://www.righto.com/search/label/reverse-engineering
- flkenosad 2y agoThat's cool. Thanks!
- deleted 2y ago[deleted]
- Lerc 2y agoI don't want to take away from the achievement because it really is awesome, and should be celebrated. ...but... It seems like a fundamental design issue to make a QR code game that isn't designed for the platform where QR codes are most used.
- kuberwastaken 2y agoTotally understandable, I can make a snake game inside it fully compatible with mobile but mobile controls just take up a lot of space due to the sheer nature of them haha. But the compression algorithm is up, feel free to make what you think is awesome and compatible, I'd love to see if you find out hacky solutions to make that work too :P
- Lerc 2y agoI might just do something like that. Although I inevitably get caught up in designing some minor tech part. Last time I attempted something like that I made stack machine texture maker, then embedded it inside a version of TTT that minifies+gzips to under 1500bytes. After a few years of pondering I think there are a few more enhancements to be had. For reference, This URL has a bunch of textures in it. https://fingswotidun.com/ttt/#W1s2NCw2NCwxMzExOV0sWzY0LDY0LDEzMTE5LDYsMCwzNjQxNSwieHgqMXgtZCoreXkqMXktZCorKng4Nioqc3k4NioqcysqIl0sWzY0LDY0LDEzMTE5LDEsMSwxLDE1LDY0LDE3LDY2LDYwMjY5LDM0MDYzLDQyODE1LDYsMCwyNTYzMSwieDg0Kip5MypwIl0sWzY0LDY0LDEzMTE5LDYsMTUsNjU1MzUsInh5Mnd4eTR3eHk4d3h5MjgqdysrK3h5NDgqdysiLDgsIngxMi8teSp4Mi8reCFlZSsiLDI1NV0sWzY0LDY0LDEzMTE5LDEsMCwwLDE0LDE0LDE2LDE2LDMxMTgwLDgsMTM5OTksMSwwLDAsMTQsMTQsMzIsMzIsNDI5MjUsOCwzMDA3OSwxLDE2LDE2LDE0LDE0LDMyLDMyLDQyOTI0LDgsMzAwNzksNiwwLDE1LCJ5Il0sWzY0LDY0LDE1LDYsMCwzNTA3MSwieDEyLy15MTIvLTpkO2Q7YVAvMSsyLzs6ZCo6ZCorcXE0ODIqVzEyLysiXSxbNjQsNjQsMTMxMTksNiwwLDY1NTM1LCJ5eC8xPHghLX4iXSxbNjQsNjQsMTMxMTksNiwxNSwzNDA2MywieDgqeTgqcDErMi94Mip5MipwK3gyOCoqeTI4KipwNC8rNDkvPjU5Lzw3KjMtIiwxLDEsMSwzMCwzMCwzMiwzMiw2NTUyNyw2LDIxMzUwXSxbNjQsNjQsMTMxMTksNiwxNSw2NTUzNSwieDF4LSo1KmR4NCoqeTMqcCt5IS0iLDgsIngheSp4ISshZSIsMjU1XSxbNjQsNjQsMTMxMTksMSwwLDAsMTQsMTQsMTYsMTYsMzExODAsOCwxMzk5OSwxLDAsMCwxNCwxNCwzMiwzMiw0MjkyNSw4LDMwMDc5LDEsMTYsMTYsMTQsMTQsMzIsMzIsNDI5MjQsOCwzMDA3OSw2LDAsMTUsInkiLDUsOCw3LDAsLTAuMiwwLDEsMSwxNSwzXSxbMTcsNjQsMTMxMTksNCwyLDAsMCw2NCw2NCwxNV0sWzY0LDY0LDEzMTE5LDQsMiwwLDAsNjQsNjQsMTUsNSwxMCw0OSw1LC0wLjgsMC40LDAuOCwwLjgsMTUsMCw1LDEwLDY1LDAsLTEsMSwwLDAsMTUsMCw1LDEwLDAsNDgsMSwxLDAsMCwxNSwwXSxbNjQsNjQsMTMxMTksNCw3LDAsMCw2NCw2NCwxNSw1LDMsMCwwLDAsMCwxLDEsMTUsNF0sWzEyOCwxMjgsMTMxMTksNiwxNSw2NTUzNSwieDEyLy15MTIvLWFQLzErMi94MTIvLWQqeTEyLy1kKitxODgqODIqVzE0LysxMi94LWQqMTIveS1kKishM15lKmV+cWUiLDgsIng4Xnh5LWQ/Kn4rIiwyNTVdXQ== https://fingswotidun.com/ttt/#W1s2NCw2NCwxMzExOV0sWzY0LDY0LD...
- EGreg 2y agoReminds me of my submission to Allegro SizeHack 25 years ago, in 2000: https://www.oocities.org/trentgamblin/sizehack/entries.html#HackMan https://www.oocities.org/trentgamblin/sizehack/entries.html#... I made a PacMan-like game in under 10KB... it was called HackMan :) But I am most proud of the storyline that came with it!
- kuberwastaken 2y agoThat is SO cool!
- sangeeth96 2y agoTIL DecompressionStream, thanks. I managed to shave some more bytes by trimming the HTML bits, raised a PR in case you're interested.
- kuberwastaken 2y agoYOU'RE A LEGEND! I just managed to ADD (somewhat of) TOUCHSCREEN SUPPORT, better movement, enemy spawning and damage mechanisms in the space that freed up because of this! Genuinely, thank you, made my month :)
- sangeeth96 2y agoDamn, that’s awesome! Glad that was a help :D
- collingreen 2y agoOpen source victory right here
- kuberwastaken 2y agoAbsolutely!
- rezmason 2y agoKeep making cool things, kuberwastaken
- kuberwastaken 2y agoWill try my best! Thank you :)
- selfselfgo 2y ago[dead]
- bhavik_dand 2y agocrazy stuff!!
- kuberwastaken 2y agoThank you so much!
- kuberwastaken 2y agoUpdate: Managed to add kind of some mobile touch support (literally insane) because of a PR by @sangeeth96 on the repo
- smusamashah 2y agoPlease add a few screenshots to the repo. I am on phone and for whatever reason all I could see was 3 buttons and black screen. Edit: Add a gif instead, you won't have to rely on YouTube with that.
- kuberwastaken 2y agoAlright! First thing tomorrow :) Also pushed a commit to hopefully fix the blank screen issue for phones!
- xandrius 2y agoStill black screen on Firefox mobile.
- notnmeyer 2y agoios? same thing on safari, and probably every ios browser
- kuberwastaken 2y agoSorry, should be completely fixed now, with a neat little joystick (I presume you're speaking of the hosted verison)
- kuberwastaken 2y agoUpdate: Added a GIF!
- deleted 2y ago[deleted]
- metalman 2y agoI am now waiting for news that someone has bio hacked a cockroach or a fruitfly to play doom, if not autonomously then for the full cold shivers, they are now robotisising insects, which could then be accesed through an interface to play doom on a toothbrush booted from a qr code. Sci-fi is lagging
- kuberwastaken 2y agoOne day indeed
- Bengalilol 2y agoGreat crazy thing! I am waiting for the addition of "self contained QR code" to canitrundoom (although I don't know if it can be technically approved). Yet... that game will now make me think twice before scanning any QR ^^
- kuberwastaken 2y agoHaha fingers crossed but hopefully we do make it there. And yup! It's pretty insane how much you can do with QR codes, wrote about it here if you're interested in reading more :P https://kuberwastaken.github.io/blog/Technology/QR-Codes-and-Malware---The-Hidden-Dangers-in-2025 https://kuberwastaken.github.io/blog/Technology/QR-Codes-and...
- Mainan_Tagonist 2y agoAfter several tries, i managed to play it, sort of, on Brave on my Samsung S9. Very impressive compression trick, as a proof of concept, it is worthy of praise, congrats. I imagine this approach could be used for much more practical uses.
- dylan604 2y agoOr much more malevolent as well. Just because something novel and fun/entertaining can be done does not mean assholes will not use the same techniques for their gain. PoCs like this are neat and definitely shows some skillz by the author, but now I'm hoping security types take a look at this to see how vulnerable this could be from asshats.
- autoexec 2y agoIt's already a good practice not to go around scanning random QR codes. Nobody has to go through the trouble of compressing a bunch of code to run in your browser when you can just make a QR code point to any malicious domain on the internet and infect devices all day long.
- kuberwastaken 2y agoThank you so much haha and yes! It indeed can, I always also like the idea of having QR code game cartridges of sorts haha (PS I updated the hosted version again and it's much better for mobile controls, try it out if you get the time!)
- Mainan_Tagonist 2y agoI was thinking yesterday whether it would have a potential application in the field of low resources communication : you produce a QR code containing your info that you transmit over SSTV so the other party can get the message. Supposedly much more efficient than FT8 or JS8Call.
- kuberwastaken 2y ago
- askvictor 2y agoFirefox mobile on Android gives "Cannot complete request; Additional information about this problem or error is currently unavailable" :(
- kuberwastaken 2y agoInteresting, perhaps try a different browser?
- Barrin92 2y agoLove these minimal game projects. Reminds me of .kkrieger https://en.wikipedia.org/wiki/.kkrieger https://en.wikipedia.org/wiki/.kkrieger
- kuberwastaken 2y agoYess!! Someone told me about it when I posted it on LinkedIn, so cool!
- redbell 2y agoReally cool project! TIL about 'data:' URLs—while I was familiar with the 'data:' URI scheme and had used it before, I didn’t realize it could be used as a full URL. Funny enough, I had been thinking about building something similar that fits entirely within a QR code, but I held off because I mistakenly thought it would require an HTTP(s) link. I was heavily inspired by this work: Can you fit a whole game into a QR code?(https://www.youtube.com/watch?v=ExwqNreocpg https://www.youtube.com/watch?v=ExwqNreocpg)
- kuberwastaken 2y agoThank you for your kind words! I was also inspired by this video back in lockdown, I believe, super cool but I went the opposite route for browser based because of more compatibility. I have them credited in the repo as well :P
- frellus 2y agoThis stuff is starting to feel closer to Snow Crash than I'm comfortable with, when I saw that QR code I wondered if my brain was being altered :-D Amazing work.
- kuberwastaken 2y agoHahaha Thank you so much!
- bananaboy 2y agoVery cool! Minor nitpick though: DOOM didn’t use raycasting. This is really a Wolfenstein 3D-like, since Wolf3D did use ray casting.
- Narishma 2y agoGiven the lack of textured walls, it's more like a Hovertank 3D-like.
- bananaboy 2y agoAbsolutely! I figured people are more familiar with wolf3d though.
- kuberwastaken 2y agoI mean- I wanted textures but that's borderline impossible with the size
- Max-q 2y agoThis is the obligatory comment on every ray casting game calling itself Doom like. I was scrolling down the page, checking if I had to add it, but luckily it was already done :-D
- bananaboy 2y agoI have been doing the same since the 90s reading people on usenet calling DOOM raycasting hahaha
- kuberwastaken 2y agoI KNOW haha! I wanted to include the backrooms concept with the infinite map and such and Wolfenstein 3D seemed fitting for the theme haha
- alex_suzuki 2y agoVery cool! You‘ve definitely motivated me to continue my own experimentation in the realm of „what cool stuff can I put in a QR code“: https://strich.io/blog/posts/embedding-webassembly-in-qrcodes/ https://strich.io/blog/posts/embedding-webassembly-in-qrcode...
- kuberwastaken 2y agoAwesome!
- thund 2y agoNext project: LLM as a QR code Or, related: https://www.reddit.com/r/OpenAI/comments/138kbhs/someone_should_make_an_llm_or_software_for_an/?rdt=44343 https://www.reddit.com/r/OpenAI/comments/138kbhs/someone_sho...
- kuberwastaken 2y agoUpdate - Somewhat made this lol (not a LLM but a cool chatbot nonetheless) https://github.com/Kuberwastaken/MiniLMs/tree/main/SYNEVA https://github.com/Kuberwastaken/MiniLMs/tree/main/SYNEVA
- kuberwastaken 2y agoHonestly, I might try a version of it, thanks
- teleforce 2y agoIn the last Def Con 32 the badge can run full Doom on Pico 2 [1]. [1] Running Doom on the Raspberry Pi Pico 2: A Def Con 32 Badge Hack: https://shop.sb-components.co.uk/blogs/posts/running-doom-on-the-raspberry-pi-pico-2-a-def-con-32-badge-hack https://shop.sb-components.co.uk/blogs/posts/running-doom-on...
- kuberwastaken 2y agoYup, Raspberry Pi could always run it haha, good compute on it.
- curtisszmania 2y ago[dead]
- cosignal 2y agoPardon my dumb query, as I'm a tech novice, but aren't QR just encodings of data? And the max amount of data a QR can encode is like 3kb, which would roughly correspond to 3000 or so plaintext characters. So the achievement here is that this Doom-like game can be run from an executable roughly of that size?
- matheusmoreira 2y agoQR codes have various encoding modes: numeric, alphanumeric, 8 bit and kanji. The most common is alphanumeric encoding and the densest is 8 bit encoding which just stores binary data. The QR code standards seem to be a little ambiguous on the meaning and purpose of the 8 bit encoding. I got the impression they added it to support alternative character encodings. Still, it's a mode that "represents an 8-bit byte value directly". > The default interpretation for QR Code is ECI 000020 representing the JIS8 and Shift JIS character sets. > 8.3.4 8-bit Byte Mode > The 8-bit byte mode handles the 8-bit Latin/Kana character set in accordance with JIS X 0201 (character values 00HEX to FFHEX). > In this mode data is encoded at a density of 8 bits/character. > 8.4.4 8-bit Byte Mode > In this mode, one 8 bit codeword directly represents the JIS8 character value of the input data character as shown in Table 6, i.e. a density of 8 bits/character. > In ECIs other than the default ECI, it represents an 8-bit byte value directly. In any case, it is possible to use QR codes to store arbitrary binary data. The qrencode tool can do this natively. Decoder support is more tricky, they tend to assume all QR codes contain text. I had to send patches to zbar to help it decode QR codes with binary data in them because it was passing the data through iconv and mangling the output. I also had to add options to the zbar tools to make them decode exactly one QR code I just wanted to print out 4096 bit RSA secret keys as QR codes. People started QR encoding video games pretty soon after. It's awesome. https://youtu.be/ExwqNreocpg https://youtu.be/ExwqNreocpg https://news.ycombinator.com/item?id=24287347 https://news.ycombinator.com/item?id=24287347
- cosignal 2y agoInteresting, thanks for the reply!
- kazinator 2y agoIf that QR code itself appeared as a texture on a wall inside the game, I would shit my pants.
- badmonster 2y agocute
- kuberwastaken 2y agoVery!
- below43 2y agoThis is very cool. On a similar bent I built https://urlfile.app https://urlfile.app because I wanted to see if I could share files via a URL (and I also wanted to genrate QR codes via Edge so I could load the files onto my phome). It works for small files fairly well...
- kuberwastaken 2y agoThat's really cool
- eastoeast 2y agoThis is super cool. Recently, I tried making an offline, P2P chat program that fits inside of a QR code. In case network was down, the code could be scanned by mobile, allowing users to join a chat room. However this doesn’t seem possible at the moment, as 1. browsers don’t allow offline direct communication for safety reasons 2. couldn’t fit all needed data/prereq modules within the QR.
- redeyedtreefrog 2y agoPretty cool, though like others I had some slight technical issues. On Firefox mobile I got a black screen (that was yesterday, maybe it's been updated since then). Firefox desktop today it worked once I figured out that: a) the keyboard doesn't work until after I click to fire, and this state resets itself every time I press f5 to restart the game (presumably a browser focus issue) b) both up/down and w/s work for back and forward, but a and d don't work for left and right, you need to use the left/right arrows. The combination of the two had me scratching my head for a little while!
- kuberwastaken 2y agoHeyo! Thanks for checking it out! "On Firefox mobile I got a black screen" - Yup I broke it while trying to add mobile controls earlier, but it works well now! "the keyboard doesn't work until after I click to fire, and this state resets itself every time I press f5 to restart the game" yes- this is actually something for starting the game music and some other processes
- sebastiennight 2y agoTested it on an offline Android. I'm amazed that it works, although I could never figure out the controls so I always end up dead within a few seconds! You might want to explain those controls in the readme :)
- kuberwastaken 2y agoYes, it takes a while to get used to but it somewhat works lol I'll try to familiarize myself with it more and add it eventually!
- kamranjon 2y agoA friend and I were talking about a somewhat related idea. We were wondering if we could encode the STL for a 3d print entirely into a QR code and then put that on the actual printed object - so that any piece you made could be replicated by just scanning the object and printing again. When looking into it I thought it just was too much data, even looked into multi-colored QR codes. But I didn’t realize you could just make a bigger QR code…
- jkestner 2y agoDid this a while ago for a table as a design exploration. We encoded a 2D file (because the table only required cutting sheet materials) and still had to use a custom compression algorithm for the proof of concept. https://johnkestner.com/rev/ https://johnkestner.com/rev/
- wallivers 2y agoI really like this idea. You're a legend!
- kuberwastaken 2y agoHaha thank you! Really glad you liked it :)