Tank Up

(Developer’s Journal)

https://github.com/MossGoblin/TankUp3D

[I will update this page with the general description whenever relevant things pop up; I’ll link soon to the posts containing the development itself]

About the game idea

OK, so here’s the deal…

TankUp is a top-down shooting game.

Both the player and all enemies are represented by tanks.

Each tank is constructed as a stack of layers.

The main feature of each layer is that is provides one of three weapons – a rocket, a raygun and a regular tank gun.

At each moment the current state of each tank depends on the stack of layers it has.
The primary and most obvious characteristic is that each tank has one and only one weapon at its disposal at each time – the weapon provided by the outermost layer.
The distribution of layers in the stack affect statistics such as speed, maneuverability, damage, etc.


The stack has three emergent properties – size, imbalance, top weapon count

Size is simply the number of layers in the stack (it has a minimum of 1). It affects:

Positively – the size of the tank (more ‘size’ of stack => more size of tank)

Negatively – the max speed of the tank

Imbalance represents… well, it represents how bad the tank is balanced, taking into account the number of layers of each type that it has in it’s stack. It is calculated as the mean deviation of the number of each type of layer (defined by the weapon type of that layer), compared to the average number of layers of each type. In other words, if the stack contains equal amounts of any number of layers, it’s imbalance is 0. If the stack has a large number of layers of one layer type and a small number of layers of another type, it has large imbalance.

Note: the number of layer types in the stack is not important – zero imbalance might mean a tank that has X layers of each of the three types OR it might mean any number of layers of only one type.

Imbalance affects:

Negatively – turret rotation speed

Negatively – accuracy

[see note 3]

Top Weapon Count keeps track of the number of layers in the stack that share a type with the top-most layer.

This affects only the damage output (positively).

Example:

Tank A has:

  1. Rocket
  2. Rocket
  3. Rocket
  4. Gun

Tank B has:

  1. Rocket
  2. Gun
  3. Rocket

Size – Tank A is larger (larger SS)

Max Speed – Tank B is faster (smaller SS)

Turret Rotation speed – Tank B rotates faster, as it has smaller SD

Accuracy – Tank B is more accurate (smaller SD)

Damage – Tank B has more damage (relative to base weapon damage), because it has 2 Rockets, while Tank A has only 1 Gun.

Having larger stack generally makes the tank worse (with the exception of damage, in some cases), but one last characteristic of a tank is, of course, it’s life (health, hull points, etc.).

In practice the tank does not have it’s own ‘health’ stat. It is kept alive by the layers it has accumulated and their personal health.

Each layer of a stack is damaged separately and only the top-most layer of the tank takes any damage (barring any special ability/upgrade/magic that might say otherwise).

Each layer has the same base health, which is reset to 100% when added to a stack [see note 1]. So, in essence, each layer works also as an armor.The layers have also ‘uses’. They start at 3. Each time the health of a layer is reduced to 0, the layer is dropped and remains in play as a pick-up item with uses reduced by 1. This means that each layer can be equipped 3 times at most. If a dropped layer has uses of 0, it disappears [see note 2].

How it is supposed to be played

When the game starts, the player has a tank with one random layer only. The dynamic of play should consist of shooting other tanks until their top-most layer is destroyed, then picking up that layer (if it has uses left) which automatically adds the layer to your stack. This may change your weapon (if the new layer is different from your current weapon), it would practically add another level of armor and will modify slightly how the tank behaves.
That’s the main idea.

The game is played for some kind of points (perhaps). One other option is to set up the following as a win condition: get to X layers, then keep them X for Y amount of time (ex: have 10 or more layers for 1 min).

This is not that important at the moment, as the game is a hooter, which means that different well-established mods can be incorporated.

Notes:

  1. As a way of providing a soft cap for the maximum number of accumulated layers (and negating the effect of too much armor), I was thinking I’ll try resetting each layer when picked up not to 100%, but to a lower health level, depending on the size of the stack. Something like 5% less health for each layer in the stack after pick up, meaning that the 10th layer will be only 50% health.
  2. There are two mechanisms for diversifying the environment and the play – those are two ways of providing upgrades/boosts.*
    1. Upgrades may be randomly dropped (literally from the sky) onto the terrain and can be picked up.
    2. The most common way of providing upgrades is through exhausted layers – when a layer is dropped and has no more uses, it would turn into an upgrade (or ‘could’ turn into an upgrade, depending on the balance of the game).
  3. I had the idea of creating more complex relationship between the current weapon and the stack, but I haven’t had time to think it through yet. I might change the calculation if I think of a simple way of tying the damae factor to the imbalance. Working with less stack stats would be better.

* Upgrades would be some kind of strong effects – either one-use, or time-limited. Things like invulnerability, betterment of some primary tank stat for a while, healing the top layer of the tank (or even more than the top layer), also trickier stuff, such as “Booby-trap” – the tank immediately sheds it’s top layer and it looks like a normal layer pick-up, but instead, when picked up, it explodes.

Things like that…