Tag Archives: retrogaming

Jetboard Joust DevLog #110 – Making New Enemies pt 2

…and on and on it goes. Please wishlist Jetboard Joust on Steam here.

In the last devlog entry I talked about how I felt there wasn’t enough variety in the earlier levels of Jetboard Joust and that more enemies were needed. The two covered in this post are the more elaborate additions to the pack, in fact they kind of morphed into three – or two and a half at least!

1. The Watcher
I’d always wanted to add an enemy based on a giant floating eyeball. That and a brain in a jar, but I haven’t got to the brain in the jar (yet).

My fascination with giant eyeballs comes from two things. Firstly, the art of Rick Griffin. Rick Griffin was an American counter-culture psychedelic comic/poster artist who helped define the look of the period. Giant, often winged, eyeballs feature throughout his work alongside all sorts of other weird shit. I love it.

Secondly – The Residents. The Residents are an avant-garde rock band formed in the early 1970s who have released a mountain of weird and wonderful work over the past 50 odd years. Their ‘Duck Stab/Buster and Glen’ set is one of my favourite LPs of all time – it sounds like it’s landed from another planet. They were one of the first bands to experiment with multimedia and (weirdly) appeared in Apple’s original demos for Quicktime. The Residents famously used giant eyeballs and top hats to mask their identity throughout their career.

Designing the eyeball itself wasn’t too difficult with such great inspiration to work from. It didn’t really work just as a floating eyeball though, and I thought adding Rick Griffin style ‘wings’ would be too time consuming and complex to animate, so I decided to add some slightly Lovecraftian tentacles which are in fact part tentacles and part severed optic nerve (nice)!

Of course I had to make the eyeball track the player! I also added a laser attack (with recoil) and a background shader effect which is also a nod to Rick Griffin psychedelics. The enemy’s movement is based on the ‘swarmer’ logic from the previous post in that there’s a ‘controller’ for each group of eyeballs so they attempt to circle the player rather than attack the player directly. I also use a ‘baton’ approach for the firing so that only a certain number of the group can ever be firing at one time. In the end I was really pleased with the way this enemy worked out.

2. The Swimmer
The next enemy actually started with an idea for its movement before I had any idea what it would look like. I wanted something that would rotate and attack in short ninety degree ‘bursts’ as there aren’t really many enemies in the game that follow this type of strictly horizontal/vertical movement pattern. Coding the movement was pretty easy but I became a bit stuck as to what the enemy should actually look like. I didn’t want to have anything abstract like a rocket or missile (everything has to have personality) and anything I thought of would have looked weird rotating in this way.

Then, whilst emptying the week’s food waste into my compost heap, I happened to see a bunch of woodlice crawling around. It occurred to me (as it has many times before) that these creatures look very similar to prehistoric trilobites and I though – bingo! That would work! A trilobite enemy would work with that movement pattern and fit within the aquatic/Lovecraftian feel of much of the art. I was amazed when looking at reference material just how many types of trilobite existed, and just how creepy some of them were!

So I got to work on animating a trilobite. This wasn’t as hard as I thought it might be, luckily just using a chequered pattern to infer some kind of skeletal structure worked rather than literally attempting to draw every single bone (which would have been impossible in so few pixels). The hardest thing to get right was the head which I found difficult to make look like something that was seen top-down and facing forward rather than some kind of face looking at you straight on. It actually looked better when seen in the context of the enemy’s movement rather than when worked on in isolation.

I felt that these guys should have more of an attack than just ramrodding the player so I blessed them with the ability to shoot exploding egg sacks out of their arse (aren’t they lucky)! Also, these are the only enemy that interact with each other in that they bounce off each other as well as off the environment. I felt this made the movement patterns more interesting.

I was pleased with this enemy but when I tested it in-game their size meant they were much too hard for the level at which they needed to appear. Being such a large enemy it looked silly if I reduced their health so much that the player could just one-shot them with a weak weapon. They’d have to appear later in the game, which left yet another gap earlier on!

So, I decided to work on a ‘baby’ version. I edited down the graphics, removed the exploding egg sacks, and slowed down the movement. This made for a much more appropriate enemy for the earlier levels – almost two enemies for the price of one!

Dev Time: 5 days
Total Dev Time: approx 325 days

previous

mockup_3x
Eyeball Inspiration – Rick Griffin & The Residents

mockup_3x
The Finished ‘Watcher’ Enemy In Isolation

