Turret Queen

Turret Queen

This game is from ldjam.com, which is currently unavailable.
You can try viewing the original page on Web Archive (may not load correctly).
overall: 3.25
fun: 3.46
innovation: 2.64
theme: 2.71
graphics: 2.91
audio: 2.97
humor: 1.78
mood: 2.78



Play Turret Queen, HTML5 (itch.io)


(Might take minutes to load on a MAC due to issues out of my control, there is a downloadable version for MACs down below if that happens)

Move with the Arrow keys or WASD
Space key uses your current powerups to assemble a turret ally

Groups of the same powerup will create a stronger turret.
Each powerup levels up a different thing, experiment.
TIP: If you are fast, you can collect powerups while the assembling is being done, resulting in a very unbalanced and awesome turret.

Random Blabling about the Game

(Skip if you don't want to read about code, personal challenges and this kind if stuff)

I had two personal challenges on this ludumdare. I'm happy with the result!
I will talk a lot about code, then about sound, what I've learned and what tools I used.

A game without random.

(Seriously, there is zero usages of any pseudo random numbers on this game, on my code at least)
On pretty much all my ludumdare entries and games I do myself, I make heavy use of the random. Not only to create stary backgrounds or cool variation, but instead, oftenly as quick and dirty way to avoid doing level design (yuck).
I decided to try my hand at the deterministic this time, and don't it AT ALL on this game.

##### Level design
Just the thought of having to create ships on the screen without randomizing their position, or even the movement.
One by one.
Suffering.
I had to make it easier. First the positioning.
It would be too time consuming and error prone to type the exact position of the screen the enemies would spawn. Not even considering the potential different screen sizes and whatnot. To fix that, I decided to split the screen into 12 pieces (both axis) and would position the ships like that.
As for the movement, I just pre-coded 7 different simple types of movement (all basically straight lines, except one with a sin)
Then I simple assemble a big array with these parameters + a few others (of of them being the delay to previous enemy!), that looked like that:
```
spawns.append(Spawn.new(1, 1, 0, 200, mv, ms))
spawns.append(Spawn.new(1, 3, 0, 0, mv, ms))
spawns.append(Spawn.new(1, 5, 0, 0, mv, ms))
```
For the first one: Enemy with movement type 1, on quadrant (1, 0), created 200 milliseconds after the previous one. Plus a few multipliers just in case because there is never enough time for the COMPO (I had time and used them anyway :grimacing: ).
The whole level array is on `Spawner.gd`.
I was surprised on How much fun it was to do the level this way.. I could use fors, multipliers, reorder as much as I wanted, test specific waves with ease. Could add a specific behaviour (shooting) to enemies later, and quickly integrate it on the level without hassle:

```
#wave 6
spawns.append(Spawn.new(6, 6, 0, 5000/ms, mv, ms).initTiro(1, 1000))
spawns.append(Spawn.new(6, 3, 0, 1000/ms, mv, ms).initTiro(1, 1000))
spawns.append(Spawn.new(6, 9, 0, 0, mv, ms).initTiro(1, 1000))

#wave 7
spawns.append(Spawn.new(4, 0, 8, 8000/ms, mv, ms+3))
spawns.append(Spawn.new(5, 12, 8, 0, mv, ms+3))

for i in range(8):
spawns.append(Spawn.new(4, 0, 8, 1000/ms, mv, ms+3))
spawns.append(Spawn.new(5, 12, 8, 0, mv, ms+3))
```
Random, beware.
By the way, for the stars on the background I had to use a timer and do some sin calculations. Still not random, but almost felt like cheating:

```

if topo:
position.y = -10

else:
position.y = int(seed % screenSizeX * cos(seed) *3) % screenSizeX
position.x = int(seed % screenSizeX * sin(seed) *3) % screenSizeX
```

For the first time, SOUND.

This time, I was set on making a simple game coding wise. Because I REALLY wanted to add sound to a LD game! And I could never do it, never. Was always struggling with something on the last minute.
So when this theme hit, I was afraid all was lost, I had so many ideas for procedural stuff that even my first challenge was in jeopardy...
Then it hit me, `why the summoning had to be magic? Couldn't it be a mechanical summoning? hmm? Assembling?`
From then it was 5 minutes to concoct this SHUMUP idea, which was perfect, as these are very simple to code and draw. Can get by with very little number of animations, so I could focus on doing the best sprites I could, without being to worried about how to animate them later.
I could finish pretty much all the code on day 1. I had time!
So for sound effect, I used the much recomended `Bfxr`, and it was great.
I tweaked the effects a bit in the game (pitch and volume changes according to the turret attributes) instead of using the tool, to save on some space and have at least a little bit of that procedural feel that I like so much.
Later for music, I've tries a few tools. All felt too complex and the resulting music did not match the feel of the game, then I've found this: https://musiclab.chromeexperiments.com/
And it was perfect, created this thing, exported to wav, opened on audacity, decreased the size and quality of the music a bit.. I wanted to hear these breaking sounds. And done.
I was very happy with the result, I even had time to write a proper description/post mortem in here.
Game might not be that great, it is pretty simple, but it is exactly what I've wanted to do.

That was fun.

And on to the ratings! Good luck everyone!



PS: Created a mac executable, but could not test it. Please try the HTML5 version first.

Post Jam updates:

- Added more analytics (Anonymous, private, custom, and you can opt out), I will share it all after the jam ends.
- Changed the difficulty scaling, now it should be possible to continue playing after dying once.
Found a bug?
Tell us on Discord