Jump to content
  • Advertisement
Sign in to follow this  
  • entries
  • comments
  • views

About this blog

Technical posts

Entries in this blog


Digital Dragons 2014

On 8-9th May this year, third edition of Digital Dragons game industry conference happened in Krakow (Poland). I was on all of them, second time as an indie. It was the best Digital Dragons, hands down. Why? Basically, no errors have been made. This is my attempt at quite detailed coverage. Also it's reminder for myself, do's and dont's for next events, lessons learned and maybe some good tips for others.

Little background: I came with special build of Ninja Cat and Zombie Dinosaurs PowerPack - new dinosaur (Archeopteryx), new powerup (dynamite), first equipment (spiders), some bugfixes, and all the things prepared in Pixel Heaven version (new ninja cat, vignette in underground, color mapping in water, blood stains on screen when player damaged, yada yada). I was hoping for finding someone who will help me with distributing the PowerPack electronically, so that players can buy it. Also I wanted to promote the game further across player and dev community.

First day

Indies were put in two long rows of tables, in the center of the main event hall. There were around 30 indie teams, from one-man-army doing things after work (The Miners), to 5-10 people teams with external investor (Gloria Victis). Each indie had one table to present game - not a lot of place, so things were crowded. We had electricity plugs underneath, and internet in the air.

My girlfriend Martyna, was helping me with booth. Without her help my throat at the end of the day would be like black metal singer. I would be grumpier than many cats, for answering the same questions ("will it be available for mobiiiile?") and introducing game mechanics over and over again (I hate repeating myself). And I wouldn't be able to attend any lectures or play other indie games. Thank you darling! I think that having at least 2 people at fairs is a must. I saw few other indies were alone, and I know from experience that it's not good. Pro tip: try at least to get a help from friend or gamedev colleague for a few hours.

I wanted to have unique booth, so I hand drawn this zombie TRex, instead of printing yet another flashy rollup with helvetica (or calibri) and flat design. I spent 16+ hours looking for references, drawing small mockups, then going progressively bigger - up to B0. I was planning to make it in colors, then as time was low - only in pencil, but redraw it on another piece of paper... eventually I had to use the unfinished prototype Some people commented on it, and I think it was nice complement to the booth (when it was not falling down on us).

However, it didn't make sense to take my huge ergonomic divided keyboard MS Natural 4000 (only one person used it), nor the dinosaurs album. Nice idea about presenting your game that I've seen when other devs were showing me their games: explaining how to play while showing trailer. It has the advantage that trailer in one minute can show most of the features of the game, whereas in my case player would have to play half an hour, to see every dinosaur, powerup, level style, feature etc. So player can get much more excited watching trailer, than playing tutorial level. My usual plan was to explain the gameplay while player started playing on easy level. Maybe next time I will try trailer approach a few times, to have a comparison.

What went really right is the staged tournament: who will have most points at level 4, will win cool Ninja Cat mug. At first it was at hard difficulty, but then seeing most people can't even finish 10% of this level (beginning is hardest though) I decided to lower it to medium. Then again, most people died in the first 20%. It can be because that they are used to other keyboard, they were distracted, the game is too hard, they can't touch type... or generally suck at typing

Note: competitions with prizes are great, do them often. It makes visitors emotionally attached to their performance, they care and treat the game (and you) more seriously. Hmmm, looks like gamification of game booth to me I made a similar tournament at Poznan Game Arena 2013 for T-shirt, and players loved it. It was very popular, many players regularly came back and asked whether their result was beaten. Some were looking at others playing and cheerleading them. Players who won or got good results are happy and also will tell their friends about your game etc. Huge win for the developer who has this situation. People are competitive and respond to challenges, so use that psychology hack wisely. Anyway, list with the best results:

And the winner issssss.... Micha? Garde?a, of new studio Moonlit, who I know from KrakJam and Shader. He scored 15514 points. Second place was Dominik, former CD-Projekt AI programmer - he had only 129 points less. I was third with 14398, but later with Micha? and Dominik we did a second round on hard, and there I was the clear winner, as it should be ;) Anyway, Micha? won the mug, and we did the award giving ceremony at main DD stage (after everyone was gone )

There were also other competitions, sponsored by DD. Some judges (veterans, industry luminaries, press) were visiting us and playing every game. Also every person had one sticker to give to a game/team they think deserves to win. I got some, but not the most.

