Portfolio Website

The website which you are currently viewing; I created and published this website during the early weeks of the first semester of 2nd year at university. The website is made with vanilla HTML, PHP and CSS. I aimed to create a website which has a consistent layout throughout all pages, hence the shared header and footer, background colour and choice of colours overall seen on each page but I also wanted to ensure that my website comes across as a clean and professional website which is achieved by not implementing anything too informal such as comical fonts or cluttered elements throughout the pages.

'Relentless Ricochet' HTML5 video game

introduction cutscene

For the first time while working in game development, I dabbled in creating an in-game cinematic cutscene which was stitched together with a combination of hand-created animations in Blender and a virtual camera positioned in-engine in the game world.

typical screenshot

Each stage had a plethora of projectiles on-screen at once; the green coloured projectiles are fired by the numerous aliens lurking around the environment and the red projectile represents the projectiles fired by the protagonist.

sanity vision effect

When the player accidentally harms fellow humans, they lose sanity which in turn impacts their vision, causing a vignette to creep-in around the corners and a grainy overlay to be applied.

Relentless Ricochet is the title of a game which I developed in the Unity Engine within a ten-day window (using C#) for my submission to the 'Bullet Hell Jam 5' Game Jam. The player takes control of a human who has found themselves trapped on an alien spaceship, with no where to run they happen across an alien gun perched on top of some containers and in-order to survive this situation the protagonist has no choice but to pick up the weapon, only to find it merge with their arm, which promptly begins to constantly fire from it's barrel, much to the dismay of the protagonist. This game is completed to it's fully intended extent and as such I don't imagine I'll be re-visiting it to add further levels or content.

The Game Jam's requirement was that it features an abundance of projectiles flying across the screen at any given time, and the theme of the jam was 'Consequences'. As such, I implemented a game mechanic where the player's sanity is impacted based on how many innocent humans they accidentally killed - which was made a possible reality due to the other consequence; the protagonist's weapon constantly fires - and to make matters worse it's projectiles bounce off of surfaces, potentially ricocheting towards the innocent human scientists who were abducted onto the spaceship. The player's sanity drops in relation to the amount of scientists they have harmed; the restrictions on the player's vision (by way of obstructing their screen) worsens incrementally per scientist hit.

The player's goal was to escape the spaceship, which would be accomplished by reaching the end of the level. The level was divided into three 'chunks' which were Scenes that are loaded or unloaded on-the-go (asynchronously in the background) by detecting when the player's GameObject enters or leaves trigger boxes (3D areas on the map) - if the player enters the trigger box at the end of the first chunk/zone, the second zone would load and the first zone would unload behind them.

'PSX Secret Cult' HTML5 video game

i attempted to capture the aesthetic of horror games released on the original PlayStation - with a low screen resolution at 4:3 aspect ratio, small indexed 16 bit textures, low polygon geometry, affine texture warping and a jittery shader applied.

Outside of graphical limitations, the horror element were the enemies throughout the environment; they would either patrol designated areas or lurk around corners, pursuing the player if they got close enough to be seen.

leaving on subway car

The game featured two in-game cinematic cutscenes; the first plays as an introduction whereby the player arrives by car which breaks down. The second is the outro where the player escapes on a metro train.

PSX Secret Cult was the name I had given to the next game which I worked on as part of a Game Jam - this time around, the jam was 'The Secret Cult Horror Jam' and I had only nine days to develop and submit it. Once again, I used the Unity Game engine, and the scripting was done in the C# language. In this game, the player's character is driving a road which is unfamiliar to themselves when they happen across a roadblock made up of piled up and overturned vehicles. The protagonist exits their vehicle to investigate, only to notice that they've now been blocked-off from behind by a line of hooded people standing idly holding hands. This is unsettling to the protagonist, so they decide to leave their vehicle behind and attempt to escape the eerie hooded cultists, progressing further on foot using a trail to the side of the road leading into a church. The player's goal was to escape the hostile environment by reaching a subway and getting onto a metro train, which could be accomplished by reaching the end of the level where the subway is located.

The player would encounter cult members patrolling the environment or waiting around corners to surprise attack the player. The protagonist could run away from them and eventually out-run their vision or they could fight back by swinging a bat at the enemies. The game is definitely in an early prototype stage and doesn't have near as much "going-on" as I'd like for an actual game if it were to ever become a proper game project as opposed to a game jam submission but in the future it could be developed further or off-shot into a new game using some mechanics or assets I had developed for this game jam.

Untitled PSX Third Person Shooter Android video game

The default camera position and properties, including a narrow field of view similar to that of the Tomb Raider or Duke Nukem video games on the PlayStation 1.

The game switches to fixed camera angles as opposed to standard third person during specific events, such as in this example where the protagonist interacts with their injured ally in the sewers.

leaving on subway car

After hitting the button to access the player's inventory, the player's items are shown appearing evenly distributed on a radius around a circle. Selecting left or right then rotates the circle to change which item appears in front to be selected.

leaving on subway car

The player comes across various enemy types including ghosts as shown here, who float eerily towards the player and cannot be injured without first having a flashlight shone onto them.

About one year prior to starting development on the above Game Jam video games, I had been working on what remains to be my most ambitious game project to-date - a third person shooter developed for installation on an Android phone. The retro PlayStation 1 aesthetic is something which I'm highly interested in and I was determined to find out if I could solo-develop a sizable game inspired by PSX titles. The game is heavily inspired by titles such as Resident Evil, Silent Hill and Tomb Raider.

The idea for the game's plot revolved around surviving an apocalypse against the supernatural. The player would take control of one of two selectable protagonists who are deep within a zombie apocalypse in England during the late 90's-early 2000's. As the player progressed further throughout the game, they'd encounter more dangerous supernatural threats such as ghosts, werewolves and undead skeletons. The player would start their journey in the sewers beneath the city where they've taken shelter from the undead a short while into the apocalypse, but they must emerge from the sewers to find medicine to save their injured ally.

Game mechanics featured in this game are:

  • Inventory system - multiple weapons are available to pickup throughout the game world, and the player can hold at most one main firearm, one secondary firearm and a melee weapon. Equipped items appear on the player's body when holstered and in their hand when chosen as the weapon to be using. Player's could also find body armour which would improve their resistance to damage.
  • Variety of enemies - zombies are the most frequent enemies to appear and are defeated using any weapon, but other enemies have specific requirements such as ghosts who the player must first shine a flashlight onto them or else they're impervious to damage.
  • Alternate game-modes - the player could choose to play through the campaign/main story or they could choose to play an alternate game-mode where they must survive as many rounds as possible against waves of enemies, while equipped with weapon and being able to place boxes as defences against the enemy forces.
  • Alternating Camera Views - the game is predominantly played in a standard third person view behind the player, but the camera will change to designated fixed camera angles where appropriate.
  • Toggle-able effects - the player can choose to disable selected effects such as forced interlacing and the dithering overlaid on the screen. They are also able to change the aspect ratio on their device from the default 16:10 to either 16:9 or 4:3
  • World Map - the player is able to open up a map which shows a birdseye view from above, with the player's current position and rotation represented by an arrow overlaid on top of it.

Mobile Ball Game for Android

v0.1 of game

This image shows the very first version of the game. The only functionality was a simple ball moved by tilting your mobile phone. The movement was tested on a track made out of placeholder assets which were soon removed and replaced.

obstacles

There are many hazards to conquer including swinging hammers to knock the ball off course, electrified street lights to fry the ball and cause the level to restart and gravity holes which cause the ball to gradually move inwards towards it.

track segment types

There are basic track components such as straight pieces and curved pieces but there are also more advanced ones like the centre segment with missing side pieces shown in this image and pieces could have have railings or be railing-less.

track layers

The procedurally generated track is implemented on multiple layers/levels; the track can dip down slopes as opposed to remaining completely flat.

The first project I undertook during my first summer break was the ball game designed for Android devices. The player controls the movement of the ball by using their mobile device's physical location and rotation in the real world, taking advantage of their mobile device's Accelerometer to determine where they are angling their phone. The player must control the ball to navigate a procedurally generated track which is made up of varying segments to reach the end of the track, whilst avoiding the dangers spawned on and around the track and tying to not fall off of the track itself. The track can be made up of the following pieces:

  • Straight - a straight-line which vary by length and may or may not have side railings on either the left, right or both sides.
  • Curved - a curved-line which vary by length and direction (either curve to left or curve to right) and can also zig-zag. These pieces may or may not have side railings on either the left, right or both sides.
  • Sloped - a straight line which moves the track diagonally downwards on a ~30/45 degree angle.
  • Bent - a slightly-bent variant of the sloped pieces, just with a deeper decline and more of a curved start an end point.
  • Partial - a variant of the straight pieces with sections of the track cut-away leaving behind gap(s) and a slim line just wide enough for the ball to roll over. The gap can be either on the left side, right side or both sides.

There are various obstacles (most often of which are hazards) situated across the track which have the intention of adding a degree of difficulty to the game either by slowing the player's ball down, disrupting it or causing a restart of the level from a checkpoint. The obstacles the player may find themselves coming across are:

  • Hammer - a swinging hammer which will impact with the player's ball and knock the ball at a greater speed in the direction of the force that the hammer was swinging.
  • Lightpost - a faulty lightpost taken from the streets below the track which has sparking electricity flowing out of it. If the player's ball comes into contact with it, it causes a checkpoint restart.
  • Gravity Hole - a small circle which attracts the player's ball towards it by applying an inwards force which will cause the player to have to restart from a checkpoint if they manage to get sucked into the centre of the hole.
  • Floating Debris - props from the city below which have floated up into the sky to align themselves on the sides of the track. These may be more of a benefit for the player, as they could be an obstacle on the side of the track which prevents the player from falling off of it.
  • Checkpoint - A flag which serves as a checkpoint once the player's ball passes it; if the player falls off the track or is defeated by a hazard, the player will respawn at the point on the track where they passed the flag.