Post news RSS An Update In Motion

This month is all about visuals. From animation systems to rendering upgrades, we may have even surpassed the ACTUAL multiplayer component of Dark Messiah in some places! Come check it out.

Posted by on

Every time I do an update I'm excited, because if you look back at what was accomplished over the years you really get to see the amount of progress made. With this update, there are a bunch of visual upgrades that have been worked on, making it the exact type of reflective hype. I hope everyone enjoys it just as much as we do!


It's a bold statement to say that the progress we've made as a team has already went ahead of the multiplayer component of this game. The definitive proof comes from the animation system in place, which you'll see a huge showcase of just a few paragraphs down. This new animation system has full support for pose parameters and aimlayers applied to the player model, meaning we can actually reflect where people are aiming (something you want in a multiplayer game) and more. We also have plans on upgrading a bunch of other features that exist in the multiplayer that just make sense to bring over to co-op, for the sake of completeness and respect. On that idea, you'll see some incredible things by Riddick3 in regards to new, custom animations that will connect the original vision to our adaptation. I won't say much here because it's really all in the videos later, but that's the mentality we are having as we move forward.


SacredAI has been refocusing the priorities to move to the client. This is an important step, because the only way to get fully custom content is for both realms of the game to have access to the SDK. When it comes to making the mod, the majority of the changes needed were on the SERVER side, meaning the SDK was not giving too much attention to the client. Since we're all about visuals on this update, we changed that. Here's a brief word from the man himself:

Starting to get the client-side a bit more now so I figured its time for an update.

Firstly, the C_BaseEntity class is coming along well. I have completely mapped the virtual table and am starting on the properties now. Interestingly enough the property tables on the client side are significantly bigger, almost clocking in at double the size of the server CBaseEntity class, which is about 3000, while the client class is at nearly 5000. Now I'm not too sure what properties are the main culprits for this massive size jump, but I believe it might be due to some position calculation. We'll come back to this when I know more about it.

One of the big differences between the client and server is in how the virtual tables are inherited. On the server, the new class would simply 'absorb' the inherited virtual tables and then add its new virtual functions to the end. On the client however, it actually creates its own virtual table and then uses a different virtual table pointer to reference the inherited class. This makes the first 4 properties in our table actually virtual table pointers (And makes figuring out which function I have just that little bit harder). Here's what this looks like in IDA, our reverse engineering software:

Now This creates some interesting relationships when functions in these inherited classes try to reference properties in the main class, and they show up in IDA as this:

That minus 8 is actually the function returning to the main virtual table (which is at position 0). This is likely going to cause some issues when I get some structs setup for C_BaseEntity, and I'm actually interested to see how IDA attempts to handle it, but we aren't too worried as these - references only occur in the inherited classes and there is a minimal enough amount that it's ignorable for now.

While I was mapping the virtual table I spent a lot of time digging into functions and naming other functions within them to get a sort of hierarchy going, I did this for 2 main reasons: one because I will have to, at some point, do it anyway so hey why not now, but also so I had an easier time finding out which functions they were calling. This was something I originally started doing a little bit in the CBasePlayer class but took a lot more seriously this time around, and when I say it has made this so much easier: it has. Many of the C_BaseEntity virtual functions are very readable now, and it makes looking at new functions easier than ever to read as well. That's all I really have this time around, moving forward I'm going to finish mapping the property table and will likely report back in with all the little tid bits I find then!


For me, I have been doubling down on making the co-op feel like it's own game. One of the most glaring problems was the lack of animations for weapons, hell even the way perspective were handled. I sat down and created / tweaked a bunch of animations in order to make a fully authentic replication of the first person animations, but in third person. Find your favorite, and check out the work:
















Dark Messiah has support for generic weapons such as the hammer, hook, and goblin club, so it makes sense we need animations for them. Since it just uses the sword animations, I made sure that the system accounts for these to maximize coverage!


These weapon animations aren't all the animations that exist. Things like contextual kicking animations (dependent on weapon), execution animations that were missing, even sprinting was added in. Although we haven't 100% decided whether we will keep them as they are, it is definitely a step forward. On top of that, there were a bunch of improvements made to the general design of things on the front end that, although simple or minor, really add that level of polish.


