Game Design, Programming and running a one-man games business…

Production Line Marketing: Balancing out the factors

Not marketing the game…but marketing *in the game*. As You may be aware, my car factory sim Production Line got its first taste of marketing as a feature in the last patch (1.26). The current setup is very simple, you can research marketing, then place down marketing facilities that generate ideas, but nothing else (yet). In the next patch, the games marketing system will be fleshed out more, introducing marketing campaigns which you can use to generate brand awareness. here is a screenshot of the resulting new dialog box:

This is all in, coded, tested, and works. So hurrah. SHIP IT.

Maybe not yet, as it requires balancing, and when considering how best to do this, I made the following list of potential balancing factors I should consider to get things right first:

  1. The research cost of marketing as a base research item
  2. The purchase cost of a marketing facility
  3. The running cost of a marketing facility
  4. The idea requirements of each campaign
  5. The idea generation rate
  6. The cost requirements of each campaign
  7. The effects of each campaign and the variability of those effects.

Obviously this is effectively a system of counterweights, where increasing or decreasing one will impact all the others. There are reasons for/against changes to any one of these. Ideally marketing campaigns last long enough that they are not too ‘needy’ in terms of interrupting the player. The effects should be noticeable and strategic, but not unbalancing or sure-wins. Marketing will work great as a mid-to-late game feature, so it shouldn’t be attainable too early. It should be something that requires an investment, but not a crippling one, and one that generates a positive ROI in general.

Thinking about the real world, a marketing campaign is essentially a fixed cost, one that you hope makes a positive ROI when spread over a sufficient number of sales. I would like to engineer a system that means it makes sense to run a $500k print campaign if you are selling 10X cars, but maybe not worth it if you are selling just 1X. To put it ion car terms, if you have a single showroom in one city, spending $500k to increase footfall in that showroom by 50% wont be worth it, but if you have 10 showrooms and 10x the potential customers, it will be.

Right now we have a system where there are 3 car body types and 4 price points, so 12 customer categories. Those categories have no fuzziness, so if I want a mid-range compact car, no amount of bargain pricing or marketing will change my mind on that basic fact (I may introduce some fuzzy logic to this later). What this means is, if I have a single car model, then 11/12 of my customers are wasted anyway…

With a general ‘brand awareness’ campaign (the only type I’m working on this month), it will not make any sense (hopefully) to do this for only 1/12th of your customers. In effect, I’d be generating even more footfall from people who come into the showroom and say ‘I keep hearing about positech autos, but they don’t make SUVs in my price range’. A waste of money… If I have a fully kitted out range of cars, that calculation changes.

Lets examine my test numbers:

A print campaign lasts 24 hours and costs $500,000 to run. It boosts brand awareness (and thus footfall) by (on average) 10%. Current footfall is 5 customers per ‘sales interval’ (which is 4 seconds, or 4/120 of an hour) That means we get (on average) 150 customers per hour, and this campaign will mean a bonus 15 customers per hour. 24 hours means a bonus 360 customers. This means its cost us $1,388 per customer through the door.

Assuming that we offer cars to 50% of the possible market (note not all of the 12 categories have the same market share), then we have to double that to $2,777 per customer. Assuming an average car sale of $20,000, we are selling cars with a 13% marketing spend. That actually sounds pretty reasonable.

Of course, the real strategy for the player comes in when they have cars piling up in stock, or not. When you have excess stock building up, you can ALWAYS shift them by dramatically lowering the price. The strategy will be in knowing whether or not it makes more sense to lock in $500k to bring in *more* customers to view those cars, or to lower the price.

I like the way this is balancing out, because without explicitly saying “this is a late game feature”, it becomes evidently true because its not worth advertising to the mass market without having a mass-market range. The real problem is how I convey that to the player. Player-feedback is something that production line is currently bad at, and something I need to work on. I could maybe have a pop-up from your head of marketing that runs through those numbers… a dialog saying “our campaign has resulted in X new customers, so $X per customer, but only Y% of them found a model in our range they would consider. Maybe we need to expand the range?”

As usual; in complex sim games, it becomes a case of 25% code the feature, 25% test the feature, 25% balance the feature, 25% explain the feature. I guess I’m half way there for brand-awareness marketing…

First minor bits of marketing GUI heading for production line

Having been away for a week to relax, coming back to work I have a desire to release an update for Production Line sooner rather than later. I hate people thinking work on the game is slowing down or stopped (ha! no chance). Because a week off means a week less features, this update which i plan to test tomorrow and deploy Sunday will not be huge, but it will have a whole host of minor bug fixes and tweaks, and also the first steps towards marketing.

Basically you will be able to research marketing facilities and place them in your factory like this:

