gbadev
Game Boy Advance homebrew development forum
exelotlprofile picture

exelotl

Administrator
Last seen 2 days ago
Joined:
Posts:
45
Topics:
10

Hey everyone! I wrote a blog post about making a faithful Minesweeper clone for the GBA, which we snuck into Goodboy Galaxy as a fun minigame.

It goes pretty in-depth, you can read it here!
https://exelo.tl/poopsweeper.html

Thx and merry christmas!! <3

Screenshot of a Minesweeper game running in the Goodboy Galaxy pause menu.

It feels surreal to finally be writing this but... Goodboy Galaxy for the GBA released earlier this week!

It's an exploration platformer about a dog in space, which myself, Rik and so many friends & collaborators have been working on for the last 2.5 years (or 5 years if you include the demo!). We've poured absolutely everything into this project and we really hope you enjoy it after all this time! <3

You can buy the game digitally on itch.io: https://goodboygalaxy.itch.io/goodboy-galaxy-gba

Physical carts are currently in production, and can be preordered from First Press Games.

title screenshot of maxwell looking into the sky gameplay footage gif screenshot of maxwell standing in a cave, pointing his gun at a glass orb FMV screenshot of three bears with a large machine crawling over the horizon

The game was made in the Nim programming language and uses the following libraries:

  • Natu (in development) - Nim GBA programming toolkit
  • libtonc - text rendering and many other utilities
  • maxmod - music / sound engine
  • libugba - interrupt handler
  • ACSL - heap allocator / C stdlib replacement
  • posprintf - string formatting
  • Cult-of-GBA BIOS - RLE Decompression for video cutscenes
  • agbabi - memcpy/set + coroutines
  • nimcoro - high-level coroutine wrapper
  • gba-rumble - brrrrrrrrrrrrrrrrr
    Full game credits here.

We're currently working on the native PC and Switch ports, which will be out next year, but I figured I'd post about the GBA release here for posterity. Lemme know if you have any questions!

pmprog wrote:

I'm gutted I didn't get chance to finish mine, but great news on having 30 microgames! I look forward to trying it out

Aw yeah I wasn't able to finish mine either, as coding the intro cutscene ate up all my remaining time. I'm unbelievably happy with the result though!

I noticed your alternate title screen made it in which is very neat, I think I prefer it over the original!

Submissions are now closed! Holy crap, we got almost 30 entries which is amazing! We're putting everything together and will aim to release in time for Halloween :D

Hey! I'd recommend to persevere with devkitARM as it's widely used and has up-to-date compilers with the latest fixes / optimisations / features.

After running arm-none-eabi-objcopy you need to run gbafix (which you should have under dkp/tools/bin/) on the .gba file. This will insert the Nintendo logo into the game's header and calculate the header checksum, allowing it to pass the logo check that a real GBA (and many emulators) will perform on boot.

We have now added a library of music jingles to the repo (thanks to Totsnuk for making so many)! Each jingle lasts for a number of beats (usually 16), and the tempo increases as the player completes more stages.

How to use the jingles:

To play a song and ensure your microgame last for the correct amount of time:

_total_frames = play_jingle(mj::game_jingle_type::SONG_NAME_HERE, completed_games, data);

There are plenty to choose from, we might add more later (and can take requests if you have something specific in mind for your game).

I would recommend to start with METRONOME_16BEAT so that you don't get sick of hearing the same song over and over during development :P

You can bring your own music too if you want! See below.

How to use your own music:

  • Save your song at 120bpm and ensure it doesn't last for more than 10 seconds (actual in-game tempo ranges from 138bpm to 222bpm, subject to change)
  • Use play_music() to play your song at the game's tempo
  • Use recommended_total_frames() to calculate how long your game should last, for example:
    const int base_seconds = 8;   // 16 beats at 120bpm
    const int base_frames = base_seconds * 60;
    _total_frames = recommended_total_frames(base_frames, completed_games, data);
    

Have fun!

Update! The repo has had some bugfixes & improvements (and will continue to do so) so make sure to update your project to the latest version every now and then!

Besides that, we've been planning how the music in the game will work. What we'll probably do is:

  • expose a play_music() method which you can call in your constructor, passing a song to (either a premade one, or one of your own)
  • this returns the recommended number of frames that your microgame should last for (based on the current tempo and the base length of the song)

More details to be confirmed soon, but this is just to say: if you want your game to fit in time with the music, you might want to think about making sure it can adapt to varying numbers of _total_frames!

(but if you want your game to have silence / ambience, or not follow the tempo, that's OK too, this is just a recommendation)

Update:
The jam is now over with 28 entries! You can play the final game containing them all here: https://gbadev.itch.io/gba-microjam-23

Hi everyone! We just launched the GBA Microjam '23!

For this jam, we're trying something different: everyone makes tiny 5-second games and then we combine them into one big WarioWare-like game at the end.

Submissions are open until the 29th October. Games should have a halloween theme and be made from the jam template (which uses C++ / Butano).

Check the jam page for more info: https://itch.io/jam/gba-microjam-23

Updates will be posted both here and on discord / irc, feel free to use these places to share your progress, ask questions, etc.

Hope you all have fun and I can't wait to see what everyone comes up with!!

Yep, I started redoing the chapter, a bit busy with other things now but should be able to get it done in the next week or so ^^

Hmm, I imagine your Makefile is fine and there's something wrong with the code itself.

Oh god, yeah, this tutorial was part of a course which expected students to use 'devkitAdvance', a toolchain which hasn't been updated since 2003.

It's possible that the code was never correct, but happened to work because the compiler optimisations weren't very good back then.