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

Why your indie budget calculations are massively, stupidly WRONG on every level.

I see a lot of pitches that contain budgets, I also read a lot of post mortems. Some of them make me laugh, some make me cry, some of them actually make me irrationally angry about how badly wrong they can be. Just in case you are too busy to read this blog, here is the TL;DR:

The cost of your office chair is not contained entirely within your budget for fucks sake.

And yes…this comes from ME the person who famously argued (seriously) that everyone making an indie game should buy (second hand if necessary, mine was ex-display) a Herman Miller Aeron ultimate office chair. (I paid £800).

chair

I see a lot of budgets that look like this:

2 man-years development @ $90,000 per developer.

2 x top-end development PCs.

2 x office chairs

etc…

I don’t reply, but if I did, it would involve swear words and lots of capital letters. Why? Lets look at it like this shall we? I need a new boiler fitted (I don’t…but lets indulge in the willing suspension of disbelief for storytelling purposes). I phone around and ask for quotes from some plumbers. Here is a sample quote:

Quote for new boiler:

1 x New boiler £2,500

1 x plumbers van £15,200

1 x spanner £4

1 x blowtorch £45

1 x plumbers shoes: £65…

plumber

Aha! hold on! we have just realised how totally flipping insane this is haven’t we? Please tell me its obvious…please tell me I’m not the crazy one here? I’m literally begging you. The chair I am sat on typing this is the chair I bought shortly after moving house about 6 years ago. its the chair I coded all the DLC for Gratuitous Space Battles in, also the chair I made Democracy 3, Democracy 3:Africa, Democracy 3’s DLC, Gratuitous Space Battles 2, Gratuitous Tank Battles, and the chair I published Big Pharma and Redshirt from. Its the chair I’m coding for Production Line from. Have I made my point? I hope so. Also its as good as new, I suspect I’m less than half way through this chairs working life. My per-game costs for this chair are probably about £50, of the £800 I invested in it.

Depreciation and Capital Investment are things. If you want a publisher to invest money in you, you MUST at least understand them as vague concepts. Also…fuck publishing, if you are starting in a career as an indie developer (or anything!) you have to understand them. You have to understand investment, you have to understand the long term. It seems a growing number of people are attracted to the ‘romance’ (ha!) of being an entrepreneur, without any willingness to understand what it really means. There are also a LOT of wannabe game developers who think ‘paying your dues’ is something that happens to other people, or only in the movies. While I am annoying and offending everyone, lets go the whole hog and share some realities:

Reality Check #1: You having graduated with a degree in Computer Science does not mean you are gods gift to programming. You will be VERY VERY lucky to get a junior coders job fixing bugs in the tools. Expect to do that for at least a year.

Reality Check #2: Its quite practical to employ programmers on the other side of the planet, even without meeting them. I’ve never met half of the Squeaky Wheel team, and they did a great job. Your competition is global, not the other guys/girls in town.

Reality Check #3: Some cost comparisons:

Consumer Prices in Manila are 59.57% lower than in San Francisco, CA
Consumer Prices Including Rent in Manila are 74.11% lower than in San Francisco, CA
Rent Prices in Manila are 86.59% lower than in San Francisco, CA
Restaurant Prices in Manila are 73.26% lower than in San Francisco, CA
Groceries Prices in Manila are 66.51% lower than in San Francisco, CA
Local Purchasing Power in Manila is 57.87% lower than in San Francisco, CA

Remind me why a studio based in Silicon Valley, made up of young (inexperienced) recent graduates is a better bet for making commercially successful indie games than…I dunno ANYWHERE else on the planet? Oh and by the way, pointing out that health insurance costs are expensive in the US just makes the case for hiring someone from Europe/rest-of-world even stronger.

