WILLIAM PARKIN

Programming • Tech Art • Game Design

I’m an able programmer and games generalist and love work that challenges me both technically and creatively. This is a small folio of some games projects i've worked on.

Programming Lanuages

C#

0%

HLSL

0%

C++

0%

Python

0%

Relevant Skillset

Unity Engine

0%

Github

0%

Blender

0%

Photoshop

0%

FMOD

0%

After Effects

0%

Houdini

0%

Ring Of Rosies (WIP)
(Team Project) (University)
(Systems • Tools • Design)

Venari (WIP)
(Team Project) (University)
(Systems • Tech Art)

Alice In Wonderland 3D - Blanche McManus
(Tech Art • 3D Art)

Fire & Propagation
(Tech Art • Systems)

Chimera Controller (WIP)
(Systems • 3D Art • Design)

Music Material Weather
For WHISKEY.ST2007S
(WIP)
(Tools • Integration)

I'm available through email or Discord!
mail: [email protected]
discord: .icedcoff
Follow me on BlueSky and LinkedIn!
bluesky: https://bsky.app/profile/icedcoff.bsky.social
linkedIn: https://www.linkedin.com/in/william-p-919635225

Ring Of Rosies

Cards against The Plague

Play it on Itch.io: https://building-9.itch.io/ring-of-rosies


Gameplay


Project Overview

Ring of Rosies is a Plague Doctor inspired card game prototype made by a team of passionate up and coming game developers at RMIT University including myself.I was the core Unity developer and programmer for this project. A large amount of my time went into building Systems / Tools to quickly iterate on gameplay as we refined our card game concept. I also managed more general work which included gameplay, UI programming, animation, fmod, github, and helping artists with workflow and integration.

GIF IS LOADING

Systems and Tools

Scriptable Card Editor

Card Effect Editor

Scripted Fight Editor


Screenshots

Venari


Gameplay


Project Overview

Venari is a twelve week university project created in Unity. It was pitched as a movement based centaur action game with an emphasis on maintaining your speed. This was an experimental project where our team was able to develop many new skills, and figure out how we could approach the action genre.I was the programmer and generalist for this project, some notable systems i created were the Centaur Controller, enemy system, destructable system, bassalt cliff generator, procedural vertex animations, UI shaders / animations.



Centaur Controller

Research

With Venari, ours teams goal was to create fast paced action combat game with a Centuar (Half Human, Half Horse) player character. I knew this would include some unique challenges and did some preliminary research of how horse and quadruped controllers are typically handled in games. To my surprise, I found they are typically similar to vehicles. For reference, I made of diagram of Elden Ring's Torrent to plan out how i would handle the different movement and animation states required.

Another two important decisions that had to be made was whether to use a Rigidbody or KInematic controller, and whether we should use root motion for nicer animations at the cost of some fine control over movement. For the first, I decided to go with a Rigidbody controller, which made the controller more tricky to fine tune but would allow our player to work nicely with the physics engine if that was needed in the future. For the second, after consulting with our animator, we decided it would be easier to stick with controller based motion whilst they worked on how to approach animating a centaur.


Core Features

Over the course of the development the needs of our character controller changed and I had to adapt our centaur to handle more diverse situations and terrain. At the end of the project the core features of the controller included Running, Dashing, Jumping, Wall Bouncing. This was my first time going very deep with a combat oriented 3D character controller, and I learnt a lot of useful techniques that will resuable in future projects like priority state handling, input buffering, and a solid workflow for Unity's animator controller.

Run

Dash

Jump

Wall Bounce


Attack States

I implemented three different attack actions the player can perform, Jab, Spin Attack, And Charge Attack. These were handled with a separate state machine to allow for attacking whilst performing other actions such as dashing and jumping. Since our player is hard to position precisely we found it important that these attacks had some automated targeting to make landing them less frustrating for players. Only the Spin and Charge Attack ended up in our submission build as we felt the combat system was getting over scoped.

