#Malevilent | Development Log

1 messages · Page 1 of 1 (latest)

buoyant forge
#

This thread is where I'm gonna be posting progess of my open world western RPG with mystery and supernatural elements - Malevilent.

WHAT IS IT?
In Malevilent, you're a government agent who's been dispatched to investigate what's happened to Elmer Powell, a Diplomatic Envoy who was negotiating a trade agreement with Mexico disappeared. All telegraphs sent to the town in the last month have been met with no reply.

TECH SPECS
It's being built on Unity 6 using HDRP, I have a performance goal of hitting 60fps @ 4K on my Radeon 6700XT. Feel free to ask me any questions in the thread.

CONTRIBUTE
While I'm not officially looking for set roles at the moment, if you do come across this thread, think the game looks cool and want to contribute, shoot me a message, I'm always open.

Steam page: https://store.steampowered.com/app/3598050/Malevilent/

Welcome to the town of Gunsight, Arizona Territory — an old mining and farming community, with a population of 20. You're here because Elmer Powell, a diplomatic envoy who was returning to Washington after negotiating a trade agreement with a delegation from Mexico, vanished without a trace and hasn't been heard from in over a month.

All tel…

Release Date

Coming soon

▶ Play video
#

This weekend I implemented a vertex animation shader in Shader Graph, which works with VFX graph particles in HDRP. This means I can now have thousands of animated birds (or other objects, like bats in caves) at a fraction of the performance cost of using GameObjects+Animators 🐦

buoyant forge
#

This week, I implemented a dynamic footstep system, which accounts for different materials, sounds, and speeds, and handles footstep decals.

It also handles sliding decals, and is generic, so the same Footstep handler can go on not only my main character, but also any other biped characters, without any reliance on animation events. 👣

buoyant forge
#

Working on some environmental improvements this week, including this candle flame shader I made with shader graph, that also interacts with wind in the scene and only requires a single quad texture to render a nice flame. Combined with a translucent candle material, it works quite well as a dynamic prop in the graveyard area of the map.

The candle flame is based off pre-set colours which form a procedural gradient from orange towards a blue/violet towards the top of the flame. Some layered noise creates vertical movement, whilst a pixel shader wind effect applied to only the top ~75% of the flame lets it stay 'grounded' on the wick whilst appearing to move in the wind. Was originally planning to billboard it in-shader as well, but chose to do that in the VFX Graph instead.

trim sonnet
#

Is it a personal or commercial project?
How will u publish; Steam ?

buoyant forge
buoyant forge
#

Working on some screenshots for the website (+many other places I will need them)

#

In addition, have been working hard on optimization the last few weeks. This has involved completely swapping out Unity's builtin AA solutions for HDRP with my own custom AA, which, mainly due to the fact it only uses two passes and a hell of a lot less bandwidth, gave a nice performance boost.

Coupled with some shadow, terrain, light, and other general pass optimization, I've now got my dev build running at a pretty rock solid 60fps @ 1440p native, on my 6700XT (fairly midrange). That's even in areas which previously ran as low as ~25fps.

Some people might say this is 'premature' but it's incredible the difference 60fps makes to the level of fun in a dev build vs. slugging around at 30. Just moving, jumping, shooting, etc, all feels much more responsive and give me a better idea that the game 'feels fun' when doing those things.

buoyant forge
#

Recently implemented a new Perks system, which uses in-game diaries with projected visuals of period-accurate illustrations.

The goal with these is to have a good way for rewarding exploration in the open-world, in a way more meaningful than just items. In a way, the goal will end up being to force the player to explore in order to skill up, as levelling up only gives minor stat boosts.

This also opens the doors to hiding super rare, hard-to-find Perks in difficult-to-reach areas of the map, and making some Perks 'spawn' only in some playthroughs.

buoyant forge
#

Open World Supernatural Western RPG

buoyant forge
#

Malevilent | Development Log

#

I'm currently working on a workshop area in the map, as part of a side quest. This workshop is currently being used by a mad inventor to stage all manner of strange experiments involving electricity - a very new phenomenon in the region.

Recently, I visited an old country town near where I live that had electricity around the same time - I was inspired by pictures that showed electric lights strung up, it was clearly something to be proud of back in the day.

I decided to implement that as best I could in-game, including actual rope physics. The lights here are all realtime, and if you aim well with a thermite round loaded in your gun, you can melt the connectors between the lights and the warehouse, dropping them.

eager condor
#

This looks fire🔥

buoyant forge
#

Been working on my AI system recently, which is made up of almost entirely independent components that don't have any knowledge of each other. This is a screenshot of what one of my enemy AI's inspector looks like.

