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

OH MY GOD A… Holiday?

I am going away. Yes really. Despite being the kind of person who works every weekend, and is puzzled by other people not doing so, I am occasionally persuaded to leave my home-office and go see parts of the world. I don’t do it *that much* mostly because of the ‘not wanting to do too much flying‘ thing, so if I *do* actually fly somewhere, I do try to make the most of it. I’m also completely paranoid about being away from my business for any length of time, so I’m a bit of a nightmare person to arrange holidays with

Anyway…

I am heading far away to the land of ice bears and where the dust comes from, or something like that. I’m told there are bears, and glaciers, and a friend I’m meeting up with assures me there is good sushi. It probably looks like this:

I’ll be heading off tomorrow morning, and back on the 7th of August, which is a scarily long time for me. I’ll be checking email occasionally but apparently interference from the ice bears and the dust means there isn’t much in the way of wifi.

I hope that I’m leaving Production Line in a pretty good state for 2 weeks. I just finished fixing a whole host of crash bugs, and got really good feedback about it. I have a price-GUI change that I’m going to quadruple-check later today and maybe make live on the steam build before I go, as its a pretty minor (but aesthetically much needed) change. While I’m away I am hoping to switch off a bit from work, I have two BIG books to read, and I’m reading both with my wife so I cant get lazy and not finish them. I will doubtless still worry about unanswered emails and unanswered tech support requests on my forums and on steam. Early Access customers can (rightly) be concerned that a game has been ‘abandoned’. (It really hasn’t :D).

I’ll also probably worry a lot about some green energy investment thing that is causing me *distress*. Hopefully the ice bears will teach me how to relax.

My twitter account for the next two weeks will mostly be pictures of ice, and bears.

 

 

Risking everything you have to make it as a successful….cliche?

I think the key to making money at something is to invest for the long term, be prepared to lose before you win, to put your money where your mouth is and take big risks…

…to an extent.

You probably know about survivorship bias, where you listen to nothing but the tales of success from people who took big risks. There are definitely many, many cases of people taking insane risks, those risks playing out and them making a huge, incredible success of it. In the world of video games, valve deciding to sink all the half life profits into HL2 AND also trying to create a digital distribution store when retail was still all-powerful was an insanely high risk venture. It worked, and the rest is history. Making a game which fits in no established genre such as the Sims or for that matter, ‘Democracy’ is also a big risk. Doing this entails being prepared to be wrong in a BIG way, and lose 100% of your investment.

This is something I am minded off today when reading a very long, depressing and complex email about a renewable energy investment I made that is being held up and rejected by government bureaucracy (with zero cause) which could, theoretically lose me a fair chunk of money. Real actual *OUCH* levels of money. It will be extremely vexing if this is the case. I tolerate that sort of risk, because when investments like that work, they work very well, and the returns are great.

I’m a high-risk investor who is happy to tick the ‘yes I know what I’m doing and may lose it all’ box on a regular basis. I have some money in lithium mines, some in palladium futures, lots in the electric car company ‘Tesla’ and a bunch of robotics and biotech stuff. Some of this has been a huge success. others… not so much. Overall… I think I’m doing well, but you never get to say that until you cash out. I’ve also invested in indie games, both as a publisher (Redshirt, Big Pharma, Political Animals, Shadowhand) and as a passive investor. Some of these made several times my money back, some have lost me money.

And right now…as I type this I have two CFDs (very short term bets) on Tesla, both of which I am DOWN on, and both of which cost me money each day just to keep the bet running. I have made 37 consecutive profitable trades doing this, but may be close to coming unstuck on these two. Only time will tell. You can probably understand why I thought I couldn’t lose: (The loss calls still make a profit, just at the lower range of my position)

The trick is… I’m never betting the farm. Do not bet the farm. Ever. I’m not even betting a small barn from the farm.

Don’t think I’m not tempted. I’ve seen stock market trades, AND video games, where I’ve thought ‘LOL, this is easy money. I should sell the house, car and liquidate everything else to really max out this sure thing’. Sometimes those trades shoot way up, and I hate myself for being such a coward. Sometimes they go up a bit. Very, very rarely, they crash like a meteorite. The end result of my level of caution is that I’m not a billionaire, but I’m not in the gutter either. This is a *good thing*.

Do not risk everything to make your dream indie game, or fund the writing of your first novel, or even your second or third or tenth. I’ve made a lot of games (at least 20), and even if I thought my next game was a sure-fire hit, I wouldn’t bet ANY money that I couldn’t afford to lose. Obviously this is much easier to say with no mortgage and some cash in the bank. Normally people cannot possibly make a game without spending their last dollar on it… or can they?