mockup_3x
The Trilobite-Inspired ‘Swimmer’ Enemy

mockup_3x
…and Its Baby Brother

Granny Bait – The Making Of “Skateboard Joust”

Granny Bait: A term used back in the day to describe a game that had virtually no redeeming features but, because it had something ostensibly ‘youth’ in the title (and was cheap), would be bought in droves by clueless older folk as gifts for their disappointed grandchildren.

A while ago I wrote a post about ‘Subterranean Nightmare‘, my first commercial release for the ZX Spectrum. Whereas ‘Subterranean Nightmare‘ was something of a labour of love and represented a genuine attempt to create a decent game, my next title (I am somewhat ashamed to admit) was executed in a rather more mercenary manner. I can’t remember exactly what age I was when I started work on ‘Skateboard Joust’ but I was heading into my late teens. I was losing interest in videogames and starting to become far more interested in guitars, girls and beer. Guitars, girls and beer cost money though – and the best way I knew of to make a quick buck was to churn out another budget Spectrum title.

I never had the slightest interest in skateboarding but tying the game in with something that was relatively fashionable seemed like a good idea. I’d also never played ‘Joust‘, but I’d seen screenshots and knew it was made by the some people that made ‘Defender‘ (which I still rate as one of the finest videogames of all time) so it was bound to be pretty cool.

The central mechanic of the game involves destroying enemies with your skateboard which you can only do if you are mid-jump (not actually riding the board) and I still think this is a pretty sound gameplay concept. It’s not executed very well however and is extremely difficult to get the hang of (‘totally unplayable’ might be a better description). Then there’s the fact that, aside from a few pretty unimaginative powerups, this central mechanic is pretty much all there is to the game making it a fairly tedious experience.

The worst thing about the game though is that what appear to be the level backgrounds are actually in the foreground and serve no purpose other than to obstruct your view of a game that’s hard enough to play as it is. Making gameplay harder by simply obscuring what’s going on must surely be one of the most laughably bad game design ideas ever!

I remember borrowing chunks of code from my brother Tim (of I-Ball fame) who was always a much better coder than me, and recycling some of the graphics from ‘Subterranean Nightmare‘. I also added some of the most embarrassingly ‘wrong’ skate slang between the levels. Not my finest hour but I was paid a £2.5k advance by Silverbird which paid for a lot of beer.

The game was justifiably slated by Crash Magazine at the time, though in recent years some people have been rather kinder to it, notably the vg-junk blog. There’s also some drunk guy on YouTube who plays the game for around five minutes without realising that you can jump off your skateboard!

Bizarrely though the game had some devoted fans despite its awfulness – in the comments for this video there’s someone who seems to take great offence when people suggest that it might be a tad shit! I also ‘met’ the person who did the C64 version in this thread, turns out they got paid considerably more than I did for writing the original!

And no, I have no idea what I was thinking of when I designed those ‘extra’ life icons! They do look like some kind of demented frog!

World Of Spectrum entry here.

30 years later I’m now working on a sequel, ‘Jetboard Joust’, in order to balance out my karma for forcing such a terrible game onto the unsuspecting public. ‘Jetboard Joust’ builds on the central ‘Jetboard of Death’ mechanic and adds a whole lot more besides – you can wishlist it on Steam here and read about the development here.

30 years Later – The Sequel…
Read the instructions you fool!


The C64 Version (With At Least One Devoted Fan)!

cornflower
Recycled Graphics on Skateboards

cornflower
Yes, All That Shit Just Gets In The Way!

cornflower
Attack of The Roast Chickens

Jetboard Joust Devlog #104 – Trailer Trash pt 1

Decided to split this devlog in two as making a videogame trailer is a fairly long process, particularly when you don’t know what the hell you’re doing! Plus there’s been a couple of other things that needed attending to before I felt I could really progress as I’d like.

1. Audio FX
Firstly I had to do some more work on the in-game audio. There were a number of actions I felt required fx that didn’t have any (some pretty important such as unlocking weapons and worlds) and a couple I wasn’t happy with. I spent a couple of days on this. There are now around 270 individual effects files in the game, and that’s not including background music and loops! I think the audio is a pretty distinctive part of the game due to the fact it’s all produced from scratch on analogue gear – no stock samples here, folks!

