Circuit Dude - 3.2 UPDATE! (75 Levels + Level Editor + Sharing Tool!)


Circuit Dude - v 3.2


Help Circuit Dude build an awesome invention by leading him through 75 unique levels, completing circuits and plugging in microchips. After all chips are inserted into their sockets, the exit will activate and you can advance to the next puzzle! What kind of secret invention is Circuit Dude building? Complete all of the levels to find out!

image image

image image


D-Pad: Move Circuit Dude around
Hold A: Blow Circuit Dude up to restart the level
A + B: Return to stage select


Download .arduboy:
Download Sketch:
Download .hex:
Download Level Tool:
Circuit Dude is also available to download using the Arduboy Manager!

Other Systems

Circuit Dude is available for Nintendo Switch, iOS, Android, and PC/macOS!
There’s also a PC/macOS version on Steam! There’s also an iOS and Android version, too!



Follow me on Twitter for more updates and releases: @crait
Check out my site for my other stuff:


I’ve also created a program called the Circuit Dude Level Tool that allows people to transfer the levels from their Arduboy to their PC, edit them, save them, and then send them back. You can also upload the .DUDE files to the Arduboy forums in this thread to share them! Download it, here:



3.2 July 8, 2020

  • Fixed the progress memory location to no longer conflict with custom level 5! This makes older saves incompatible! Sorry! (Thanks, @Mr.Blinky)
  • Changed the sound to BeepPin2, which fixes the temperature gauge noise, but also may break compatibility with some DIY Arduboys. Sorry! (Thanks, @MLXXXp)

3.1 August 6, 2019

3.0 July 27, 2019

  • Re-wrote and refactored the entire game
  • Created a level editor for making custom levels
  • Added 25+ new levels
  • Added in teleportation pads, conveyor reversal buttons, and changed heatsinks to trap doors
  • Re-arranged the levels in order to match the full version more closely
  • Changed the aesthetic layout of many levels
  • Updated the in-game graphics to match the full version
  • Updated the logo, imagery, and branding to match the full version
  • Updated the level drawing to save some space
  • Changed memory location of the current level in EEPROM

2.1: February 26, 2017

  • Minimized boot code to acommedate for library change

2.0: January 9, 2017

  • Switched over to the Arduboy2 library! (Shout out to @MLXXXp!)
  • Busted out the audio to the Playtunes library
  • Added the ability to quit the level with A+B
  • Expanded the help section to include all of the tiles
  • Compressed most images to save some space (Shout out to @igvina!)
  • Sound on/off is now saved in the global EEPROM location
  • Updated some screens to include better graphics
  • Packed everything into a .arduboy package
  • Included the Screen Mirror feature

1.11: December 5, 2016

  • Level 6 and Level 14 were too hard! I moved them down past level 20.

1.0: November 17, 2016

  • Initial Release

Very cool game, I really like the graphics! One thing I think you should add are descriptions for the more advanced tiles in the help section.

1 Like

I am so limited on space for a description that I do not think I can really fit it in with only 200 bytes left. Maybe when I update to the new Arduboy library. :wink: Good feedback, though. Please let me know how far you get!!

Suicide with high temperature is funny! I love this one

1 Like

It took me about 5 minutes to switch it from the Arduboy library to the Arduboy2 and ArduboyTones libraries. This frees up another 1166 bytes of program space.

For anyone interested, here’s the unified diff:

--- ../CircuitDude_org/CircuitDude.ino	2016-11-18 10:17:57.689285448 -0500
+++ CircuitDude.ino	2016-11-18 10:28:07.070154311 -0500
@@ -22,10 +22,12 @@
 //	Align and clean up menu text
-#include <Arduboy.h>
+#include <Arduboy2.h>
+#include <ArduboyTones.h>
 #include <EEPROM.h>
