Skip to main content


Showing posts from 2018

Why Service monopolies are bad for your business, and how to avoid them.

It's like you spent your life savings building a house with rented bricks, and now the price of the bricks is going up. Unless you want to rebuild your house, you have no option but to pay the price demanded of you.
Today the idea of games as a service is growing. But not everyone thinks that might be a good idea. Why is the service model so attractive to developers, retailers and publishers and why might it be bad news for you, as an indie developer or a player of video games?

What is "Monopoly?"

A monopoly is when there is only one seller of a commodity. That seller is able to manipulate prices since buyers have no alternative source of that commodity. A similar and related system (oligopoly) is when there are just a few sellers who work together to influence prices for their own benefit. Both systems have almost the same outcome as far as customers are concerned.

Everyone knows the board game; In 1903, an American woman named Elizabeth Magie invented an educational game…

Alpha line up.

Right now the line up of tanks and vehicles for the alpha version of the game is being worked on. This version won't have the custom vehicle builder, but will be a chance to get people to play test the basic combat engine and get feedback on tactics and game play improvements that need to be made.

The first line up is for Vinland:
It's 1936 and military designs are not well advanced. The Vinland line up includes a couple of big tanks, these are not well armored and while robust and fairly reliable for the time, they have under powered guns and engines.

Some light tanks are a little better. Their smaller size allows for a little more armor and their small caliber guns have good penetration and rate of fire.

For artillery guns, they have a useful 60mm general purpose gun which makes a good antitank gun for the period. Just one of these will make quick work of any enemy tank, but they are heavy and not easily relocated. There is a short barreled 75mm support gun, not real artil…

No Logo

I saw some amazing logos today on the Indie Game Developer page on Facebook. I was inspired to make a splash screen for my own game.

I'm not much of a graphic designer, I trained for it, but I fell out of practice. So today I wanted to put my arm to work drawing up a page which will display when the game starts:
It was fun making the "Celtic" knot type decorations. There's a certain geometrical genius to how they are made, I'd love to understand exactly the maths behind how to generate them. It was hard drawing them by hand.

I learned a lot from this exercise, for example, don't design your logo with the final bounds you intend to display it. It's easy to cut down a larger composition, but it's impossible to uncrop a smaller, unbalanced one.

I darkened some elements to bring the text in to main focus:

Play Test Write-up Number 2

The second play test of the Alpha build went well, lasting about 30 minutes of real play before an unexpected crash. There were a number of small issues and things that need to be re-balanced, but overall, the game was great fun.

When comparing to the real-time version of the game from 6 months ago, there is a marked improvement is fun, and real moments of excitement, at least for this play tester.
The mission chosen was one with multiple small groups of enemies scattered around the map. The player had limited artillery and air support, one unit of each. Both sides had a combat support unit for de-buffing opposing troops, and the enemy also had a general support unit for buffing friendly troops.
A short time limit meant that the player had to split their troops to tackle several objectives at once. This made the mission quite interesting as several small combat arenas were active simultaneously. The small map size (32x32) wasn't a problem, it never felt that cramped, and at times,…

Particle Tests 2018

With the infantry mostly done, work continues on the particle system.
Some of the particle elements have been migrated from the old project. But some parts have been reworked.

If you don't have a particle debugging tool in your game, I suggest adding one. It's great to be able to "paint" with particles at the mouse cursor. It saves a lot of time. Instead of adding a unit to the map and having it shoot at another unit, different particle effects can simply be mapped to keyboard keys and dropped on to the map at will.

The particles are arranged like this:

[hit particle]
----[sound particle]
----for i in range(amount):
--------[smoke particles]
--------[fire particles]
--------[spark particles]
----[crater particle]

In the main code we can just call a ShellExplosion(target_position, size=6) to place a particle and let it control all subsequent values and sub particles.

Infantry Tests 2018

Infantry are being added back in to the game. The sprites look great, even though they are really small. They seem to suit the turn based gameplay better than the real time version of the game.

There will be some more previews over the next week as more functionality is added. Particles and decals are being added back in to the game as well, much of the code and graphics are reused from the earlier version of the project, which helps to save time.

New Worlds Part 2

There are still some thing to add to the terrain set, but its mostly finished for now. It's really great to have a fully featured level editor so that the map elements can be tested right away. No messing around with modifying text files or external programs. Just switch modes and paint.
The terrain has achieved the appearance I aimed for, which is similar to a table top gaming board. I never wanted a photo real game environment, and I'm happy with the way it has turned out. It reminds me of bonsai trees or miniature gardens.
It is quite obviously tile based, there's no getting around that, but it's important in any case, since otherwise it could be difficult to know where units can move or not as well as guessing lines of sight.
Most of the techniques I've used here are things I tried before, but I never got them looking so nice or running so well. Drain on the graphics card is negligible at this point. The shader works really well.
The movement shader and fog of …

New worlds

Most of the AI and mission structure is done. It still needs heavy testing, but I'm getting tired of looking at the placeholder terrain, so I'm doing some work on the full terrain.

