Week 5 - Devlog


We're now at the end of the fifth week of development, and more precisely, the second week of production! These are exciting times for us as the project is really starting to take shape as we mold it into our envisioned shape. We're very much on schedule for our sprint planning, so we'll continue doing our best to meet our own deadlines and hopefully keep on delivering something quite substantial every week! Here's a view into our progress for this week:

Introduction

As mentioned, HIVEMIND is beginning to show its true form! This week, we did decide to change how the objective works slightly: the power source will not be carrying UFO parts anymore but instead will beam them to the UFO itself. This has 2 advantages, considering the UFO will now be randomly placed in select outer corners of the map: players will not be lead to think they should go back and forth between the UFO part and the UFO itself, and it keeps them in the flow as they can continue sneaking around the level.

This week, we also received the announcement that DAE would close for the next 3 weeks, which is something that does make us worry a little as it will be harder to meet up as a team and with coordinators, but we will try to make the best out of our situation and hopefully the project will not be impacted too much by these measures.

Art & Design

As mentioned last week, we're doing our best to progress towards art assets that are more or less finalised, ready to be eventually given an extra shine in the polish phase if necessary. As so, we have continued to apply that mantra, and you can see the results of it below.

Aliens

Our alien characters received a redesign this week! We felt like they might be too serious/creepy, and as we want to go for something more light-hearted, they have been changed accordingly. Have a look:

We wanted the materials to look stylized, and not too detailed. We tried achieving this look by toying around with the curvature and ambient occlusion maps in substance painter and adding both the bevel and blur filters to it.

We also added a power outlet to the suit, this would be the part where the wire connects to. The wire will also switch from 'just a wire' to a power plug.

We still plan to add some joints in the tongue later on, so we can apply physics to it and make it move around while the character run around.