-Arduboy arduboy;
+Arduboy2 arduboy;
+ArduboyTones tones(;
 #define OFF HIGH
 #define ON LOW
@@ -1641,9 +1643,9 @@
 #define NOISECPUOUT 140
 #define NOISECHIPOUT 475
-void sound(int pitch, long duration) {
+void sound(unsigned int pitch, unsigned int duration) {
 	if(soundon) {
-, duration);
+		tones.tone(pitch, duration);

By eliminating the compiler warnings, you can save another 64 bytes of program space

--- ../CircuitDude_org/CircuitDude.ino	2016-11-18 10:17:57.689285448 -0500
+++ CircuitDude.ino	2016-11-18 11:09:12.355362771 -0500
@@ -1671,7 +1673,7 @@
 		level = givenlevel;
 		canswitch = true;
 		deathcounter = 0;
-		for (int i = 0; i < sizeof(currentmap) / sizeof(currentmap[0]); i++) {
+		for (unsigned int i = 0; i < sizeof(currentmap) / sizeof(currentmap[0]); i++) {
 			currentmap[i] = pgm_read_byte(&levelmap[givenlevel][i]);
 			if(currentmap[i] == 51) {
 				playery = i / 14 * 8;
@@ -1786,7 +1788,7 @@
-void rotateinplace(char index) {
+void rotateinplace(unsigned char index) {
 	if(currentmap[index] == BRROT) {
 		currentmap[index] = BLROT;
 		sound(NOISEROTATE, 150);
@@ -1820,7 +1822,7 @@
 void swapall(char from, char to) {
-	for (int i = 0; i < sizeof(currentmap) / sizeof(currentmap[0]); i++) {
+	for (unsigned int i = 0; i < sizeof(currentmap) / sizeof(currentmap[0]); i++) {
 		if(currentmap[i] == from) {
 			currentmap[i] = to;
@@ -1829,7 +1831,7 @@
 void checkcompletion() {
 	boolean gotemcoach = true;
-	for (int i = 0; i < sizeof(currentmap) / sizeof(currentmap[0]); i++) {
+	for (unsigned int i = 0; i < sizeof(currentmap) / sizeof(currentmap[0]); i++) {
 		if(currentmap[i] == 37) {
 			gotemcoach = false;
@@ -2006,7 +2008,7 @@
 			arduboy.print((int)(level + 1));
 			if(transitionanimation == 0 && gamebuttonfree) {
-				char index = playerx / 8 + playery / 8 * 14;
+				unsigned char index = playerx / 8 + playery / 8 * 14;
 				if(gamebuttonfree && arduboy.pressed(UP_BUTTON) && checkcollision(playerx / 8, (playery - 8) / 8) && currentmap[index] != HTROT && currentmap[index] != TLROT && currentmap[index] != TRROT) {
 					playertoy -= 8;

Sweet just uploaded can’t wait to play it.

1 Like

Sweet game! Like a variation of Boulder Dash.

1 Like

This is a fun game, and I’ve been impressed with the subtly of some of the puzzles so far. Good job!

1 Like

Very cool game! Difficult and creative puzzles. I want to try to get through all the levels :slight_smile:


@crait This game is amazing! I’ve been playing it obsessively for two days. This is the best game for the platform (arduboy) so far :heart_eyes:

1 Like

Is level 6 solvable?

My girlfriend solved it :slight_smile:


incredibly fun game. I’m now stuck in level 14…:heart_eyes_cat:

Thank you all so much for your support and feedback! Glad you guys are enjoying the game!

Whoa. This is the biggest complement that I’ve ever gotten for a game I made. This really means a lot to me. :cry:

Haha. Yeah! :stuck_out_tongue: I was trying to think of a cheeky animation for restarting a level.

@MLXXXp, thanks! I have some more ways in mind to refactor the code, but doing that will definitely give me enough space to add some stage transitions and more animations.

Do it! There is an awesome twist at the end that you need to beat all the levels to see!

Haha! Yes, all the levels are solvable!

1 Like

It’s difficult to know for sure without trying it but compressing some of your bitmaps and then drawing them with the drawCompressed() function in the Arduboy2 library may reduce the code size. It depends on how much is saved by compressing the bitmaps and whether it offsets the amount of code added by using drawCompressed().

1 Like

I was checking the drawCompressed() function to try to understand the RLE encoding that it’s applied to the original bitmap. I think that some bits of the original encoded array can be removed, also a zig-zag image scanning could reduce the size of the encoded image with no performance penalty on the draw.
I will write a post on the forum after a better research about this issue.
I’m sure that @crait will save a lot of space with compressed bitmaps! :wink:

1 Like

It seems like a pretty good game.
But if I compile the sketch the size of the sketch is too big. I tried to compress the sketch with the ideas you had. But it is still to big.

The size of version 1.0 is 30.000 Bytes (104%) for me.

Any suggestions?

@BlurAurA Have you tried the newest version of Arduino IDE ? I’m using v1.6.12 which results 28470 bytes sketch size.

1 Like

Thank you! That solved the problem haha.

1 Like