Sunday, March 23, 2014

Megaupdate (GDC 2014, etc.)

Here's a new update on recent events... (poor old blog !)

Yesterday I came back from the GDC.
It was my first time in 4 years (or so) and my first time as an independent.
I went with an Expo Pass, the cheapest one, with no access to lectures.. but that's ok, because my job now is to run a developer studio and develop whole games, not simply to focus on R&D like I used to do as an employee (and mostly enjoyed doing !).

This time I went mostly for meetings. Both formal and informal... speaking of which, with the years, more and more Italian developers have surfaced. Both independent or working in North America.
Although I'm not a big patriot, I often find myself hanging around Italian gamedev forums, and so it was only natural to finally put faces on so many "paesans" 8)

Before GDC, I've been busy with the release of Fractal Combat X for Android.
For the first time we teamed with a publisher and that was generally a good thing.
Because the publisher wasn't comfortable with putting an option to remove ads, we also released a premium edition of FCX.. which turned out to be useful also to simplify publishing on other markets that otherwise required to implement custom in-app purchase APIs.
Check out both the Free and Premium edition on Google Play.

With FCX on Android I feel like we're on a positive path.. asserting Oyatsukai Games as a dev studio that does deliver in terms of graphics, with arcade games that are more console-like and less mobile/touch-screen kind of games.
I'm glad that I resisted the suggestions to move to casual mobile titles.. because I would have been one of many developers out there.. which is not good for morale and statistically bad for business, not to mention that it wouldn't have been fun for me, since game development is also an excuse to learn things related to technology math and physics, the stuff that isn't necessary for most mobile games.

We're now in a place in which mobile ecosystem is expanding into more or less classical console form-factor.
There are rumors of Apple, Google and Amazon all potentially releasing boxes able to run games... all of which mostly require that a game can be fully controlled by an external controller, with no reliance on touch and accelerometer inputs... and we're definitely ready for that !

One thing that is slowly happening is that FCX is becoming a recognizable eye-candy kind of title.
It doesn't have complex cinematics, in fact it doesn't have any cinematics at all. Content itself is limited, but what's there is definitely appealing. Hopefully enough to bring more and more cross promotion from graphics hardware makers (btw FCX is also on TegraZone).

Last, and not necessarily least, FCX is apparently also a fun game.. not an easy thing to do with flight combat games, where it's usually a chore to simply fly, and where other planes tend to be small spots on screen.
After several iterations, and practically no planning, the game managed to turn out as something that becomes fairly exciting to play.. although there isn't too much depth, but that was never the goal of the game 8)

Saturday, October 12, 2013

Progress and std::function<>

Here's another update, against all odds (that are against blogging).

Can a coder sleep at night and wake up in the morning ?
I think so ! I recently set myself to do that, and on top of it, I'm also running about 2 km each morning. Not much, but infinitely more than nothing 8)

For the past 3 years, since I started my independent development activity, I've been postponing physical activity. I relegated that to something that I'd do eventually, once I'd reach some sort of economic stability. But that clearly takes more time than one would hope, so something had to give.

On the development side, there are really no new games, but that's pretty much how it's supposed to be, given the situation with mobile. Meaning that while released games haven't be making me and my partners rich, they are still an important source of income.
It's important to keep the old games up to date and try to make any possible gains off things such as free-with-ads editions, adding new features to keep new users coming or for cross promotions with other companies (e.g. add support for a certain gamepad).
It's also a good way to push forward the development of the common libraries, and to generally learn by refactoring. In short, updating current games, makes it simpler to eventually work on new ones, when the day will come..

Another thing to consider is that the games that we make tend to stand out. So, in the mobile market they are sort of timeless, although economically they are mediocre, but there is some degree of stability and when it comes to income, any sort of stability is a win.

