Jump to content
Sign in to follow this  
goko--

HC Damage mod

Recommended Posts

A3 HARDCORE DAMAGE MODIFICATION

 

mp compatible: not tested (should work theoratically, tell if it does please)

compatibility with other mods: Works fine with mods like RHS. Wont work with ACE due to its own medical system.

version: 1.0

github repo: https://github.com/the0utsider/A3-HC-Damage

 

Download on Steam workshop

    

Description:  The way of arma handling damage is possible the most sophisticated in any engine out there; you get all sorts of calculation for ballistic protection vs bullet caliber, hit velocity, angles etc.
But most of the time (especially with level 4-5 armor) you have to be really precise to get headshots. You need to hit 'in the face' and that is doable but what happens when you miss?
This is the problem. If your shot falls close to neck area, that is a seperate body part which have 0 affect for what you want: headshot.

 

    Similar situation with chest and upper body. There are 3 body parts in arma damage system for upper-body: abdomen, diaphragm and chest.
While game evaluates total damage, not all of this is added to overall health. This results as what you mostly experience: guy gets shot again and again, he moves his arms, twitches and nothing happens. He keeps running.

 

    When you modify bullet hit values, you lost logical ballistic originality of game. Yes it would work, there are many config altering mods out there as well but they just do more than they should and break the game.
It is just not fun to shoot a guy from pixel (or pinky) of left foot and get a kill for that. It breaks everything.
    
Short desription of problem is: arma treat humanoid models like frankenstein: Each body part should have some affect on overall health but some of them do not or relationship is really low.
    
    This mod uses arma's own damage model and improves it by binding damage of certain areas of body together, getting past frankenstein issue on homanoid characters:
    
    *Neck and face damages are added up and passes to 'head' damage.
    *Upper chest, diaphragm and abdomen area now affects overall health of body (which they should, it is the place of all vital organs)
    *Pelvis (or lower gut or balls) damage passes to legs. It's not ideal when you got wounded around pelvis and still be able to run like gazelle.
    
    These values are passed on with a "multiplier" inside code and it is available under CBA addon options for you to decide a ratio for your liking, default is 1.5.
    
    *As another option, you can change the effect of how upper body damage dealt with. It is multiplied to 'body' health as default which means death when reaches to 1 and this is default behavior of mod.
    The option is to pass damage to 'hands' which will not kill you no matter how high it is, it is not fatal but it will cause extreme weapon swing.
    These are all global settings; meaning they apply to everyone on server and you have to be logged as admin in a server to change them.
    
    Last one is development debugger setting which will hint you what multiplier applied, what was the damage and where etc. Local option. Should be used good for testing.

 

Variables and their defaults:

["goko_damage_multiplier", 1.5];
["goko_damage_fatalHeadWounds", true];
["goko_damage_fatalChestWounds", 0];
["goko_damage_affects_hands", true];
["goko_damage_disableLegs", true];
["goko_dev_debugger", false];

 

Edited by goko--
updated links
  • Like 2
  • Thanks 3

Share this post


Link to post
Share on other sites

Goko, please consider releasing a script version of your damage mod. I am using this right now: 

Spoiler



// Damage reduction EH
params[ "_unit" ];

// Damage reduction from https://forums.bistudio.com/forums/topic/198136-reducing-player-damage/

// Exit if we are a player and not local
// Otherwise add EH for AI every where just in case their locality
// changes due to moving into a players group
// the EH will only fire where the AI is local
if ( isPlayer _unit && { !local _unit } ) exitWith {};

if ( isPlayer _unit ) then {
	_unit removeAllEventHandlers 'HandleDamage';
};

