[Bug] Clumsy mod breaks Space key (Blend In) + ragdoll never activates without SMF
Summary
The Clumsy mod has two critical bugs that make it effectively non-functional in the current version of HITMAN World of Assassination:
- Space key is silently consumed every frame, breaking the "Blend In / Exit Blend In" action.
- Ragdoll never activates unless the SMF (Simple Mod Framework) brick is installed, making the mod useless for anyone using ZHMModSDK alone.
Bug 1: Space key conflict with Blend In
Description
Clumsy.cpp, in OnFrameUpdate(), polls the input action eIAKBMCover on every single frame:
// Clumsy.cpp, OnFrameUpdate()
ZInputAction s_RagdollAction("eIAKBMCover");
if (Functions::ZInputAction_Digital->Call(&s_RagdollAction, -1)) { ... }
eIAKBMCover is mapped to Space by default in the game's input system (Cover / Vault / Blend In cancel).
Calling ZInputAction_Digital consumes the digital input state for that frame. As a result, the Glacier 2 engine never receives the Space key press in ZBlendInEntity::OnCancel(), and the player cannot exit a Blend In action (e.g. sitting on a bench, reading a newspaper) while the Clumsy mod is loaded — even when the ragdoll is inactive.
Steps to Reproduce
- Install Clumsy mod (ZHMModSDK, no SMF)
- Load any mission
- Find a Blend In interaction (bench, newspaper, bar stool, etc.)
- Press
Space to start Blend In
- Press
Space to try to exit Blend In
- Result: Nothing happens. The player is stuck in the Blend In animation indefinitely.
Expected Behavior
Space exits the Blend In action normally when the ragdoll is not being triggered.
Suggested Fix
Use a different, non-conflicting input action for the ragdoll trigger (e.g. eIAKBMInventory = I/Tab), or better yet, use raw Windows GetAsyncKeyState() for a dedicated key that has no binding in Glacier 2's action map.
Bug 2: Ragdoll never activates without SMF brick
Description
Clumsy.cpp, in OnFrameUpdate(), has a hard guard that blocks all ragdoll logic if GetEntities() returns false:
// Clumsy.cpp, OnFrameUpdate()
if (!GetEntities()) return;
GetEntities() searches the scene for the entity type [assembly:/_sdk/get_up.brick].pc_entitytype, which is a resource provided only by the Clumsy SMF mod package (get_up.brick). When the player uses the ZHMModSDK .dll version of Clumsy without the accompanying SMF brick deployed, GetEntities() always returns false, and the ragdoll code is never reached on any frame.
This means the mod is completely non-functional when used as a standalone ZHMModSDK plugin without SMF.
Steps to Reproduce
- Install only
Clumsy.dll via ZHMModSDK (no SMF)
- Load any mission
- Press the configured key
- Result: Nothing happens. No ragdoll, no animation, no feedback.
Expected Behavior
ActivatePoweredRagdoll should be called directly on the local player character regardless of whether the SMF brick is present. The m_ShakeEntity and m_MusicLoop pins should be called conditionally (null-checked) since they depend on the brick.
Suggested Fix
Make GetEntities() non-blocking — call it for optional entity setup but do not return on failure. Guard only the entity-specific calls with null checks:
// Non-blocking: try to get optional SMF entities, but continue regardless
GetEntities();
if (m_Ragdolling) {
Functions::ZHM5BaseCharacter_ActivatePoweredRagdoll->Call(...);
// Optional SMF entities — null-checked
if (m_ShakeEntity)
m_ShakeEntity.SignalInputPin("Activate");
if (m_MusicLoop)
m_MusicLoop->Play(true);
}
Environment
| Field |
Value |
| Game version |
HITMAN World of Assassination (Epic Games, latest) |
| ZHMModSDK version |
4.0.2 |
| SMF installed |
No |
| OS |
Windows 11 |
Additional Notes
- Both bugs exist independently and can be fixed separately.
- Bug 1 affects all users of the mod regardless of SMF.
- Bug 2 affects users who use the ZHMModSDK
.dll without SMF.
- After applying both fixes, the mod works correctly as a standalone ZHMModSDK plugin.
[Bug] Clumsy mod breaks Space key (Blend In) + ragdoll never activates without SMF
Summary
The Clumsy mod has two critical bugs that make it effectively non-functional in the current version of HITMAN World of Assassination:
Bug 1: Space key conflict with Blend In
Description
Clumsy.cpp, inOnFrameUpdate(), polls the input actioneIAKBMCoveron every single frame:eIAKBMCoveris mapped to Space by default in the game's input system (Cover / Vault / Blend In cancel).Calling
ZInputAction_Digitalconsumes the digital input state for that frame. As a result, the Glacier 2 engine never receives the Space key press inZBlendInEntity::OnCancel(), and the player cannot exit a Blend In action (e.g. sitting on a bench, reading a newspaper) while the Clumsy mod is loaded — even when the ragdoll is inactive.Steps to Reproduce
Spaceto start Blend InSpaceto try to exit Blend InExpected Behavior
Space exits the Blend In action normally when the ragdoll is not being triggered.
Suggested Fix
Use a different, non-conflicting input action for the ragdoll trigger (e.g.
eIAKBMInventory=I/Tab), or better yet, use raw WindowsGetAsyncKeyState()for a dedicated key that has no binding in Glacier 2's action map.Bug 2: Ragdoll never activates without SMF brick
Description
Clumsy.cpp, inOnFrameUpdate(), has a hard guard that blocks all ragdoll logic ifGetEntities()returns false:GetEntities()searches the scene for the entity type[assembly:/_sdk/get_up.brick].pc_entitytype, which is a resource provided only by the Clumsy SMF mod package (get_up.brick). When the player uses the ZHMModSDK.dllversion of Clumsy without the accompanying SMF brick deployed,GetEntities()always returnsfalse, and the ragdoll code is never reached on any frame.This means the mod is completely non-functional when used as a standalone ZHMModSDK plugin without SMF.
Steps to Reproduce
Clumsy.dllvia ZHMModSDK (no SMF)Expected Behavior
ActivatePoweredRagdollshould be called directly on the local player character regardless of whether the SMF brick is present. Them_ShakeEntityandm_MusicLooppins should be called conditionally (null-checked) since they depend on the brick.Suggested Fix
Make
GetEntities()non-blocking — call it for optional entity setup but do notreturnon failure. Guard only the entity-specific calls with null checks:Environment
Additional Notes
.dllwithout SMF.