And there is a new GUI you can launch from the main menu strip at the top of the screen which for now just shows you that same summary information. Right now, the facilities generate ‘ideas’ over time, and those are saved and loaded, but you cant use them yet until I code some basic marketing campaigns which should start to go in next week.

Also in development are some new achievements, and a new car body style (4×4 or 4 wheel drive if you prefer, or jeep-style-thing if you prefer). and eventually some proper sound effects. I’ll probably get around to some more optimisation and some proper tutorial improvements soon too. With any luck I’ll do a developer blog video tomorrow.

In unrelated news, our village has been told we will get fiber internet by 2018. Yay…but I’m not holding my breath. still waiting for a quote for ‘fiber-to-the-premises on demand’ (FTTPoD). Theoretically that’s 300Mbps down 30Mbps up, which would be amazing, but the cost is outrageous and I’m getting annoyed it takes so long to even get a quote.

Getting threads to rapidly schedule tasks in C++, Windows

very techy post…

My latest game uses the same multi-threading code I’ve used before. This is C++ code under windows, on windows 10, using Visual Studio 2013 update 5. My multithreading code basically does this:

Create 8 threads (if an 8 core system). Create 8 events which are tracked by the 8 threads. At the start of the app all of the threads are running, all of the events are unset. As I get to a point where I wwant to doi some multithreaded code, i add tasks to my thread manager, and when I add them, I see which of my threads does not have a task scheduled, and I set that event:

PCurrentTasks[t] = pitem;
SetEvent(StartEvent[t]);

Thats done inside a CriticalSection, which I initialized with a spincount of 0 (although a 2,000 spiun count makes no difference).

Each of the threads has a threadprocess thats essentially this:

WaitForSingleObject(SIM_GetThreadManager()->StartEvent[thread], INFINITE);

When I get past that, I enter the critical section, grab the task assigned to me, do the actual thread work, then I immediately check to see if there is another task (again, this happens in a critical section). if so…I process that task, if not, I’m back in my loop of WaitForSingleObject().

Everything works just fine… BUT!

If I have a big queue of things to do, my concurrency charts from vtune show stuff like this:

Seriously, WTF is happening there? Those gaps are huge, according to the scale they are maybe 0.2ms long. What the hell is taking so long? Is there some fundamental problem with how I am multithreading using events? Does SetEvent() take a billion years to actually process? If feels like my code should be way more bunched up than it is.

Deliberately frustrating fun

A lot of words have been written on the topic of flow in game design. Mentioned frequently alongside ‘mastery’, the general concept is that players enjoy a feeling of relatively stress free-calm travel through an experience where they encounter little resistance or setbacks, and preferably no ‘hard stops’.

With one aim of commercial game success being tied to keeping people playing longer (often because the highly connected gamer effectively ‘broadcasts’ their choice of entertainment to logged-in friends), creating and maintaining a sensation of ‘flow’ within the player is seen as highly desirable.

A typical game design that works well with this system is the match-3 puzzle game, or tetris. A never-ending game with a simple, but satisfying mechanic that rewards mastery yet will allow uninterrupted play in relaxed, stress-free state.  Such games can be very popular, no doubt very popular. Obviously, we have lots of them.

My latest game ‘Production Line‘ is a weird hybrid of two different design goals, to create a sense of flow, but to interrupt, pause, disturb and frustrate that flow, deliberately so as to create the endorphin rush as that frustration is fixed. Effectively what I’m doing to creating a design where the enjoyment comes not just from the state of flow, but the satisfaction and catharsis of fixing an impediment to that feeling.

Creating a ‘well-oiled machine’ creates a strong sense of satisfaction and happiness in many gamers. Its perfectly natural to look upon something you have arranged and see it work flawlessly. For some reason, this seems to appeal particularly to Germans. It also appeals strongly to me, I enjoy the sense of scale, control, to be honest- POWER that come from having built a large impressive, complex, working… *thing*.

But watching something you created do its job is only half of the pleasure. Something in our brains seems hard wired to want the next challenge, and the next, and the next. To this end, Production Line is designed as a deliberately unsolvable puzzle, an impossible balancing act. A simulation of a system so complex it has no practical perfect solution, only progress towards perfection, but no risk of attainment.

As a car-factory simulation, this feels both natural and believable. Producing something as complex as a car requires a huge number of tasks, many of which have dependencies, and none of which will take the exact same amount of time. As a result, regardless of production scale, bottlenecks are absolutely inevitable. Flow is impossible, a dream to aspire to, an unachievable goal, but one where the struggle to achieve the goal is nonetheless enjoyable.

I suspect that the general consensus of game designers is that frustration is the enemy of fun. Frustration is a negative feeling, and one to be avoided, but games balance out the good and the bad to achieve greater pleasure all the time.  The satisfaction of finally tracking down and counter-sniping someone in an FPS who shot you six times in a row is far greater than it would be without the frustration of being picked off by them again and again and again…