These days we have kickstarter, we have patreon, we have indie publishers. if you cannot persuade anyone to give you the minimum money you need to make an early access game through any of those three avenues, then that is a BAD sign and NOT a sign you should remortgage the house or sell a kidney. There is a myth that you have to ‘risk it all’ to become a hit, which is perpetuated by Hollywood movies, and TV shows where this trope of ‘risking it all’ and ‘succeeding just before they ran out of food’ becomes embedded in peoples idea of what it means to be ‘creative’. The romance of the ‘struggling artist eating out of bins who then becomes a billionaire’ is frankly bollocks.

Democracy 3 is a good example. Its a successful game that made me some decent money. Did I risk everything to ‘take a chance’ and make a hit? Nope. I risked fuck-all. I coded that in my spare time while I had a full time job (and a contract to ensure that was ok). I then made a sequel when I knew that the original was already popular. My wife and I both worked full time and we had no kids, so me then deciding to quit and make more games was zero risk, especially as I was already making more from my older games than I was getting in salary anyway. In all my times making video games from 1998s Asteroid Miner onwards, I’ve been unable to pay the mortgage for two months in total.

By all means take some risks. Risks are good. Risk is part of life. Don’t make any decision that could wreck your life and screw up your family.

 

 

Equipment breakdowns in Production Line

Something that I have always wanted to have in Production Line (and which is popular with the players as an option) is the idea of equipment breakdown and reliability. If you have played the game already you will know that having a sudden ‘stop’ in the line is incredibly disruptive to output, and thus profits, so introducing the risk of breakdown would make for an interesting game mechanic. With this in mind, I’m starting to think about implementation.

So to start with, what are my design goals for this new feature in the game? I see them as these:

  • Add a new random event to shake up late gameplay.
  • Add a new research tree option or options to improve reliability
  • Add a new consideration regarding factory design and layout.

Right now, there is a slight problem in that, until world events get coded, the late game is one where you can simply leave your factory to run endlessly at a profit. In some ways, this doesn’t matter, as factorio has proven, the real goal is building fun and efficient layouts, not just achieving a set goal. However, it would be nice to have something that interrupts this otherwise fairly predictable process, so having a key production slot break down would be an interesting way to do this.

New research options are always fun, but I’m not sure which way to go regarding the reliability and repair stuff. On the one hand, I could offer slot-level upgrades which allow the player to (at a cost) buy more expensive robots and parts to reduce the chance of that slot breaking down. On the other hand I could introduce a global factory wide system of researchable upgrades which boosted the reliability of the entire factory? The second option is perhaps a little unbalanced because in the real world, such research would lead to systems whose cost scaled up with the factory size. I already have some upgrades that are ‘one-shot-regardless-of-factory’ like conveyor speeds, and in retrospect, these seem perhaps a little too generous. I should probably avoid expanding that.

 

 

So that would leave me with perhaps the idea of a series of ‘reliability’ upgrades for every slot in the game. Maybe ‘Enhanced maintenance’ ‘Error monitoring system’ etc, which when purchased at a slot would progressively reduce the chance of a breakdown. This might make for interesting decisions because for example if a single paint-dryer in a line breaks down, thats no big deal, so you could avoid paying for that upgrade, but if there is a single point of failure thats critical to the whole line… maybe it would be worth it.

This all leads into my final goal and would make it more sensible to plan for multiple lines, or at least partial lines, as a hedge against single line failure. I sometimes design my factories with parallel lines with cross points, which would allow production to route around broken down slots just like the internet routes around failures.

So given that I want there to be breakdowns, and researchable techs that reduce (but never 100% eliminate) them, how should the actual mechanics of a breakdown take place? The simplest and cleanest implementation that occurs to me at the moment is to give each slot a chance of a breakdown per minute of game-time.  If we assume each slot has a 99.5% uptime, then we are talking about a breakdown of ten minutes every 33 hours.  Very large factories could have maybe 200 slots, which would mean one of them was always broken and in need of repair. That sounds reasonable? (alternatively I could tie breakdown chance to time spent actually running…which makes more sense).

This allows for two different upgrade paths in terms of dealing with reliability. We can have research that decreases the chance of a breakdown, and research that decreases the duration of a breakdown. It would be interesting to have the chance upgrades be a per-slot thing (I’m thinking better engineered robots, better designed processes at the slot…) and the duration upgrades being global (maybe a better trained maintenance team to attend to the breakdowns?).

 

 