As for the lectures, I was at half of panel about PR and marketing your games (because I suck at it - take a look at my homepage or my facebook fanpage fans count), and here are three things I noted:
Video trailer is pretty important - you still need text, screenshots etc., but the video should be your focus.
Youtube is big. Youtubers might be better for your game promotion than so called traditional gaming media.
Twitch.tv is going to be even bigger. It's essentially your own channel in digital TV, where lots of player eyes are looking

So now everyone heads off to Adobe to buy Premiere or After Effects, get rid of few thousand bucks and learn how to montage crazy awesome clips...

Also I was on Adrian Chmielarz's lecture (last third of it) and the first thing I observed, was the utter silence on the quite big hall. Everyone was listening in focus. Adrian was talking about narrative structures in games, how to tell stories that enhance gameplay (and vice versa), or so I understood. Funny was the mention of diegetic storytelling - it reminded me of diegetic UI, simple concept with cool name. I love UX stuff.

He also showed some gameplay from Vanishing of Ethan Carter, the Astronauts first title. Later I caught occasion to have photo with this polish gd star although I forgot to introduce myself. Maybe next time.

As day was coming to an end (btw, weather was perfect), the usual afterparty thing started to loom more often in discussions. I bought Expo pass (poor indie), so I wasn't allowed for the official afterparty, nor some of the lectures. Also I couldn't find the alternative Atari-online afterpaty that was close (as I was told), so I went back home. I was loaded with energy, so I didn't sleep well :] it was very good day for me. Heard that some party animals finished the afterparty at 4 in the night, so I guess they had rocky sleep as well.

Random observation #1: Unity is very popular, multiplatform, tools and documentation are state of the art, they are actively developing their technology, they have wildly active community, the plugin penetration goes higher. I see some teams (ie. Evil Indie Games) make very good use of it. However, most of the games look very similar. You can even tell most of the Unity games by looks (shading, obviously GUI). Hmmm, something to ponder for future projects. Curious if they will change their pricing politics, in response to recent Epic and Crytek moves.

Second day

Second day was even better, I was prepared for what to expect, and people seemed more conversational (maybe the evening afterparty helped with that). They were playing my game and the feedback was gold. I got lots of gameplay, design and business advice. The tone and content was very positive. Some people were even saying "take it to Steam, there's perfect audience for this kind of game" It was really encouraging. I'm not ready now for Steam/Greenlight, but in a few months, who knows.

The crowd at Digital Dragons who was visiting me was mostly developers, press, and some publishers. Lots of familiar faces. Big difference to Poznan Game Arena, where 96% were players. At DD people didn't come to play your game (to find nice entertainment), but show off theirs, or make some business. Until I realized that and started ie. asking where are they from and what they are doing here, I probably missed some opportunities trying to get them obsessed with my project.

A lot of people asked me for mobile version of Ninja Cat, which is kinda irritating. Perhaps I should make separate post why I don't want to solo/indie develop for mobile, but quickly: it's overcrowded and getting noticed is ****** hard, you need luck/publisher with willingness to do some real marketing work, or luck/press contacts. Whole mobile industry seems to me to be a balloon... everyone is doing it, and this is alarming. In stock market when that is happening, it's a sign that the disaster is going to happen. Sure, some people make a lot of money there, but on the other side there are 100's more of those who sold 14 copies and went bankrupt (and you don't hear about them). Visibility is everything, and tell me how to promote a 347th version of the same game...

I think the artistic values of games are lost when zillions of game developers try to make the another women 18-35 focused, match-3, fappy bird (typo intentional), one-button-masher, racing, tower defense etc. copying off each other, whoever or whatever is now popular. I didn't become indie because I like producing crap, going with the crowd and hoping for easy money. It's easy to earn money in gamedev (just work for big western company or even polish one, they also send regular paychecks); the problem is making cool games, trying to innovate, and making money (as an indie). You may say, I'm a dreamer... ;)

Anyway, enough ranting. If I had a fast & easy way to port Ninja Cat to mobiles, I could try it (hell, why not). Flash / AIR allows to build mobile version (even iOS), so technically it's possible. But porting this kind of game would require total remap of control mechanics (typing at keyboard with all keys -> small touch screen) and lots of content changes, so it's like a half year, boring, annoying project. I think that's rather obvious, but still people (devs!) were helplessly asking me about mobile version. I'd rather polish graphics, work on new features, make fantastic game on PC, and go with it on Steam.

Random observation #2: funky hats are all the rage this year. My beanie seems so 2013!


The organizers learned two lessons from last year: 1) there were much more people allowed to attend (800 vs 350) so the event was lively 2) indies were clearly visible, in one place and easy to find (you could even say they were in the center of attention). To be fair: last year indie situation was most probably forced by the Arteteka floor-plan. Also, on DD 2014 there was Indie Big Pitch (for mobiles), the day before, and HP was borrowing laptops (really helped me). BIG THANK YOU for helping indie devs, KPT, DD and sponsors!

