Monthly Archives: February 2019

Jetboard Joust Devlog #99 – Weapons of Mass Destruction

One of the things that’s struck me whilst going through and actually playing Jetboard Joust (rather than working on individual parts in isolation) is that one of the most satisfying aspects of the game is when you get to take out loads of enemies in one go with a really destructive weapon such as the R.P.G. or Grenade Launcher.

So I decided to emphasise this side of the gameplay a little more before I finally drew a line under enemies and weapon types. I wanted to add some more ‘swarm’ type enemies and another super-destructive weapon to assist in taking them out.

Rather than work on new enemies from scratch (I really need to get this game done!!) I thought I’d re-engineer some of the ancillary enemies I’d created for the boss fights. There’s three of these, and they all fit together pretty well as a kind of ‘set’ of weird alien invertebrates – jellyfish, squid, and a kind of carnivorous worm!

Given the nature of these enemies, and that fact that they’re only going to exist in fairly large batches, I thought it would be nice to have them born from some kind of egg sack rather than teleporting into the game individually like everything else. I spent a fair bit of time working on a nice, pulsating egg sack(!) and think the end result works pretty well. The egg sack is the same for each time of enemy but I quite like the idea that you’re not quite sure what you’ll be in store for when you burst it open!

Then, just because I wanted to, I also added another enemy that’s like a really tiny version of the baiter-inspired enemy that acts as the game’s time cop. As it looks like a tiny UFO it’s also a reference to the big and little UFOs in Asteroids. These don’t spawn from egg sacks though!

The new weapon is something I’d been thinking about for some time (and even unsuccessfully experimented with a bit) but only became a solid idea after seeing the scene where Rico takes out the tanker bug in Starship Troopers (again, sorry to keep going on about that film).

I’m calling it the ‘Cluster Bomb’ – it fires a single explosive charge which splits into several smaller charges when it explodes, these smaller charges then repeat the procedure. Each charge is sticky, which means it will become attached to any enemy that comes into contact with it. The charges only detonate after a certain time period, not on impact.

As you can imagine, this weapon rapidly creates full-on mayhem. Originally I had each charge leaving a smoke trail when it explodes but, unfortunately, this was causing the refresh rate to drop when tons of charges were fired at once (by the player and enemies) so I think I’m going to have to stick to just using particles for most of the explosions. Shame, as it looked really cool with all the smoke, but I guess running all those individual custom shaders at once is asking too much. In later versions I’ve added a very slight randomness to the time the charges deonate so everything’s not quite so symmetrical, I think I prefer it like this.

