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
  • 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:

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:

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/

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)

StatusIn development
PlatformsHTML5
Rating
Rated 5.0 out of 5 stars
(10 total ratings)
Authorbbbbbr
GenreEducational
Tags1-bit, analogue-pocket, Drawing, Game Boy, Game Boy ROM, gbdk, Painting, Pixel Art, qrcode
Code licenseMIT License
Average sessionA few minutes
ContentNo generative AI was used

Download

Download NowName your own price

Click download now to get access to the following files:

0.9.6_qr_paint_analogue_pocket.zip 96 kB
0.9.6_qr_paint_gameboy.zip 96 kB
0.9.6_qr_paint_gameboy_usb_mouse.zip 96 kB
0.9.6_qr_paint_megaduck.zip 186 kB

Development log

Comments

Log in with itch.io to leave a comment.

(+2)

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.

(+2)

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.

First of all, this is absolutely brilliant. Seriously, great work! I found an instance where the game freaks out and crashes. Set the cursor to the circle creator. Also make sure the line thickness is on the thickest setting. Click ‘a’ anywhere in the canvas to start the creation of a circle, press ‘up’ once to increase the size of the circle, and then press ‘a’ again to confirm the size of the circle and create it. The game creates some crazy pattern and then crashes. Making a small circle like this with the other two thickness works fine. I’m sure this is just an extreme case. Everything else has worked perfect. Once again, I absolutely love this project.

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!

Deleted 73 days ago
(+1)

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.

(+3)

Here's the picture I made in a few minutes 

(+1)

Yesssss!! Very happy for Wink to make an appearance. :) :)

(1 edit) (+1)

This is impressive. I'd watch a video on how it works behind the scenes
EDIT: The fill tool is VERY impressive

(1 edit) (+1)

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.

(+1)

this is such a cool idea!!! a little qr code drawing 🦆

Thank you for sharing your drawing! Fun that you used the QR format. :)