Once the character was finished, we uploaded everything to mixamo (our team doesn't have any animators) and exported the animations. There were still some major skinning issues, which have been dealt with now.

Humans

Getting characters out of the way early on will most likely help us define the "identity" of the project better and focus on other things as well. As such, our human designs received something of an update too!

Something we'd like to get done during the polish stage, if time allows us to of course, would be to get some different faces/skin colours/facial hair meshes so not all soldiers would look the same, giving the game some more variaty.

Our soldier also got brought to life using some animations.

Bonus: Stretchy Neck Boy


Level

2D Top Down Scene Layout


To get a clear idea of what the scene would look like, we sat together and started drawing. The layout of the scene is currently being made in unreal engine, which will be able to get nicely fleshed out, once we have all of the blockout meshes ready.

Our supervisors told us they'd prefer us to make an outside scene, because it would be easier to light then the inside scene. We actually also liked this, because now we could step away from the very clean sci-fi look and make everything look more like it would fit in the military.

Programming

Thankfully for us, this week was very smooth in terms of how little problems we encountered. If you remember last week's devlog, we had some issues which really made us scratch our heads... some similar things still popped up but nothing crazy enough to really stall progress for hours on end, which is great because we tackled some very important things this week. Have a look below:

Health Component

Our efforts first turned towards making a system that would handle all kinds of things related to health, such as getting damaged, regenerating health, overheal, death, getting downed then being revived or bleeding out. We didn't have to think too long to come up to the conclusion that a component would be the best option, as the component will act the same way on all attached actors even though we can configure the functionality a little differently.

It turns out that Unreal already has implemented a fairly fledged out damage system in which every actor can be configured to receive or ignore damage. We also noticed the presence of damage types, which could be used to spawn different effects depending on the type of damage taken, but that will be reserved for later. To build the basis of our system, we simply interfaced with the "OnTakeAnyDamage" and made all kinds of functions built around our main properties:

Most of these should be pretty self-explanatory, except maybe for "Minimum Downed Health" which represents the health we set a downed character to as soon as their health goes below 0. (if they are allowed to be downed in the first place, of course) From there, they'll have to climb back to at least 0 health in order to be revived. In the case of our alien player characters, they also receive a little health boost on revive.

We also provide a few delegates:

Our base character then uses these to call native events, which our derived characters (guards and aliens) can themselves override to provide the desired behaviour. For example, in the case of our player characters: once they are downed, you can disable input, play some audio, spawn particles, play controller rumble... anything you feel would be appropriate really.

A downed player is represented by a green dot in the video. As they bleed out and perish, they are fully disconnected from the power source and the camera then ignores them. We still want to look into respawning our players somehow but this will do for now.

Power Source

Another really important aspect this week was recreating some of the systems related to the power source, as we had decided to have the "power levels" of our player characters change depending on how far they are from the power source. As so, we defined some extra properties:

The radii define the outer limit of each successive power level. The attraction force represents how much players get pulled back to the power source when too far from it, and attraction force reverse defines the reverse pull. (alien pulling the power source) Pull force is the force at which aliens can pull the power source when using the "Pull" action, which is also dependant on distance, meaning that distant players barely pull the power source at all. It is also possible to redefine the material applied on the cables.

With debug visuals, the outer limits of each successive power level looks somewhat like this right now. When leaving the red radius, you will start being pulled back, but the power source will slightly follow. When you are inside the green radius, you will also get the benefits of regenerating health.

Auto Aim Assist

A small quality of life feature we revised this week was the auto aim assist. Both maximum radius and maximum angle threshold properties have been added.

In action, it looks something like this:

As you can more or less see in the video, aim targets are detected only within the radius. Then, the assist also checks if the target is visible at all and if it is, it will check whether the angle is bigger or smaller than the maximum threshold. If it is smaller, the assist kicks in.

Weaponry Component

In the current week, this was probably one of our most important things to get right. We had to think quite a bit how to approach giving weapons to all our characters, wondering if we should interfaces, maybe components or maybe something else entirely. As you can guess, we decided on a component as the inner functionality of the component does not change, it simply responds in different ways depending on what data you give it.

Speaking of data, something we stumbled upon were Unreal's "Data Tables" functionality. Using a defined struct, you can create a data table asset from which you can read anything you need. For example, here's the data for the main alien weapon so far:

From there, you can select which data table asset and weapon to load on a given character and the entire weapon's functionality will then be strapped on top of your character.

Things such as proper animations and particles will need some more attention later, but the players are now able to charge their weapon and shoot then damage guards, linking back to our Health Component and Auto Aim Assist. Functionality such as controller rumble is also present: during a charge, the controller will rumble a little and then rumble strongly once as the shot is let loose.

Functions such as PullTrigger and ReleaseTrigger are then used to determine how the weapon should work according to the loaded data. In the case of a charge weapon, PullTrigger will initiate the charge, and if held long enough will then shoot. If ReleaseTrigger is called before the charge is finished, the charge is cancelled. The system could also easily be extended to include automatic weapons or projectile based weapons and so on.

Since the weaponry component also takes care of calling the TakeDamage functions on hit actors, we decided to use the Teams interface we already had implemented last week to determine whether an actor should be damaged in the first place. In other words, there is no friendly fire possible.

UFO Parts

We also made some improvements to the UFO parts class, as they will now be beamed back to the UFO once the power source is close enough. They also give a health bonus to all players, and increase the amount of time left.

Later, the power source will need to be placed above the object to beam, and appropriate particles will play.

AI

We have re-implemented chasing and attacking into our AI, while also coupling the attack to our Weaponry Component system on the way. Even though the AI still needs more work, several improvements were made such as: it will now always prioritise the closest player, it will ignore downed/dead players, have heightened senses during a chase, generally it handles more as we expect it to work ourselves and so on...

Our AI also fully takes advantage of blackboards, perception systems, team IDs and behaviour trees/tasks in addition to our own components so we feel like most of the basis is set up by now. Most of the work will be situated around tuning the AI and how fast it can run/how much can it see, and make it hear loud sounds caused by the players.

Here are some videos showcasing some of the behaviour:

This video shows how you can eventually lose guards and then sneak up on them and shoot them down.

This other video shows how the AI keeps track of you and can eventually shoot you down when close enough.

We can also tune the AI's perception a little depending on if it is chasing or roaming: in this case, they are more aware of their surroundings when currently chasing a target.


Conclusion

All in all, a very productive week! We hope to keep up the speed in the coming weeks despite the unfortunate circumstances with the virus. For the coming week, we will most likely look into our level, some systems for randomly spawning elements, tuning some of the things we already have, some more AI related stuff, and so on...

If you wish to test some features out, a build of our current version is available right here. The controls are as follows:

  • To move around: Left Stick or WASD
  • To look around: Right Stick or Mouse
  • To shoot, you need to hold the fire button for around 2 seconds: Right Trigger or Mouse1
  • To pull the power source to you: Right Bumper or Middle Mouse
  • To restart the level (you need to be alive/not downed): Start Button or R

We hope you liked this week's devlog! See you in the next one.

Files

Week5_Production_Midway.zip 219 MB
Mar 18, 2020

Get HIVEMIND

Leave a comment

Log in with itch.io to leave a comment.