In terms of GUI, I’m thinking a new slot status notice (like we currently have for ‘no export room’ or ‘not connected to resources’ ) saying “breakdown!” and possibly a timer next to it (more realistically a circular progress count down thing?) showing how long it will be out of action until the breakdown is fixed. So with that in mind, here is my first-pass thoughts about how to implement breakdowns and reliability into the game, as a todo list for me:

  • Add a base chance for any slot to breakdown and make this trigger a breakdown of some random duration range (say 7-15 minutes?)
  • Add a new global variable for ‘breakdown repair efficiency’ which can be changed by global research items.
  • Add new researchable technologies to reduce the duration of breakdowns.
  • Add new upgrades for each slot that reduce the likelihood of a breakdown.
  • Add new researchable technologies that enable the purchasing of those upgrades.
  • Implement a nice GUI to show breakdowns when zoomed in and when zoomed out.

There are of course a bunch of other options, such as adding a repair-cost that gets auto-deducted when a slot is being repaired (but what if that sends you bankrupt? surely needs to be optional…requiring more GUI…), or requiring new repair-shops to be placed down to ‘unlock’ certain upgrades (but then can you delete them after the upgrades are in effect?). The system as described relies on the player accepting that a ‘hidden’ global variable (breakdown duration and chance) really is changing, unless I add yet more GUI options to show this to the player.

As I type this I realize there could also be the possibility (maybe as a secondary feature to code), of slots ‘silently breaking’, in that every car they work on produces a defect…This would be a bit evil, but also pretty cool, as you would have to introduce regular QA to track down the cause :D)

My biggest fear, (as should always be the case with Early-Access) is that I could screw up and make the game *worse*. I don’t want to make the game unbearable at the start (where a single slot breakdown may be more critical), but then I don’t want to make the game too easy in the late game either. I could just *cheat* and not let slots break down at the start of the game, and actually more realistically, I could just give each slot the first 48 hours or so to be totally free of breakdowns (makes sense as they are new…). Ideally breakdowns become a serious concern, but not annoying, which is an incredibly thin line to walk.

I am as usual always interested in peoples thoughts on this as a new mechanic for the game.

 

An open letter to my liberal friends

I have friends all over the political spectrum. Some of my friends have other of my friends on blocklists. I’ve seen the most antagonistic yelling between people I know on twitter many a time. I recently sat and chatted to an older friend who said stuff that would make my more liberal friends spontaneously combust (they meant well…attitudes change over the generations). When I was young (teenage) i was VERY left wing. Now…I describe myself as a liberal capitalist environmentalist. I feel I can criticize and support positions from all over the spectrum. I don’t feel a need to pick a ‘team’.

So… Theres something I often feel like yelling at my more liberal, left-wing, right-on socially conscious buddies, but I never do it to their face because…I’m actually a fairly agreeable non-conflict person most of the time in real life. So here goes..

FOR FUCKS SAKE STOP FLYING.

Now for the nuance…

If you read my blog you will know I’m a pretty passionate environmentalist, a big fan of electric cars and solar power (and wind power). I invest in a lot of green tech, and I try to be as green as I can in the way I live. This is not without its struggles. On the one hand..I am not a vegetarian…on the other hand, I have no kids, and I drive an electric car. I added it all up once and I’m definitely carbon negative. I’m offset up to my eyeballs, so I shouldn’t feel bad about my own impact on the environment. I recycle, I have LED lightbulbs everywhere, yada yada.

The thing is, a lot of my liberal buddies who also recycle, who also have LED lightbulbs, who also think renewable energy is a good idea, and also say they care passionately about the problem of climate change turn into absolute hypocrites the nanosecond there is an excuse to jump in a plane. Not only do they all fly places without giving it a second thought, they seem actively CONFUSED when you point out that regular plane trips are pretty much the most environmentally catastrophic thing you can do. To put it bluntly, you can wear vegan shoes, only ever eat avocados, and contribute $5 a month to greenpeace all you like, but if you make unnecessary plane trips you undo that good work about a billion times over.