2. Performance Optimisations
Secondly, as I was recording a bunch of action footage I began to notice frame-rate drop at a few points where there was really intense action on screen. This was exclusively at places where enemies that release a bunch of ‘offspring’ are destroyed by a weapon that kills the enemy and all it’s offspring in one fell swoop (e.g. the jetboard attack). The resulting explosion-and-bonus-fest was just a bit too much.

So, I worked on some optimisations for the above. This included adding object pooling for every object that’s generated when an enemy is destroyed, combining multiple smaller explosions and/or smoke clouds that are very close together (and instantiated in the same frame) into one larger one, and pre-caching of the terrain elements that pickups might hit as they fall (rather than calculating this every frame). I’ve also let some offspring ‘escape’ in the above scenario as I didn’t like it when absolutely everything got destroyed. I no longer see any frame rate drop now, even when there’s a shitload of fireworks going on, and I’m running a Mac from 2008!

3. Start The Trailer
Before starting the trailer I read through a number of very helpful blogs on the subject by Kert Gartner and M. Joshua. Here is a particularly good one.

3.1 Choose The Tools
One of the most useful practical tips I picked up from these was a pointer to an app called Screenflow that will grab 1080 game footage at 60fps even on my ancient Mac. I’ve been through a bunch of these screen capture applications (Snapz Pro, Capto, Screenium) but Screenflow is the only one that will do this. Capto is cheap and neat (this is what I’ve used for most of my animated GIFs and devlog posts) but will sometimes compress really heavily for no apparent reason, Screenium is almost as good as Screenflow (and cheaper), will let you record a set area AND remembers this rea (really useful) but it still compresses a bit even at the highest settings (plus I found it’s editing tools a tad clumsy and prone to crashing). For the purposes of recording gameplay footage for trailers Screenflow definitely comes out tops.

3.2 Intro
Probably the hardest part of the trailer to get right is the first 15 seconds. You don’t want to lose the user’s interest and you have to attempt to communicate the core mechanics of your game in as short a time as possible (without being overly didactic). I’m still not sure I’m 100% there but I think what I’ve come up with does a reasonable job of communicating abductions, mutations, the jetboard attack and the general carnage of the game in that timeframe. To get this footage I used a combination of scripted events (i.e. faking things through coding) and playing through a set sequence over and over again until I managed to one-shot all the enemies in a way that looked effortless and ‘readable’ enough.

3.3 Shock & Awe
After this initial intro section comes just under another 15 seconds of what I’m referring to as ‘shock and awe’. This is a high-octane segment that focusses mainly on the destruction wrought by the jetboard attack but also features a couple of other weapons. This is all ‘real’ gameplay footage, I just recorded a load of stuff to get a variety of enemies and palettes. I deliberately try and move the action from one side of the screen to the other here.

3.4 Breathing Space
Lastly comes just over 10 seconds of ‘breathing space’. A longer cut in which we see the destruction of a boss, the opening of a treasure chamber and the discovery of a new weapon. This section has a certain amount of scripting (reducing the bosses health and getting rid of some onscreen distractions) but is largely the result of playthrough after playthrough to get things looking slick and pulled off in as short a time as possible.

I’ve tried to keep the player’s position onscreen consistent between cuts so that the viewer’s eyes can easily track what’s going on. I’m also zooming/panning across the action where appropriate in order to avoid ‘dead’ areas of screenspace and create variety. I thought this might be overly distracting but it doesn’t seem to be.

So now we have just under 45 seconds of trailer done which is approximately half of it. Next step, around 20 seconds on enemies and weapons, 20 seconds on bosses, and a five second closer!

Dev Time: 10 days (inc 2 days audio and 2.5 days performance optimisations)
Total Dev Time: approx 292 days

previous | next

Jetboard Joust Devlog #103 – A Broader Palette

Well, I reckon this has been the longest break between devlog updates so far. I’ve had two contract jobs on, one of which turned into a bit of a never-ending spiral with the client refusing to pay me unless I kept adding additional functionality (for free). Shame, as it was kind of a nice project otherwise. I have a bit of a rule about not working for startups which I broke for that one as I knew the person involved and was interested in the concept.

I’ve also had a lot to do at a rental property I own which needed considerable TLC between tenants and which was built to a very shoddy standard. Grinding out and re-doing grouting between floor tiles in the bathroom was a horrendous job – hope I never have to do that again!

Anyway, you don’t want to hear about that shit. The bulk of the work on Jetboard Joust has been in finalising the main palettes for each of the five ‘worlds’ that comprise the game. I’m going to have four main palettes per world, plus a bunch of ‘bonus’ palettes that can be unlocked by completing specific levels.

