Spaceships! – Combat

(The artwork is still consisting of placeholders, it will probably get a complete rework)
After getting the basic mechanics trough, and since spaceships are violent, it was time to add some shooting!

Shooting and bullets:

Adding an additional on-screen button wasn’t viable because the player already had his hands occupied with the movement sticks, and it would add to control complexity. I decided to go with automatic shooting, after all, everyone just keeps smashing the shoot button in every game of this genre, so what sense does it have for it to be a manual command?
The bullets have to disappear after some travelled distance, otherwise they would keep going around and around our PacManlike map. At first, I added some deacceleration to the bullets as they reached the disappearing distance. After some play-testing, I made them constant speed because otherwise it proved to feel rather weird (like bullets moving backwards if shooting and moving back, or bullets standing still which would still cause damage, and so on).

Of course it was possible to provide a continuous health system, and make the bullets make damage depending on their relative speed, but this would make the game mechanics more difficult to understand, so I decided to keep discrete health values.


First, the problem of the enemies getting out of sight when rotating the camera was solved by adding arrows near the edges of the screen, with different color intensity, indicating the position and distance of close enemies. It feels natural and makes it feel like you have a way larger field of view than you really do.
The arrows in the screen edges add to a larger sense of space.
Regarding the enemies and their AI, to keep the mechanics simple and predictable, I decided to go with 5 different enemy ships, each with its own behavioral pattern (heavily inspired in Star Force enemy patterns).
The kind of patterns however are different from other ship-shooter games, because of the subtleties of rotation controls and the infinite map. I ended up with the following:
Name: Type: Health points: Behavior: Other notes:
Papa Non-follower 1 Moves randomly. Shoots randomly, at a slow rate. Functions as a “filler”.
Pepa Follower 2 Follows the player, not too fast. When close enough, aims the player, and starts shooting him at a slow rate. When killed, explodes bullets.
Pipa Non-follower 4 Moves in a straight line. When the player is close, shoots towards him at a fast rate.
Popa Non-follower 3 Stays in a fixed position, but always facing the player. When the player gets close, starts to shoot him at a slow rate while at the same time moving away slowly. Has dual cannon. When hit, it shoots a quick succession of bullets, and escapes quickly.
Pupa Follower 5 Follows the player, quick speed. When close, moves slowly in circles around the player, and shoots him by predicting the player’s position. The only way to avoid its bullets, is by moving constantly to break the prediction.

Dieing from one single shoot made the game frustrating, so I made the player start with 5 health points, and the enemies with different health depending on their difficulty. Every shoot hit, decreases the health value by 1.


With five different enemies, with different inherent difficulty each, it was easy to control the game difficulty by selecting which enemies to spawn, and how many.

At first, it seemed like a good idea to try to make each game session close to a particular length (3 minutes). This would allow to pick the game anywhere to have a quick play, that is while waiting for the bus, being in the waiting line of a grocery store, or while getting rid of your biologically processed food.
I implemented this by making the game difficulty to increase linearly with time, while at the same time modifying the difficulty depending on the player performance (if the player is too good, make it more difficult to make sure the game doesn’t last too long). The competitive aspect would remain, because more difficult ships would give you higher score.
Again, some play-testing, and I ended up with a difficulty curve similar to this one:

How the player perceives the difficulty during time.
It felt wrong.
During the first minute of the game, it was too easy and you just were waiting for the challenge to come up. Then, the game started to get fun, you were moving all around dodging bullets and blowing ships up. It started to get more and more difficult, but you were still able to perform. However, after a point in time, the game just got exceedingly difficult, and you got killed. This was really frustrating, because as a player you were giving your best, however you died not because of your fault, but because the game decided to make you die. You were failing because of a reason not under your control, and that felt wrong. And frustrating.
However, some light was shining trough this mess. The minute before dieing, when the game was really difficult but you were able to keep alive and blowing ships up, the game felt really rewarding, you were putting all your concentration on it, and the game feedbacked you by showing your score rise, enemies dieing, and your health bar more or less keeping up. It was like you got in a state of “trance”. Or as I later found out, what is called a state of “flow” in psychology. And this had to be exploited.
More on this and adaptive difficulty in the following post!

Share your thoughts

Notify of