Ninja Cat and Zombie Dinosaurs - postmortem
Here I want to share some details about my first indie commercial game (you can play it here).
- It took me 8 months (starting July 2012) to create it and another one to sell it.
- I created half a meg of AS3 source code.
- I made everything by myself, including code, design and graphics.
- I used free sounds from the internet, and music from Kostya Dolgushyn
- I made one week prototype in C++, with my old engine Sculpture Clay 2
- I used Mercurial for version control
- Game folder on hard drive takes 1.5 GB, even though the game compiles to 2.7MB
- What you learn from this game is that triceraptops attacks its enemies by falling behind them from the sky.
1. Final game Quality
I really took time and effort to make as best game as possible. So it looks nice, is fun, original and polished (of course I'm not objective). What else one could want? Perhaps that other people would react to it positively and like playing
Indeed I did a lot of tests in real life, with people from different backgrounds: hardcore players, casual players, and no-players. Over 95% speak about the game positively. You can see the (almost) full list of testers and feedback givers in game credits.
I was doing those tests from the very beginning. As soon as I had a first working prototype in Flash, with the minimal gameplay, I wanted to test it on somebody. So I went to a weekly Krakow game developers meetup, and forced as much of them (poor people) as possible to play it, speak what they like and what could be improved. I listened very carefully and noted every suggestion. Then I went back home and started implementing necessary changes.
After one month I would take the game again, to Dark Secrets of Game Developers (organised by Shader - gd student association which I started) - a regular event with presentations. And again I would give the game to anyone I could, listen to their feedback and go back home to improve based on that. Rinse and repeat, another 2-3 times and game was much much better.
I really recommend this approach very much to all game developers, however small or big, experienced or not - you as the creator are blind to some of the aspects of your game. Other people allow you to look at it with fresh perspective. Also, those events were serving as kind of little milestones, which helped me to concentrate on finishing something on a timely manner. And one time I got unexpected surprise - first 2 fanarts from artists whom I gave the game to play. Very nice thank you Aleksandra and Mariusz!
Later, when the game was like 95% complete, I did semi-public betatests, with my friends on facebook - I posted the link, 120+ people played and I got maybe 20+ individual varied feedbacks. One side note: I lured them into helping me by announcing that whoever finishes first two levels and writes me something about difficulty level (at least), will be included in credits. I had the Google Analytics plugged into it, so I could even see in the real time how many people are playing and what levels have been recently completed More on that in separate technical post.
What remains to be checked and summarised, are the gd press reactions on internet. There are no articles, reviews or news about my game so far. Because of that, I'll wait at least 1-2 months before collecting those.
2. Platform and Technology
I very much like the idea that you can send anyone short link, and they'll be able to play your game just like that, in the browser. This is the big strength of the web games. Because of that, those games can really go viral and reach tens-hundreds of thousands of players (even millions) - just like YT videos.
Compare that to downloadable games, the process of playing which is clunky: download game, navigate to download folder, launch installer, select destination folder, accept license, next next next, game is installing, navigate to installation folder, launch it... and finally you can play it (but perhaps it's crap so then you have to delete it). Also downloadable games are more risky with viruses and other ways of damaging you computer. Players don't want to go through all of this, and successfully encouraging them to do that is not an easy task.
So this a very serious problem faced by all developers of such software. Even on Steam it's still not that easy to play a new game (not to mention good luck for you, developer, with appearing on Steam). So again, I very like the possibilities that web game technologies (Flash and HTML5) are giving us. And in this case Ninja Cat could benefit from all those advantages.
As for the development process, I had to learn all of it from the scratch - IDE (FlashDevelop), language (AS3), libraries (Flixel, greensock, minimal comps, Flixel Powertools, ...), concepts (ie. preloader, security), programs (DAME), very specific flash sponsorship market (a lot of reading the FGL forums and FGLopedia). Fortunately I have extensive experience with C++, game programming, 2d and 3d engines, and game market, so that technical challanges were rather simple (reading API, looking at code examples) and pleasurable (yep, I'm geek, I like to learn new technologies).
And after the initial learning, the tools began to shine. First about language. Just imagine - no wild pointer problems, no leaking memory, no need to cleverly organise includes or setup precompiled headers, no strange template errors. Take that C++. On the other hand: functions in AS3 are first level citizens, so working with handlers is a breeze, and you can easily create anonymous functions. You can also specify some kind of conditional compilation through CONFIG:: tags. The language is very "reflective", so you can easily obtain the real class name of some object, or create an object having its name in string. You can also manipulate member variables by their names ie. my_object['value'] = 5; Reflectiveness helped immensly when creating in-game editor. In summary: not having to fight with language, and having some very nice features working out of the box, speedied up the development.
As for IDE, FlashDevelop is very fast and lightweight (unlike Visual Studio, which I know very well having used its different incarnations for 8 years), and for most of the time the build process was faster than 2-3-4-5 seconds, only at the very end of project increasing to 10 seconds. And that's on normal HDD. I'm planning to buy SSD and then having possibly a 1 sec build will be really like heaven. FlashDevelop also has a working intellisense, little refactoring tools (I mean: smart rename; that's all I've been using anyway), code templates, macros, can be customized, and obviously visual debugging, so you can step through the code, view the values of variables, see call stack, set breakpoints etc. Pretty standard theese days.
One last tool I'd like to mention: Greensock TweenMax library. For years I was wondering how does all those flash games so many animations, so many eye-candy, bouncy-trouncy things. Now I know. It's dead simple to add effects like theese, and it supports a lot of ease-in, ease-out tweens and special behaviours.
3. Conscious development
I tried to optimize the process of creating the game - so ie. having 2 big monitors, powerful computer, ergonomic chair and keyboard, setting time just for the development, getting exercise and plenty of sleep as well as occasional parties and meetings with friends - this all helped me be focused and productive.
I was planning a little bit into the future, and for the retrospect, I was writing dev blog entires in .txt file - what I finished, what I had problems with, what was unexpected and/or funny. Right now I have complete track record of every part of this journey. For example:
Lots of tweaks in different parts of menu and game. More time spent on graphics. I have nice menu, but still the game is lacking: player avatar concept, graphic style, levels, enemy animations, balance.Nonetheless, I'm more sure that the game will be cool and playable.
Little spark about design, which has great gameplay potential: give points for multi kills and grace kills, and remove them for making errors while typing.
Release weights 1.6MB with menu and game music.
-> In this moment I predict the game will be finished and sellable sometime in the middle of December.
Hard work with level graphic design and game style - goes like blood from nose, but somehow managed to do nice outdoor envinroment. Also did nice main menu (animated clouds, cat head) and first tries on cat animation.
Cool discovery: velociraptors can walk on higher obstacles through some kind of wall jump. Emergent physics at it's best
I was also measuring time of work in Toggl. I had this pinned tab in Firefox, which allowed me to quickly set whether I'm working on game, and also on what part of it. Toggl has nice reports, where you can filter and search for specific words. Becase of that I see that it took me 1030+ hours to create Ninja Cat and Zombie Dinosaurs, of which I spent: 5h coding stars, 22h on brahiosaur (code and art), 9h on animating cat, 7h on dictionary code, 6h on blood and explosions, 11h on logo, 17h on sounds, 50h on path editor, 12h on outro, 16h integrating Google Analytics etc. When it comes to individual levels:
- first: 21h
- second: 18h
- third: 36h
- fourth: 39h
- fifth: 31h
I had to precisely measure the time, because I was working from home, and it could easily turn into procrastination disaster. So I tried to do at least 30h of productive work every week (not 40h becase I had also other things to do, like training, activities in voluntary organisations, girlfriend, friends, cats ;) ). Most of the time working was pleasure; it's only the one month when I started pushing to finish game, when I cut out as much of other things as possible. Then I was spending regulary near 40h hours on game, and sometimes 42-45-47 and once even 60h. So that was a little crunch at finish - but that happens in 99% gd studios.
I took the concept from Typing of the Dead - a cult classic from the 2000, by Sega. I turned the 3d FPP "interactive movie", where you kill zombies by typing sentences displayed below them, into 2d quick action platformer, where player's avatar (Ninja Cat) moves on a path, and player is typing words under dinosaurs. Hey, this is something new - even if it's only removing one dimension and adapting gameplay to that envinroment.
It blows my mind that I have added something to the game idea pool. That I didn't create just another platformer, just another racing, just another tower defense or shooter, with different graphics and powerups. I like that I tried to do something original, perhaps even niche. All of this freshness helped me to withstand darker times, when I was tired, not sure of game's commercial success, had difficulties with graphics etc.
So, my advice: create games that you're passionate about. I was (and still am) probably the game's biggest fan. And I still can have fun playing it, even though I spent hundreds of hours working on it, tweaking, testing.
Also I'm still in love with the ninja, zombie, dinousaurs and cat theme of this game. Every aspect alone is worth a game, even a genre - I combined that all in one. It was partly inspired by fact that wherever some gamedev studio announced they're working on game with dinosaurs, players went crazy. Call me smart or evil ;) It's a little kitschy, yet players should be able to se the wink towards them
What went wrong
1. Time and Money
I used FGL for showcasing the game in front of sponsors (wandering who are sponsors?). I read and followed their manuals religiously, which helped a lot with few areas, unfortantely still I failed epicly when it comes to this important area of $$$.
First, I got very few sponsors looking at the game. During the first month of auction, there were around 25 unique sponsors. Out of those 5600 sponsors that FGL is bragging on front page, that's not even one tenth of a percent. Because of that, I had to send spam emails to 30+ flash game sites. And only because of that I've found final sponsor. FGL helped a little though, because there was actually second guy, and those two went into a little of bidding war. Very short war though. After putting the game in Last call (term described on FGL help), I got few more sponsor looks, but no actual bids. So, how exactly did it go?
I'll be frank with you. I was expecting something like $2000-3000, maybe more if few sponsors would like my game and real auction would start. Still, with 3k I wouldn't earn much for a 9 month project, but at least I wouldn't get behind. So it was heartbreaking experience when I sold the game's primary license for $400, as a result of a month long auction. There are a few reasons why that happend.
First, the market reality: sponsors are not willing to risk unknown, new orignal genres and ideas. They want something proven (like currently: defense, steampunk, racing games, upgrades). Even though Typing of the Dead is a clear example of cult classic and artistic success (I'm not sure about commercial, even though they made sequel), there were no existing flash games with this kind of design. Second, the flash sponsorship market has changed, and I was basing my projections on ultra-successfull projects from 2-3 years ago (like Steambirds).
However, It's mostly my fault, that I took big ambitious project, with un-orthodox gameplay type, and rather hardcore-niche gameplay and graphics. At the beginning, also my description, screenshots and icon were sub-standard. I should have started with smaller and more conventional projects, if I'd be looking for a really good financial beginning.
However, I'm ok with that. Without risks, nothing good comes. Sometimes you can do all the research you want, but still you can't know all theory upfront. For that you need to get your hands dirty, and maybe even make a few errors. As they say, experience is what you get, when you don't get what you want ;) Last but not least, most of the startups and businesses (even like 90-95%) don't make money in the first projects/months, so it's nothing surprising I'm with that crowd. I hope my next projects will go better.
Anyway, I have a really nice game in my folio, I learned a lot (programming, design, graphics, sounds, marketing) and I have ways of making much more money in short term, so I can continue my indie game developer's dream.
I also constantly failed at forecasting how much time it would take me to finish the game. First I was planning to complete it by September, then October, then December, then January and Febraury... finaly I managed to do it on 8th March. One small positive thing is that later predictions were starting to get more realistic.
I haven't sold any sitelocks yet (maybe for $200 if the game gets noticed). I expect to get up to $150 from ads over one year, what is rather realistic - so far after 20 days it has 38000+ views which braught me $12 total. We'll see how it goes.
One final note: Kongregate, Newgrounds, Mindjolt, sponsor - they all needed a special version of the game, with their API (highscores) and ads. Making that - reading cryptic and scattered documentation, trying to figure out what things are allowed and what not, recompiling, testing locally and on their servers, obfuscating - all done manually on an small netbook (during journey) x4=PITA.
2. Asset creation
I underestimated the time and difficulties of creating sufficent amount of good quality graphics and levels. With the graphics, I had to concept art the Ninja Cat (looks nice, characteristic, is likeable), then scale him down to pixel level size (about 30-40 px height), animate him, turn into sprite sheet, make sure it's clearly visible (then redo it becase he was too small).
The same goes with every dinosaur - even though they have 3-8 frames, doing it all manualy by a slightly art experienced programmer was time intensive.
With the Tyranossaurus Rex it was the worst, becase he's so big that I couldn't do that manually. So I had to find nice 3d trex model, import it into Blender (and remind myself how to use it), get rid of what's not important, devise lighting and setup camera so that it would look good in game, create the actual walk/attack/hurt animation, setup materials and textures, tweak stuff so that it looks good, zombie-ficate trex... And script the hell out of it, so I could just press one button, and it would render the complete animation and process it to a sprite sheet needed in game. I was expecting 2-3 days, but it took me 10. Uh oh.
As for the levels, I had to place so called Enemy Zones, which specify areas where if player is there, dinos spawn at specific points. Then also player path, with differing speeds. Later it appear that a little bit of scripting would be useful - fortunately AS3 allows to call functions based on their string name, and I could do it without integrating or writing scripting language.
Good thing about that all was that the EZ and path creation was done inside game - I spent like a month developing in-game editor, which allowed me to iterate very fast on that. At every moment in debug version I could press TAB, make changes, TAB again, see whether it's better, and if true - TAB, ctrl+S to save new level. For the tiles I used external editor - DAME. It was ok, altough few things were irritating me constantly.
With the level graphics, for long time I had no idea how I want the game to look like. I was torn between Limbo and cartoony style. Having to jump between programmer and artist duties, didn't help with that. I might elaborate on this point in future.
3. Flash speed
One little problem that I had, was the speed of Flash. Compared to what some Apple lovers say ;) it's not that bad, and it's not a resource hog either. Modern flash on todays computers is really ok, but if you want to do what a typical ambitious game needs, sometimes you might get into troubles. So in my case: 3 layers of sprites, occasional zooming, about 3-10 constantly animated sprites and medium sized antialiased text, particle effects (blood and explosions), mp3 music, lot of sounds. And it's not accelerated by video card, all done through old-style blitting of Flixel engine.
For modern average computer it's nothing (steady 60 fps), but ie. for netbooks or even notebooks from 2 years back, the fps drops below 30. I have one such Asus Seashell netbook on which I was occasionally testing. So I had to use some optimisations here and there, with my algorithms, but also sometimes with the Flixel internals. Also, the memory usage was something to be aware of - memory pools were used everywhere. Fortunately last year Adobe has released Scout - a really practical and easy to use profiler, designed specifically for games. It helped me a lot.
My EZ editor at first was written in a very simple way - which meant on bigger levels it started lagging, sometimes very seriously. That was irritating and slowing down level production. Then, after finishing the game and completing all levels, I've found a way how to significantly speed it up (like from 5 fps to constant 60). Oh well.
Definitely I learned a lot, made a lot of mistakes (some of which could be avoided). Still I had a great time and made great game (but I'm subjective). We'll see how the wider range of players reacts. Right now I'm starting to spread Ninja Cat to flash game portals. Also I'll try to contact game press, so they can review it and bring it out for even more players. Hopefully the game will get noticed, and if not with money profit, at least I'll get some artistic recognition Perhaps another blog post about this topic will be written... Stay tuned!