A More Realistic HitStop
As Jason De Heras mentions in his article (link below): "Combat design is one part rules/goals and one part FEEDBACK ". There are several ways to enhance combat feel by layering different feedbacks, the implementation varies from game to game depending on the fantasy/theme. (ex: God of War is more of a power fantasy and DMC is more supernatural speed and skill)
Techniques to make combat impactful:
Animation: It has many parameters, from the timing to antic, hit frame, and follow-through poses!
Camera: Adds weight to the impact. Also framing the action itself.
VFX: Giving more life to the action.
Hit reactions: Helps sell the force of an attack and the transition of the momentum
Sound design: Emphasizes impact through different cues such as impact, swing, enemy growl, and triggers (like when a charge attack is ready)
Hit stop: Temporarily pauses motion on impact to sell the main poses and add more weight.
Force applied: control the spacing for smoother combos.
HUD: When applicable brings more harmony and peripheral details.
Controller rumble: physical and tactile feedback.
Combo timing: how fast the player can chain the actions, animation canceling, etc
Some useful references on the subject to read/watch
What is a hit-stop?
Traditional hit stop (or freeze frame) is a well-established technique that helps emphasize impact, but it can sometimes feel jarring and unnatural. While it effectively conveys power, it often interrupts the flow of combat in a way that breaks immersion.
God of War
I've used the classic method a few times and wondered how it can be improved by making it more dynamic, ensuring that the hit feels weighty without being glitchy. One way to achieve this is by making hit stop more reactive using Inverse Kinematics (IK), allowing the attacker's body to respond naturally to the force of an attack. (or even enemy)
When playing God of War (2018), I noticed how well the game handled hit-stop. The Leviathan Axe hits felt weighty and deliberate, and the impact lingered for just a moment before continuing the attack. This gave me the motivation to experiment with a similar technique and see how I could implement and refine it myself.
Goal: Experimenting with Advanced Hit Stop (Sticky Axe)
With this in mind, My aim was to understand the technique better by implementing a more dynamic hit-stop effect in Unreal Engine.This article will break down my process step by step.
Implementation
The planning:
For this project, the goal was to create a straightforward combat system in Unreal, focusing on the essential components that make a single hit feel impactful—one of which is hit-stop. These steps can be applied to most attacks to enhance their feel. However, mechanics like target selection, additional attack types, and dodging were intentionally left out since they go beyond the scope of the sticky axe mechanic.
The chosen combo consists of a simple sequence: the first two hits incorporate stickiness, the third is a combo finisher designed to create space, and the fourth is a powerful jump attack for execution.
I had two key limitations regarding animations: they had to come from either free or paid pre-made asset packs, and they needed to fit the overall theme of the project.
Base Locomotion
I used the Gameplay Animation Sample Project (GASP) with motion matching as the foundation for locomotion. While this introduced some challenges, it was a worthwhile choice as it minimized the effort required for basic movement, allowing me to focus on the core aspects of the experiment.
Combat sub-systems:
Simple Attack Queue System
Ensures responsive combat for a wider range of players, accommodating variations in reaction time when pressing buttons.Simple Target Detection System
Uses a sphere cast trace to detect targets. This approach balances the player's intent (determined by camera rotation in this case) with combat fantasy (how the player should feel during an encounter). The system can be expanded with different shapes and tiers for more complex target selection. Additionally, motion warping helps align the player character’s position and rotation for better visual connection with the target.Hit-Stop System
Implements customizable "in" and "out" curves to dynamically adjust animation play rates for both the player and the target. This enhances the impact of hits by emphasizing key poses.Combo Attributes (Configured via custom animation notifies in respective animation montages)
Input Window: Defines when the system listens for attack inputs. Helps fine-tune combo pacing, increasing the intuitive connection between visual feedback and player input.
Open to Move: Ensures responsive movement after an attack while still allowing animations to finish naturally if the player remains still.
Latch Point: When an attack is queued, the current attack must reach this point before transitioning to the next. Helps maintain combo pacing and aligns with the intended animation direction.
Attack Detection On/Off: Defines precise frames in the attack animation when hit detection is active.
Weapon Trail Effect: Enhances visibility of weapon trajectories, making attacks (especially fast ones) more readable to the player.
Camera Transition: Adjusts framing for better action clarity, distinguishing combat from locomotion camera offsets (current implementation is minimal).
Motion Warping: Uses target data to ensure proper positioning and rotation relative to the target.
Time Dilation: Creates slow-motion effects for more impactful finishing moves.
Directional-Based Hit Reactions
Plays different reaction animations based on the incoming attack direction.
Attack direction is stored as a vector in attack data, multiplied by pawn rotation to align with player expectations on a 2D screen.
Helps transfer kinetic energy from attacker to target for more satisfying feedback.
Enemy hit reactions snap to a good starting pose instead of blending awkwardly.
Pushback: Targets are pushed back along the attack direction, maintaining combat flow and creating space for follow-up attacks when necessary.
Juicy Health Bar
Uses a two-layer system so the player can see initial damage before smoothly interpolating to the new value.
Displayed using a billboard widget for clear visibility.
Blood VFX Pack
Triggered on impact and when weapons are pulled out.
Plays at normal speed to enhance hit flow and feedback.
Camera Shake
Adds weight to attacks, reinforcing impact and making combat feel more intense.
Anatomy of a normal melee attack using the Axe in God of War
Breaking down Kratos' attack step by step, we can identify the following structure:
Attack Triggered – The player presses the attack button.
Anticipation Pose – Kratos moves into the attack wind-up, which lasts 7 frames in this case, while being adjusted to the ideal position and rotation.
Attack Swing & Weapon Arc – The axe moves into the hit frame over 8 frames, creating a clean and satisfying weapon arc.
Hit Registered – At the moment of impact:
Enemy health is reduced.
Hit particles and VFX play.
Camera shake reinforces the impact.
Weapon Position Adjustment – the axe position is adjusted to ensure it lands correctly on the enemy’s body.
IK Activation – Inverse kinematics (IK) helps stabilize the axe, making it stick to the enemy in a natural way.
Freeze Frames for Impact – A brief freeze frame enhances the weight of the hit. However, other effects—such as particles and camera movement—continue playing at normal speed, preventing the freeze from feeling jarring.
Axe Removal (Two-Step Process):
While IK is still active, the animation plays a few more frames, allowing the upper body to continue its motion slightly. This mimics the natural reaction of a heavy swing being blocked.
After a brief delay, IK is turned off, and the player transitions into a different animation where the axe is visibly pulled out of the enemy’s body. (This part required trial and error to get right—I'll explain the challenges later.)
Full-Body IK Using Control Rig
This system is used to pin the axe to the target during impact. Instead of relying on animation-driven hand and weapon bone data, we override it with cached transform data captured at the moment of impact. This ensures the weapon remains visually locked to the target for a few frames. (Further improvements to this system will be discussed at the end of the article.)
Key optimizations include:
Effector Chain Depth: Confines the IK effect primarily to the upper body, reducing unwanted noise.
Sub-Chain Iterations: Increasing iterations further refine stability and precision.
Root Behavior Adjustment: By default, the root is set to pre-pull, which causes unnatural hip movement. Changing it to free or pin to input eliminates these issues.
Weapon Placement & Impact Adjustment
Upon impact, the system calculates the ideal weapon placement, ensuring the axe appears correctly embedded in the target.
This adjustment is necessary due to differences in the physics engine and rendering loop execution intervals—they often run at different rates.
Additionally, since the action happens so quickly, the weapon may have already passed through the target mesh by the time the hit is registered. This system helps correct that visual discrepancy, ensuring a cleaner and more convincing impact.
Early Results & Identified Issues
The early implementation, shown below, demonstrates most of the core systems in action
However, several structural issues in the attack flow disrupt the overall feel:
Weak Anticipation Pose in the First Attack
The antic pose isn't open or powerful enough, resulting in a short motion and weapon trajectory.
This makes the attack feel weaker than it should.
Lack of a Dragging Motion When Retrieving the Axe
While the axe correctly sticks to the target, the player's character shows little to no resistance when pulling it out.
The lack of a visible struggle diminishes the perceived weight and impact of the attack.
Weapon "Popping Out" After Sticky Effect Ends
Once the sticky effect turns off, the axe snaps from the target’s body to its default resting position too quickly.
This abrupt transition makes it look unnatural, as if the weapon is simply teleporting out rather than being physically pulled free.
Issues in the Second Attack
The antic pose for the second attack is better but still suffers from:
Lack of dragging motion when pulling out the axe.
Extremely fast follow-through, making the motion feel rushed and disconnected.
These issues impact the flow and weight of the attack, and adjustments are needed to improve realism and player feedback.
Fixing the Antic Pose
To improve the antic pose, I experimented with additive layer tracks in the animation sequencer. This is a powerful feature that allows for fine-tuning animations without altering the base motion. (though tricky to make it work at times)
Before
The original antic pose in the animation asset
After
modified pose using additive layer tracks
Fixing the "Dragging" Problem
To address the lack of dragging motion, I first identified a fundamental issue: the player's body needed to continue moving while the axe was pinned to the target. Without this, the motion felt stiff and unnatural, similar to traditional hit-stop—defeating the entire purpose of this experiment.
At first, I tried modifying the attack animation using additive layer tracks in the sequencer, adding extra upper-body rotation to create a smoother dragging effect. While this helped, it revealed another problem. Since the axe was pinned to the enemy while the player's animation continued, as soon as the IK turned off, the weapon snapped back to its default animation position—almost near the follow-through. This completely broke the motion trajectory.
While tweaking the additive layers and considering better blending options, I decided to analyze God of War more closely. I captured additional gameplay footage and later confirmed through an article by one of the game’s designers that the game actually switches to a different drag and follow-through animation when the axe makes contact with a target. Essentially, the swinging animation in the air is different from the one used on impact, even though the timing remains nearly the same. This approach made perfect sense—it was simpler, art-directable, and avoided unnecessary complexity.
With that in mind, I created a dedicated “pull” animation by duplicating the attack animation and removing all frames before the hit frame, where the animation switch is expected to happen. The idea was to have 3-4 frames where the axe remains stuck in place, using additional IK stabilization, before smoothly pulling it out. The motion needed to be fast enough to maintain combat flow but slow enough to make the action readable.
For the first attack swing, I managed to modify the upper body and weapon hand to follow this new approach. Immediately, the motion felt much smoother, though visually, the animation itself doesn't look that good ^^'.
Refining the Second Attack (Back Swing)
The second attack, a backswing, proved to be a much greater challenge since it required more drastic changes to work properly. To tackle this, I decided to try a new tool—Cascadeur.
Since this was my first attempt at animating in any software, I had to take the time to establish a solid pipeline:
Exported the animation and character from Unreal.
Set up a work scene with a video reference.
Added a weapon prop and a cylinder as a proxy for the target.
Unbaked the animation into keyframes and adjusted their interpolations.
Modified the animation by rotating the entire body while keeping the axe in place and refining the axe's follow-through.
Exported the animation from Cascadeur and imported it back into Unreal.
The process took far longer than expected, requiring countless small adjustments. However, I genuinely enjoyed the learning experience and look forward to doing more animation work in the future(unless AI takes over first, heh)! In the end, just like the first attack, this one finally started to flow smoothly, even if it still didn’t look great visually.
Result (side by side)
And here is the result! ^^ There’s still plenty of room for improvement, both in the systems and especially in the content. But overall, I’m happy with the progress and have learned a lot throughout this experiment.
Combat design and implementation hold a special place in my heart, and I’ll keep experimenting and learning about all the different aspects and disciplines that contribute to it.
Further Improvements
One area for improvement is how the weapon interacts with the target. Currently, the axe is stabilized using the hand/weapon bone, which effectively enhances the impact feel. However, for a more realistic effect, only the tip of the weapon should pin to the enemy while the body of the axe retains some movement. Right now, the interaction feels more like hitting a rigid object, such as a tree, whereas striking organic material should allow for more natural movement and flexibility.
Another major improvement area is the camera system, which is currently too static. It could be enhanced in two key ways: first, by implementing a dynamic framing system that adjusts based on parameters such as the player's position, the target’s position, and the attack direction; second, by enabling camera animation, either directly within Unreal or by importing from a DCC software. This would allow for more cinematic framing that better captures the intensity of combat.
Lastly, content quality remains a challenge. While I did my best to find—or even create—the necessary assets to match the target feel, there’s still a massive quality gap compared to what we see in God of War. Bridging that gap would require higher-quality animations, VFX, and overall polish.