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

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?

 

 

 

Production line devlog #6: sparks and supply cache GUIs

A few random things went into the latest build of production line this week. I was working away on the GUI for the supply cache wossnames when I got the first sparks animations so I put a test one in (others coming soon), which swallowed up a lot of time. I also fixed some proper zoom-out colors, fixed a disappearing pallets bug, did a fair bit of optimising and also fixed the game so I can quit to the main menu and launch/load a new game without any crashes, which makes things feel slightly more usable. There is also a bunch of new visual assets in there, but I don’t show them off in this video, namely some new pieces of machinery for making stuff, a coffee machine & water cooler for the admin guys, a sofa for the marketing team, and so on.

I’ll be polishing, bug fixing and tweaking in the next week.

Oh BTW, Political Animals is in the Humble Store sale right now at 25% off, so worth picking up. Plus all the steam revenue from Democracy 3 is STILL going to War Child. Help us hit $10,000.

Why I think Tesla is a good investment

I’ve owned a Tesla model S for almost a year now. here is a fab picture of mine taken shortly after I got it:

tesla

It has a few minor scratches. At one point it went back to have the charging flap replaced, but I suspect this was actually only a problem caused by a spot of glue melting in heat on one side of the car. It also needed a door handle replacement recently. Other than this, its been fine. I wont bore you with my personal opinion of the car (its fucking amazing), I want to talk about the company.

Tesla hasn’t made a profit yet. they have paid zero dividends. They have a market cap of $32 billion , revenue of $4billion and a loss of $700 million. Why would anybody invest in such a company?

Tesla is the first major new car company to establish itself in a long time. In fact many people thought it could not happen. That they are still here…is impressive. that they did this as a completely new type of car company (electric) is even more insane. That they are also world leaders in self-driving technology at the same time…is getting ridiculous. That their first mainstream product (the model S) has won numerous ‘car of the year’ and customer satisfaction awards, and is rated the safest car you can drive…is getting beyond parody.

So the product is VERY good, and they have massively beaten the odds. That alone is room to be optimistic, but there is much, much more.

The companies next product (the Model 3) collected so many pre-orders that it was the biggest consumer pre-order event ever. Not this year, or not in cars…its the biggest pre order in history. This is a company with a huge (free) media presence and fan-base. Its marketing costs are practically zero. Ever seen a Tesla ad? me neither. They don’t need them. Think about all that money EVERY other car company spends on ads, and that Tesla don’t need to spend a penny. Even apple advertises.

model3

So they have a good product and a big marketing advantage. What else?

Tesla has pioneered the selling direct-to-customers business model in the US and in Europe. They have even had to fight court cases for permission to do this. The competition is *so bad* that they try to take out court injunctions to stop people buying from tesla. Thats when you know you have the best product. By cutting out the dealership, tesla ensures potential customers get accurate advice, a decent demonstration and test drive, and the company controls everything from production of the car to sales and servicing. Oh… and also the fuel.

Ford sell you a car, but not direct, thats through a third party dealership. You are then on your own. You don’t stop at Ford petrol stations to fill up with Ford petrol that was pumped out of the ground with Ford oil rigs. Tesla are on their way to doing this with the supercharger network and their acquisition of solar city.  Tesla aren’t just selling you a car, but potentially a new Tesla roof that powers your new Tesla car and which tops up your Tesla powerpack in-between trips where you stop at the Tesla supercharger to fill up with energy generated by Tesla solar panels. At some point they will likely buy up an industrial robot company like KUKA, and have even more vertical integration.

This isn’t a car company, its an end-to-end energy and transportation company. The market cap potential of tesla isn’t General Motors, its general motors + uber + exxon mobil.

The *risk* in all this, is that competition with deeper pockets comes along and beats Tesla at its own game. In theory, this is a big risk. In practice…its kinda laughable. Apple, the famously deep-pocketed tech superstar have been quietly and smugly talking about their driverless apple car business for years. Still no car, not even a concept car, not even a sketch. It’s not going to happen. Apple takes years to make a phone with a new button, they aren’t about to make cars.

Every week a new ‘concept car’ or ‘preview model’ of a 2018 or 2019 car gets announced by Jaguar or Mercedes or BMW. Every time, without exception, the cars tech specs are laughably behind the model s and the model 3. The model S exists RIGHT NOW. For a company entirely new to electric cars to beat Tesla, they need a BETTER car than the S, a supercharger network already in place, fantastic brand-awareness and cutting-edge in-car tech. Nobody is close to this. Nobody is even within binocular range of this. The Tesla P100DL is faster (0-60) than a Bugatti Veyron costing $2.25Million. (The tesla is $135k). Thats not a slightly better car, its like a different fucking species.

I haven’t even mentioned the fact that electric cars are actually MORE convenient than petrol (My car starts each day fully charged), costs 4p/mile in fuel, and that Tesla are building the worlds biggest factory to literally double the global supply of lithium ion batteries to get costs down. This is not a normal company. Apple think removing a headphone jack is ‘visionary’. Tesla management must collapse in hysterics when they read statements like that.

Yup, I have Tesla stock. I have a fucking Tesla T-shirt, I’m a believer. I also read about them a lot. I simply cannot see how anyone will stop this company. Lets check in a year from now and see if I feel the same way :D.