// Only damage from last applied handleDamage EH is taken into consideration by the engine
// Apply a new EH so as we can override the damage applied
_unit addEventHandler [ "HandleDamage", {
	params ["_unit", "_hitSelection", "_damage","_source","_projectile","_hitPartIndex", "_instigator", "_hitPoint"];

	// Damage multipliers.  The damage of each projectile will be multiplied by this number.
	private _damageMultiplierHead = 0.40;
	private _damageMultiplierBody = 0.30;
	private _damageMultiplierLimbs = 0.20;
	private _damageMultiplierOverall = 0.30;

	// Damage limits.  Each projectile will be limited to a max of this much damage.
	private _limitHead = 0.40;
	private _limitBody = 0.25;
	private _limitLimbs = 0.15;
	private _limitOverall = 0.25;

	private _oldDamage = 0;
	if (_hitSelection isEqualTo "") then {_oldDamage = damage _unit} else {_oldDamage = _unit getHit _hitSelection};
	private _newDamage = _damage - _oldDamage max 0;
	private _incomingDamage = _newDamage;
	private _playerHealth = damage _unit;

	// Infantry selections
	// Keep in mind that if revive is enabled then incapacitation may occur at around 0.7 damage.
	// "": The overall damage that determines the damage value of the unit. Unit dies at damage equal to or above 1
	// "face_hub": Unit dies at damage equal to or above 1
	// "neck": Unit dies at damage equal to or above 1
	// "head": Unit dies at damage equal to or above 1
	// "pelvis": Unit dies at damage equal to or above 1
	// "spine1": Unit dies at damage equal to or above 1
	// "spine2": Unit dies at damage equal to or above 1
	// "spine3": Unit dies at damage equal to or above 1
	// "body": Unit dies at damage equal to or above 1
	// "arms": Unit doesn't die with damage to this part
	// "hands": Unit doesn't die with damage to this part
	// "legs": Unit doesn't die with damage to this part

	// Do any other damage calculations here
	// _damage is the previous damage plus any new damage and will be applied
	// as the total damage the unit has for this selection once this EH returns

	// Only modify damage if it is a known projectile (leave falling damage etc alone)
	if (_newDamage > 0 && !(_projectile isEqualTo "")) then {
		// Reduce damage by damage multiplier
		private _damageMultiplier = _damageMultiplierBody;
		private _upperLimit = _limitBody;
		switch (_hitSelection) do {
			case "face_hub";
			case "head": {
				_damageMultiplier = _damageMultiplierHead;
				_upperLimit = _limitHead;
			};
			case "arms";
			case "hands";
			case "legs": {
				_damageMultiplier = _damageMultiplierLimbs;
				_upperLimit = _limitLimbs;
			};
			case "": {
				_damageMultiplier = _damageMultiplierOverall;
				_upperLimit = _limitOverall;
			};
			default { 
				_damageMultiplier = _damageMultiplierBody;
				_upperLimit = _limitBody;
			};
		};
		_newDamage = _newDamage * _damageMultiplier;

		// Place an upper limit on projectile damage done at once
		if (_newDamage > _upperLimit) then {
			_newDamage = _upperLimit;
		};

		_damage = _oldDamage + _newDamage;
	};
	
	// For players ignore damage if they are incapacitated and pass damage to bis revive handler
	if ( isPlayer _unit ) then {
		if ( lifeState _unit == "INCAPACITATED" ) then {
			//if we are incapacitated take no additional damage
			_damage = _oldDamage;
		} else {
			_this set[ 2, _damage ];
			//Call BI REVIVE HandleDamage EH passing new _damage value
			_damage = _this call bis_fnc_reviveEhHandleDamage;
		};
	};

//	systemChat format[ "pHealth: %1 selection: %2 oldTotal: %3 newTotal: %4 incomingDmg: %6 appliedDmg: %6", _playerHealth, _hitSelection, _oldDamage, _damage, _incomingDamage, _newDamage];

	_damage
	
}];
//systemChat format[ "Damage reduction applied to %1", _unit ];

// End of damage reduction


 

The problem with a mod version is that my players are running so many mods already it gets harder for them to download more.

  • Like 1

Share this post


Link to post
Share on other sites
On 25/10/2018 at 12:21 AM, LSValmont said:

players are running so many mods already it gets harder

 

This is true !

The scripts , ( with a small size )  are always a better solution for MP !

Using a Mod is easier though , but in order to sort of a mod list for MP , then for sure every single mod used , is one more parameter to think of !

  • Like 1

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×