Game Boy QR-Paint
100% of donations go to support the itch.io platform. (details)
Overview
Draw on the Game Boy and share it direct to your phone using a QRCode! (without the internet!)
Features
- Share drawings as PNG images via QR Code
- Drawing tools: Pencil, Line, Eraser, Rectangle, Circle, Flood Fill
- Undo, Redo stack
- 3 Drawing Save slots
- Adjustable Draw Width
- Adjustable Draw speed (Fast, Medium, Slow, Pixel Step)
- 2 Draw colors (Black and White)
- SNES Mouse support through Super Game Boy (SGB)
- Inside Gadgets USB Mouse link adapter Support, supported on MiSTer (Game Boy)
- Game Boy Printer support
- Mega Duck Printer support
Usage
Button Controls:
D-Pad: Move cursor (Arrow keys)A: Draws with tool (Z key)B: (X key)- Short Press: Cancel tool action / Teleport cursor between menu and draw areas
- Hold Down: Move faster in draw area
- Short Press: Cancel tool action / Teleport cursor between menu and draw areas
SELECT + UP/DOWN: Adjust Cursor Speed (Select + Up / Down Arrow keys)SELECT + LEFT/RIGHT: Adjust Drawing Width (Select + Left / Right Arrow keys)SELECT + A/B: Step through Undo / Redo (Not working in web emu with keyboard for some reason, works with gamepad)START: Create QRCode (Enter Key)- Pressing Redo button (or hotkey) 20+ times in a row browses/recovers undo snapshots after a crash
The cursor movement has a small amount of inertia while in the drawing areas. It will apply as long as some button is being held down, and resets to zero when all buttons are released. This helps with drawing curves using a D-Pad, which otherwise tends toward right angles and diagonals.
Sending to Mobile Phone
Scanners
Known working QRCode scanners:
- Android Binary Eye
- Android Camera (in scan mode)
- Web: https://scanqr.org
Known not working scanners:
- "Camera" app on some Samsung phones
- Default "Camera" app on iOS
Browsers
Known working Browsers: (via "share-to" or pasting in the url, not via the browser's own scanner)
- Firefox/Fennec Web Browser (Android mobile, Linux desktop)
- Chromium (Linux desktop)
Known not working Browsers:
- Chromium/Chrome (Android)
SGB + SNES Mouse
Super Nintendo Mouse support through the SGB is based on a modified version of vinheim3's demo. Thanks for sharing your cool idea and how do it!
- The OEM SNES mouse works well at the qr-paint "medium" speed.
- The Hyperkin SNES mouse works better at qr-paint "slow" setting.
For emulators, it's verified as working in Mesen. The SNES mouse should be second controller, it may be a little fast.
USB Mouse
USB Mouse support is available when using the Inside Gadgets USB Keyboard link adapter with modified firmware that adds mouse support. The MiSTer Game Boy core can optionally emulate this link port accessory, including the mouse support.
Mega Duck
QR-Paint can only be used on the Mega Duck when Cart SRAM is available. This is possible when using:
- A laptop with the add-on Memory Cart in the secondary cart slot (use duck.md2 build)
- A GB->Duck cart slot adapter and an MBC5 cart (use duck.mbc5 build)
- A cart with built-in SRAM (the ManCloud flash cart) (use duck.md2 build)
To run in an emulator, use:
superjunior_sameduck --duck-printer-1pass --duck-sram-cart qr_paint.duck.md2This requiresSuperJuniorSameDuck v1.0.1:- https://github.com/bbbbbr/SuperJuniorSameDuck/releases/tag/Duck_v1.0.1
Technical details
The drawing is limited to 96x96 monochrome pixels due to QRCode size limits and the current lack of PNG DEFLATE compression.
The process is:
- Convert: GB Drawing -> Indexed PNG -> Base64 Encode -> mime url -> QRCode
- Share to phone: QRCode -> Scanner app -> Share to Web Browser
The Emulator .sav files are PNGs!
The .sav files generated by emulators for this ROM can be opened in many paint programs since the first cart SRAM bank contains an indexed PNG of the last drawing image that was exported as a QRCode.
Source Code and Tools Used
Open source on Github: https://github.com/bbbbbr/gameboy_qr_paint/
- GBDK-2020 (4.5.0+)
- Emulicious
- ImHex
- pngcheck
- The QRCode generator is an optimized fork of msx_qrcode: https://github.com/MartinezTorres/msx_qrcode/tree/master
Which in turn is a fork of Nayuki's QR Code: https://github.com/nayuki/QR-Code-generator
Changelog
Version 0.95
- Added Mouse support with Inside Gadgets USB to link adapter (Game Boy, can emulated on MiSTer)
Version 0.94
- Added spray tool
Version 0.93
- Added selectable fill style for rect and circle
Version 0.92
- Added SGB Mouse support
- Added SGB border
- Added MegaDuck support
100% of donations go to support the itch.io platform. (details)
| Status | In development |
| Platforms | HTML5 |
| Rating | Rated 5.0 out of 5 stars (10 total ratings) |
| Author | bbbbbr |
| Genre | Educational |
| Tags | 1-bit, analogue-pocket, Drawing, Game Boy, Game Boy ROM, gbdk, Painting, Pixel Art, qrcode |
| Code license | MIT License |
| Average session | A few minutes |
| Content | No generative AI was used |
Download
Click download now to get access to the following files:







Comments
Log in with itch.io to leave a comment.
would love a smaller canvas size (8x8, 16x16, 32x32, 64,64) and 4 shades :) kudos to what you've done so far. gonna love carrying this around in my pocket for some quick pixel art :D
Noted! Not sure what changes are next for QR-Paint, but I’ll keep this in mind. Checked my calculations and 64x64 @ 4 shades would fit into the QR-Code data size.
I drew a rude body part so I won't share the picture, but this was a lot of fun to mess around with haha. Nicely done.
Tried testing the printing function and despite it saying ‘printing done’ nothing happened. If I unplug the printer, it will say ‘printer not found’. The ‘printing done’ message shows up rather fast as well.
Looking it over, I’m assuming the failure is because it’s reading from vram instead of ram.
https://github.com/bbbbbr/gameboy_qr_paint/pull/1
made some fixes to get it working! (I did not look into the initial issue of make a small, thick circle) this fix is only for using the printer!
Thanks, should be fixed in the next release. I thought I’d guarded against all the cases where that would happen but I found a spot I missed.
Yesssss!! Very happy for Wink to make an appearance. :) :)
This is impressive. I'd watch a video on how it works behind the scenes
EDIT: The fill tool is VERY impressive
Thanks! The flood fill is an implementation of the “span filling” algorithm described in the wikipedia link below. I made a naive flood fill first that used more memory and was noticeably slower, but this one runs pretty well.
It’s kind of fun just to make spirals/mazes and then watch it flood fill them. :)
https://en.wikipedia.org/wiki/Flood_fill#Span_filling
Most of the drawing tools are built on top of the GBDK drawing.h api, which saved a lot of time vs writing them all entirely from scratch.
this is such a cool idea!!! a little qr code drawing 🦆
Thank you for sharing your drawing! Fun that you used the QR format. :)