Gone are the days of having props float ahead of you. If your player sees the prop be grabbed in the viewmodel, you should see other players grab props with their hands too. Thus, using a combination of the pose parameter system and our extended animation system, we have contextual item grabs with the distance entirely controlled by the size of the object in-game. Plus, you get to correctly hold smaller objects in one hand, like this CLASSIC scene from HAMLET:


Certain effects just don't make sense to be reflected on the player if you can't even cast it, so the rendering of spells have been upgraded to account for that. If you're out of mana, don't expect the lightning sparks to actually show up on your arms! Likewise, if you want to cast a fireball, you're not gonna see it if you can't form it. Particles and lighting have also been fixed up for these, meaning you can really feel the HEAT on Sareth's face:


menu 1

Menus need to be rendered too right? Balim from our discord has been really jumping in and helping out, which is something that deserves to be noticed. A very simple but crucial feature is, well, the ability to host a server! So he's went out of his way to experiment with adding menu options to incorporate this with great results!

menu 2

This also showed me what type of things are needed to add new options to the menu, meaning we can incorporate a bunch of settings that will let people customize their experience to the fullest. Again, the philosophy I've held is that it's not my job to choose what is fun for you guys. I'll set you up with some basic settings if you wanted to drop in and play, but ultimately you get to make the decisions on what you want.


Leaning is a feature that this game has, but many people probably don't use. Regardless, the pose parameter and animation system allowed me to make these authentic, so you can now lean around corners and actually see the player doing so.


Like I said, there are even more animations that these videos didn't include. Here's one of those I thought was cool. Backstabbing has a certain weight to it, and seeing it happen in third person, including the blood splatter of slicing someone's neck open, is just an amazing sight from an outside view.


We can't have an animation blog post without talking about what lead animator Riddick3 has been up to. As a Xana lover, I tasked him with working on third person animations and a model for Sareth's transformation, because although we have an armor and first person model, these two are not alike. One is lacking a tail, and the animations themselves just don't exist. I'll let him have the floor on this one:

After a bit of wrangling, the rig is now ready for me to get some neat stuff done. I still need to correct the asymmetry many valve-based armature come along with, but once that's out of the way I'll have a solid rig to work with.


n the meantime, I've put out the first pass for some of Sareth's demon form animations. The model itself took a bit of work to properly move the tail from the view model to the third person playermodel. As it stands, I've moved the tail so that it's attached to the pelvis rather than the chest, so we'll see how this ends up looking in practice, I may move it to one of the spine bones depending on how it interacts with other layered animations. It's important that the tail isn't affected to the point where heavy attacks end up visually striking too far off the mark.


It'll take a bit of testing and investigating to see if I can make use of any IK parameters to help smooth things over if necessary. As for the animations themselves, I went for something that reflects Sareth's remark that leaving the demon form is painful, as well as the sheer offensive potential it provides.

For his idle stance, I've gone for something that emphasizes the fact that his form is the result of a demonic possession, constantly fidgeting in unnatural ways and raring for an opportunity to go on the attack. Since the form is temporary, I decided it would be more impactful for the idle stance to be lively and full of character.

The tail has been fun to work with, and opens up a lot of opportunities for interesting movements. In most cases, I find myself using it as a counterweight so I can push the animations a bit closer to the extremes, as the movements that'd put any normal person far off balance are now possible with a tail and a hint of demon magic. I'm excited for everyone to see the final product once I've completed the full animation set and given everything a pass after in-game testing; it's been quite fun to work with something that I can push to extremes.


I put out an extremely long developer diary that should explain and even show examples of the animation system components. If you're in for a learning experience, you can check it out and hear every pitfall I've encountered:

Discord has been available this whole time, so if you want to talk with me about anything, use this link: ( select Dark Messiah from the #role-assignment channel )

I accept all pings, questions, suggestions, and etc.

And I EXTREMELY recommend jumping onboard the twitter to interact and see the minor, day to day updates:

Until next time, thank you everyone for joining us this far!

Colerx - - 197 comments


Reply Good karma Bad karma+5 votes
KingDavidW Author
KingDavidW - - 82 comments


Reply Good karma+3 votes
Guest - - 687,512 comments

Good work! I can't wait to play it!

I love this game and I'm so sad it is a bit forgotten today :( Actualy multi serwers are down... :/

Reply Good karma Bad karma+1 vote
KingDavidW Author
KingDavidW - - 82 comments

There is a discord that still plays it sometimes, but I agree. Let's hope at the very least this'll let people have fun with their friends

Reply Good karma+1 vote
Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.