I’m sure some people will look at my best known game (the political strategy game Democracy 3) and my newest car-factory sim (Production Line) and think there is little in the way of a common theme, but in design terms there definitely is. Economics is a system so complex pure balance can never be achieved. Push here and the system pulls there, just like fixing a bottleneck on a car production line, or improving the effectiveness of a part of your fleet in Gratuitous Space Battles.

Positech. We make frustrating experiences fun :D. (Hopefully)

YOUR INDIE GAME WILL FLOP AND YOU WILL LOSE MONEY

At the time of writing, a quick check of stats on steamspy for player unknown:battlegrounds reveals this chart:

A very basic analysis suggests 500,000 copies this month, at $30, minus maybe 40% for refunds/taxes/steams cut gives us:  roughly $9million this month. Total sales stand at 3 million, for a total estimate of $53 million so far since release 3 months ago. Assuming a lifetime doubling of that 9conservative) that gives us about $100,000,000. income.

The developer is listed as bluehole inc, who apparently have about 90 staff: https://en.wikipedia.org/wiki/PlayerUnknown%27s_Battlegrounds

So the average income per employee there is a million dollars. original team size was 35, so assume that half the money goes to equity holders and its split equally between the 35, that gives them roughly $1.4 million each. In practice thats bollocks, because more likely 80% would be going to the equity holders and I’d guess 90% of that belongs to maybe a handful, at best 4 people? (I have ZERO idea, this is my guesswork), which means company founders are probably getting about $22 million from the game. Include sequels, potential DLC, merchandise and so on, and you can probably round it up to 25 million.

Thats a fuck-ton of cash.

But the problem is, the chances of Joe Indie game developer achieving this are close enough to zero as makes no difference.  There are 348 pages of ‘top sellers’ on indie games on steam. Taking the mid point, and looking at the top game (I wont pick on it publicly, so lets not name it). Its an RPG with Zombies in apparently (that shouldn’t narrow it much :D). Steamspy says…. *drumroll*

3,500 owners. Top price has been $9.99, been out 9 months. Maximum conceivable income is $20,979 to the developer. In practice, as its been on sale, lets multiply that by 50% and get about $10,000.

This game isn’t exactly World Of Warcraft but it has a proper 3D graphics thing going on, positive reviews and a decent capsule graphic. lets depress ourselves with the numbers:

Assume the developer is a single person with no other costs and keeps all the money: $10,000 a year, or roughly 1% of the revenue/employee as PU:BG.

Assume they are the founders/owners/creators and keep all that sweet cash, they earned roughly 0.04% of the equiv person behind PU:BG.

Yes…these figures are very very rough, but I didn’t deliberately pick something bad, in fact I picked half way through the indie top sellers. Are we really thinking they sound so out of whack? This is a WINNER TAKES ALL market. You are either in the top 0.1% of indie game developers, or you are unemployed, with an expensive hobby where you make effectively free games.

This is nobodies ‘fault’. Steam didn’t cause it, Unity didn’t cause it. games got easier to make, and more people got access to PCs, development kits, computer skills and broadband. Its really no different from waiting tables whilst pretending to be an actress, or avoiding admitting you are unemployed by claiming to be a writer. There is virtually nothing I can do about this, and nothing you can do about this, but there is something we can collectively do to at least minimize the collateral damage:

Lets admit that the default position for an indie game developer is pretty much poverty. If you want to make money, maybe one day buy a house, start a family, have a pension, why are you making indie games? You KNOW you are almost certainly screwed right? or to put it another, simpler, TL;DR way:

YOUR INDIE GAME WILL FLOP AND YOU WILL LOSE MONEY

Now, *some* people don’t flop, and do well. And that *might* be you, but I urge you, go into this job (like any other) with your eyes WIDE open. Your chances of success are incredibly, incredibly small. This is not a sensible career. This is not a wise career move. This is almost certainly personal financial suicide. You may (like me) feel compelled to make games regardless of success or failure, but ALWAYS know the odds. ALWAYS. (Han solo is wrong about his topic). I know people get inspired to make games by reading about the success of some developers (including me), and that’s great, but always know what you are doing. Do not remortgage your house to do this. Do not both quit your job and live off savings to do this when you have kids to support. Do not assume you are different or special.

Treat this as a disclaimer for my blog: You are reading the thoughts of a guy who was coding since age 11, has 36 years coding experience, has shipped over a dozen games, several of which made millions of dollars, got into indie dev VERY early, knows a lot of industry people, and has a relatively high public profile. And still almost NOBODY covered my latest game (in terms of gaming websites). Its extremely, extremely tough right now.