Some stats: (source: https://www.carbonfootprint.com/calculator.aspx and others)

  • A return flight, economy class, from London to San Francisco: 1.38 tonnes of CO2
  • 10,000 miles in a 1.5 liter car: 2.61 tonnes of CO2
  • Eating a cheeseburger every day for a year: 1.58 tonnes of CO2
  • Using aircon all year round:  1.44 tonnes of CO2.

Now obviously you may use more aircon, or less aircon, and you may eat lots, or very few cheeseburger, and you maybe drive a bit less or a bit more, but what people seem to forget is that every time you do a transatlantic flight, that’s the equivalent of 365 cheeseburgers. Your vegan car seats and fondness for avocado go straight out the window if you take just a single transatlantic trip. Instinctively, people are aware that flying is ‘bad for the environment’, but the true scale of it is never acknowledged. The next time you book a flight, realize that climate-change wise, what you are doing is effectively whacking the aircon to max, or stuffing down daily burgers for a whole year.

Now..I’m not exactly untouchable here, as I fly across the Atlantic myself, although I try very hard to absolutely minimize it. I have gone to GDC each year for the last few years, and gone on holiday in south America (and soon will go on holiday to Canada). I do fly a LOT less than most people in my position. I’d never fly domestically in the UK (hey..we have cars and trains!) or France, Germany, Belgium etc. We can drive anywhere in Europe. If I go to GDC I will not fly to any other trade show. I’ve never been to PAX or DICE or to Gamescom. I go to EGX, Rezzed and the PC Gamer weekender sometimes (all drivable). Thats more than enough.

And where possible, if  I can combine one of those biz trips with a holiday, I’ll try and ‘get the most’ from my flight. When I went to Detroit to visit a car factory, it was on the way home from GDC, for example. (with a pit stop in new york to see a friend).

So I’m not saying *do not fly* as much as I’m saying ‘for fucks sake, only fly when there is no other option’ along with ‘think about the consequences a bit more’. I’m lucky enough to be in the position that I could fly to the Caribbean once or twice a year for a weeks chilling out. I LOVE the Caribbean, and the ONLY reason I dont do it is because of CO2 emissions. Those two schools we built/are building in Cameroon? I’ll never see them. never. I can’t justify the flight. I understand why people who dont believe in climate change fly everywhere. What I dont understand is why people who claim to understand it, be concerned about it, and keen to do something to prevent it, think that they can ignore it when they want to jump on a plane.

You really cant.

 

 

 

 

 

Slow file access

If you read my blog often you will know I can be very irritated by poor performance in my code, or for that matter, anybodies. Firefox is possibly the most memory-wasting application in the known universe. Quite why it needs >3% of my entire CPU right now for me to just type these characters is beyond me. Despite this, such performance is not ‘noticeable’ in the same way that a sluggish GUI can be. When you click a button in a game, the resulting action needs to happen IMMEDIATELY for you to feel like you are using the interface, not fighting it. Thus when launching a dialog box in a game, the aim is always to have its initial loading time to be as minimal as possible. often thats easy, sometimes…not.

When you click the ‘load’ button on the main menu of Production Line (my latest game), it loads a dialog with a list (scrollable) of windows for each save game on the disk. There are thumbnails for each one showing the screen grab from when they were saved, plus some data about each save game. Example:

 

This probably sounds like it should be pretty fast to create, but actually its annoyingly, painfully slow. Before you ask, yes I do the initialisation ‘lazily’ in that I am not loading in textures for the save games until I draw them, so the ones that are currently not visible due to the scroll position have not slowed me down. Actually the slowdown is much simpler than that.

There are currently 25 savegames in my list, in a folder with 50 files (a thumbnail for each one is in the folder too). The files range from 600k to 176MB for the actual save games (XML format) and the thumbnails are tiny 50k jpgs. Why so slow?

At the very least I need to query data about 25 files here. The dialog box puts them in order of creation, and to ensure its really accurate, I dont use windows file attributes but actually crack open the XML to take a look at the header data inside. At this point, I extract the date, and time, and do a version check to reject super-old unusable saves. I strongly suspect that the delay I sometimes experience (only when I’ve been doing other stuff, and the files are not in the cache of the hard drive, or in windows RAM already) is actually not even the reading of the files, or the enumerating of them (50 is not many) but the accessing of them.

When you access a file in windows quite a lot of behind the scenes crap happens. Drives may have to be spun up (or not, depending on tech), maybe even network shares may have to be connected to (not in this case), maybe wireless network drivers need kicking out of sleep. Windows needs to check that you have permission to access that file, to compare the desired access against permitted access. It needs to navigate a chain of block links if the file is fragmented on disk, and as it does all of this, the users anti virus program will kick into gear, scanning the file (maybe even the entire thing, like my big 176MB xml?) for malware.

All of this takes TIME.

The worst thing is, this stuff all happens for each individual file, which is why game engines tend to use pak files. (I have support for them in my engine, just not using it yet). The problem is, users save games are one area where you likely really cannot use them. These are files created by the user, and its often helpful (especially during beta) for them to be simple files the users can access, delete if necessary, copy if necessary, email to the dev if necessary. So pak-filing them is not an option. There are many hacks I can think of, including maintaining a summary of the games in a single file I can update lazily at another time, but nothing that doesn’t generate more complexity and potential for bugs.

One solution, if I was really bored and desperate for speed, would be to embed the jpg into the xml, so that the umber of files instantly halved. Certainly a future option. I could also swap to compressed save games that were likely 1/10th (or less) the size, which would make debugging them a tad harder, but would mean much less raw data for windows and file-scanners to deal with.

I’m definitely not happy with this tiny, tiny (under half second) delay when you click that button :D