Dark&Under - A Dungeon Crawler

Not by default.

It’s possible to compile in saving as a feature but it eats up 900+ bytes of progmem. (I.e. the functionality is there in the code, but it has to be conditionally enabled.)

For the regular campaign, to allow saving we’d have to remove at least one of the levels and split the levels across multiple hexes so people would have to re-flash their Arduboy to reach the next level.

1 Like

Thank you! I’ll do the long run then :smirk:

1 Like

Alternatively you can flash your bootloader with @Mr.Blinky’s custom bootloader and gain enough space to have all the features enabled plus include audio.

1 Like

The code would have to be modified to accomodate that, but it could indeed be done.


Although it might seem a tad harsh to not have saving on the main campaign, remember where D&U takes its origins from. It’s essentially a pseudo-3D roguelike, and roguelikes are known for their permadeaths.

Also remember, there’s no time limit - it’s all about strategy and tactics. Making note of the map with a pencil and paper (like they did in ye olden days) isn’t cheating - it’s being resourceful.

1 Like

It certainly can I added sound effects title audio and enabled everything. I found that after awhile the pitter patter of tiny footsteps drove me mad and gave up on it :joy: realising the extra space is best used for more levels and monsters and as usual far too many distractions to complete anything.

1 Like

apart from using my custom bootloader for another 1K extra space. You can also use my homemade board package to save more or less another 250 bytes using the included Arduboy optimized core

We’re already using a custom version of the Arduboy2 library so we’d have to check for overlap.

One other option is to eliminate the USB stack to allow saving. You would have to warn people about the extra inconvenience of needing to manually reset to upload a new sketch, and it would be good to add a menu to facilitate this.

You could have #define to do this. Without the define, the sketch would compile without the ability to save. With the define, you could save but there would be no USB code to handle automatic reset for a new upload.

Oh right then the savings will be a bit less. Just ran a test with the latest version on GitHub without any changes:

  • Standard Arduino IDE with Leonardo 26614 bytes
  • Homemade package Arduboy - Standard core - 26604 bytes
  • Homemade package Arduboy - Arduboy optimized core - 26398 bytes

With the Arduboy optimized core you also have the bootloader/reset button feature in case you decide to remove the USB code.

To be more specific; you get a feature that allows you to reset to the bootloader, using a button combo, while the sketch is running. Even with the standard Arduboy2 library you can reset to the bootloader, but only during power up, by holding the DOWN button.

Also (as is recommended), a sketch can include a menu or prompt to do the reset.

Normally I wouldn’t presume to know what @filmote’s response would be, but I think in this case I’m reasonably confident we’d both opt against removing the USB code and requiring a non-standard reset procedure.

Or at least the demand for another feature (like saving) would have to be sufficiently great, which I’m doubtful is currently the case.

In that case it might be worth looking into at some point.

Though we may have to consult @luxregina on that one, I vaguely remember him saying he preferred not having the save functionality for design reasons.


I’ve found that the game has the best balance and replay value with the extras disabled even now it’s a flip of a coin if I win.

I think I’ve said it before but I would prefer to see a manticore and a larger bestiary to play with in the level editor rather than more features.


I don’t want to go too far off topic, so last post on this…

The plan is to incorporate most of @Mr.Blinky’s changes into the Arduboy2 library and Arduboy boards package. I can’t give a specific date on when that will happen, though.

1 Like

All the good conversations happen when I am asleep … damn you the southern hemisphere.

As @Pharap suggested, I would be keen not to use a custom bootloader as I think this dissuades casual users from the game if they feel getting rid of it later might be difficult.

At some stage, we should look at upgrading the library to the new one. We made some mods to reduce the size of the ‘justPressed’ and ‘Pressed’ and possibly some others around text-wrapping.


Just small bug report:

DarkUnder_Battle.ino line 187:
uint8_t maxHP = enemies[attackingEnemyIdx].getAttackPower() - myHero.getDefence();
if (maxHP > 10) maxHP = 10;

This causes maxHP to be 10 if enemy attackPower is smaller than player defence (because negative number casted to unsigned is likely very large number (255) and then following clamping makes it 10).
I noticed it at the end of the first level when relatively weak creature did few 8HP hits.


I noticed this earlier, but I’ve been preoccupied today so I didn’t get chance to reply.

I think we noticed this once before but forgot about it.

I’ll add a fix for it, but while I’m at it I’m going to try to make a few more space savings since it seems a bit silly to just make one fix and not do anything else.


And thus it is fixed, v2.0.2 rises.

We’ve also got a PR pending to update it on @eried’s repo.
It’s been merged. Thanks @eried.

Not only will it update to the latest version, but we’ll finally be moving it from the Action category to the RPG category.

(The Action category thing was my fault. Back then I was worn down from both Dark & Under and the game jam so I made a small mistake and dumped everything in the wrong category.)


Going to finally try to beat this during my oil change tomorrow. Dragon better be ready.


Just wanted to say, tried the game to test it and I love it already! but I’m going to save it for the car journey i have this Saturday!


Thanks Liam. Hope it lives up to your expectations.

1 Like