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

New Democracy 4 policies: Workers dividends and Ban on crypto

I’m working on adding two new policies to the next update for Democracy 4 today. By popular demand (deduced from in-game player voting during Early Access) I have decided that these two policies are worker dividends (profit sharing) and a ban on all cryptocurrency. I’d like to talk through what these policies represent from a game design and real world point of view, and show how they have been implemented.

First up is workers dividends. Like all Democracy 4 policies, these are not as specific as they sound, but represent a whole ‘area’ of legislation, in this case legislating on how workers must be compensated. In the overwhelming majority of countries, such legislation basically amounts to laying out a minimum wage (if one applies), and perhaps some rules about grounds the company may have to withhold such payments, or perhaps rules surrounding what kind of deductions from wages can legally be made.

In other words, in general, as long as a company pays you minimum wage, thats all you are entitled to. If you notice you earn $40/year and the company CEO earns $50million a year, and its all your effort that enabled this…then basically your option is to just quit and work somewhere else…

Some people take the view that this is unfair. Others take the view that this is capitalism working as intended. A clever company will reward employees fairly, or risk losing them to cleverer companies who spot their potential. This is the ‘perfect market’ school of thought.

Others might suggest that this is fine when we are talking about headhunting people with phds, but when it comes to warehouse workers, or other minimum wage staff, things don’t work that well. A company like amazon may earn billions in profit, but see no reason at all to pay its warehouse staff above minimum wage. If you are of a socialist mind, this is unfair, and exploitation and needs fixing.

Generally in my lifetime this has been a non issue where I live, until the last UK general election, the left-wing Labour Party did propose something akin to this new Democracy 4 policy:

https://www.bbc.co.uk/news/business-50508369

In this policy, the party suggested that 1% of the shares of private companies be taken from them each year for 10 years (total 10%) and placed into an ‘ownership fund’ whose share of the profits would be paid to the workers. In a Marxist sense, this would be described as ‘seizing the means of production’, although in this case only seizing 10%. The idea was to share the profits of big companies with the staff, and was probably one of the most pure socialist policies proposed at the election.

In the end, the party lost (quite badly) so we do not get to see how the policy worked in practice, but it was popular with its supporters (and VERY unpopular with its opponents).

I need to include policies like this in Democracy 4, because as socialist players have pointed out, the game does not go to any particular extremes on the left economically. We have policies for minimum wage, retirement age, worker safety and even mandatory union representatives on company boards, but no direct pure wealth-redistribution from owners to employees. This policy fills that gap. The slider can be thought of as intensity, showing a range of measures from the ‘incentives for bonus schemes’ all the way up to ‘mandatory allocation of 90% of shares among the workers’.

My first thoughts are that this policy pleases socialists, and union members, angers capitalists and small businesses (effectively entrepreneurs), boost the chances of a corporate exodus, reduces foreign investment, but has a side effect of making all strikes less likely. (Why strike when you will feel the pain as profits drop?).

The second new policy I’m adding is a cryptocurrency ban. Sometimes people ask why such ‘ban’ policies even need a slider, but a ‘ban’ can mean everything from ‘some currency mining is banned if using certain power sources’ all the way up to ‘holding, mining or trading cryptocurrency of any kind is punishable by imprisonment’.

In this case the motivation is a combination of loss of government control (and thus tax revenue) and concerns for the environment. Liberals hate banning anything (because…freedom), and obviously any ban would have a vastly negative effect on the usage of cryptocurrency.

How Bitcoin's vast energy use could burst its bubble - BBC News

For background reading on the environmental costs of cryptocurrencies (specifically proof of work), just use google. Its pretty shocking. I have strong views on all crypto, including proof of stake, which although environmentally better, has the perverse effect of making the rich get richer. Perhaps someone will do an in-depth D4 mod that represents different types of crypto and their effects on socialists and capitalists!

And that reminds me… I must check that crypto’s CO2 impact is modeled in the game…

Improving Democracy 4 events balance by using a LOT of data

I’ve been doing some number crunching to check that I am moving in the right direction regarding balance on Democracy 4.

The game has a series of ‘events’ which are triggered by various inputs. Some of these events are pretty ‘informational’, in that they mark changes the player has made and their impacts, other affect the games difficulty by stopping the player racing too far ahead or too far behind. Others are there as a random curve-ball that the game throws to the player to shake things up. There are about 120 of them.

Because they are not triggered purely randomly, the frequency with which each event shows up is determined by the complexity of the neural network that forms the basis of the games simulation. This means that some events may end up triggering much more than others, if the inputs to those events are not balanced correctly.

In an ideal world, the whole game would be a truly self-balancing neural network, but I don’t trust the systems enough to unleash anything like that, so I collect statistical data on which events trigger in each game version, and then change some of the inputs each update so that things balance out for the better.