I know I’m coming across as one of the famous monty python yorkshiremen sketch members..but jesus christ on a bike, why are so many people expecting to walk straight out of college in the west coast of the US straight into a middle class income in a much-desired profession without so much as breaking a sweat? Frankly, even if you DO have skills that are awesome enough to compete with the price differential against coders in other locations, I’d STILL prefer someone who had struggled, and was ‘hungry’ for success than someone who just ‘expected’ it.

I feel that generally there is a vast discrepancy between the income/lifestyle that many recent graduates ‘expect’ and the lifestyle & income they will actually get. I never expected to earn a tenth (seriously) of what I do now, and that’s why I still work as hard now as I did back then. I’m used to expecting to have to work my nuts off to stay in the industry and keep my head above water. Why am I MORE paranoid about competition that many people who are so new to the industry?

 

When I started as a programmer, There was way less domestic competition, international competition was very low, we had little competition from serious middleware (most studios made their own engine), and nobody thought the industry was a path to riches. It was still VERY hard to get a job, and my first job was indeed…tools programming,  and I had to commute four hours a day (yes…four) to get to and from that job, to earn HALF what I’d earned a year before working in IT support. Just because people like me, who have been coding for 36 years (yes really) and released over a dozen games have nice flash cars doesn’t mean you get awarded one on your first day in the industry.

TL;DR: Your salary expectations are very high, and you need to google ‘depreciation’ and ‘investment’.

Production Line blog#8 R&D and Car Sales

Another week…another video blog. This is number eight. I suspect thats more video blogs for any game I’ve ever made, and all before release. Just call me cliffski: the god of social media marketing eh? Maybe not… but at least I’m trying. I wish I could stream on twitch but with a 75k upload speed, that isn’t going to happen. Anyway, it would just be me swearing a lot and drinking tea, who honestly wants that in their life eh?

Here is the exciting new video! it features never before seen dialog boxes and more!

My plans for next week include seeing Star Wars: Rogue one before all you peasants in America, and gloating. I may also get some work done on the game. I aim to get some tutorial style hints on the screen to make it more obvious where all the conveyor belts are facing and what slots can, and can not go next, to make it easier for people to put together their first few Production Lines. I also need to add some cursor hints for when you are dropping conveyor belts and resource conveyors, and I need to get those floating text things back in and looking nice so you can see when you spend money.

In short, I’m going to be concentrating on getting gameplay & usability stuff in there, and not any more graphical features. Ultimately I want a lot more animation and ‘life’ in the game, which will mean a lot of flashing lights and little micro-animations on some of the props, but thats filler for later, after I have some people playing the alpha build and telling me what they think. I *still* have no idea if I will do a closed invite-alpha or an open, pre-order alpha, or some other hybrid. I suspect I’ll go the ‘pre-order and get alpha builds’ route around February next year which is not *that* far away now.

As always I implore you to share, link, tweet, instagram, snapchat, facebook, reddit, square, uber or tinder these videos. I have no idea what half of those are.

Rolling your own 2D Animation compressor in directx FOR FUN

This is the short ‘story so far’ on animation compression for Production Line, my next game. I use my own engine that runs on directx9,a nd the game is isometyric in style, so uses a lot of spritesheet-style animation frames. In short, this is about how I enable animations like the one below (excuse the crappy gif compression, actual image is less pixelated in the real game), to fit into tiny amounts of video memory. (The disk version of that anim is 4MB, compressed for download its 355k). This is an ‘idle’ anim of a marketing manager in the game checking his phone to make all-important marketing related phonecalls…

marketing

You might think that cannot possibly be a 4MB animation, but you would be dead wrong. The actual source graphic is 128 wide by 256 high, after cropping, meaning that a frame of it gets delivered from the artist looking like this:

people_business_phone_sw_0218

Thats no problem, but a complete animation cycle is 300 frames long, and I need two versions, one to look towards, one away (I can flip in X axis for the others). 128 x 256 x 300 is 9.8 million pixels, or a 4096 x 2,400 pixel sprite sheet, which takes up 39MB of VRAM. Assume both directions are in use = 80MB, 3 different characters is 240MB. Thats with one skin color and one gender. Ouch. So obviously we need to compress it.