Talking about development, I finally started diving into C++11. Some of the features are really useful, they definitely help writing better code.
The most important feature to me in C++11 is the lambdas, or generally the concept of anonymous functions and the ability to wrap a whole context in std::function<> (see this article for an introduction).
Lambdas are a great way to improve loops without performance penalty. Capturing code with std::function<> and using it a different context instead does add some extra work (and possibly heap allocation), but it's extremely valuable to handle all that kind of code that needs to be deferred.
Basically, C++ finally has callbacks !
It was possible to do callbacks in C++ before, but it was painful, it required extra code, type casting and so it just wasn't practical enough.
With callbacks now, component-based objects are easier to make.. gone is that OOP madness that wanted to push polymorphism at every cost. Polymorphism is often confusing and it's not very flexible either.

Callbacks do have their drawbacks (ah !) however.
For example this code (only illustrative, not tested):

std::function<void()> makeFunPrint( int a )
    // BAD ! Should use [=] or [a]
    return [&](){print( "%i\n", a ); };

void main()
    auto funPrint2 = makeFunPrint( 2 );

..will compile fine, but it probably won't print "2". Because "a" is captured by reference, and basically when the function is called, it will look for that place in memory, which is somewhere on the stack where "a" used to be.. ouch !

So, it's definitely important to be careful with that syntax of closures. But to me that's not the trickiest part. What's more tricky is the general concept of callbacks, which can very easily break the synchronization of logic in the code.
It's not nearly as bad as multithreading, but the concept is similar and there are dangers that can be overlooked.

One simple example is that of a gamepad handler: when callbacks are reacting to gamepad buttons' changes, a game may find itself with different states for the same buttons within the same frame of animation, depending on how things are structured and when events are triggered.
It's something that can be prevented, but situations like these can be overlooked, and they can definitely bite back.
So, callbacks are great, but it's also important to be aware of the fact that they can easily break determinism.. and that's a huge price to pay.

What I ended up doing for the controller and touch input messages, is to cache them in a list of events, and flush that list only at the beginning of each animation frame of the main loop, effectively deferring all user input at a fixed location in the code and in the main flow.

All in all, C++11 lambdas are a great addition. They can improve quality of code in loops without performance penalty and, when captured with std::function<>, can greatly improve the experience of writing higher level code... but there are pitfalls, and it's better to be prepared.


Tuesday, August 6, 2013

Picking a banner for interstitial ads

I understand so little about marketing. It's clearly not my job, I have no experience and I definitely don't have enough time to put into it. Nevertheless, being an independent developer/publisher, I have to try.

I was looking today at some recent results of a cross promotion via Chartboost, and I thought I may share the experience.
The cross promotion consists in promoting Fractal Combat for Android in other games of ours, namely the free editions of Final Freeway (two variations) and Final Freeway 2R.

The results may be obvious to some, but here they are.
Considering the three alternative banners (or "creatives"):
Creative "A" (CTR: 22.32% IR: 0.68%)
Creative "B" (CTR: 24.77% IR: 1.57%)
Creative "C" (CTR: 21.95% IR: 0.55%)

We have the following data (higher is better):
  • A) CTR: 22.32% IR: 0.68%
  • B) CTR: 24.77% IR: 1.57%
  • C) CTR: 21.95% IR: 0.55%
CTR is slightly better for  "B",
the in-game screenshot.
(chart shows relative percentages)
CTR is the Click-Through Rate. Meaning the percentage of clicks received per impression (= ad view).
One creative gets almost to 25% CTR, meaning that the banner is clicked once every four impressions. Actually pretty good ! I think.
Interstitial ads lead to a much better CTR, because they practically take over the screen.
Here there isn't much of a difference between the three creatives. The screenshot-based creative ("B") does only slightly better.

IR is much better for "B",
the in-game screenshot.
(chart shows relative percentages)
IR is the Install Ratio. Meaning the percentage of installs / impressions, basically how many installs are obtained every 100 impressions.
Here "B" gets the lion share.
(Notice that Chartboost gives IR as percentage of installs / clicks. Both are useful things to look for, but in this case I just want to see the direct relation between impressions and installs).