In an ideal world, every player gets to see 100% of the content in the game, so they are effectively getting what they paid for, and not being constrained to a tiny subset of the content because of poor balance. In other words, if I have an event called ‘school shooting’ and its triggering one tenth as often as ‘scientific breakthrough’, then the balance may be off, in that the inputs to the first event are too strong, and the second too weak.

Note that I am talking in grand statistical terms over thousands and thousands of players. An *individual* player may never see school shooting, or scientific breakthrough, depending on the countries they choose and their play style and skill, but I need to check I’m not adding content to the game that hardly anybody sees!

By collecting all this data, I can build up tables for each game version showing the total events triggered for players of that version, AND the number of times each event triggered. Like this:

1.27
Event Namecount
shareiposuccess7790
shareipocancelled7112
hugehurricane4515
dubiousrolemodel4190
resourcesobsolete3913
multinationalcompanyheadquarters3810
militarycontractscandal3780

..and so on. Because I am looking at 120 events, I can work out that for version 1.27, if every event was equal, they would all trigger 1,406 times given the number of version 1.27 games played. I can then store the difference between the ACTUAL number of triggers, minus the target, and express this as a deviation in percentage terms from the target:

1.27
Event Namecountpercentage deviation
shareiposuccess7790453.78%
shareipocancelled7112405.58%
hugehurricane4515220.96%
dubiousrolemodel4190197.86%
resourcesobsolete3913178.17%
multinationalcompanyheadquarters3810170.85%
militarycontractscandal3780168.71%

So you can see that back in version 1.27, the top event (Share IPO success) is triggering 4.5 times as often as I would like.

I can then add up all of those percentage deviations and get a final number representing the total percentage deviation (in absolute terms) over all events. That gives me this:

VersionAbsolute Deviation
1.276426.89%
1.285717.38%
1.296128.34%

In an ideal world, this number trends down over time as each version comes out.

Another way I looked at things was to just look at the absolute value of the top 10, and bottom 10 events, to see if I am effectively ‘squashing’ the trigger probabilities to prevent extremes. This is a major goal, because players will not notice and event triggering 5% more than another, but if one triggers EVERY game, or NEVER, then that does get noticed. When I look at this data I get these values

VersionAbsolute DeviationExtremes Deviation
1.276426.89%2941.48%
1.285717.38%2239.64%
1.296128.34%2433.29%

By doing this for a whole bunch of different game versions, I can end up with a chart showing my progress!

More helpfully, I can quantify that the uneven-ness of the event triggering has improved by 14.73% since version 1.27. The extremes have been reduced more, by 30.29%

This probably sounds stupidly maths-y and the system is full of issues, such as events that only trigger in a few countries, and therefore SHOULD be seen less… but there are limits to which a single coder/designer/bizdev/marketer person like me can spend time crunching all this.

TBH its just a big relief that the numbers DO seem to be trending in the right direction, especially as I keep adding new countries and complex simulation elements (meaning that the simulation is in flux, and thus just remaining the same would be a balance-win of sorts.

It might be bizarre but I really enjoy this kind of analysis :D Now go tell your friends how well balanced Democracy 4 is :D

Democracy 4: Resizable GUI

For the last week or two I have been working on what seemed like it might not be too bad…but actually turns into a lot of work. This is a resizable GUI for Democracy 4. The current version of the game has fixed size UI elements everywhere which works fine for the old school screen res from maybe 1280×768 up to 1920×1080, but starts to get a bit annoyingly small text at 2560 plus, and frankly the UI can be a bit too big and blocky at the lower res too. I finally got around to fixing this.

The first day or so was wasted trying to find an automated solution. Democracy 4 uses SDL2 and OpenGL, and I was hoping some of SDLs scaling functions would handle this simply. I could easily implement a scaling slider in the game, and then SDL could just handle a final stretching up or down at blit/flip time of a fixed resolution image.

This failed to work. partly because of some messy implementation at my end perhaps, but also because screen aspect ratios can change. Even if it DID work, it would basically mean throwing away the core UI upgrade of Democracy 4 over 3, which is super-smooth fonts and pixel-perfect vector-based icon and UI element rendering. If the player set the render scalar to anything but 100%, any sort of stretching would give a slightly blocky look. I couldn’t live with that.

In the end, I did implement all this as a simple percentage slider on the games options screen. Changing this requires a reboot to see the effect:

In order to get all this to work I just had to make a LOT of small code changes. Probably every UI file in the project got changed in the last week. What I needed to do is get rid of what coders called ‘magic numbers’ and replace them with values that could be scaled up or down based on this slider. For example code that said this:

int iconleft = Area.left + 120;

Would be changed to something like this

int iconleft = Area.left + WIDE_SIDE_PADDING;

The all-caps value could then be coded as defaulting to 120, but be scaled up or down by a global value for RenderScaling, which is decided when the game starts. This way I could reuse that value anywhere in the game and know it would always be the right value. Because I’m not entirely useless, luckily I HAD actually defined and used a lot of named values already like this:

int iconleft = Area.left + STYLEGUIDE_BLOCKPAD;

So in that case no code change was needed, and that value (10 as a default) could be easily scaled at app startup. The problem was… I had not stuck to this, and actually used a LOT of magic numbers (ie: actual numeric values) many, many places in the code. I ended up just having most of the common ones defined as pixel constants:

int iconleft = Area.left + STYLEGUIDE_PAD50;

For example. A bit kludgy, but some values really are used in random places and giving them stupid names like STYLEGUIDE_MINISTER_)SCREEN_TOP_WINDOW_HEIGHT would be overkill if you ask me. In any case, after a LOT of typing and also a LOT of testing, I am very close to declaring this done, and letting users play with it. Its not perfect, because a lot of combos don’t work. If you are playing at a small res like 1280×768 and set the slider >100%, things will overlap and look rubbish. But I’m hoping people are sensible. This is a FIX for people who dislike the default layout for high or low resolutions. Its assumed 95% of players will not touch the slider.

