gbadev
Game Boy Advance homebrew development forum
exelotlprofile picture

exelotl

Administrator
Last seen 7 hours ago
Joined:
Posts:
48
Topics:
10

The jam logo and other assets are now available at this repository in case you want to include them in your game (e.g. as a splash screen or similar)!

GBA Jam 2024 logo variant 2, at GBA resolution on a transparent background

Hey welcome! Guess this is the official jam topic now!

I'll aim to enter something but I haven't decided exactly what yet... maybe a rhythm game or a tech demo I had in mind for a while x)

Hey welcome, glad to have you onboard!

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)