
Damage taken to your head will have a portion redirected to a random body part.
This mod only works with the version is what built for (3.9 for the 3.9 version, and 3.8.3 for the 3.8 version)
Only applies to you (not AI)
Any damage taken to the head will now be redirected to a body part of your choosing.
You can set what percentage of the damage to redirect.
So if you redirect 75% of the damage, a shot that normally does 100 damage will instead do 25 damage to your head, and 75 damage to a random body part.
You can select which parts are randomly selected, so you can have it only go to your torso, if you want.
4.7K Downloads
Updated to work with SPT310, will not work for older versions.
Virustotal Results: https://www.virustotal.com/gui/file/18e18fd996725c4da7638dd58e2bfb7367e717b8c989ca9d1e20ba79b30ea0db
4.6K Downloads
SPT 3.9.0+ only.
Added option to only redirect based on a random chance roll.
Added option to spread damage to multiple body parts.
Added optional damage multiplier, so you can increase the damage received that gets redirected. Intended for use with multiple parts selected.
2.1K Downloads
Updated for 3.9.0
Only works on 3.9
3.1K Downloads
Only works on SPT 3.8
Fixed redirected damage happening before armor damage reduction happens. Now it should be properly implemented.
2.4K Downloads
-
Config options for displaying in-game notification when mod is activated (disabled by default)
-
Optional: Minimum Damage to activate
-
Optional: Maximum headshot damage cap
-
Added checks to see if the bullet actually penetrated or not before reducing damage.
-
Redirected damage will ignore armor now.
-
Added better documentation on what each setting does. (Hover over the name of the config option in the f12 menu for detailed explanations)
-
Reworked code.
Note: If you were one of first 8 people to download this version, I accidently uploaded the wrong build, its fixed now
1.2K Downloads
Only works with SPT 3.8.0
Details
-
GUID
Not Available
-
License
-
Source Code
-
Latest Version VirusTotal Result
https://www.virustotal.com/gui/file/18e18fd996725c4da7638dd58e2bfb7367e717b8c989ca9d1e20ba79b30ea0db
I fixed mongoID error and its working for 3.10
https://github.com/gitTerebi/Solarint-HeadshotDamageRedirect/releases/tag/main
Does not work with the coop version fika as of Fika 1.1.5.0, SPT 3.10.5
Client and host do not take damage to the head and it does not redistribute.
EXCEPTION: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: Critical MongoId error: incorrect length. Id:
at EFT.MongoID..ctor (System.String id) [0x00020] in <be9862b1593e41e48ad89bd48723d349>:0
at EFT.MongoID.op_Implicit (System.String id) [0x00000] in <be9862b1593e41e48ad89bd48723d349>:0
at EFT.MongoID.op_Implicit (System.String id) [0x00010] in <be9862b1593e41e48ad89bd48723d349>:0
at Solarint.HeadshotDamageRedirect.ApplyDamageInfoPatch.UpdateNewDamageInfo (DamageInfoStruct redirectedDamageInfo, DamageInfoStruct originalDamageInfo, System.Single damageToRedirect) [0x00014] in <182c2517fcce4dd094163b50eb670555>:0
at Solarint.HeadshotDamageRedirect.ApplyDamageInfoPatch.createDamageToEachPart (System.Collections.Generic.List
1\[T\] parts, System.Single totalDamage, DamageInfoStruct damageInfo, EFT.Player player, System.Text.StringBuilder stringBuilder) \[0x00022\] in <182c2517fcce4dd094163b50eb670555>:0 at Solarint.HeadshotDamageRedirect.ApplyDamageInfoPatch.PatchPrefix (EBodyPart& bodyPartType, DamageInfoStruct& damageInfo, EFT.Player& \_\_instance) \[0x0007a\] in <182c2517fcce4dd094163b50eb670555>:0 at (wrapper dynamic-method) EFT.Player.DMD<EFT.Player::ApplyDamageInfo>(EFT.Player,DamageInfoStruct,EBodyPart,EBodyPartColliderType,single) at Fika.Core.Coop.Players.CoopPlayer.ApplyDamageInfo (DamageInfoStruct damageInfo, EBodyPart bodyPartType, EBodyPartColliderType colliderType, System.Single absorbed) \[0x0006d\] in <b5869515bf114c34b2476130dd8db733>:0 at Fika.Core.Coop.Players.CoopPlayer.SimulatedApplyShot (DamageInfoStruct damageInfo, EBodyPart bodyPartType, EBodyPartColliderType colliderType, EArmorPlateCollider armorPlateCollider) \[0x0011b\] in <b5869515bf114c34b2476130dd8db733>:0 at Fika.Core.Coop.Players.CoopPlayer.ApplyShot (DamageInfoStruct damageInfo, EBodyPart bodyPartType, EBodyPartColliderType colliderType, EArmorPlateCollider armorPlateCollider, ShotIdStruct shotId) \[0x00075\] in <b5869515bf114c34b2476130dd8db733>:0 at BodyPartCollider+PlayerBridge.ApplyShot (DamageInfoStruct damageInfo, EBodyPart bodyPart, EBodyPartColliderType bodyPartCollider, EArmorPlateCollider armorPlateCollider, ShotIdStruct shotId) \[0x00000\] in <be9862b1593e41e48ad89bd48723d349>:0 at BodyPartCollider.ApplyHit (DamageInfoStruct damageInfo, ShotIdStruct shotID) \[0x00010\] in <be9862b1593e41e48ad89bd48723d349>:0 at EFT.ClientGameWorld.ShotDelegate (EftBulletClass shotResult) \[0x00041\] in <be9862b1593e41e48ad89bd48723d349>:0 at EFT.Ballistics.BallisticsCalculator.method\_2 (System.Single simulationTime) \[0x00094\] in <be9862b1593e41e48ad89bd48723d349>:0 2025-01-1716:30:28.622 +08:00|0.15.5.1.33420|Error|Default|ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: Critical MongoId error: incorrect length. Id: EFT.MongoID..ctor (System.String id) (at <be9862b1593e41e48ad89bd48723d349>:0) EFT.MongoID.op\_Implicit (System.String id) (at <be9862b1593e41e48ad89bd48723d349>:0) EFT.MongoID.op\_Implicit (System.String id) (at <be9862b1593e41e48ad89bd48723d349>:0) Solarint.HeadshotDamageRedirect.ApplyDamageInfoPatch.UpdateNewDamageInfo (DamageInfoStruct redirectedDamageInfo, DamageInfoStruct originalDamageInfo, System.Single damageToRedirect) (at <182c2517fcce4dd094163b50eb670555>:0) Solarint.HeadshotDamageRedirect.ApplyDamageInfoPatch.createDamageToEachPart (System.Collections.Generic.List
1[T] parts, System.Single totalDamage, DamageInfoStruct damageInfo, EFT.Player player, System.Text.StringBuilder stringBuilder) (at <182c2517fcce4dd094163b50eb670555>:0)Solarint.HeadshotDamageRedirect.ApplyDamageInfoPatch.PatchPrefix (EBodyPart& bodyPartType, DamageInfoStruct& damageInfo, EFT.Player& __instance) (at <182c2517fcce4dd094163b50eb670555>:0)
(wrapper dynamic-method) EFT.Player.DMD<EFT.Player::ApplyDamageInfo>(EFT.Player,DamageInfoStruct,EBodyPart,EBodyPartColliderType,single)
Fika.Core.Coop.Players.CoopPlayer.ApplyDamageInfo (DamageInfoStruct damageInfo, EBodyPart bodyPartType, EBodyPartColliderType colliderType, System.Single absorbed) (at <b5869515bf114c34b2476130dd8db733>:0)
Fika.Core.Coop.Players.CoopPlayer.SimulatedApplyShot (DamageInfoStruct damageInfo, EBodyPart bodyPartType, EBodyPartColliderType colliderType, EArmorPlateCollider armorPlateCollider) (at <b5869515bf114c34b2476130dd8db733>:0)
Fika.Core.Coop.Players.CoopPlayer.ApplyShot (DamageInfoStruct damageInfo, EBodyPart bodyPartType, EBodyPartColliderType colliderType, EArmorPlateCollider armorPlateCollider, ShotIdStruct shotId) (at <b5869515bf114c34b2476130dd8db733>:0)
BodyPartCollider+PlayerBridge.ApplyShot (DamageInfoStruct damageInfo, EBodyPart bodyPart, EBodyPartColliderType bodyPartCollider, EArmorPlateCollider armorPlateCollider, ShotIdStruct shotId) (at <be9862b1593e41e48ad89bd48723d349>:0)
BodyPartCollider.ApplyHit (DamageInfoStruct damageInfo, ShotIdStruct shotID) (at <be9862b1593e41e48ad89bd48723d349>:0)
EFT.ClientGameWorld.ShotDelegate (EftBulletClass shotResult) (at <be9862b1593e41e48ad89bd48723d349>:0)
EFT.Ballistics.BallisticsCalculator.method_2 (System.Single simulationTime) (at <be9862b1593e41e48ad89bd48723d349>:0)
UnityEngine.DebugLogHandler:LogException(Exception, Object)
Class410:UnityEngine.ILogHandler.LogException(Exception, Object)
UnityEngine.Debug:LogException(Exception)
EFT.Ballistics.BallisticsCalculator:method_2(Single)
EFT.Ballistics.BallisticsCalculator:ManualUpdate(Single)
EFT.GameWorld:BallisticsTick(Single)
EFT.GameWorld:DoWorldTick(Single)
EFT.GameWorldUnityTickListener:Update()
Hello, I hope you’re doing well! I wanted to bring to your attention that I am currently having some difficulties with the AI locking onto my jaw and neck in the game. Any suggestions or fixes would be greatly appreciated. Thank you for your hard work!
RealismMod.ApplyArmorDamagePatch.Prefix (EFT.InventoryLogic.ArmorComponent __instance, DamageInfo& damageInfo, System.Single& __result, EBodyPartColliderType colliderType, EArmorPlateCollider armorPlateCollider, System.Boolean damageInfoIsLocal, System.Collections.Generic.List
1\[T\] armorComponents) (at <2a3a5232cb184bc4a979864191e38496>:0) (wrapper dynamic-method) EFT.InventoryLogic.ArmorComponent.DMD<EFT.InventoryLogic.ArmorComponent::ApplyDamage>(EFT.InventoryLogic.ArmorComponent,DamageInfo&,EBodyPartColliderType,EArmorPlateCollider,bool,System.Collections.Generic.List
1<EFT.InventoryLogic.ArmorComponent>,EFT.SkillManager/SkillBuffClass,EFT.SkillManager/SkillBuffClass) EFT.Player.ProceedDamageThroughArmor (DamageInfo& damageInfo, EBodyPartColliderType colliderType, EArmorPlateCollider armorPlateCollider, System.Boolean damageInfoIsLocal) (at <a5b6eaefee6842aba73e4a77ea14a564>:0) EFT.Player.ApplyShot (DamageInfo damageInfo, EBodyPart bodyPartType, EBodyPartColliderType colliderType, EArmorPlateCollider armorPlateCollider, GStruct389 shotId) (at <a5b6eaefee6842aba73e4a77ea14a564>:0) Solarint.HeadshotDamageRedirect.ApplyDamageInfoPatch.createDamageToEachPart (System.Collections.Generic.List1\[T\] parts, System.Single totalDamage, DamageInfo damageInfo, EFT.Player player, System.Text.StringBuilder stringBuilder) (at <535948518f24407bb0cbc99254607071>:0) Solarint.HeadshotDamageRedirect.ApplyDamageInfoPatch.PatchPrefix (EBodyPart& bodyPartType, DamageInfo& damageInfo, EFT.Player& \_\_instance) (at <535948518f24407bb0cbc99254607071>:0) (wrapper dynamic-method) EFT.Player.DMD<EFT.Player::ApplyDamageInfo>(EFT.Player,DamageInfo,EBodyPart,EBodyPartColliderType,single) BodyPartCollider+PlayerBridge.ApplyDamageInfo (DamageInfo damageInfo, EBodyPart bodyPartType, EBodyPartColliderType bodyPartCollider, System.Single absorbed) (at <a5b6eaefee6842aba73e4a77ea14a564>:0) BodyPartCollider.ApplyEnvironmentalDamage (DamageInfo damageInfo) (at <a5b6eaefee6842aba73e4a77ea14a564>:0) GClass1678.smethod\_0 (System.Collections.Generic.IReadOnlyDictionary
2[TKey,TValue] playerAndDistances, EFT.IExplosiveItem grenadeItem, UnityEngine.Vector3 grenadePosition, System.Func1\[TResult\] getDamageInfo, System.Single directionalDamageMultiplier, System.Single directionalDamageAngle, System.Nullable
1[T] explosionDirection) (at <a5b6eaefee6842aba73e4a77ea14a564>:0) GClass1678.Explosion (EFT.IExplosiveItem grenadeItem, UnityEngine.Vector3 explosionPosition, System.String playerProfileIDWhoThrew, ISharedBallisticsCalculator ballisticsCalculator, EFT.InventoryLogic.Item originalWeaponItem, System.Func1\[TResult\] getDamageInfo, System.Single directionalDamageMultiplier, System.Single directionalDamageAngle, System.Nullable
1[T] explosionDirection) (at <a5b6eaefee6842aba73e4a77ea14a564>:0) (wrapper dynamic-method) EFT.Grenade.DMD<EFT.Grenade::Explosion>(EFT.Grenade,EFT.IExplosiveItem,UnityEngine.Vector3,string,ISharedBallisticsCalculator,EFT.InventoryLogic.Item,UnityEngine.Vector3) EFT.Grenade.method_3 () (at <a5b6eaefee6842aba73e4a77ea14a564>:0) EFT.Grenade.InvokeBlowUpEvent () (at <a5b6eaefee6842aba73e4a77ea14a564>:0) GClass6+Class89.MoveNext () (at <a5b6eaefee6842aba73e4a77ea14a564>:0) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <ca21460feb9c47d0ac337b9893474cc6>:0) UnityEngine.DebugLogHandler:LogException(Exception, Object) Class362:UnityEngine.ILogHandler.LogException(Exception, Object) UnityEngine.Debug:CallOverridenDebugHandler(Exception, Object)I got this while on lighthouse and a grenade went off on me and I survived.
damage redirection seems not work in spt 3.9.8 fika 0.9.9003
A small nitpick, but the plugins folder in the zip uses an upper-case P instead of a lower-case one. I know not a lot of people play on Linux, but it is a case-sensitive OS, so dragging the BepInEx folder into the SPT folder produces a new Plugins (upper-case) folder and does not merge into the plugins (lower-case) folder. If a user isn’t careful they could end up with two plugins folders and not realise it, causing errors.
Is it possible to make it so this only applies to scavs? Running a modlist where pmcs are strong af, but only spawn at the start, for more exciting pmc fights. I don’t want them to be affected by this, but I do want to avoid getting buckshot to the face by some scav randomly.
Might not be possible, but hoping for the best.
Doesn’t seem to work on 3.9.2? Went into a scav raid and instantly died to top of head damage.
i feel like a nerd typing this, but the Overview says “This mod only works with SPT 3.8.0” might confuse some people…