Anyway here is the game in the current (unscaled) view in 2560 resolution and default 100% scaling:

(Its reduced by 50% for here). Check out how small the text is for the finances, and how much space I waste on the timeline at the top. Now here is the exact same screen resolution, but with a 133% slider:

To me this looks WAY better, but you are only REALLY going to appreciate the change if you have a high DPI but smallish monitor, or an insanely high res monitor and poor eyesight. At first glance, you might not be able to tell the difference, but then check out that timeline at the top to see just how things are re-arranged. or check on the far left near the top, the ‘POPULARITY’ text.

Anyway this is coming to the next update for the game. it took a while, but it really needed doing!

Japan’s economy in Democracy 4: making sense of irrational economics

So… I am currently working on adding Japan as a playable country to Democracy 4, which is still in Early Access. Although I think Japan is super interesting in many ways, especially cultural (very conservative on prisons, super-generous on maternity leave, amazingly high percentage of retired people, very high tech, super-low immigration…), its economics are absolutely batshit crazy. Lets look at some numbers.

Tokyo: the latest stock market darling | Business| Economy and finance news  from a German perspective | DW | 16.01.2018

The current GDP of Japan is 559 trillion yen and its debt is currently 1.328 quadrillion yen, which gives us a debt to GDP ratio of 237%. The country in 2019 (pre-covid) had a deficit of 17 trillion yen. Compare this to the USA in 2019 which had a GDP of $21 trillion, debt of $22trillion, which is a ratio of 104% and a deficit of under $1trillion.

The USA has the dollar, which is the reserve country of the whole world, and I think its fair to say both countries have fairly similar stability in political terms. They are both monetizing this debt by using some form of quantitative easing. The US flirts with helicopter money, but the amounts are relatively small. I think its fair to say the biggest difference between the two is that the US debt to GDP ratio is dramatically lower than that of Japan. In other words, its riskier to lend money to Japans government than the US< by quite a margin, as the economy of Japan looks way less likely to repay that debt than the US. This *should* be reflected in the interest people demand to lend to Japan. lets look at 10 year government bonds:

United States 10 year bond yield: 1.59%

Japan 10 year bond yield: 0.09%

HELP. At this point I feel that someone like me with a decent (but hardly expert) understanding of economics is basically in this position:

Pied Piper

This makes no sense. Would you lend any money to the US government for just 1.59% return? me neither, especially when just splatting the money onto the S&P500 would get you 13.6% a year over the last 10 years, but OMG why on earth would anybody lend money to the Japanese government for 0.09%. It makes no sense, and much more fundamnetally than this..it breaks the simulation for my game Democracy 4!

Basically the game has hard coded into it the attitude of the international bond market when it comes to government debt. The general principles of the code are that every six months the bond market evaluates your country and looks at the debt/gdp ratio, the deficit/gdp ratio, the level of ‘stability’ and inflation in the country, and then decides on what the credit rating should be. The interest rate on the debt is then applied, based on that credit rating. The game assumes that the maximum conceivable debt/GDP ratio is 250% (Japan has broken this!). As the game stands right now, a few turns into a new game on Japan instantly triggers a really bad debt crisis:

The game also assumes that this upsets everybody, really badly, but in fact, this may be outdated because it seems that people generally seem very unconcerned by the size of japans debt. This is possibly because right now the world has other concerns with covid, and also because we have had a post-2008 general global credit crunch which has meant global use of QE to the extent that global interest rates have collapsed. Every country has bad debt and low interest rates, which maybe makes japan look not so crazy…

