Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines
(+2)

Hey! my name is Andy.

I'm a homebrew enthusiast, and I've been making some various stuff for the NES and Game Boy Color. I've also been working on tools and tutorials with the goal helping improve the process of developing for older consoles. In particular, I've been working on a music making program for the Game Boy called Bleep, which is a piano-roll style interface for composing chipmusic. I'm also writing a high-level assembly language compiler for homebrew, graphical conversion tools, and making a small book that intends to explain writing assembly for the Game Boy part-by-part. Mostly all of this is a hobby effort, I'd love to one day make a small game cartridge though. :>

Aside from the homebrew stuff, I also occasionally work on small desktop games, usually with something involving Lua, Python, or C++ in some capacity. I also like drawing cute things and pixel art. Let's be friends!

Oh wow, that sounds really cool. I've heard of lots of people composing on the Game Boy. What's it like? Was it hard to get started?

(1 edit) (+1)

Composing for the Game Boy is pretty tricky, but a few tools exist if you're into tracking software:

  • http://www.littlesounddj.com/lsd/ - LSDJ is a really popular music editor tool that's distributed as a .gb rom file, you can run it in an emulator or directly on hardware with a flash cart. Plenty of people use this to compose Game Boy songs and record stuff directly from the GB hardware. It's got a fairly steep learning curve, especially if you're not familiar with tracker interfaces, and partially because it tries to squeeze a lot of stuff into only a few buttons, but it's probably the popular option around for "authentic" Game Boy music. There's a lot of tutorials out there, and a fairly big community who use it.
  • http://jiggawatt.org/muzak/xpmck/ - XMPCK lets you compile MML files to play music on the GB, as well a bunch of other platforms like the Game Gear, Sega Master System, MSX, Turbografx16, NES, and so on.
  • https://rv6502.ca/wiki/index.php?title=Game_Boy_Tracker - Game Boy Tracker (also Paragon5 / Beyond) is a music tracker that was used by a lot of companies and used to be commercial. Haven't really tried it, but I guess Wayforward used this for Shantae on the GBC. I've heard mixed things from composer friends.
  • http://famitracker.com/ - Not Game Boy, but FamiTracker can be used to create NES/Famicom music. It's a very popular method for composing chipmusic, and it lets you make NES sound files (NSF) on Windows. The NES has some similarities to the GB, but isn't quite the same. In particular, the NES has 5 channels (pulse / pulse2 / triangle / noise / dpcm), whereas the GB has 4 channels (pulse / pulse 2 / 32-sample 4-bit wave / noise), and the GB has to rely heavily on hardware volume envelopes that are either a linear attack/decay. Also the NES DPCM and GB wave channel behave quite differently, and the quality (heh) of sampled sounds you can do on the NES aren't really possible on the GB.

As for writing my own tool Bleep, it's been pretty challenging. It's going to be something you can run directly on the GB, like LSDJ, but with more emphasis on better usability by newcomers, and I have plans to make it open-source when it's done. The interface side of things is probably the hardest aspect, since I want it to be both beginner-friendly and power-user friendly. Because Bleep runs on the GB hardware, maintaining the limited update and rendering time to do stuff plus all the graphical memory limitations make it tricky to present stuff in a way that's both usable and easy to calculate and display. and I've been learning a lot about how other music trackers work along the way. Assembly isn't easy to debug, but thankfully this isn't my first project. And there is really only one or two reliable references on the Game Boy hardware (The Pan Docs, and the Nintendo Game Boy Programming Manual which isn't really public). Also, BGB has been a lot of help with its breakpoints/exceptions on reading uninitialized memory / accessing stuff outside of vblank / etc. I don't really have much in the way of a devlog right now, just occasionally talk about it on Twitter (@eggboycolor), but might try doing something here if I can get back in the swing of stuff!

Wow, that sounds really complicated, haha. Certainly not for everyone! Thanks for taking the time to explain it. :3