I’ve also been working on a couple of new palettes. One using the (now slightly #indiedev cliché) red and black ‘Downwell’ style palette and another based on the colours available on the Commodore 64. I really like the C64 one. As I was always a Spectrum guy I’m realising the genius of whoever picked those 16 colours 35 years too late! I like the Downwell palette too but I couldn’t get it to work with visually with the background parallax so I decided to lose the background and stick with the three colours. It is retro after all…

Dev Time: 4 days
Total Dev Time: approx 259.5 days

previous | next

mockup_3x
Taking Out a Batch of Mini-Squockets with the Cluster Bomb

mockup_3x
Cluster Bomb vs Jellyfish

mockup_3x
Mass Destruction of Mini-Squirmers

mockup_3x
I Call These Enemies the ‘Little Bastards’!

Jetboard Joust Devlog #98 – Not *That* Kind of Bug!

Onto the last of the ‘classic videogame’ enemies now, this one draws its inspiration mainly from the wonderful ‘Space Invaders’ style shooter ‘Galaxian‘ and, to a lesser extent, its sequel ‘Galaga’. It’s also heavily inspired by my recent re-watching of Paul Verhoven’s marvellously cheesy Sci-Fi gorefest ‘Starship Troopers’. I’m calling it the ‘Swooper’!

I’d been thinking of doing a Galaxians-style enemy for some time but it was watching the ridiculous (but genius) scene in Starship Troopers where Rico takes out the tanker bug that really cemented the idea in my head. A similar bug would fit perfectly into the Jetboard Joust world and also really suit the ‘Galaxians’ style of attack.

So I started by working on the basic movement style which was really very simple, I use LERPing to rotate the enemy towards the player whilst applying a constant velocity in the direction the enemy is currently facing. This worked fine once I’d tweaked the parameters, resulting on a nice circling motion of the enemy round the player which I felt was quite insect-like.

What was more complex was to get the enemies flying in formation. My standard approach to this kind of problem, and one I also used in this case, is to create a ‘hive mind’ class that manages the positioning of all the enemies. The individual enemies can report back to the ‘hive mind’ with various info regarding their environment but it’s the hive that tells them where to position themselves.

I tested a number of different algorithms for this – the one I ended up with allocates a leader for the hive who operates effectively as a solo entity with the movement pattern I described above. The hive mind calculates the ideal positioning of the other enemies in the swarm and I use LERPing again to move them towards this ideal position as well as to rotate them to align with the leader’s current rotation.

If certain parameters are met some of the swarms member’s will go solo, leaving the pack to chase the player in a more aggressive manner. The hive mind class manages this to make sure the entire swarm doesn’t break up at once.

I was particularly pleased with the way the swarm reorganises itself once one of its members is destroyed or goes solo to chase the player!

The art for this enemy came together very quickly (for a change) – I used the tanker bug from Starship Troopers as my only reference and it just kind of worked! The thing that took longest was getting the rotation of the wings to line up properly when the bugs are in flight. My only slight worry with the art is that I’ve used very dark colours – this makes it look pretty badass most of the time but it might be too hard to see clearly in some palettes.

I was so pleased with the way this enemy came together that I added a smaller version, the Mini-Swooper! This operate in exactly the same way as the larger version only more of them can leave the pack at once and they don’t fire at the player, they just attack them physically. They are also faster.

As a footnote – until looking it up just recently I was always convinced that ‘Galaxian’ was called ‘Galaxians’. It actually freaked me out a bit it was called ‘Galaxian’! Must be one of those collective false memory things like being convinced the Monopoly man wore a monocle!

Dev Time: 2 days
Total Dev Time: approx 255.5 days

previous | next

mockup_3x
Badass Bugs – Taking Out A Couple of Swoopers

mockup_3x
Mini Swooper Mayhem

Jetboard Joust Devlog #97 – Creepy Crawlies!

No prizes for guessing the classic arcade game that’s the inspiration for this latest enemy – yup, it’s another of Atari’s masterpieces – Centipede! Working title for this enemy is the ‘Scuttler’ (I already have a ‘Crawler‘ and a ‘Squirmer‘)!

The mechanics of this enemy are pretty simple, I thought the hardest thing to get right would be the algorithm that makes the segments ‘follow’ the head (I’ve had to right similar code in the past and got myself into a right mess) but the code I came up with, unbelievably, worked pretty much right of the bat!

There’s probably a better way of doing it but my basic approach here is to ‘remember’ the direction each segment is travelling and to continue moving in that direction by default each frame. If the total horizontal and vertical distance between one segment and the next is less than the desired segment spacing no movement occurs. If the segment aligns horizontally or vertically with the segment in front we switch orientation (i.e. from horizontal to vertical or vice versa). This seems to work well enough for my purposes but if anyone has any better ways of doing this I’d be interested to hear them as it’s a gamedev problem I seem to run into quite a bit.

Unlike the Atari Centipede I don’t have any mushrooms to run into to initiate a change of direction so I had to improvise a bit here. Changing direction when it hits buildings was an obvious one, but I also have it switch direction when it hits the edge of the screen (i.e. camera area) and, with a certain amount of leeway, when it aligns with the player on the opposing axis. This approach seems to maintain an authentic ‘Centipede’ feel whilst working within the confines of the Jetboard Joust gameplay.

I also added a slight ‘sway’ to the segments as they move as a fixed horizontal or vertical movement just seemed too ‘static’ in context even though it would have been truer to the original game. I want to tip my hat to these classics rather than slavishly replicate them.

Of course I also had to have the centipede splitting into two when it’s health is reduced which means things can get pretty manic (in a good way, though I’ve toned it down a bit since this video as things were getting too out of hand too quickly).

I’ve also been working on a Centipede style retro arcade palette but have been running into a few issues trying to get this to look good across all sprites. The red outline you can see is used on some of the sprites in the original arcade game. I like the way it looks here as I designed the sprite around it but it looks terrible on many of the sprites I’ve already designed so I think I’m going to have to use a more generic approach. If I ever make another game I’m going to make sure I treat my outline colour as a completely separate part of the palette – lesson learned!

Dev Time: 2 days
Total Dev Time: approx 253.5 days

previous

mockup_3x
Close Up Of The Scuttler – Centipede Tribute Palette!

Jetboard Joust Devlog #96 – Splitting Up!

Bit fed up with parameter tweaking, so before I finish the final first round of config by going through the treasure chamber guardians and bosses I thought I’d try and get the final non-jetboarding enemies wrapped up.

There’s going to be three of them in all I think, and I’m pretty keen to have each of them be a mini-homage to a classic arcade game, much like of already included one to Space Invaders. First up is Asteroids and an enemy I’m tentatively calling the ‘splitter’.

Originally I had imagined this enemy being a kind of giant jellyfish that split into smaller versions of itself when attacked, but then I happened across the first Starship Troopers movie whilst late-night channel surfing one evening.

It’s a pretty good movie and I haven’t seen it for ages so I ended up sticking with it to the end, and whilst watching it occurred to me that the theme of humans battling off waves of attacks from an insectoid alien race (often with fairly ‘conventional’ weaponry) wasn’t too far removed from Jetboard Joust!

I also thought that the gelatinous ‘brain bug’ at the end of the movie would work very well as an enemy that could split into smaller versions of itself so I used this as the inspiration behind my designs for the ‘splitter’. I drew inspiration partly from the movie and partly from an illustration I found from a 1970s board game version of the book which was simpler and more comic-like.

Rather than try and draw the entire enemy as one piece of art I wanted to build it from smaller components so I could easily make versions at different sizes. First off I created a pulsing body. I tried a number of different versions of this and ended up using a variation of the segments from the ‘squirmer‘ boss. The segments all pulse at the same rate with but start from a randomised offset.

I then added a series of eyes based on the eyes from the ‘spinner‘ boss and a mouth based on the mouth from the mini worms that the ‘squirmer’ gives birth to. It took a while to get the placement of the eyes right, the end result heavily references the movie ‘brain bug’.

Once I was happy with the general placement of the eyes and mouth I needed to make them feel part of the pulsing body as, when simply placed statically they looked far too ‘stuck on’.

I ended up linking each facial feature with a body segment and changing the location of that feature based on the current scale of that segment. This seemed to work pretty well in giving the impression that the features and body were joined rather than overlaid layers.

Enemy movement, as in Asteroids, is very straightforward as – a simple linear motion with a reflective bounce when an obstruction is hit. What was slightly tricky was deciding what to do when the enemy left the camera area. Originally I had it wrapping immediately to the other side of the camera (true to Asteroids). This was kind of cool, and I really liked the fact it was true to its roots, but unfortunately it made the gameplay way too intense – particularly when other enemies were encountered at the same time. I didn’t like the way it made the scanner look broken either.

So I tried simply having them wrap when they reach the edge of the game ‘world’ but this wasn’t intense enough and kind of dull. Eventually I settled on a halfway house between the two, if the enemies are offscreen or nearing the edge of the screen a decision is made as to whether the quickest route to the player is to travel in the same direction or to reverse direction (I take world wrapping and the current player velocity into account). The enemy switches direction (or not) based on this. This keeps the gameplay intense as things tend to cluster round the player but it still makes sense within the overall gameplay paradigm – and it doesn’t make the scanner look like it’s broken.

Something else I’ve been doing which has taken up at least a day of this dev time is working on a ZX Spectrum themed palette and improving some of my palette code. I can now have three different palettes for enemies as opposed to just one. Whilst doing this I discovered some bugs in my palette shaders which were particularly apparent when dealing with 100% RGB values as are used in some of these retro palettes, these are now fixed.

Dev Time: 4 days
Total Dev Time: approx 251.5 days

previous | next

mockup_3x
The Brain Bug from the 1970s Starship Troopers Board Game

mockup_3x
The Final ‘Splitter’ Design

Asteroids-Style Wrap Logic – Too Much Mayhem / Broken Scanner!


The Final ‘Splitter’ Alongside Other Enemies – ZX Spectrum Palette