I rolled my own compression system for fun, and to give me total control over how it works. The first step is to cut out any dead space and remove any duplicates. When our little dude is on the phone, the image doesn’t change, so we have a lot of duplication in that colossal theoretical sprite sheet. How did I approach this?

I decided upon a 64 chunk ‘grid’ for any image that would be animated, dividing it into 8 sections horizontally and vertically. With the raw image I get given, that gives me this:

grid

Actually this is annoying because his hair only just clips into another row, which is inefficient… never mind. The most obvious thing here is that a lot of the animation frame is just empty space. In order to kill both the ’empty space’ and the ‘same as last frame’ problems in one go, I work out a CRC (basically a unique signature) for each of those grid squares, for each frame, and store it in a great big list of data as a pre-processing step.

With all that data in memory, I then go through each chunk of each frame, and look for previous frame chunks with the same CRC. If I don’t find any, I mark it as a ‘used’ chunk. if I do, I just make a note of which earlier chunk to use, and increment the use count on the old chunk. Once this is done, I can go through all the chunks and discard the ones that have a zero use count (or are blank).
Stage two is to create a whacking great spritesheet of all of the chunks that I actually *do* use, which looks like a weird mashup of imagery like this:

sheet

(It also has an alpha channel). I can then go through all of those ‘used’ chunks and make a note of the UV values for each of them in my new spritesheet. Now, the final stage is to go through every frame of the animation, and make a note of which chunks actually get drawn, and the index into my list of ‘used’ chunks. This means I now have a big text file for the animation that tells me which of the 64 maximum chunks of the spritesheet I need to draw in each frame. In the case of this phone-dude, that shrinks the actual texture memory usage by 95%, meaning I can easily have a bunch of different animations.

Thats where I am right now, and its pretty fluid, and works without bugs. The next step will be optimizing the code, rather than the source. An optimisation I managed today was to actually successfully only draw the non transparent chunks when I do the rendering of each frame, which reduces the number of polys and draw calls. The next obvious optimization is to spot when a chunks ‘source id’ is the same as the previous frame, and then not bother updating it at all. Right now, I redo the UV lookup and apply the values every frame for this dudes legs, even though they don’t move during the whole animation. Thats a bit too much processing for my liking.

I’m sure middleware *does* exist that does this, but I like to code stuff myself so I know 100% how it works, 100% how fast/slow it is, and can ensure compatibility with all the rest of my code and workflow. I’ve probably spent a week doing this, maybe a bit more, but I have a pretty cool system now that lets me knock up a 30 secon text file when I get a new bunch of animation source files, then hit the launch button and the game will do all the preprocessing and give me the compressed data automatically. Yay.

This also means that with only 4MB+4MB of VRAM for an animation for a character, I could double the characters, and have both genders without running out of VRAM. This also makes the game more usable on low end PCs. Now the limit is my art budget, rather than the hardware :D Anyway here is a reminder of the final video, and also that this is for my car factory game: Production Line

marketing

Production Line blog video#7: BIGGER factories, sounds, and some gui stuff.

Trying to get Production Line close to an alpha release for people means doing a lot of relatively tedious stuff like resolution pickers on options screens, proper save game support, and so on. I still need some vague tutorialish stuff in there, and a host of minor bug  fixes before I even consider letting real early-adopter hardcore types try the game, but I am definitely making real progress in that direction.

Here is the latest video:

There is always something dodgy that has just gone in when you release a video, and this time its a mish-mash of factory sounds that er a bit ‘overpowering’ and not right. Still…better to have something rather than just a weird silence, or all those 1900s hammering noises I had in beforehand :D I’m also slowly working towards a better video presentation. I keep getting a glitch on my webcam which is I think because I was setting it to record at 1920 res, when I only use it for that bit in the corner, so hopefully shrinking that means I will have less demand on the video card and a smoother image next time. I am still really new to youtube, but at least I have a regular schedule I can tempt people to subscribe to now.

