Souls-like Character Controller
- University Project
- Solo Developer
- Action RPG (SoulsLike)
- ~8 Weeks
About
Benchmark Video
Souls-like Character Controller is a Dark souls 1 inspired character controller, and uses root motion for actions and attacks with a custom rig and animations.
Partially Animation Driven
The character controller uses animation notify states to hold information within the animations themselves. It uses that information to drive parts of the character controller like rotational freedom, attack data and hit detection. All the attacks and actions also use root-motion.
Modular Implementation
This project allows for easy usability and is easy to add unto. Create a new weapon, assign animations and it’s ready to go. It has been made with clear documentation that explains to the user how the system works and how to add unto it.
Project Highlights
The project was made with a clear development timeline.
Research > Development > Documentation.
- Extensive research the target game Dark Souls 1.
- Implemented a partially animation driven character controller. It uses:
- Animation notify States to store data in animations.
- Uses root-motion for attacks and actions.
- Created a modular weapon system that stores animation data.
- Created a simple stamina system.
- Rigged a simple character to use in root-motion animation.
- Created pipeline documentation showing how to add unto my feature.
- Created small simple tutorials on how to add unto the project. (also featured in the documentation)
Project Showcase
Implementing an animation notify state system
Light attack animation notify setup.
What
I made a system that uses animation notify states to hold data, so that the animations can lock the player out of doing certain inputs.
It’s also used to determine what portion of an attack will fire the hit registration and when what combo can be input.
How
The character has multiple booleans that will lock certain things from the player. These are then set or unset during the state notify and are then sent to the player. Currently, movement, turning, rolling and attacking can be locked.
In the more complicated notify states this, is different. For example, ANS_HitDetection will execute an event on the weapon that the player is holding instead of communicating with the player.
Why
When doing research on my target game, I noticed that the player could be locked out of turning, movement and rolling, based on specific frame data. This, ultimately, together with the timings of windup, release and recovery, made up the total feel of an attack.
To achieve this same modularity in how attacks were setup, and how they feel, I needed to make my own version of this system. This turned out to be fairly simple to set up.
Creating root motion attacks and actions
What
I made a character rig and animations that use root motion. Using these animations with my previously mentioned animation notify system, I can create realistic looking attacks and actions that move the player, but don’t have any foot sliding.
How
The main problem surrounding this was figuring out how I could have an IK target bone that doesn’t move with the root. I figured this out by doing some digging online. In the end, i had to unparent the IK bones from the hierarchy and not have them export.
If you want to read more of my research on figuring out some of the problems in this project, please feel free to read my Engine Research document.
Why
Just like the target game, the character will move during some of the attacks and actions. I wanted to have this so that I can use that as an effective extra thing to use when balancing. But, I ran into issues with foot sliding when moving the character with code.
I decided to do some research into root motion, and how this could add to my project’s quality. In the end, this made the character controller’s animations look excellent.
Root motion rig showcase.
Word file includes GIFS,
Target game research and analysis
Scroll-through of my Game Research Document.
Word file includes GIFS,
What
I researched Dark souls 1 to figure out what design decisions and elements created their intended player experience.
How
I used an animation viewer that is normally used for the Dark souls 1 modding scene to read frame data. Using the frame data and a general overview of the game, I drew conclusions as to what their intended experience was, but also what mechanics enforced it.
Why
I wanted to figure out how to build an effective clone to their character controller. I wanted to know how to reach a similar feel and player experience and thus needed to know what mechanics I should focus on implementing. This research was fital to the implementation of my character controller.
Retrospective
In retrospect, I made a couple of mistakes writing this document. I assumed a lot of design decisions and my writing style is very flawed. This had reduced the overall health of my research and made it less readable for some.
Pipeline documentation
What
I wrote pipeline documentation surrounding my feature. It includes topics to help create new content and how to adjust existing content. It also explains exactly what the feature is and what it contains.
How
I started writing in a word document on topics that I thought were important to know about regarding my project. It includes a revision history regarding changes to the document.
Why
I had never attempted to create thorough documentation before so it was a tremendously good challenge. I also needed to start making a paper-trail so that I could potentially share the character controller with others.