🥼 A few design rules:
-Inspired by the role hierarchy of a war ship, where each person (component) has a single, specialised function, whilst there is a Captain overseeing the ship, and a Fleet Commander overseeing the fleet
-Each "Columbus" component does inherit from a single base class that has one main custom variable, "SetSail" - kind of like a more custom enable/disable.
-Each AI can have an optional "Captain" component which makes "Ship-level" decisions (ie. Setting Sail to false on all Columbus Components).
-I also have a "Fleet Commander" which is basically what manages the entire "Fleet" of captains (doing similar to the above, but on a game-wide level).

The benefits of this:
-No coupling of components makes debugging incredibly easy. I can just toggle on/off a certain component at runtime to isolate a bug, then with each component only being a tiny chunk of code, finding bugs is never difficult.
-No state machines makes iterating on AI incredibly fast. I can whip up a new type of AI with a pick-and-mix of different components in minutes, and know it will work.
-Usually very easy to add complexity to behaviours, just by creating more components and adding them.
-Surprisingly very performant, even though it's all old school main threaded code, I can have 100+ AI on the screen at once at 60fps without the AI system being a limiting factor.

Negatives:
-A bit of "event inspector spaghetti", but it's still quite readable IMO.

ℹ️ Some other cool things:
-All my damage is done based off relative velocities of bones in the hierarchy for most AI. If the skeleton swings their arm fast relative to their body (so it's not triggered if they're just running), that's counted as an attempted attack - no animator event spaghetti.

eager condor
#

nice👍

rich token
#

Just curious- why did you spell it with an “I”? Is it supposed to mean something?

buoyant forge
buoyant forge
#

🌲 Another more technical devlog today, showing how I render 30-100k++ trees with minimal performance impact.

A while ago when profiling, I noticed that having lots of terrain trees was tanking performance (anyone who has worked with Unity terrain knows how this goes), but I really wanted to have my environment, which is 4x4km, super packed with lots of bushes, cactuses, shrubs and everything like that.

To fix this, I've developed a VFX Graph template that gets sent a raw GraphicsBuffer by the CPU with tree positional data, turns that into a world position in hlsl for each tree, and renders it using standard VFX Graph "Output Mesh" nodes which use my Shader Graph tree shader. I call the overall system "Prometheus".

Benefits:
-Tree management effectively has disappeared from the profiler on the CPU side
-VFX Graph is currently the fastest way to render anything in Unity on the GPU
-Easy to setup and tweak with ScriptableObjects holding the arrays of each tree's position
-No longer reliant on Unity's terrain system to render my trees
-VFX Graph handles random rotation, scale, and even billboarding if I want

At the moment in my scene I have around 30k trees, but I've tested this exact system in some benchmark scenes where it has comfortably rendered 30,000,000 individual instances of a grass mesh without breaking a sweat, so I have full confidence it can scale up as far as I want now. Also important is this system scales down beautifully - I have a midrange GPU, and it works very well even on older APUs.

eager condor
#

Looks great

buoyant forge
mild elm
#

This looks amazing man 😄

buoyant forge
#

ALL ABOARD - Devlog - 20th July

Trailer Shooting
I've been working on putting some shots together for Malevilent's announcement trailer, including this one showing the train going through the landscape. Had to make a few tweaks to my cutscene system (Quick Cutscene Creator) to allow me to do 'offline' renders frame-by-frame. Unity's Time.captureFramerate is really useful here.

Quest Improvements
Now all quests can have stages which can be entered from any other stage. This is what one of those quests looks like (and yes - all my quests are offline-generated Animator Controllers - makes it super easy to debug, I should do a separate devlog just on the quest system) https://malevilent.gadget-games.com/Devlogs/July 20/Devlog_Quest_Animator_RedCanyon.png

New Smoke
I needed some smoke for a new muzzleflash, up til now I've been using standard 6-way-lit flipbook smoke textures but I've never really liked them and always felt I could see the pattern repeating. So, I did up a fully procedural 6-way-lit smoke shader using fbm, and I'm really happy with the result. Now, one VFX Graph can do everything, from outputtting the smoke of a train to the smoke puff of a muzzle flash. https://malevilent.gadget-games.com/Devlogs/July /Devlog_TrainSmoke.png

eager condor
#

so peak

buoyant forge
#

Map Improvements - Devlog - 26th July

Trailer Shooting
The shots on the trailer continue! Including the attached gif. I've also found an editor for the announcement trailer, which is super exciting as once it's done, that will be when I finally put my Steam page up. To help out the editor who is also capturing some in-game footage, I also added an in-game bezier curve "Mini-Cutscene-Creator" which is quite easy to use and I may even keep later on for content creators who want to get cool shots in-game.