I probably should have coded a tool to make this process easier but I just couldn’t face it when the time I had available was very piecemeal, generally half a day here and there between contract work and property maintenance! Consequently my working process was pretty inefficient, basically editing a big PNG of all the palettes in Photoshop before recompiling and running the game to see how things looked.

There are ten colours per palette in the game and the following items can all have a different palette applied (though in practice many share the same palette)

– Player
– Enemies (three types)
– Bosses
– Pickups
– Terrain
– Floor
– Background parallax (both layers)

To design the palettes I used a combination of reference material and inspiration from messing around with colour association using coolors.co and a simple colour ramp generator.

The actual palettes themselves I’ll list below and detail the specific inspiration where appropriate. These are all in the order they appear in the vids.

World One
I wanted to start the game with earthy, muted colours and then progress to more vibrant colours as the user moves through the worlds, as well as slowly introducing different palettes for different sprites. The first palette is the slightly gameboy-ish one I’ve been using from day one and I gradually add more subtle hues to this as we move on. There’s no specific inspiration for the palettes in this world though I was looking a bit at army camouflage designs for the third palette here which is currently named ‘Going Commando’.

World Two
Each of these palettes had a different inspiration, only two of them particularly related.

1. No Space To Scream
A good ‘segue’ palette from the muted colours of world one. This is inspired by the colour scheme for the branding of the original Alien movie.

2. Deep Dive
Inspired by photographs of coral reefs. As the boss in this world is a giant alien robot-fish this seemed appropriate somehow.

3. Neon Flux
Inspired by neon-heavy nighttime shots of cities, particularly Tokyo. Visually it has the feel of being a much more saturated version of the previous palette.

4. Aliens on Acid
Originally inspired by the ‘Alien’ colour scheme as was the first palette, only with colours so saturated it almost has an early arcade / ZX Spectrum feel.

World Three
We go back to a slightly more ‘muted’ feel for these palettes, all of which have their inspiration from vintage designs.

1. Stan and Jack
Inspired by the cheaply printed colours of early comic books, particularly the Marvel stuff.

2. Dead Red Revolution
Partly inspired by poster art from ‘Grindhouse’ style movies (I have a large poster for ‘Death Proof’ on the wall of my studio) and partly by the artwork for Red Dead Redemption which has a similar ‘vintage’ feel.

3. Forbidden Fruit
Inspired by a poster for the 50s sci-fi classic ‘Forbidden Planet’ – I’m really pleased with this one.

4. Retro Apocalypse
Inspired by some cover art for a 50s or 60s pulp sci-fi novel. I am not convinced by this one. It kind of works but some of the sprites just don’t. Needs more work!

World Four
All inspired by various ‘horror’ related themes! We move back to some pretty saturated colours for these ones.

1. Dead Evil
Inspired by the original posters for Sam Raimi’s ‘Evil Dead’ movie.

2. House of Hammers
Inspired by the poster art for various low-rent Hammer horror films. This is another one I’m particularly pleased with.

3. Toil and Trouble
I went for deliberately clichéd ‘Halloween’ style colours for this one. Very saturated and ‘in your face’ but I think it works.

4. Black Mass
Inspired by various different, more modern, horror film posters – as well as the artwork for the ‘American Horror Story’ TV series (which I thought was terrible and never made it past the first series).

World Five
These were mainly inspired by the manual artwork for early Atari arcade cabinets. I absolutely love that stuff and it also adorns the walls of my studio (alongside the aforementioned Death Proof poster and paintings by Basquiat and Tapies).

1. Rayguns at Dawn
Inspired by the ‘Space Duel’ manual art.

2. Planet X
I forget what inspired this specifically (oops) but I’m pretty sure it was the cover art for another vintage pulp sci-fi novel.

3. Gravity’s Rainbow
Inspired by the ‘Gravitar’ manual art. This is one of my favourite palettes in the game.

4. Prospero’s Cabinet
Inspired by the ‘Tempest’ manual art.

There’s still the bonus palettes to be finalised, I’ve done quite a few of them and there’s a lot of nods in there to 8bit home computers and consoles. That’ll be the subject of another post though! Hopefully things will move a little quicker over the next few weeks, next task is to fill in a few gaps in the audio then do a pretty much final teaser vid and get my Steam page up (I probably should have done the latter months ago).

Dev Time: 10 days (pretty broad estimate)!
Total Dev Time: approx 292 days