BTW Democracy 3 and Big Pharma are currently in the Humble Tycoon simulator bundle, which you may wish to check out:

66a4d2a484e775d3c344d6d258a8b5f2f3920c48

https://www.humblebundle.com/tycoon-simulator-bundle

 

Free/Fake News, Games Journalism & the future of online.

Big topic, but I’ve been musing this for a while.

Regular readers of my blog will know me as a big supporter of advertising. Some years I’ve spent six figure sums on advertising. Ouch. Advertising works, and I won’t bore you trying to prove that, when there are great books out here that can do this, scientifically with hard evidence. The problem with advertising is not that it doesn’t work, but that people are trying to kill it off, without (as usual) thinking about the long term consequences of their actions. This is  a general problem with society, we try to ‘fix’ X with no thought to the secondary or tertiary effects. Its human nature. I even made a game that models such effects which helps explain why politics often gets this wrong.

Ad-blocking is becoming more and more common, and this presents a problem not just fort advertisers (its a problem they can actually solve), but for consumers and society as well. I’d argue its why Donald Trump is president, and why nothing has been done about climate change. Seems a stretch? let me try to persuade you.

Firstly let me write in defence of people who block ads. Generally I do not block ads, I do not have ad block installed on my PC. I have a different plug-in called ghostery. Ghostery is there to identify and optionally block ‘tracking’ beacons and cookies that are often found on sites where you would not expect them. Visiting a site that shows me ad banners is just fine with me, but notifying dozens of different companies about every site visit I make is…not ok. I am prepared to have a Volkswagen advert in my peripheral vision while I read the news. I see that as a (more than) fair trade. II do not see the notification of facebook, google,twitter & a dozen companies I’ve never heard of that I am reading that same article to be a fair trade.

ads1

Some sites I visit, with a simple 4 or 5 paragraph article, have 20+ trackers identified by ghostery. In the real world, you could imagine this as me reading a newspaper with 20+ anonymous businesspeople stood behind me peering over my shoulder and making notes of who I am and what I’m reading into little notebooks. Are you happy living your life like that? I sure as hell am not.

So people rebel against this (and who can blame them) and as a result they install ghostery or adblock, and continue to surf the web. The ads have magically disappeared, and all is good with the world. Somehow the online content is still there, but we never care how it works, because we just assume we can free-ride of all the dumb schmucks who have not installed ad blocker yet. The problem is…the scales are tipping so that too many of us are blocking, and not enough of us are viewing. The end point of this trajectory is that the people producing the online content are not earning anything from ads. What happens next?

The BEST outcome, and it may seem perverse but the very BEST outcome is that all of those sites go bankrupt and close down. That the very best thing for society that can happen. Sounds weird? well again, do not focus on the immediate consequences, think about the secondary and tertiary effects. Someone who runs an online news site, or games review site already has staff, maybe premises, they have web hosting, they have technical skills…are they going to give up when ad revenue dries up? Not without a fight, which means (after perhaps a period of fighting a losing battle with ad-block-blockers and then begging…) they will take money from wherever they can get it.

ads2

This used to be an indie games review site. You probably have not heard of it, it didn’t do well. Getting attention is hard. The thing is, if you read any of the articles on there, you probably do not notice any major difference between it and any other games website. There are no ads…but then you assume they are just getting blocked right? In fact no. There were never any ads on the site. I own it. I set it up to promote indie games, and hired a journalist to write for the site for a while. I did it because I saw a very long term business case for ME to do this. The more people who played indie games, and heard about indie games, the better the prospects for the industry I was in. It also meant more indie game devs knew who I was, just as I was going into publishing. It als meant more ‘independent’ coverage of indie games that prevented the whole industry becoming steam plus rock paper shotgun. This was a strategic business move by me. BTW I am a game developer. Are you happy with me owning a games news site?