But it still should be WAY worse than the USA. Japan *is* in a debt crisis, and the way in which it seems to be given a free pass on staggering levels of debt is baffling…and yet this needs to be somehow handled in democracy 4… Hence we reading a lot, and looking for some justifiable ‘fudge factor’ I can code into the game that justifies all this. By any standard Japans credit rating should be something like D right now. In fact… its A.

The clearest explanation i have found so far is “A large portion of wealth is held by seniors who lack financial literacy and prioritize stability rather than return” (source). This also states that most Japanese govt debt is owned by Japanese citizens. This kind of implies I need to hard-code in something that says ‘Japanese tendency to not realize they are making shit investments’, as a modifier to boost the credit rating of Japan. That can’t be right!

There is an argument for saying that the country is more stable, and less vulnerable to external pressure on its debt because its mostly owned by its own citizens. The current economics of the game are actually giving Japans super-high debt about the right impact on the finances, so the problem is mostly that the debt crisis is triggering when it probably should be put off a bit by these factors.

So I suspect my actual solution here is to add a special modifier (domestic debt ownership) for the debt crisis situation , but leave the credit rating and interest rate stuff alone. I suspect this works because although the current bond yield on japans debt is super low, some of it will be much older and potentially paying out higher amounts.

Anyway….fun fun fun. I guess its different to balancing games with laser guns and magic spells.

Improving accuracy of state employee & unemployment effects in Democracy 4

One of the problems with making a vidoe game with one person doing the development, where you try to model the entire world in inter-connecting detail…is that its impossible, so you end up doing a lot og guessing and thinking ‘yeah that looks ok to me’. Then eventually you find the free time (ha! its the weekend, who am I kidding?) to go back and check that the wild ass guesses you made were just wrong, and not OMG emebarrasingly badly wrong. Its a low bar, but i’m determiend to hit it.

My game Democracy 4 has a lot of policies that affect two important variables in the game – The membership of the ‘State Employees’ group, and the level of unemployment. For hopefully obvious reasons, these numbers are important in a government/ politics sim. They have to make some vague sense. Until now, the numbers in the game have kind of been guesswork, and result in equations like this:

StateEmployees_freq,0.02+(0.05*x)

That means that the effect of that policy will vary between a 2 percent and 7 percent boost to the number of voters who identify as state employees, depending how the policy slider is set. In other words, this policy assumes that at max capacity, this policy represents a seven percent higher chance of any voter joining that voting group, although in practice its much more complex than this, due to internal algebra that I wont bore everyone with…

The problem for me is that although I do not mind that seven percent figure being possibly inaccurate, I DO want the games model of this stuff to be internally consistent. To put this another way, if in the real world, a state health service employs 10x the people of a state postal service, the game should attempt to get that ratio correct, at the very least. With this in mind I have done some research, using the USA as my base case for the policies most impacting state employees:

These figures are NOT 100% accurate. This is mostly because the US does not have a state health service in the same way the UK does, so I had to take NHS figures and then adjust for population. I also had trouble getting energy figures, so I extrapolated from the top 10 companies employees and adjusted on a per-household basis. The point is that although the figures (like all figures) are a bit wrong (probably) they are massively less wrong than my guesses!

So now to make the game values make sense, I need to work out how to adjust those values in the second and third columns, which are my current effects (at max slider) on state employees and unemployment. Given that I do not want top massively unbalance the game, I thought it was prudent to keep the total combined effects of all of these policies the same (93% and 126% respectively) and just adjust the figures internally to fix the relative impact,

The way I’ve done this is to use the employment percentage (the actual percentage as a portion of total employment of all these policies) and multiply that by the total current in-game effect (93 or 126) to give me the new adjusted effects. That looks like this:

In some cases its not too big a change but in others its hilariously different. Currently the game is giving a HUGE (18%!) boost to state employees from armed police when it reality it should be about 3%. On the other hand state schools were set to have a 10% boost to employees, and should be having a 29% boost instead! So many teachers! Its also evident that in the grand scheme of things, prisons and a state broadcaster employ virtually nobody. (I scaled up the BBC employment figures to USA size to get that data too).

I have just done the data so far, but later today I’ll go through all the policies and adjust the values in each equation. I guess the takeaway from all this as a player is that if you really want to cut unemployment when you spend money on public services, you want to splurge cash on the health service and schools/universities. Everything else is trivial.

Keen-eyed economists might note that the REAL employment impact would be different. For example, the direct employment from the US military may be 1.3 million, but defense contractors etc will employ many more, and the knock-on effects from the contractors CEOs buying new ferraris is even higher. I agree, but that is best dealt with through a GDP boost I think.