I think one thing that could be improved is the price for Dev pass (90 EUR early bird, 120 regular) - some people were complaining about it, that it's too much difference over Expo (30 early, 50 regular), for attending 2 more lecture tracks and afterparty. Ok, I know that pricing is controversial topic, and for some whoever mentions that something is too expensive is hippie not working student, who needs to get real because things are NOT FREE. Whatever. As explained above, I think the cost/benefit ratio of Dev over Expo was too high. What helped is that DD made a lot of price promotions. But, it seems others were willing to pay premium for some more lectures and afterparty, because when I arrived first day at registration desk, there were more people in the Biz queue (120 early, 200 regular) than Expo queue, and the Dev queue was easily the longest.

To repeat myself a little, but stress a point: competitions were well organized - industry luminaries were walking from booth to booth, playing the games and talking with devs. Heaven - look at the photo below. Do you know who this guy with glasses is? Yep, it's Jason Della Rocca. I almost once got a chance to bring him to my booth. Damn it, another missed opportunity... but at least had this opportunity.

Allowing the community to vote was perfect choice. Also 800-900 people.. quite a crowd, but not too much. And it's probably 99% gamedev people, so great place if you want contacts in industry (I don't want to count how many business cards I exchanged), not so good if you want build fanbase (+4 fans on facebook - diff for me; update: after posting this relation, it became hot thing and I got 10 more) of players. There were quite a lot of foreigners, and English was used during all the lectures and panels. I heard the recordings of lectures will be available on internet, just like last year.


I made more photos, you can see them on facebook. Yesterday I went through all of my business cards, visited websites, send few emails. Perhaps one of them will help me release paid version of Ninja Cat to the world. But even if that doesn't happen, it was still worthwhile to attend Digital Dragons 2014.

PS Cheers to indie guys from Cyber Sentinel (this game fcuked my mind), Evil Indie Games (really pro prototype made in... 3 weeks? and some great advice), The Miners (game from one man studio with touch of genius), King Zebra (rescuing unicorn from pack of narwhals won my heart), Moonlit (promising kayak game with unique steering, and speed-killing hundreds of zombie dinos) and to 2 girls behind the monster-cookie-bakery, who made lovely polished game for kids (Foodo Kitchen), which as I learned won the Indie Big Pitch the day before.




Crowdfunding for Ninja Cat PowerPack

Hey, almost month ago I've started a crowdfunding project for extension pack to my magnum opus, Ninja Cat and Zombie Dinosaurs. Imagine Typing of the Dead mixed with speed of Super Meat Boy and bloodynes of Mortal Combat. You can play it for free, directly on my site www.koshmaar.pl

The game did quite well in the jungle ie. players liked it & there were nice press reviews, so I've started a crowdfunding for a PowerPack - extension which will have lots of new, cool and badly needed features + additional content. By doing this I want to significantly improve the game, which I love very much.

Long story short, here's epic video which explains everything about game, PowerPack and life:

[media] [/media]
I've been working on it almost a week, with video recording and editing. It has english subtitles so click boldly.

