In just five short months, thirty five-year-old Canadian game developer Mico27 went from curiously opening GB Studio for the first time, to creating one of the best tech demos for the software and showcasing what is possible in the app!
Super Mario Bros Mini is an incredible recreation of the original NES classic Super Mario Bros – fully playable on original hardware and 100% developed within GB Studio. Originally developed to showcase Mico27’s new “Dynamic Metatiles” plugin that he had built – he created a demo level of the original Super Mario Bros, but then decided to build out remaining levels, and then expand on this with eight new custom worlds, new bosses inspired by Super Mario Land, and even (spoiler alert!) a rideable Yoshi!
I was able to speak with Mico27 to gain more insight into just how he was able to build such an accurate and feature-rich Mario platformer with GB Studio, the struggles and successes he had working within GB Studio’s limitations, and what his next plans are, now that the project is completed.
Did you only start learning GB Studio five months ago? What previous knowledge in programming did you have before that?
Yes, I learned about the existence of GB Studio after watching a stream of Vinny Vinesauce on Twitch about five months ago. It got me curious about it so I downloaded it and started fiddling with it. I do have some previous knowledge of programming, I made mods for games before like This Risk of Rain 2 mod and this Civilization VI mod but never made a game from scratch before so that was a first for me.
What first drew you to use GB Studio over other developing environments?
At first it seemed simple to use as a starting tool to learn the workings of making a Gameboy game.
At what point did you decide to make a Super Mario Bros remake? Was this your first game you built in GB Studio?
During the first month or so I spent the time learning the app and prototyping random stuff. Although it felt a bit limited at first with only the scripting, I ended up going deeper by doing GBVM, plugins, engine edits, reading the engine code and seeing what does what, reading Gameboy pandocs, GBDK’s API, etc.
I came up with the idea of making a Super Mario Bros game to showcase a plugin that I made that allows dynamic tilemaps in GB Studio. At first it was meant to just be a small project with only one level, but I ended up doing the whole game and even more instead!
What made you decide to go with the smaller “mini” block size, rather than existing examples of one-to-one pixels and scrolling the viewport window – like Super Mario Bros DX (Gameboy Color)?
I was never really a fan of the crunched/claustrophobic view that Super Mario Bros DX went for by reusing the assets of the NES game one-to-one. So I went for the Super Mario Land 1 approach and scaled down everything while keeping the Super Mario Bros aesthetic.
How did you come up with the great new level designs and themes? (Some of the ideas/design in them are great – I almost prefer the B Quest to the original game!)
At first I wanted to see how far I could go with the original tileset without the limitations that the original game had regarding map structure. The first world of B Quest was basically that.
When I got done with World 9, I realised it would be kind of boring to just stick with the existing themes and tileset. So I decided to go the Super Mario Land 1/Super Mario Bros 3 route and have themed worlds (desert, water etc), and add new colour palettes. Even expanding the tileset and later on have something unique about each world.
World 10 is desert, World 11 is water world, World 12 is an upward vertical scroller, World 13 is a sky world, World 14 is an underground world, World 15 is a construction site world, World 16 is a giant (normal sized haha!) world.
I also decided to have custom bosses and forwards in World 10to spice things up a bit too, referencing other Mario Gameboy games. Deviatinga bit more from the basic boss formula as the worlds go on.
Oh and I added a Yoshi powerup just because! Hint: you can find one hidden in the first level of each of the worlds in B Quest.
What was your favourite level to build and set up in the game?
I didn’t have much of a favourite level, but I did enjoy making the three last bosses a lot.
What was one thing that frustrated you about working within GB Studio?
GB Studio has a specific workflow to making games, so I had to accommodate it along with the Gameboy limitations. Since tile map generation is image-based in GB Studio, I couldn’t really replicate how Super Mario Bros map structure worked, so I had to find a workaround.
This is why Level 8-1 has a breakpoint in the middle – because the original map size exceeds what GB Studio allows for one scene.
Also since GB Studio loads actors for a scene in memory at scene initialisation, I had to pool the actors and add triggers along the levels at strategic points to respawn them further ahead of the players position.
What was the hardest thing to implement, and why? How did you finally achieve it?
I think the hardest was making the dynamic tile map plugin and optimising it.
What was the reasoning and process behind building all the custom plugins found within the game?
Well there’s a few of them.
Actor behaviour: Allows me to have actors/enemies behaviour/logic in engine code to be optimal (and have things like gravity and velocity, etc).
Submapping: Allows me to submap tilemap data to swap large chunks of tile data from other scenes (used for the donkey kong level and the final boss).
Dynamic tilemap: Allows to have a metatile simile in GB Studio and being able to load tilemap data to memory so that it can be read/modified/interacted with.
Platformer Plus (heavily edited): Contains pretty much all the platformer player logic.
Simulate input: Allows you to script inputs (used for the demo where mario randomly runs around on the title screen).
Alt Display text: Allows to write text to the tile map using tileset data instead of writing to the tileset like how GB Studio does by default when writing dialogue.
You mentioned Yoshi before. Nintendo couldn’t add Yoshi into the original Super Mario Bros due to technical limitations of the NES – were you happy you managed to add him in?
It wasn’t much since I implemented it as just another powerup and with a simplified behaviour (double jump and tongue attack). Trying to replicate the Super Mario World (SNES) behaviour would have required me to refactor too much code which is the reason it’s simplified.
I don’t know the exact reason why Nintendo didn’t implement it in Super Mario Bros, but my guess would be that they were much more limited on space and/or probably couldn’t implement it in the way they wanted.
Music was composed by Michirin – how did you find collaborating with another developer to help with the sounds of the game? Do you find music and SFX the hardest part of a game, and was that why you used an external developer to help?
It helped a lot since I have limited background in music and zero experience with making music/sounds for the Gameboy. I probably could have learned and done it myself, but that would probably take an extra month or two of learning and making it, and it probably wouldn’t have sounded as good as what Michirin made.
I did however end up making the Donkey Kong music myself as it was simple enough for me to do as well as the “hurry up” music and the sped up version of the music.
I see you didn’t have pre-coloured backgrounds in the project assets, how did you go about colourizing the project in GB Studio?
Using my dynamic tilemap plugin, all I needed to colour was the tileset so that when rendering the level it would use the colour of the tile in the tileset scene instead.
Did you take the most inspiration from the NES version, the GBC DX remake, or any other version?
I tried to make it closer to the NES version which is why there isn’t a menu, overworld map transition, collectables or extra game modes like the Gameboy Color deluxe version.
Why did you decide to open source the entire project, and give other developers full access to the project files, custom plugins, and all your events and logic used?
I don’t see why I wouldn’t, I always shared the source code of whatever I was making as a hobby. Plus I made this game especially so that I could show how the plugins I made work.
It’s quickly become an excellent technical demo for what is possible within GB Studio. How have you felt about all the attention and feedback you have received so far?
I wasn’t expecting it to get as much attention as it did since it’s just a remake of Super Mario Bros – probably a game that has had the most ports and remakes ever. But I am glad that people are enjoying it, especially the extra content.
For anyone just starting with GB Studio, what would be your best bit of advice to them?
For beginners I’d suggest starting with poking around, prototyping and doing small games. You might find yourself limited on what you can make with the base scripting but I think you can still make pretty good stuff with it. And if you want more control, optimisation or more advanced stuff, GB Studio allows you to go deeper with coding.
Have you thought of turning this project into a learning resource and teaching others how you built the game?
I’m not very good at teaching stuff, so I hope the source code is enough for people to learn from.
What’s your next game you want to work on? Any chance of Super Mario Bros 3?!
I was thinking of working on a version of the dynamic tilemap plugin that can be used in GB Studio’s “colour only mode” and be able to have the whole map saved in memory so that you can backtrack in the level while keeping the tile changes.
I was thinking of maybe making a Zelda-like game instead, but seeing someone on the GB Studio Discord (user: WinglessPenny64) working on a “mini” Super Mario Bros 3 tileset made me want to maybe make a Mini Super Mario Bros 3 instead? But for now I’m taking a little break so that I don’t burn out on this.
You can find Mico27’s Super Mario Bros Mini project on GitHub, where he’s open sourced the entire GB Studio project files, assets and game data. Along with a compiled .gb ROM file for use on real Gameboy hardware and compatible emulators. The ROM is designed to be played on a Gameboy Color due to the available colour palettes used in the game and reliance on the faster CPU speed, but it can also be played on an original DMG – albeit with some noticeable slow down and quirky grayscale artwork. There’s also a .pocket file for anyone wanting to play it on an Analogue Pocket.
You can also find Mico27 on the GB Studio Discord, where there is currently a dedicated SMB Mini thread where he is continuing to patch and update the game with fixes and tweaks. Along with other users helping to give online scoreboards and further improvements.
A.k.a. ChunkySteveo – A retro Nintendo enthusiast, Gameboy fan and GB homebrew developer. Lover of all things tech, code and science. Proud husband and father to four! (he/him)