previous

World Two Palettes – Aliens and Oceanography

World Five Palettes – Atari Arcade Manual Art

mockup_3x
Awesome Atari Arcade Manual Art

mockup_3x
The Forbidden Planet Poster That Inspired One Of My Favourite Palettes

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

Jetboard Joust Devlog #95 – Configuring Things Out pt. 1

This is one of those devlog entries that seems kind of dull because there’s been a lot of ‘under the hood’ type goings on and not a lot of eye-candy to show for it.

But, it’s taken time and it’s really important to the game’s development so I’m going to blog it anyway, boring or not!

What I’ve been focussing on is the overall structure of the game world and how difficulty progresses throughout the game. At this stage it has been very much a first pass at this, as much about providing the tools to allow me to tweak gameplay efficiently as it has been about balancing the gameplay itself.

I’ve broken down what I’ve been doing into three key tasks:

1. Code Refactoring
As with any game of significant scope, there are multiple interconnected parameters that affect gameplay difficulty in Jetboard Joust and it’s a hell of a lot easier to tweak things if the code that manages these parameters is in one place rather than split across a myriad of individual class files. Consequently I’ve set up a static ‘Config’ class that contains all the algorithms and configuration parameters for pretty much anything to do with rewards and difficulty throughout the game. This has involved a lot of tedious cut and paste but I know it’ll be worth the effort in the long run (it already has really). I’ve set up generic parameters here for the amount things like enemy health and weapon damage/difficulty scale throughout the game so at least I have a baseline to work with and can tweak individual scaling from there if necessary.

2. Mapping
I’ve created a template in InDesign for mapping out levels in each of the game worlds and have been through this with a first pass attempt at placing weapon unlocks and new enemy ‘reveals’ in each. There seems to be enough content to fill four level ‘pyramids’ of around twenty rows each with a reveal rate of a new enemy or weapon every couple of rows. I need a couple of different ‘non-jetboarding’ enemy types but was expecting that anyway, I added an additional jetboarding enemy to span the difficulty gap between the ‘minion’ and ‘master minion’ which was fairly simple to do. I may make the fifth and final world smaller, probably ten rows, with the final boss right at the end.

3. Auto-Levelling
In order to be able to arbitrarily test game difficulty I need to be able to jump to a particular level and have an idea how the player might have ‘levelled up’ at that point. What weapons will they have unlocked and how powerful will they be? What will their base health be? It’s not straightforward to figure this stuff out so I ended up writing an algorithm that takes a destination point within the game pyramid, figures out the location of each treasure chamber before that point, then does a mock play though of the game to unlock each treasure item. On the way I collect the cash that would be awarded for defeating enemies, rescuing babies, and completing ‘sectors’ (rows of the pyramid). Once cash is earned it is spent on the most expensive upgrade available.

It took quite a while to test this code and get it working but it’s going to be invaluable for testing as I can now start the game at any point and have the player ‘levelled up’ as appropriate. Using this code I can also monitor things like how long it will take to level up a particular weapon, how much a player might earn for completing a level at the point weapons are unlocked (hence what a sensible starting price for updates might be) and all sorts of other stuff I haven’t even thought of yet!

4. Basic Gameplay Testing
Using the code above I began going through the game to check and tweak parameter scaling at key points (i.e. the ‘reveal’ level for each weapon and enemy) to make sure things seemed sensibly balanced. Unsurprisingly they were way off to start with but after much fiddling I’ve reached the point where relationships at least seem workable, haven’t done the treasure chamber guardians and bosses at all yet though.

One thing that became apparent was that weapons that are unlocked earlier in the game need to have a greater number of upgrade levels than ones that come later on, otherwise they either ‘max out’ too quickly and end up becoming useless on high level enemies or they cost far to much to upgrade in the early stages. This was particularly apparent with the default weapon (the pistol) so I ended up adding a new default weapon (the .45 magnum, essentially a pistol on steroids) which is unlocked about halfway through the game and has enough grunt to take the player through to the end of the game.

I also ran into a shedload of bugs, it’s been ages since I looked at many of these enemies/weapons so there’s a ton of small issues created by various changes I’ve made. Fixed a bunch of them as I went along (partly why this phase took so long) but I’ve still got a very long TODO list in Trello!

Dev Time: 6 days
Total Dev Time: approx 247.5 days

previous

mockup_3x
Mapping Out The Levels

mockup_3x
Debug Output From The Auto-Levelling Code

