BlindJump -- open source cross platform game, runs on Nintendo Gameboy Advance

screenshot

During the recent lockdowns, I worked on developing a simple action/adventure game for a gameboy advance handheld that I had lying around. The game is procedurally generated, and features a new boss and environment after every ten levels. I have a lot more work to do on the project before it's complete, but the first twenty levels or so are pretty well fleshed out.

The code is C++17, and the software is designed in a platform-neutral way, so that it can be easily ported to different hardware. Currently, the code compiles for GameboyAdvance with the arm-none-eabi toolchain, and uses the master interrupt handler from devkit pro. The code also compiles on mac, via clang, and uses the sfml library for graphics (although the mac version is currently missing a few features).

Anyway, I thought that I'd post this, in case it would help other people to get started with development on the gameboy advance. Specifcally, the CMakeLists.txt file, and the code in source/platform/gba_platform.cpp, is where all of the stuff related to the gameboy advance hardware is located.

See here for the source code: https://github.com/evanbowman/blind-jump-portable

EDIT: Gameboy controls: D-pad: walk Press A: shoot Hold A: shoot repeatedly while strafing B: interact/snap camera to player R: items Start: pause/save options

GBA roms are available in the repository's releases section: https://github.com/evanbowman/blind-jump-portable/releases

P.S.: I had trouble finding documentation for accessing the flash storage chip on GBA cartridges, so the save/load flash interface code is partly reverse-engineered from a disassembly of pokemen firered. If anyone knows specific details how the flash chip works and has suggestions for how to correctly do wear-leveling in software, let me know!