So, here's the detailed list of new features that I want to add in PowerPack:
visualizing the path on which player is moving; especially useful at junctions (which are generally not understood by players)
dinosaurs can change their behaviour such as: kamikadze - runs at you with a bomb and you better shoot him at distance; knight - has shield and you have to type 100% correctly or you start from scratch
ability to use limited ninja equipment using F1-F3: spiders (deal letter damage to dinos which walk over them), throwing knives (immobilise or slow down dinos) and fog bomb (you become invisible for few seconds and dinos don't know where to go and attack)
collecting statistical information for speed of typing (WPM), accuracy and score - over time, and showing graphs of it, to show how well are you developing.
option to choose language maturity level - child (for kids), normal (like now), weird, adult (swearing) and porno (omg ;)
over 15 zl ($5) you also get downloadable version without ads, for a one month exclusive.

There will be also new content added (2 out of 5 existing levels shown above):
1 new level (most likely Notre Dame cathedral)
1 new dinosaur (most likely Stegosaur)
1 new powerup (most likely dynamite)
dozens of additional hours of even more addicting and varied gameplay that will also increase the speed and accuracy of your typing.

I predict all of this can be completed in about a month, and so I'm collecting money for one month worth of surviving in Krakow (around silly $700, including taxes, portal fees, mail costs etc).

One thing that needs to be stressed, is that altough the game is available for free now on internet, the PowerPack version for the first month after creation will be available exlusively to those who back me up. They will get installable, DRM-free, ad-free version. Next, by choosing at least 15 zl ($5) you get to add words to the in-game typing list.
Obviously by backing the project with higher amounts you also get some cool gadgets (altough the mail expenses of sending T-shirt to USA or even England will kill me so please don't )

You can back me up also if you're not from Poland - wspieram.to accepts payments through PayPal.
I've prepared a film that explains polish interface of Wspieram.to and guides you through the backing process (I recommend to watch it in fullscreen):


I'm writing here to get help from outside Poland, because I think I've used all the resources, websites, portals, forums etc. where I could promote it in my country. And it found only 35% funding... crowdfunding ends on Saturday, so I decided to try to find people from outside. It's still possible to fund the PowerPack, so please chime in with your $0.02

PS after this crowdfunding ends, I'm going to write a loong post what I've learned through all of that...




Ninja Cat and Zombie Dinosaurs - postmortem

Here I want to share some details about my first indie commercial game (you can play it here).

Fun facts:
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.

What went right

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:
7th November
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.

21th November
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 [/quote]

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

Having such detailed statistics, even in the middle of production, I could more realistically plan the next levels and perhaps tweak things. And I did becase it took so much time, I started to drastically shrink their sizes. Anyway, back to what I was saying.

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.

4. Design
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!




Gentle introduction to Google Analytics for Flash

Being able to check out how many players play your game, from what countries, for how long, on which levels they have problems, even do they ever visit your precious Credits screen - that sounds incredibly useful, doesn't it? Fortunately, in web browser games, there's a way to get such informations. In this post I'm going to describe the process for Flash (ActionScript 3).

And there are even many ways. First, some time ago you could use Playtomic.com - however they had notorious problems with reliability, and are now out of bussiness. Then, the second try could be Mochimedia - they have many services, and one of them is statistics. Unfortunately, it is very simple and unable to give you such detailed data as in the first paragraph. You could also google and find few other services... and among few smaller ones, Google Analytics for Flash project (later shortened to GAF).

That's true - you can use the well known, very powerfull, complex, free, reliable and spied service from Google to process the statistics from your own Flash games. And it's actually pretty easy to use. Sadly, the documentation is rather cryptic, sparse, ambigous and hard to follow. So, here goes a quick, practical tutorial for you + code samples

First, download the files from their site and put it some directory like lib/gaf, alongside other game sources and libraries. Inside your IDE link to the one of the .swc files: analytics.swc (codebased IDE like FlashDevelop) or analytics_flash.swc (component for Flash CS). Code snippet from Ninja Cat:import com.google.analytics.AnalyticsTracker;import com.google.analytics.GATracker;CONFIG::stats{ public static var tracker:AnalyticsTracker;}public static function Stats_StartTracking() : void{ CONFIG::stats { // UA-google-api-code has to be replaced by your code // fourth parameter is visual_debug - its described later in post tracker = new GATracker( FlxG.stage, "UA-google-api-code", "AS3", false ); Stats_PageView("Home"); }}public static function Stats_PageView( URL : String ) : void{ CONFIG::stats { // I think google wants to have slashes before names of pages tracker.trackPageview( "/" + URL ); }}public static function Stats_LinkOpen( URL : String ) : void{ CONFIG::stats { tracker.trackPageview( "/" + URL ); }}public static function Stats_LevelStart( ) : void{ Stats_PageView( "Level_" + current_level );}public static function Stats_LevelQuit( ) : void{ Stats_PageView( "Quit_" + current_level );}public static function Stats_Event( category : String, action : String, label : String = null, value : int = NaN ) : void{ CONFIG::stats { tracker.trackEvent(category, action, label, value ); trace("GA event: " + category + " | " + action + " = " + (isNaN(value) ? "NaN" : value) + " ( " + label + " )" ); }}

Before anything: what is CONFIG::stats? It's a way of conditionally including code in AS3 (a kind of #ifdef macrodefinitions for you C++ buffs). It's very useful - by toggling one variable in IDE, you can build a significantly different version of game. So, if CONFIG::stats is not defined, all that is between braces will be ignored. In this case, it might be useful to disable statistics ie. for local testing. Here you can read more about this technique.

So, what I've done here, is estabilished interface for using GAF in my game. I put this code in my Game class, which I'm using as a singleton. Methods like StartTracking, LinkOpen, LevelStart are obvious. But how about PageView() and Event() ?

GAF gives you two ways of tracking user behaviour: page views and events. Pages are like in the web browser - navigation between different URL locations. Events are for user interactions with elements of the page, which don't result in changing of the page - ie. movie controls. With events you can log more informations; pages only log the name of the visited pages.

In case of games, you'd want to use this duo like that: pages are reserved for game states and menu screens (MainMenu, Options, Credits, Level1, StatsScreen), while events are used for detailed statistics about in-game... events (duh). From the code above you can also see that I decided to have LinkOpen and LevelQuit be page views.

So, when you add this kind of code to your game, add the function calls in appropriate places, and turn debug mode on (fourth parameter to GATracker is true), you'll see some debugging info appear:

With this you can quickly confirm that things work as expected.

Here's how Google Analytics looks with the data from Ninja Cat and Zombie Dinosaurs (I cut out only the interesting bits):

What is interesting here, is the incredibly small Bounce rate of 0.03% - it means that 99,97% of users who load the game and see menu, continue to play it. Compare that to Bounce rate of anywhere between 40-70% for normal websites.

Google Analytics has this nice feature of showing some stats in a realtime preview. Wow, at this sunday evening four actual people were playing my game, and from the map below I saw one was from USA, one Germany, one China and one Thailand. For the creator it's humbling

Last of screenshots shows the details on which "pages" were viewed the most. We can see ie. that players are not interested in me (Credits) or sponsors (links), and they even very rarely visit Options.

Apart from the dashboard, you can find useful data a bit burried in Content -> Site content -> Content drilldown and Content -> Events -> Overview. I would really recommend to spend few hours reading Google Analytics help, to get a good understanding of the platform (goal completions, funnels, conversions, intelligence events, how to filter, learning UI - there's lots of stuff).

According to Mochimedia, my game so far had around 28k displays of ads - which is almost the same amount as /Main views in Google. So both systems confirm each others reliablity. As for an online flash game, almost 30k (and 1-2k per day) is very small number. I think after maybe 2 months I'm going to write a separate post about how Ninja Cat succeeded in the "internets".

So, coming back to the beginning of post - how about original requirement? I tried to get detailed statistics about player progress - they are displayed after finishing a level. Those are things like number of points, enemies killed, katana kills, how much time (in seconds) did it take to finish it. I also tried logging player name, because I was curious what players will write there Here's the code I used:[code=js:0]public static function Stats_LevelEnd( level_index : int, level_time : int, enemies_killed : int, katana_kills : int, score_points : int, total_keystrokes : int, accuracy : int, avg_kill_time : int, avg_kill_score : int, collected_powerups : int, stars : int, health_loss : int, player_name : String, _result : int // 1 for died, 2 for won ) : void{ CONFIG::stats { var cat : String=Level_" + level_index; Stats_Event(cat, "time", null, level_time ); Stats_Event(cat, "enemies_killed", null, enemies_killed ); Stats_Event(cat, "katana_kills", null, katana_kills ); Stats_Event(cat, "score", null, score_points ); Stats_Event(cat, "keystrokes", null, total_keystrokes ); Stats_Event(cat, "accuracy", null, accuracy ); Stats_Event(cat, "avg_kill_time", null, avg_kill_time ); Stats_Event(cat, "avg_kill_score", null, avg_kill_score ); Stats_Event(cat, "powerups", null, collected_powerups ); Stats_Event(cat, "stars", null, stars ); Stats_Event(cat, "health_loss", null, FlxU.abs(health_loss) ); Stats_Event(cat, "player_name", player_name ); Stats_Event(cat, "music_volume", null, int(FlxG.music.volume * 100) ); Stats_Event(cat, "sound_volume", null, int(FlxG.volume * 100) ); var result : String =(_result == StatsScreen.FINISHED_LEVEL ? "win" : "lost"); Stats_Event(cat, "difficulty", result, Game.difficulty ); }}
Unfortunately I don't know how to get to the data. I asked about it on both GA support forum and on mailinglist, but nobody answered. I'm not sure if GA just can't display the exact amount that was passed as last parameter, or I can't find a place where its available. So if you know something, please write the comment below. Thanks!

If you still have questions, you may read a similiar, but more thorough (and more oriented towards Flash CS users) tutorial over here, or ask question in comment below.

Btw, this entry has been cross-posted on my blog: www.koshmaar.pl/blog



Sign in to follow this  
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!