mockup_3x
A New Type Of Minion Enemy

Jetboard Joust Devlog #94 – The Armed and the Dangerous

So far this year I’ve been focussing on weapons and the weapon unlock/upgrade mechanic in preparation for doing the wider gameplay and difficulty balancing. I’ve broken this down into three key areas…

1. Ammo Drops
It became clear whilst testing the bosses that the way I was calculating ammo drops was flawed and I needed a better method. The method I eventually came up with is simpler than its predecessor, works far more effectively and should ‘scale’ automatically as weapons are upgraded and the player faces enemies that soak up more ammo. For each weapon I now work out the maximum amount of damage that can be done to any enemy from a clip’s worth of ammo (the amount contained in a single ammo drop). I then scale this amount based on the accuracy of the weapon in question (weapons that have a lower accuracy scale down more as one must assume that not every shot will hit its target). Once the player has dealt out damage to any combination of enemies that exceeds the resultant ammo refresh rate a new ammo drop is awarded. It’s important to record the damage dealt as the amount of damage that would be dealt if the enemy had infinite health, otherwise enemies that are destroyed by the attack score too little and this can really skew the system.

To test this I set up a ‘sponge’ enemy that does nothing but takes loads of damage and tried out all the different weapons on it in turn, tweaking the accuracy scaling and checking the method I was using to calculate the max damage per clip was correct on each one. This was easy for weapons that simply fire bullet-style projectiles but more complex for weapons like the flamethrower. For ‘area of effect’ style weapons like the grenade launcher, RPG and sonic boom I can only really approximate an idea of maximum damage.

Whilst in the process of the above I got pretty distracted re-working the shotgun blast effect as it still didn’t seem to give an accurate indication of the blast’s area of effect. This is the third time I have re-worked this(!)

2. Weapon Switching
To date the player has only been allowed to carry one weapon at a time. If the currently armed weapon runs out of ammo they were automatically switched to the default weapon (pistol) which has infinite ammo. If they wanted to arm a more powerful weapon again (pretty much guaranteed) they would have to pick one up from a weapon crate AND find an ammo drop to recharge it should it have run out.

I decided this mechanic was no fun and therefore, according to the Scott Rogers principle, had to go. Now I am allowing the player to carry two weapons at once – the default weapon with infinite ammo and a (generally) more powerful secondary weapon. If the secondary weapon runs out of ammo the player is switched automatically to the pistol as before but this time all they need to do to recharge it is collect an ammo drop. The new mechanic seems to feel much more natural and fun to me, though I’m a little worried it might give the player the opportunity to over-exploit powerful weapons but we shall see…

As an adjunct to the above I also implemented a key to switch weapons so that the player can switch to the pistol if they want to save ammo on powerful but understocked weapons such as the RPG.

3. Weapon Unlocks
Previously, in order to unlock a weapon, the player had to catch the jetboard of an enemy that was armed with it. This worked OK, but it was a bit easy and I didn’t really think it made a big enough deal of the weapon unlock process.

I’ve decided instead to have weapon unlocks as a type of treasure. Rather than being guarded by a boss, the treasure chambers that contains these weapon unlocks will be guarded by a fleet of enemies armed with the weapon in question. This enables me to make more of the treasure chamber mechanic, adds another layer to the gameplay, and also allows me to use the big ‘weapon upgrade’ icons (which I was rather pleased with) in-game as pickups.

It didn’t take me long to design these ‘guardian’ enemies but I spent a fair bit of time on implementing some special AI for them. Firstly I enabled them to swoop down and steal the player’s health pickups to heal themselves (I may allow other enemies to do this once the reach a certain level), and secondly I implemented a special ‘wrap attack’ whereby if a bunch of them have been chasing the player in the same direction for some time a few will take advantage of the world wrapping by peeling off and heading in the opposite direction to meet the player head on!

The video demonstrates unlocking the shotgun by defeating a small fleet of enemy guardians. They’re pretty tough opponents – as you can see I had to rely pretty heavily on the jetboard attack here and was pretty lucky managing to take out three of them in one go!

Dev Time: 241.5 days
Total Dev Time: approx 4.5 days

previous

mockup_3x
Using a ‘Bullet Sponge’ to Test Ammo Drops

mockup_3x
Enemy AI Now Enables Them To Steal the Player’s health Pickups

Unlocking The Shotgun – Note The Guardian’s ‘Wrap Attack’ Technique