Luckily I’m a nice guy, I’m not out to screw people over, and even if I was, the journalist who worked for me is a very honest nice guy and has a lot of integrity. However… it would have been easy to hire someone a LOT less scrupulous for the same money on the understanding that every fourth article would be about MY games and incidentally how awesome and underrated they are. Believe me…its not difficult to find wannabe journalists looking for actual paid work.

The frightening thing is…as a reader, you have no idea. You read something online and you just assume its free. is it unbiased? Is it actually paid content? Did the journalist get flown to Barbados to review the game? When journalists cannot earn any money from ads, a 3 night stay in a five star hotel in Barbados to review Grand theft Auto sounds irresistable. The real killer is that its probably CHEAPER than conventional advertising, and it comes across as more ‘honest’. Oh the irony.

So circling back to Trump, Climate change and fake news… If you haven’t seen my point yet, here it is in four words.

Someone is always paying.

In the past, you knew who. it was Volkswagen running a banner ad. it annoyed you, but you knew who it was. Very WORST case, if you were reading a  review of the new VW Golf and you saw the ad, you probably thought ‘hmmmmm’ and maybe engaged some cynicism about the articles impartiality. Thats good, that’s how it should work. The problem now is that the ad has disappeared, but that SAME money will be spent, and it will make its way to the guy writing the article somehow, you just cant see it, and you probably don’t even think about it.

We suffer a lot from ‘fake news’ lately, which has been blamed/credited with Donald Trumps election win. I recognize the phenomena from climate change, where there has been a history of ‘fake news’ claiming that wind turbines don’t work, that solar panels never pay back their costs, that climate change is a Chinese hoax…and other such bullshit. The problem is the same: ‘News; being written not because it is actual news, or even true, but because the person paying for the news has an agenda, normally one that furthers their business interests (in this case big oil).

Note the phrase: “The person paying for the news”

That used to be you. It used to be me. We used to pay through ads, and that got annoying and now we just block them and don’t think about it. These days we pay in other ways, maybe through surrendering our personal information to Facebook (who doubtless then sell it), or maybe we pay with our votes. Yup, we pay with our opinions and our freedom of thought. We stopped paying journalists years ago, and never gave a damn about them, which means that we can now hire journalists for dirt cheap. You got a marketing budget of $50k? that will write a LOT of articles, believe me. You have a marketing budget for your oil company of $1billion? How much for the US election campaign?

ads3

Journalism is cheap, and we made it so.

So how the hell do we fix this? Well its actually quite simple, in the way that all solutions people do not want to hear (use less fuel, fly less, eat less beef to help with climate change) are simple. The problem is they require you to think long term and behave in a way that seems irrational in the very short term.

PAY for journalism.

You can subscribe to a lot of news sites. this gets rid of the ads. If you are a gamer, Rock Paper Shotgun has a supporter program. Online versions of UK print newspapers like the Guardian and Times have subscriptions you can pay to. The economist is a great weekly news magazine you can subscribe to online. I honestly believe that paywalls will become MORE common, not less. Everyone jeered at the ‘evil’ times paywall. Its still there. And don’t make the mistake of thinking you are a ‘mug’ or ‘gullible’ to pay for something like this. I hope I have established in this article that you are ALREADY paying for it, you just don’t see the connection.

And to round off, here I am, a highly skilled and very experienced software developer and business owner typing this article on a VERY cold Wednesday morning instead of coding my next game. How am I doing this? Why do I have this blog? What is my motivation? Well clearly its a bit of personal PR and branding. If you read all this stuff, now and then i have a post thats about my latest game and its trailer. Thats how I am getting paid for this. I don’t *deny* it, but then I don’t bang on about the link either.

Was this article really *free* for you? Have a think about it, and if it concerns you that this was motivated by me wanting to sell you stuff, you can formalize the arrangement by paying what you want for the Humble Tycoon Bundle, which is on sale now and includes Big Pharma and Democracy 3.

hey, at least I haven’t stuck any ad-tracking cookies on here right?