My effort to make a homebrew port of Derek Yu’s Spelunky Classic for the Nintendo DS.


40946750_1920217634700999_4969726535310245888_n (1)

Technologies used:

C++, libnds (as included with excellent devkitPro’s toolchain).
Game assets shipped by the SpelunkyCommunityUpdateProject.


It was my first C++ project of such scale. At the point I started writing Spelunky-DS (the beginning of 2018) I was working my very first job which was a Junior Java Developer at a local startup.
The original game was written in a tool called Game Maker, so I could not re-use anything but the textures, sounds and fonts. Code had to be re-written from scratch.
I knew little of the language, let alone the technologies involved – so far I did solve a few silly algorithmic challenges where the language of my choice was indeed C++, wrote a Flappy bird clone in Allegro framework, but that was it.
Build systems? Game progamming patterns? Cross-platform development? Platform abstraction? Forget about it.
Only later in 2020 when I re-launched my port of Spelunky Classic as Spelunky-PSP, written yet again from the ground, using OpenGL as a rendering API, CMake as a build system and SDL as a platform abstraction, I could say – this is satisfying, this is how this should have been in the beginning. Spelunky-PSP can be compiled for the PSP/Windows/Linux and so far it proved to be working even on Raspberry PI 3 and Orange PI One.
This time my port would not support NintendoDS, as I decided to use only broadly adopted rendering API, with little-to-zero platform specific libraries, to make my project truly cross-platfom.

But getting back to Spelunky-DS.
Programming it was a great experience, as it boosted the learning process for C++ and the computer science in general. I learned about NDS internals, direct-memory-access, object-attribute-memory, compiling assets into the executable, found out about CMake, familiarized with the tools (CLion to this day stays as my favorite IDE).
Including the project to my portfolio helped my chances when I later applied to be a Junior C++ Developer in another company.

In the same time, while learning new things, the heap of technical debt made only because of my sheer arrogance was constantly growing, and even though I now know much more I can’t amend the architectural nightmares I did in the beginning (thus, re-booting the port with Spelunky-PSP).

Today, Spelunky-DS is discontinued, with only the cave level implemented out of 4 different levels in the original game, but in any other aspect, completely working and playable.