So, the creative "B" clearly wins. One could argue that the illustration-based banner could be progressively improved. For example we already know that "A" performs better than "C", even though they are almost the same.
Still, "B" becomes the easy choice. The game already has good visuals, and an untouched screenshot seems to work well.
If anything, the screenshot where a flight combat scene is depicted leads to more likely users. In fact, while the CTR is only marginally better for "B", the actual IR is much better.
This means that although the screenshot-based banner is not terribly more attractive than the illustrations, the user that gets on the app store page via the screenshot is 2-3 times more likely to convert to an actual install.

The good news here is that if we keep on doing games with attractive in-game graphics, we won't have to put too much effort into making illustrations for marketing material.

Saturday, June 29, 2013

Dragging along

Really, must, update, blog now !

First and foremost, Fractal Combat for Android has been out for a while. First on Google Play and from today on Amazon Appstore.
It's freaking free ! (to play). So, no reason not to download it.

On Google Play it had a good run up until almost 100K downloads, but now it has slowed down... and it's out of all charts, at least out of the top 400 anywhere.

This memorable scene from "Breaking Bad"
pretty much sums up my last three years
trying to make a living off mobile games.
The short report is that with every new release things just seem to be (are) worse.. while of course the games' quality is higher.

I suppose that going with a publisher or anyone that has money to support a marketing campaign on release, and has the public relation ties to get Apple and Google to give a facking rat ass about your game, is a must now more than ever.

Granted, there's great room for improvement in our games, but man, don't I feel shortchanged every time I see some cheap ass game being trumpeted by Apple or Google, while my games have to struggle on their own to gain any traction at all.

It's not all Apple's and Google's faults.. money talks in many ways. Theoretically, if I had millions of dollars, I could afford to buy all the downloads it takes to be #1 game on any rank on any store and probably be set with that, though actually recouping the investment would be a different thing.

Clearly, there are many big players out there that spend more in marketing in a day than the total income of any of my titles..
It's like an F1 race, where the big players have the best cars and always take the podium.. while the other teams are kept in the back by the laws of physics, no matter how good a driver can be or how smart an engineer is, they just don't have the money to afford to compete.

Nevertheless, I can't bitch and moan too much, because as an independent developer I've been luckier than most other so far, and if I can't afford to be independent, I think that I can still get a job that I'll like.

The world is not fair, but that's just the way it is 8)

Sunday, June 2, 2013

Man on fire

Completely unrelated to the recent trend of this blog (generally obsessed with my independent game development) there's something that has been bugging me for a while.. and that's the suicide of Tony Scott.

Maybe for a person with suicidal tendencies it's not something strange, then it makes sense that those that don't "get it" should not be curious about it.
Still, I think that it's a waste and it's unfair to keep the motive private.

It's a waste because one could get insight that could go towards helping someone around them.
It's unfair because it caught a lot of attention and wasted a lot of people's time to follow the news.. and then nothing comes out of it.

The privacy of his family needs to be respected, ok, but still.. the greater good would be to know more.
Was he sick ? Was he having erectile disfunction ? Was his wife cheating on him ? Was it the antidepressant (which apparently can increase suicidal tendencies) ? If we don't know, we can't prevent from it to happen to others.
It's a popular case and it could be used to educate people to prevent similar things to happen...

The moral is that it's not just curiosity, but it's about sharing things that could help improve (and keep !) the life of others.

mumble mumble

Monday, March 25, 2013

More Fractal Combats !

Fractal Combat X has been out for a couple of months now, but I didn't write anything about it.

Can you guess ? It didn't go very well..
I'll write more in detail in a later post, but for now lets make a little logic game:

- FCX is much better looking than the 1.0 of FC (both in-game and UI)
- FCX is free, while FC was initially sold for $1.99 (now $0.99)

