I’ve loved video games for a long time. But it wasn’t until recently, when I reached a point of being really comfortable with Python (the language I wrote B.L.U.E with), that the thought of actually making a game crossed my mind. I was like, ‘Hey, I can probably figure out how to do that’ and I jumped into the world of making a game.
WHAT WENT RIGHT
I love platformers (Mega Man X, Donkey Kong Country, Sonic 2), so I decided to do something similar – something with a Metroidvania feel.
I built a small prototype to see how to handle basic things (moving a character, dealing with collision, stuff like that). I am SO glad I did that because that solved a lot of problems that I otherwise would have had to deal with during the larger project. Doing that prototype also gave me the confidence that I could do a ‘proper’ game if I just extended the things that I had already done.
Since this was my first game, I wanted to keep things as simple as possible. That meant that the rooms (screens that the player navigates through) were made with two colors (a basic color and a highlight color). I didn’t even use a background color until the final level. That meant that the rooms could be built and iterated on very quickly. I dabbled with doing artwork for each room, but quickly realized that if I slowed down to make each room overly pretty, I would never finish. So, I concentrated on making each room unique. This proved to be a very good decision. The prototype had 27 rooms. B.L.U.E, however, has 201 rooms. Being able to build rooms quickly was a lifesaver.
Over time, I also found a good rhythm for building rooms. I would draw the rooms on plain old computer paper first, build them, play-test them and then change things until the room felt good. This was done for every room in B.L.U.E. This whole process became faster and faster I went on, and I’m glad to have increased productivity in this way while working on the project.
This also forced me to be creative. I thought I had a lot of ideas for rooms – but then 50 rooms later, 100 rooms later, 150 rooms later – I discovered I didn’t have as many ideas as I thought. It forced me to continually come up with new ideas – new paths for the player to go through - and I really like that.
Also, this being my first game, there’s no animation, music, boss fights, maps, mini-games, etc. All of that would have just slowed me down. I had a simple idea – navigate a blue square through five levels and get four abilities – one at the end of each of the first four levels. The final level would require the player to use all the abilities gained to overcome its challenges. That’s it. That simple idea was with me from the beginning of the project until the end.
Another reason for doing this project is that I wanted to become a better programmer and I can say that I understand a lot more about Python now than when I started. So, I’m glad for that growth. It makes me excited to learn more and get better at this stuff. ^_^
Also, the play-testers that shared what they thought about the game - both good and bad – were the best part of this whole proves. I LOVE y’all for doing that. I went back and played the first version I shared with y’all and it was so bad I was EMBARRASED I shared it with you. But you were nothing but kind and supportive, sharing ways that it could improve and how you felt about it. It really showed me that you need a different perspective for something to be good. I was too close to it and y’all pointed out things that I would NEVER have seen. You put aside time to play my silly game about a jumping square and you didn’t have to do that. So again, THANK YOU and I LOVE YOU.
An interesting development was the purple ability, Float. At first, the ability was Glide – something akin to what Commander Video has in Super Meat Boy. But, once added to the game it just didn’t feel right. It ruined the flow. I was so excited to add it to the game and once added – it wasn’t fun. So, I tried making it more powerful, but that completely broke the game because now you could just glide from one end of the room to the other, nullifying the need to do any platforming. So, I tried making it less powerful – I allowed the character to glide a little less far. That felt better, so I made the character glide less. And then less. Then I suddenly had the thought – ‘What if he doesn’t move at all?’ So, I removed all sideways movement entirely and tried that. Wow! It felt really good – and different. This didn’t replace the platforming movement – it added to it. You could now do something that you could not do before (as opposed to doing something that could do before, but in a different way). That moment, when I realized I had found my second ability (the first being Run) was just awesome. I love that. I think that's so cool. ^_^
WHAT WENT WRONG
This project was very much made in an organic, ‘let’s just throw stuff at the wall and see what sticks’ fashion. While it felt very ‘true’, ‘raw’, ‘organic’ and a lot of other artsy words, the end result is that there were a lot of missteps and wasted time. The main thing I wish I did differently is that I would have planned more in the beginning so that I wouldn’t have to perpetually change code when I got new ideas. I felt like instead of writing the game once, I was re-writing it over and over again. That was the worst.
To follow up on the whole ‘planning’ thing, the next time I do this I’m going to spend some time just working on mechanics and system architecture FIRST – THEN build the game after. With B.L.U.E., I was doing everything at once. The worst feeling I had was working on room 125 and finding out that there was a memory leak issue that was causing the game to crash. To fix it, I would have to re-write the entire game, using a completely different system architecture to better handle the memory. That was the worst. At this point, I just wanted to build rooms and finish the game – I didn’t want to deal with memory management crap. Next time, I’m going to front load all of that stuff. Figure out a stable architecture that can scale well (since this problem didn’t show up until I passed like 100 rooms) and THEN build on that.
I also started to wonder if I should be programming in Python at all. I mean, I love Python (I’m a total Python fanboy – ‘2.7 for LIFE, fool!’ LOL), but I started to think that maybe I was wasting my time. Maybe I should be using the Unity Engine, or writing the code in C++, and on, and on. Now, I respect C++, but I do not like C++ (I definitely don’t program in it for fun like in Python). These thoughts were quite distracting during the project. I’m glad I was able to push them aside and just work, but the next time I do this, I gotta make sure I do my research first.
I also need to do a better job on promoting the game. I didn’t know where else to post it, so I posted it here (thought this is primarily an art community, not a game one) and on Twitter. Clearly, that’s not enough. I gotta find some indie game communities and share thoughts, ideas and projects. That whole side of ‘where/how do I share this once it’s done’ I didn’t think about… until it was done. So, I gotta do a better job on that next time.
All in all, I’m happy with how B.L.U.E turned out. Once I started working on it, I was obsessed (so much so that it surprised me). I worked on it every spare moment from March 7th to April 11th, often till the wee hours of the morning (like 4AM). Though it’s a very simple game, it’s the most complex things I’ve ever written. The game has 201 rooms and has over 10,000 lines of code. I’m proud of it, I hope people like it and I’m glad I did it. *raises glass* “To bigger and better things in the future! Huzzah!”
For those interested, you can download B.L.U.E here: BLUE