Mines Improvements
The Red Canyon Mine area, which is the first out-of-town quest area the player is likely to find/head towards, is what I've been focusing on this week. Lots of small graphical/mesh improvements, plus I decided to rip out an entire sub-scene loading system (previously, the mines were loaded async as the player moved towards them) in favour of just having every main area in the map by default. The sub-scene management ended up complicating way too much, from APVs, to load/saving, it just wasn't worth it particularly when the mines aren't using too many new resources anyway.

Mini-Optimisation Pass
Fixed a few things like rope physics not being fully LODed correctly, some caching of transforms, and LODing of some AI (snake) behaviours as I've felt a small slowdown in recent weeks. This brought everything back up to ~60fps in town @ 1440p, which is good.

eager condor
#

Looking great rn

buoyant forge
#

Snaking Closer - Devlog - 16th August

Attributes are in!
After putting it off for a while, attributes are now in and fully working! You can pick from 6 attributes to customise your character, each offers different benefits, from Nimbleness, which increases your run speed, jump power, and melee attack speed, to Leadership, which represents your character's ability to command respect, fulfill objectives, and inspire people. High Leadership grants increased Experience Points from enemies, bigger rewards from quests, and better prices at stores.

First Quest = Done!
The first (tutorial-like) quest is now 100% done! It is still technically open-ended (meaning you can skip it if you hate doing tutorials), but should offer a good way to teach any new players the basic mechanics of movement, inventory management, weapon management and combat. It also ends with you picking your attribute points, so ensures new players don't miss that important mechanic.

Player Inspector
It's growing! Shared this in #💻┃unity-talk the other day and it got a good response, believe it or not it's still quite easy to manage! https://malevilent.gadget-games.com/Devlogs/August 16/Screenshot Player Inspector.png

eager condor
#

bitrate on that gif is devious

buoyant forge
#

Devlog - 5 Sep - Priests & Inventors

The Mad Inventor - 3D Models
I've commissioned a 3D artist (Delaney) to start on some custom models for key areas around the map - the first one being the structure for the underground workshop of Nikola Kitanovic.

The underground workshop that Delaney is working on will be where the final confrontation between the player and Kitanovic takes place, once you've found a way to disable the dynamo that is his source of power, you descend down the staircase into this tall, dark area and deal with him, once and for all.

Reference:
https://malevilent.gadget-games.com/Devlogs/Sep 5/Rough Sketch Workshop.png

V1 Blockout:
https://malevilent.gadget-games.com/Devlogs/Sep 5/Workshop First Blockout.png


Orthodox Priests & Incense Censers
Work continues on The Night of the Rising Dead, a large side quest where you're tasked with investigating strange happenings around town & the cemetery, thought to be related to the recent passing of two young twins.

As part of this quest, you'll end up resurrecting a Russian Orthodox priest from the grave to help put their spirits to rest, but not before finding what the priest (Petrov) needs to perform last rites. Being an Orthodox priest, I wanted to capture the spirit (haha) of any Orthodox religious service, that being the incense censer. This one took a lot of time getting right, as the censer has a lot of features for a little bowl of incense:

4x actual chains simulated in real-time (3 for visuals, 1 for physics), including chain physics
Volumetric lighting
Lit smoke for the incense effect
Realtime shadows

It looks really cool in-game IMO. I still need to add SFX, but here's a snapshot:
https://malevilent.gadget-games.com/Devlogs/Sep 5/Priest Petrov.jpg

Steam, When?
All being well, the Steam store page for Malevilent should be up in a week. Will post about it then!

buoyant forge
#

The Steam page for Malevilent, and Malevilent's Announcement Trailer are now up!

Wishlist now on Steam:
https://store.steampowered.com/app/3598050/Malevilent/

Welcome to the town of Gunsight, Arizona Territory — an old mining and farming community, with a population of 20. You're here because Elmer Powell, a diplomatic envoy who was returning to Washington after negotiating a trade agreement with a delegation from Mexico, vanished without a trace and hasn't been heard from in over a month.

All tel…

Release Date

Coming soon

▶ Play video
eager condor
#

Cant wait

buoyant forge
#

HP Bars
Up until now the enemies in Malevilent have never had HP bars. I am not a massive fan of HP bars in general, and broadly prefer games which don't have them, but for "Key Enemies", I don't think that was working. When you died to a key enemy, one which you'd never fought before, it felt pretty antifun not knowing if you'd made a dent.

So, now key enemies in quests will have HP bars. It works quite well! Also has a side effect of helping show progression in damage which is nice.
https://malevilent.gadget-games.com/Devlogs/September 20/HPBar.gif

The Jackalope
A new supernatural creature has appeared, the Jackalope! Thanks to Dyatlov who came on board to model this one from scratch, it's looking really good. I didn't really want to waste a month creating a fur shader so having the texture work so convincing is a big time saver.

Animations are still to come, for which I need to find an animator next.