..therefore FCX should be loads more popular, right ?
But that wasn't the case.
For some reason, major mobile game review sites didn't bother talking about it, Apple itself didn't notice it and didn't put it in any sort of noteworthy section (not even where FC was placed at the time !).
Apple didn't even put it in a Flight Games section, where instead one can find things like Top Gun, which is rated at 2 and 1/2 stars.. famous title, never mind if it's a good game or not.
Unsurprisingly, FCX was reviewed and featured on Italian sites and even on a newspaper.. eh !
Anyhow, lack of marketing (resources) was the big problem for FCX.

One positive thing this test (let's call it that) is that the free-to-play model worked out decently. Although the game is rather generous and doesn't really beg users to purchase things, a few people do buy credits.
But the game should offer more purchasing options and, most importantly, it should be downloaded a lot more than this (187K times in 2 months and a half, with the downloads peak reached in the second week).

Another generally positive thing is the modest revenue coming from the free versions of the Final Freeway games. It's not much, but it's a big help to keep the business going.

Given that ads are working out well, we decided that our next Android game is going to be a free version of the first Fractal Combat . It's going to be with ads and optional In-App Purchase options to remove ads and to get additional content.
Unlockable features and content is not the best way to do freemium games, but the first FC wasn't meant to deal with virtual currency, and on the Android platform we're still working on the infrastructure to deal with these things.. namely, in a virtual currency setup, the user should be allowed to transfer the game status across devices (or on reinstall), and that requires some server storage, like iCloud, which is what I'm using on iOS.

FCX is based on virtual currency, so for the Android edition we'll have to come up with a solution. Which, if everything goes to plans, it should be the OpenKit system ...but it's not out yet.

Monday, December 17, 2012

What You See Is What You Want To See

I should be putting 100% of my time on FCX, but I need a break.
Making games, like many other things is mostly about perseverance.. it's incredibly psychological and thus one can be affected negatively by stress.. I reached the 99th gate and now I need now I sit for a little before I jump the 100th gate 8)

Cosa sta pensando
il Pensatore Quiz?
A lot is happening in the world right now, and I regret following the news, because it's mostly a waste of time.
For every time I read some news and especially people's comments on them, I could be coding or studying something.. that would only make things better for me and possibly for everyone (if only people were busier being busy than complaining and read complaints..).

We're in a period where people communicate on the Internet more than in any other way. There are all sort of news there and all sort of comments.
One thing that doesn't seem to have changed is how people take sides and hold strong onto their believes.
It's not easy to change a person's mind. In fact, it's practically impossible in the short term. Strong stances can only change with time. You get someone's opinion, let it simmer and eventually that will affect you and possibly make you change stance on things (or vice versa).

The big questions are often about political ideals and leaders. This is pretty much universal.
No matter how free and open the information can be, there'll always be some bias and a group of people that would rather feed their own bias.
That's even worse in countries like Italy, where freedom of press is lacking..

One thing that I noticed in regard to political ideals among Italians is that those are are in Italy and those that are abroad tend to think differently.
It could be that those in Italy have a cleared view.. or it could be that that they are more affected by the local media.
Either way, it comes to show how things can be predicted geographically.. we're stats 8)

Like most "educated" (to so speak) people, I tend to lean on the Liberal side of things.
It works very well in Japan, with its pros and cons, but of course that doesn't prove that it would work everywhere.

Most of all however, it's important to keep in mind that one can only try to guess on what's best.. but it's impossible to tell what's truly better for a "greater good", and it's of course pretty arbitrary to say what's a "greater good".

So, why bother with politics ? Better get busy with something more concrete, like physics..

One of my dreams is to get wealthy enough so that I can stop worrying about how society affects me (above society ?), not because I want to live at the expenses of somebody else, but because that way I'd be one less burden on society and possibly even be of help (hard to help the others when you're in trouble yourself).

When I think that the games I made as an independent reached at least one million of people.. I feel a certain gratification.
I'm not saving lives, but still, entertaining someone with a fun game can go a long way.
If a few of those people playing are also getting interested in development and in the technology behind it, then I may have contributed to get someone closer to science and engineering..

Entertaining is good, getting people to embrace a more logical way of thinking is even better 8)