May 5th, 2014
NekoRush was the first game I ever made that wasn’t free and released on a console manufacturer’s online store. The game was released on the Sony Playstation Mobile store in March 2014.
I wanted to do it to grow as a developer and learn about the non-hobbyist side of game development. The lessons I learned were profound indeed. They spanned across the realms of rendering, mobile devices, touch control schemes, international tax law, pegi & other parental rating systems, Q/A compliance and PR.
The game was made on an engine I made from scratch on top of the Playstation Mobile SDK which is essentially a wrapper for audio, input and graphics written in C#. The graphics layer is a bit odd in that it’s a wrapper for OpenGLES2 but it uses Cg for shaders rather than GLSL. Games and applications deploy to various Sony Playstation Mobile certified devices which include the xperia tablets, xperia phones, some other non-sony phones but most importantly the PSP Vita.
Obviously for any aspiring game developer who ever grew up with their hand attached to a gameboy would swoon at a chance to develop for a portable console with a dpad and button interface. It’s a dream come true for me.
I developed my own engine from scratch for two reasons. First I wasn’t a huge fan of the interface for Sony’s included 2D game engine. Second I wanted to learn the process of writing a rendering engine that has to run on multiple devices in a commercial setting. You can see the engine here. It’s not currently actively developed but if you are looking for a 2D library in the vein of Flixel but for Playstation mobile it’s worth a look. I’m currently focusing my game library development efforts to work on top of Monogame rather than PSM due to the vast platform support.
The graphics were done by my partner Akari and myself. We used GraphicsGale. I highly recommend it for pixel art. The music was done by my sister Marysia. I’m not sure exactly what her exact audio setup is but I think I can go as far as to say that the program Logic is involved in the process.
Here are some statistics for the project.
Development Time : 1 Year, very infrequently
Team Size : 3
Money Made : Approx 150$
If there’s anything I’ve omitted that you would like to suggest let me know and I’ll do what I can.
Problem : I’m a lone coder working on my first commercial project. I need an artist and a musician but I have no money, I’m unproven and I’m working on a platform and target that is also unproven.
Solution : Pester your family for free work!
I’m lucky enough to have a partner who is a amazing artist and a sister who is an amazing musician. Akari is a traditional artist, she grew up drawing cartoons on paper and now is very involved in the nail art world. She had never done pixel art before but found some tutorials (also a note, if you are looking for pixel art tutorials in Japanese the term is “Dot art”) and picked it up quite quickly. Akari did all the cats, panda’s and pretty much anything interactive. I did all the buildings and trees (the bad stuff) so don’t blame her for that.
Akari actually really began to really engage with the project. I was worried at first that she was doing it as a favor for me but those fears began to subside when she volutarily began pulling her art and redoing it repeatedly. She really got into it. This really pushed me to keep working on it.
I’ve always released my games for free. One of the reasons for this is it allows me more freedom to be experimental and simply drop support for a game if it’s not going my way. It also allows me to essentially eliminate any bureaucratic work related to finance, marketing and pegi ratings.
One of the reasons I made this game was because I wanted to experience the process of creating and releasing a game commercially. I learned a lot about registering for ratings, dealing with international markets and the process of submitting an application for review. It’s much less scary to me now and I can now develop commercial apps with a lot more confidence about the overall process.
Outside of me forgetting to enable my scoreboard to the public I managed to have my game pass compliance and get published to the app store on the first try. It seemed from forum activity that many people were having issues. I was in a good position because I own both a Vita and a Xperia Z tablet so I was able to test on two major pieces of hardware before submission.
I’m also very paranoid about bugs and issues so I spent a LOT of time testing and trying to deal with potential issues before submission. This is both a good and a bad thing. See #3 of what went wrong why it could be a bad thing.
My skill level with OpenGL when I started work on this game was limited to a series of small C++ and lwjgl applications I’d developed. All very small in scope. I understood the general principals of how the CPU and GPU work together as well how the modern OpenGL pipeline functions but that’s a far cry from authoring a complete application, let alone a complete application that’s going to be sold and must comply with the platform and stability requirements of PSM.
Because of this I made some naive mistakes when I wrote my rendering code. In the end I re-wrote it 3 times completely. This was an immensely educational experience where I learned some valuable lessons about how to write an efficient and robust renderer. I was also very lucky to have the help of some PSM community members, they helped me identify the inefficiencies in my rendering path and guide me in the right direction to writing a renderer that exceeded my performance requirements.
If you are interested in gaining some insight to the specific lessons I’ve learned I’ve written a series of tutorials on PSM and OpenGL, this one specifically deals with the efficiency issues I encountered
At the time I started development on NekoRush PSM was in beta. There were a few issues when new updates would come out I would get rendering anomalies which I would have to fix. The worst though was after PSM version 1 was released, a patch for 1.1 was released about 2 months later. After this version of PSM came out my rendering performance dropped from 60+ fps to under 10 fps. This is the reason I re-wrote my rendering code for the third time.
Ultimately my revised code was much better and I learned a lot from dealing with these issues but it’s still jarring to update a SDK and have your code suddenly have a profound drop in performance without any modification at all.
NekoRush was essentially done for months before I submitted it for release but fear about releasing my first title and wanting to keep it bug free consumed me. For many weeks I would touch the code for an hour or so testing and fixing bugs but not really getting a whole lot done. I did some limited user testing as well which was probably the most beneficial use of that time.
The paranoia about submitting a bug free release I think was too intense. I could have saved some time by submitting to PSM and seeing if anything comes back from quality assurance. That’s what they are there for, I should take advantage of that service.
Also if I had submitted the game earlier I would most likely have had time to develop and release another game and in turn learn even more about the game development process.
I have to thank my sister Marysia and Akari for pushing me to release the game. I might not have released it if it wasn’t for their support/prodding.
New Tutorial/Article Listing PSM Resources
June 18th, 2013
Since there is an influx of new PSM developers due to Sony removing the cost of being a PSM developer I’ve thrown together a quick article that shows where you can find various resources and tutorials for PSM.
New PSM Tutorial on improving rendering performance on the Vita.
April 16th, 2013
I just finished writing a new tutorial that explains methods for improving rendering performance in PSM. Specifically for devices like the Vita.
You can see the tutorial here:
PSM-Vita Tutorial Series #2 Complete
February 26th, 2013
The second series of the PSM/Vita development tutorial series is now complete. It clocked in at 5 parts. You can see the final tutorial here:
NekoRush Update – New Screens
February 24th, 2013
Got some more work done on NekoRush this weekend. There’s been a lot of engine work and art practice over the last couple weeks. Anyways got new cats in the game, new background art and finished a lot of gameplay code.
I now have to decide whether to go with my original 10 level plan or switch to a procedurally generated endless format.
New PSM/Vita tutorial : Vertex Buffers
February 13th, 2013
Part 4 of the beginner series for PSM/Vita development is up. This one focuses on vertex buffers.
New PSM/Vita tutorial. Focus on UV coordinates
January 22nd, 2013
Just put up a new PSM/Vita tutorial with a focus on UV coordinates. You can see it here:
Preview #01 of my new PSM/Vita game Neko Rush
January 13th, 2013
Here’s the first screenshots of my new game NekoRush. It’s first game for the PSP-Vita / PSM. It’s a continuous runner where you are a cat running through the neighborhood and must recruit other cats while avoiding obstacles. The two main cats you play as are my cats that are currently staying with my family in Canada while I’m in Japan.
Cat artwork is done my talented SO when she has time.
This is also using the custom 2D engine I developed for PSM. I’ve been doing a lot of reworking on it over the weekend and hope to eventually be able to release it to the public for anyone to use.
PSM Tutorial #2-2 : Verticies, Indicies and Vertex Colors
January 5th, 2013
Just finished a new PSM tutorial. Apologies for the month delay between the tutorials. I have more time this month to work on the tutorials and you should see them once every 10 days or so now.
Here is a link to the new tutorial.
PSM Tutorial #2-1 : Shaders
December 5th, 2012
I’ve finished part 1 of my second Vita tutorial for beginners and people who wish to learn more about the inner workings of the PSP-Vita graphical units and how OpenGL works. This one looks over the example code of the PSM simple graphics sample and explains what is going on in depth.
Because of the large amount of concepts introduced in this code the tutorial is broken up in to multiple parts. The first 2 parts will focus on Shader Programs. Here is part 1 of the second tutorial.