Soup Raiders: Jailbreak – Post-Mortem of #GBJam 5 doing a real homebrew gameboy rom

soupraiders

Alexis and I participated last week at the GBJam 5. The goal was to create a gameboy-like game, with several rules (taken from https://itch.io/jam/gbjam-5):

  1. The aim of GBJam is to create a GameBoy themed game
  2. All assets must be created during the duration of the Jam
  3. Keep in the original GameBoy screen resolution of 160px x 144px
  4. Use only 4 colors in your game

After one week of hard work, we finally created Soup Raiders: Jailbreak, a simple platformer where you play as Black Whiskers, a pirate cat, who has to escape and save White Fur, who is waiting impatiently. Alexis did a nice cover:

boxart

We had the best score for the gameboy feel category, which is kind of logical, because nothing feels more like a gameboy game than a gameboy game.

I hesitated a long time before taking the decision to create a real gameboy rom. Why so? IT IS EXTREMELY harder than to create a custom PC game with the top limitations. You have way less tools at disposal.

Hopefully, several tools exist to ease up the process, compared to our elders who were programming directly in Assembly. GBDK allows modern developers to code in C ( a very limited C, but still C). Unfortunately, it also means that the code will be less optimised than by hand in Assembly. For the sprites, we used GBTD, that automatically convert sprites to the correct format for GBDK. For the music, I used a tool called mod2gbt and gbt-player, the GBDK legacy folder, that seemed to work fine. The only problem for our musician was that he had to use a tracker like OpenMPT, but could not manage to make it run on his Mac. Hopefully, we could manage to make a small soundtrack. For the sounds FX, I had to change the numbers in the register to control them which was a bit trial-and-error process. For big images, like the logo and the title screen, we used GBTK that convert BMP and PNG file to asm data that you could use directly in the source code.

Also, on the GameBoy hardware, you don’t have the multiplication, the division, and floating-point numbers. So, if you want to implement “physics”, you have to think with integers on one byte with values between 0 and 256. Try to implement a jump with that:

Actually, it was an easy problem compare to a lot of other issues. I had a timer, each 3rd frame I decreased the y-velocity and then every frame I moved the player character with the velocity. Magic!

One of the most painful implementation was the box collision (that still have some bugs). On a bottom-right angle, you can go through. I let this bug as a speedrun mechanic, as you can directly catch the final key. My implementation was a bit hacky, like most of my code, but I manage to polish around the edges.

At the same time, I had to implement the climbing mechanic on each platform and correct bugs around it. The harder part was to actually make it work when you were climbing and then arrive on a new platform. Here is the climbing result:

A main feature of GBDK is to allow to use several ROM banks. You can put images, sounds, functions in other ROM banks, but just before using them, you have to call SWITCH_ROM_MBC1(bank_nmb), so you cannot use at the same time two different non-fixed bank (the main bank is fixed and is always at disposal, though it is quickly full, especially with C code).

For the sprites, in term of hardware, you are allowed distinct 128 sprite tiles and 128 background tiles. from 128 to 256, the tiles Video RAM is shared. Hopefully, you can always change the sprites in memory. In Soup Raiders: Jailbreak, I did not need to clean the tile memory, because we did not have that much assets. But for a bigger project, you have to think about it. You can not change the background in real-time (not in C) and so what I did was as soon as you switch from one part of the level to the other, I turn off the screen, put the new background tilemap and then turn on the display again. Lameboy, the gameboy emulator for Nintendo DS does emulate this feature, so there is always a little bug when you switch screen on it 😀 For the sprites (the moving part of the game), you have to move each 8×8 tile by hand, so my set_sprite function is quite big, as I needed to move Black Whiskers (16×16), the locked door (2 to 4 bar of 8×8 and 16×16 lock), the key (16×16), the seagull enemies (16×16), White Fur in the first part of the level (16×32). The funniest lag I had was on the first screen of the game. Having a seagull enemy plus White Fur plus the Locked door plus Black Whiskers walking on the ground made it lag BAAAD. The bug is reproduced when Black Whiskers arrives with the final key and walk on the ground.

Each frame, you have to set the sprite tile index of each tile. Depending which object is on the screen, I adapted my code to be dynamic with the sprite index. For example, you can grab a key and then go to an other part of the level where there was no key, so dynamically, the sprite index manager adapts to this new object. Here is an example of moving with a key:

I want to finish this blog post with some negative opinions I have about the GBJam. First, I want to congratulate retroshark for his work to organize this event. It is so pleasant to be able to play after one week su many good games reminding us of where we come from. But, maybe it is my Swiss side, it is very frustrating to have the gamejam announced one week before. It is one reason why I don’t want to support the kickstarter. I really don’t like this amateurish way of handling the event (especially compared to other online game jams like the Ludum Dare, that is announced months in advance). Second, the rating system is not perfect. The Ludum Dare system with coolness is a good example to be inspired from. I don’t know the back-end of itch.io, but it would be nice to have a “fair” system. I rated several more games than I got ratings, so I have this frustrated experience of the voting phase of the GBJam…

To conclude, the GBJam is an awesome creative event that really needs more attention. Creating a game for gameboy is one pain in the ass, but a very rewarding experience. We are very proud to earn the gameboy feel award and we hope to develop the Soup Raiders universe a bit more (more news soon).

 

 

 

Read More

Tokyo Game Show 2016

img_2938

Tokyo, the Mecca of okatus, gamers and game developers alike. We were surprised to be selected for the Tokyo Game Show 2016 with Splash Blast Panic and for me, it was an opportunity  to get back to this city that I love so much. I went there in 2014, when 4 friends of mine did this incredible journey of the Transiberian and at the same time, visited Tokyo, Kyoto, Nara, Fukuoka, Busan and Seoul in one week.

img_2873

I remembered some things from my previous travel, especially Akihabara (or Akiba). Damn, I discovered so much more of Akihabara again. All those stores, all this animation, this mood is just incredible. But the rest of the city is as incredible. I did a whole round of the city for the week I had at my disposal before the TGS began. I went to Shinjuku, Harajuku, Shibuya (where I bought awesome ZeroAudio headphones that are unavailable in Europe and super cheap compare to the quality), Nakano, Ueno, Asakuza, I spent some time at the Imperial Palace’s Gardens (just next to our location):

img_2855

I went back to the Meiji Shrine and enjoyed the silence of the forest in the middle of the city. I went to an onsen, separated male and female, where you have hottube bath, and you are naked 😀 (No photos sorry).

I ate so many good things. My first supper was a nice classical ramen:

img_2841

And I enjoyed with Christophe Galati, some takoyaki:

img_2928

Every time that I think about food in Japan, I just want to go back there, just for one dinner. But I did not go to Japan just for food and for fun. I went there for the Tokyo Game Show.

4 days of exhibition, 2 days business days with 10’000 people per day, and 2 days of public days with 100’000 people per day. For me, I am biased by the comparaison with the Gamescom that was an awesome experience. So of course, compared to gamescom, I was disappointed. Though there was still a lot of people:

img_2969

Japanese players won’t come to your booth if you do not speak Japanese to them. You had to grab them and put them in front of the game. I enjoyed meeting developers from other countries, and meet Cristian or Dave that I met at the GDC previously in March. Damn, I feel proud to be part of such an open and friendly community that is game development.

img_2975

Japanese players are overall better than European players. The irony was when they were playing well and then were just saying: “I am not good at this game.”

To finish, I wanted to also share a little anecdote. Kevin and I were playing several times some rounds of Splash during the whole week. He always beat me and I did not know why. On Sunday, I played seriously, without exhalting when I was winning like I used to do. I beat him twice and the third match I manage to put a perfect match. Several Japaneses behind us applauded me while Kevin was stopping them. It was a good feeling, like the overall TGS.

img_2972

 

Read More

Gamescom 2016

img_2801

It has been two very long weeks. Kevin and I were working hard to have the best Splash version for the tournament and for the Gamescom. For me, the work was mostly about making the game as stable as possible. There are some minor details still to change, but everything is coming together.
The tournament was an awesome experience. 11 participants tried as hard as they could to win the precious Steam keys and water guns. I commentated the different matches in French, how I loved it. I could express so much emotions and stress a bit the players.
Finally, we had our winners with very intense finals.

All of that to prepare ourselves to go to Gamescom. I went to Zurich to meet my previous roommates. We played some Splash Blast Panic, Rocket League, and watched Indie Game: The Movie. I always have so much emotions when I watch this movie and just before Gamescom was the best idea. My flight was in the afternoon and I went to setup my “booth” at the Respawn with my MacBook Pro, next to a game developer neighbor with big screens and a 3d game. No need to say that I did not stay at my booth the two days of Respawn. It was all about meeting other developers and drinking beers with them. I met Alain from Alkemi, Thomas from KaiserGames, Benoît from Bento, Eline and JP from the Dutch Game Garden, …, and so many more. And Gamescom did not even started.

On Tuesday, I setup the two booths at the Business Area and the Indie Arena Booth. We were ready for the public. I went to party back at the Respawn party, before going home.

On Wednesday, it was starting. I had meetings with publishers in the evening with the Pitch and Match platform from BIU.DEV. I was not stressed, just ready. Before that, we had to showcase our games with other Swiss products. During the week before, nobody did anything in term of event announcement, and it was done on facebook one hour before. No wonder why there was not much people. For Splash Blast Panic, I did not care. I wanted people present to enjoy the game and we had someone passing by who wanted to know more about the game. That over, I went to the Pitch and Match. I pitched Soup Raiders and Splash Blast Panic and got my contacts. It finished with the VIP BBQ of the Indie Arena Booth.

On Thursday until Sunday, it started. People were running everywhere at 10am, to be the first in queue that could last 4 hours to play the latest games. As an exhibitor, I could be before everyone and be the first of the queue. I tested Endless Space 2 and Civlization 6. We had priority passes to get to play on the Xbox Booth. Christian and I played Titanfall 2, because nothing is better than playing a FPS on console 😉 We even got our selfie with one of the producer of the game.

img_2811

Kevin and I were switching time at the Indie Arena Booth and recovering at the couch of the Business Area. We got some contacts at the Business Area, but it felt weird to be at the middle of fortresses from Blizzard, THQ Nordic and the rest of them. I did not do my job of sending mail to the press before the Gamescom, so there were not so much people coming. Some Swiss Germand journalists asked us some questions and we got featured in several newspaper, but as a business man, I know that the conversion paper journal to sales is nothing, so I did not mind much.

On Saturday, the Business Area was close. We had to survive, go out because of the noise. Players enjoyed the game, and the mailing lists papers that we planned were completely filled. Everytimes that people were laughing because of some situations in-game, I was also smiling. After one year working on the game, it felt good to realise that we created a good product. We had the nicest neighbors. On the left, we had our Swiss colleagues from Niche and Schlicht and on the right, the Israeli from Judgment and the French from Pankapu. I had some nice contacts with them.

img_2804

On Sunday, we were counting the hours until the end. We brought back the PC, took the poster and went to eat something before going home. I took my time to sleep well and to look back on those crazy weeks.

Gamescom is the place to be for indie game developers who want to meet their peers and show the game to their public. We had awesome feedback and we are happy to come back next year. Elias out.

Read More