I finally figured out how to get the mGBA debug server working:
- Build your GBA ROM.
- Open the ROM with mGBA.
- Open the mGBA debug server UI (in macOS, open Tools -> Start GDB server…).
- Using the default options (port 2345 and address 0.0.0.0), hit “Start”.
- Open up a terminal and run
/opt/devkitpro/devkitARM/bin/arm-none-eabi-gdbto start GDB.
- In GDB, enter
target remote localhost:2345to connect to mGBA.
file <path_to_elf>, replacing
<path_to_elf>with the full path to the
.elffile that should have been created alongside your ROM.
- When asked if you want to change the file, enter
yand hit Return.
Now you should be connected to mGBA, with symbols loaded, ready to start debugging.
PypeBros kindly created a title screen for Professor Sinister, so here’s a new release:
In addition to the title screen, this latest version includes some bugfixes, tweaks to the music and improved audio quality.
Get in touch if you have a way of getting the ROM onto one of those cheap reproduction carts that folks sell on Etsy. I’d love to have a physical copy of this on a dedicated cart.
On the subject of XM music modules, here’s the Professor Sinister mod:
This has all of the different tracks embedded in it in different blocks. The song index is:
- 00: Empty block (songs that don’t loop jump here when they end)
- 01: Climb Time (in-game music);
- 0B: Pause jingle;
- 0C: Oh Well (game over music);
- 14: Something Sinister (title music);
- 27: Ooops (lost a life music).
You’ll need something like MilkyTracker to play it.
I’ve decided to scale back Professor Sinister in order to move on to other projects. Things that didn’t make the cut:
- High score table;
- New level designs;
- New sound samples;
- Attract mode.
With the exception of new level designs, these are all minor features that aren’t important. New level designs would have been great, but I found that larger levels had the effect of overly-emphasizing the simplicity of the game. The larger the levels, the “thinner” the game feels. Redesigning levels within the existing size constraints isn’t interesting, so I’m keeping the original designs.
The last thing to do is the bitmap for the title screen. I have no idea when I’ll get around to that.
Here’s an almost-final version:
I had to check that the game wasn’t completely invisible on an original, unlit GBA-001. Here it is:
It’s no worse than any other game on the system. Thanks to the GBA-001’s horrible screen that’s the best picture I could get.
Here’s a screenshot:
In an effort to make the title music less repetitive I’ve been working on an updated version:
It has an additional section, but I’m worried that it’s now too varied. Still, this is the version I’m planning on using.
Here’s the last Professor Sinister track:
This is the title screen music.
I’d planned to put up a post with piano demo tracks of all three chiptunes, but unfortunately all but one have conversations over the top. Here’s that one, anyway:
This was the last 10 seconds of almost 3 minutes worth of piano doodling. I’d got an idea of what the tune should sound like, solidified the ideas on the piano, wrote it up in MilkyTracker, and found that I hated it. The final chiptune came almost entirely from this little snippet of music that was a throwaway accident at the end of the demo recording.
“Oh Well” and “Climb Time” both came from noodling on the piano, which I find is a much more efficient way of discovering melodic ideas than trying to come up with something directly in a tracker. “Something Sinister” on the other hand was entirely written in a tracker, except for the basic 4 chord progression that it uses. That came from another piano noodling session.
There are a few obvious changes in this build and some behind-the-scenes fixes.
There are now graphics for the duck. I went through a number of different ideas for what the duck should look like:
- A Sinistar-style skull (full face view);
- A Terminator-style skull (2/3 view);
- A demonic face;
- A modified version of the existing robots (a different color with flames coming from beneath it);
- A robot bird/pterodactyl;
- An Impossible Mission-style sphere.
I think the Terminator-style skull would have been the best option, but I couldn’t get it looking anywhere near right. The design had to be limited to what I could actually draw, which turned out to be a pulsating eyeball. It has nothing to do with the “marauding mechanicals” theme but it looks neat, so pulsating eyeball it is.
In order to change the shape of the duck I had to change how the library determined if there were collisions between Harry and other game objects. Specifically, I had to move the collision test code out of the library entirely and add a callback to the game’s delegate so that the user of the library could create its own collision test based on the shape of the sprite bitmaps. I tightened up the collisions at the same time.
On the subject of the duck, I rewrote its movement again. Now it’s pretty close to the original Chuckie Egg.
The sprites now appear behind the score indicators at the top of the screen thanks to the GBA’s ability to interleave sprites and tiled backgrounds.
The scrolling system used to support arbitrarily-large levels is now a separate class. I ripped most of the code out of the text scroller and replaced it with the new scroller class.
The ROM is 70K smaller. Most of the savings came from removing unused sounds or converting stereo sounds to mono.
Lastly, the high score music is in the game. It’s in the wrong place, however, as there’s no high score screen yet.
The todo list is getting shorter:
- New sound samples.
- New death music.
- New level designs.
- High score screen.
- Title screen bitmap.
- Title screen music.
Two of the three music tracks necessary for Professor Sinister are ready to go. Here are the completed tracks:
“Climb Time” is the in-game tune. “Oh Well” is the game over/high score tune. Both tracks are chiptunes. They’re embedded in the same XM and share instruments. Both also sound significantly less crisp on the GBA’s anemic speaker and crummy sound hardware.
I have a name for the title music, which is the last outstanding track: “Something Sinister”. I don’t have a tune yet though.
I’m thinking of adding a “disable music” option to the game.