Jab (Light)
As a response to player feedback for ability they could 'spam', a fast jab was implemented with the intention of being an option to quickly finish off low HP emeies.

Spin (Heavy)
The Spin attack is performed by holding down the input whilst in range of a target. To allow for a higher skill ceiling for our game I implemented a critical timing window where the attack could be let go early to do more damage.

Charge (Special)
The Charge Attack is special attack which can be performed by collecting the Horns dropped by enemies. It is performed by holding down the input to enter a new state. In this state the player can ram through enemies and perform a special dash.


Targeting

To allow for easier attack aiming, I implemented an auto targeting system. This system takes into account the distance from the player, the position of the target on the screen, and the direction the player is moving to determine a target. This was especially important since our drawn back camera and lower depth of field made it hard to judge distance accurately.



UNDER CONSTRUCTION

Bassalt Cliffs in Houdini


Procedural Graph in Houdini

.

.


Procedural Horn Animations


Why use vertex animation?

.


Houdini Graph

.

Shader Graph

.

Empty, For Now...

Fire Propagation System In Unity


Showcase


Process


Fire Shader:

Using Unity's Shader Graph I created a billboarded fire shader that would serve as a base particle in my propagation system. I tried to make this shader as customizable as possible so I manipulate the parameters based on the material being set on fire.

GIF IS LOADING

Shader Graph.

GIF IS LOADING

Fire Particles.


From this article an article by Far Cry 2 developer Rob Cram, I learnt about an effective technique for fire propagation.
To Summarize:
A prominent technique is using an invisible voxel grid over the world and objects where each cell an HP and radius, and material.If cells touch a fire source they lose HP over time and eventually catch fire. Cells next to cells that have caught fire also lose HP.The length of time a cell burns for depends on its material.


Keeping these principles in mind I created a component script which would generate a 3D grid of voxels on top of an object and use mesh collider intersection to determine which of these voxels should be considered part of the propagation grid. I gave each of the voxel structures a hp and burn duration and spawned my previously created fire shader in a particle system on top of voxels that were currently on fire.

Voxel Grid and Spawning Fire Particles.


My next problem was allowing fire to propagate between different voxel systems. I needed an efficient way of determining if voxels from separate systems were in a given radius of each other.To handle this I do a sphere collision check on every n frames to see if an ignited voxel is colliding with another propagation system. If it is, i do a manual check with this propagation grid to see which voxels of the other system are actually being overlapped with.This is one element of this system that could have a big performance impact if handled incorrectly and could be improved a lot, however I was able to get reasonable performance with this method even with a lot of ignitable objects in the scene.

Sphere intersections.

Propagation Between Systems.


Fire Materials

In order to adjust how the fire looks and behaves based on different objects I created Fire Materials which i could use to manipualte these parameters. As a consequence of this i was able to use my system in more diverse ways, like my attempt to re create the torch from Zelda.

Attempt to re create Zelda torch.


To create some interesting interaction with my fire propagation i modified the fantastic grass system and shader by MinionsArt available here to scorch any to make only the grass on the ground burnable and the scorch the grass after the fire has died out.

Burning Grass

This is a scene inspired by an old Alice In Wonderland illustration by Blanche McManus which i submitted as a University Project. The project involved turning a very plain scene into something which evoked the style of a chosen artwork. I chose to model, texture and create shaders for all of my assets, including The Caterpillar as my centrepiece which I modelled and rigged in Blender.

Inspired Artwork
(Blanche McManus)



Screenshots

My intentions with this project was to dip my toes and building a character controller for an action game.I wanted to experiment with an orbiting weapon that the player could control with the right joystick of a gampad which eventually evolved into my Chimera controller.This controller allows you to move the tail of the Chimera as a separate entity to interact with objects in the scene. You can also hold left trigger to to extend the tail further to reach distant objects.In this prototype the Chimera's tail can pick up sticks and swing them as a weapon which would be the first weapon you would be able to use in an expanded game.