This is the basic "summer" terrain. There's a lot still to add, such as the water part of the shader (where you can see the grey gravel in the above shot) and of course trees, bridges and walls.

I'm not sure yet if I want to add modular roads as a different object. That would give them a more solid appearance, but might take more work and be more of a drain on resources.

There will be other terrain sets as well, some will feature bigger rocks, and different kinds of trees.

Summer Burnout!

Progress on my usual projects has been slow this month, my computer was suffering from severe slow down and a couple of times even shut down with a CPU overheat error.
Korea can be a very hot country, and a lot of expats who come and live here aren't used to all that entails. I'm from the UK where temperatures rarely get above 23°C (73°F) in the summer. Here temperatures above 30°C (86°F) are common, and the humidity can make that even harder to endure. It's not just humans and animals which have trouble in that weather, computer hardware can suffer performance reduction and quickly degrade if it's running at a high temperature for a long time.
If you're running an expensive gaming rig it might already have a state of the art cooling system, but the vast majority of expats won't want to invest in this kind of set-up. The computer I use the most is actually the one in my classroom, which is an ancient Windows 7 machine with an integrated graphics card. It'…

Bombs away!

You can see the latest progress on the project in the most recent video diary here.
A lot of work has been going on trying to get the AI to work well, without causing too much drain on computational resources. Trying to get AI states to be more flexible so that an artillery weapon might use normal attacks if the enemy gets too close, instead of trying to do long ranged attacks on a target the other side of the map. And so on.

I also finally got around to adding an effect to the air support actions so they have an actual aircraft fly in and drop bombs or reveal the map.

It's a bi-plane because the current version of the game is set in 1936, with early war technology. The current plan is to get this one finished with a basic set of game-play options and then produce expansions or sequels with all the other great stuff I want to do; custom vehicles, procedurally generated missions and so on.

The tactical side of the game is maturing right now, with the introduction of four different …


Ok, so it's not exactly skynet, but I have got my first AI state working, kind of.

The first state is "HOLD" in which case the agent stays in place where they are and shoots at any unit that comes in range. When I started writing this module, I found that the existing method of triggering actions wasn't good enough to allow the AI to choose the best weapon or target. It worked by simply sending a command to the unit to trigger the currently selected action.

If the action is valid, it triggered, if not it didn't.
That's fine for play controlled units, as that's all they need to do. But AI needs to know in advance if the action is valid. The player can get that info from UI feedback, but that wasn't available to the AI player.

There were three problems:

1. The UI feedback duplicated code in the action trigger function. These  two sets of code could get out of phase so that UI feedback was wrong.

2. The action trigger didn't give enough feedback for …


After some testing, I decided to rework the radio contact rules described in the previous post. I've been playing a lot of RPG and Strategy games lately and one thing I don't really enjoy is the micromanaging aspect of buffing and de-buffing.

Rather than force the player to make hard decisions on where to allocate their buffs, it just ends up with them having to devote too many resources to support. You end up having at least one team member out of four doing nothing but support.
It also wastes a lot of time clicking and selecting and so on.

So, I want support actions to offer a significant bonus when active, but most should be passive. They should have specific utility too, not a general buff which you simply apply to your best unit. If your tanks are getting swarmed with infantry, then rapid fire will help you clear them out. If there's an enemy who is well dug in behind cover, you can use steady aim or mark target to get a bead on them.

In the end I just made special ac…

Radio Contact!

In any RPG or turn strategy game you'll find special roles for special characters. There's the tank, whose job is to absorb damage, and the DPS whose role is to do a lot of damage per second. You might find other roles like glass-cannon, but the one you can't do without is a healer.

Of course a healer isn't only supposed to heal, they also have the ability to put buffs or de-buffs on other characters. At this point you can split in to a further specialized role, the support character. They might not be able to heal at all, but they can buff or de-buff and perhaps summon allies.

Once I made the decision to switch Vinland: 1936 over to a turn based strategy game, I had to think about how roles were going to work out. Tanks are obvious, and DPS is more complex. But today I want to talk support.

In the above picture you can see that a lot of the selected unit's abilities and actions are grayed out. It can't currently use them because they are restricted. The usual …

Combat: Cover and flanking system.

This week I've been slogging slowly through the code to integrate combat in to the game. It's different to the way I did it when the game was real-time, but also kind of similar. A command is sent from the turn manager (a sub process of the main environment which has different functions behavior depending on whether it's the player or enemy turn) to an agent to fire its weapon.

That weapon then checks if the target is valid and if it is ready to fire, and then it sends a message to the target with some stats so that the target can process the hits.

Of course, the messages aren't really sent, they are just dumped in to a list in the main environment, and then agents pull out those relevant to themselves using their unique id.

Each stage is separate from each other. Each process can fail without collapsing the whole game loop. For example if you fired a burst of shots at a target and the very first shot killed the target, the others simply won't be processed. The sho…