Today we’d like to explain Disjudicator in greater depth, as well as go over some of the technologies and 3rd party software enabling us to achieve our goals for its gameplay and detail. If you follow this series of posts throughout Disjudicator’s development, we expect to keep you entertained with concept art, bloopers and by sharing techniques and our experiences that might help you with your own projects in Unity.
Build notes – Disjudicator v0.17
Aiming system – Inverse kinematics
The incredibly versatile Final IK – an Inverse Kinematics animation solution – allowed us to speed up progress on the animated aiming system tenfold. As we develop Disjudicator, your character’s weapon aim will look anatomically realistic and varied as you race through its levels. This system also covers a lot of the work required for applied forces for NPC skeletons, hit animations etc.
It alleviates us from the gigantic load of donkey work involved in animating anything using a skeleton – it helps us generate animations for walking, running, sliding, being hit by bullets, rigid bodies, procedurally generated ragdolls… Shall we go on? This plugin has been a life saver so far and we are only beginning to wield it to its full potential.
Please enjoy our first attempt configuring our animation mask with an IK solution (now fixed, don’t worry).
The score system accounts for accuracy, speed of level completion, as well as enemy kills and the completion of objectives and sub-objectives. Additionally, it will also factor in :-
- Headshot detection – Score modifier applied to the kill bonus
- Velocity and accuracy bonus – rewarding you for pulling off precise shots whilst on the move
- Style bonus – extra points for knocking enemies up into the air and shooting them, shooting while dashing and chained attacks
We recently added a very simple server-side high score table for our dev team to compete on (with which we’re having great fun, by the way – dude have you played the new Disjudicator build? Nah? Aww that’s too bad man, shit was SO cash)
Our custom-coded objective and story progression system allows us to flag NPCs, objects, buildings, items (and pretty much anything else) as objectives, with detailed and varied win conditions such as Destroy, obtain or approach, allowing us to create interactive set pieces and dynamic levels that reach beyond the scope of the current level and affect the narrative of the game
Custom-built RayCast collision system
We soon realised Unity’s own physics engine wasn’t going to meet our requirements for the kind of tight platforming we want Disjudicator to offer, and have therefore built our own RayCast-based collision engine, giving us fine-grained control over every aspect of how the character moves, reacts and interacts with the level geometry and objects throughout the game.
We are still fleshing out the capabilities and robustness of our model, and have already implemented gravity, collision, slope detection and more.
At the heart of Disjudicator lies its nuanced, finely-tuned platforming. Getting the right balance between difficulty and accessibility is difficult, but we’re investing every effort to make Disjudicator feel natural, challenging and addictive. The current player controller model includes part-animated dashing, wall-jumping and sliding mechanics, to which we hope to tie assets in the near future.
Another custom-coded model for Disjudicator’s killing tools – our code abstractifies the concept of what constitutes a weapon, allowing us to create any configuration of firearm, bludgeoning implement or contraption intented for harm, detailing :-
- Fire rate
- Reload time
- Particle system allowing the weapon script to dynamically modify its particle emission
- Bullet spread
- Number of projectiles/hit polls fired per shot
- Projectile or RayCast based hit detection
We have prototyped a few levels to gauge the flow of our implemented mechanics – fine-tuning the feel of the platforming and combat is earmarking a lot of our development time at the moment. We hope to get a full demonstration of the character controller very soon.
Story based system
Tying together the missions is a Visual Novel-based storytelling system with multiples routes for completion and character progression. Helping us accomplish this is another life-saving Unity plugin – Fungus. Fungus is a flow-chart based storytelling framework that once again saves us from having to write a lot of code reinventing the storytelling wheel, which quite frankly would be time poorly spent. It’s open source and highly customisable.
We have a GameObject that is saved between scenes (and is serialised to allow the data to be saved locally) that contains all the configurations for the character, such as their equipment as well as a table of flags that are used to represent the games current state.
This allows us to generate files with different sets of flags, from which the game will recognise where the story, character and objectives should currently be – the game automatically loads this state on startup, allowing us to test any part of the game without tedious playing and replaying of the earlier parts of the game.
You will have access to the Goverment’s hub area – as well as other hubs later in the game – where you can customise your perks, weaponry loadout and select missions from a holographic map system that splits the city into various areas.
In the near future
We have much in store for Disjudicator’s future – we’re currently working on implementing the following :-
- Hanging on ledges and shooting while hanging
- Rope swinging
- Mutators that effect your characters movement and utility
- Actor deformation/Gore system
- Improvements and stability changes to our current models
Thank you so much for reading, and see you next time!