mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Add possibility for lethal organ damage (#6277)
* Change fatal injury to emulate lethal organ damage
This commit is contained in:
parent
e22f35da37
commit
2ea7c349ca
@ -71,12 +71,24 @@ private _bodyPartVisParams = [_unit, false, false, false, false]; // params arra
|
|||||||
_critialDamage = true;
|
_critialDamage = true;
|
||||||
};
|
};
|
||||||
#ifdef DEBUG_MODE_FULL
|
#ifdef DEBUG_MODE_FULL
|
||||||
systemChat format["%1, damage: %2, peneration: %3, bleeding: %4, pain: %5", _bodyPart, round(_woundDamage * 100) / 100, _woundDamage > PENETRATION_THRESHOLD, round(_bleeding * 1000) / 1000, round(_pain * 1000) / 1000];
|
systemChat format["%1, damage: %2, peneration: %3, bleeding: %4, pain: %5", _bodyPart, _woundDamage toFixed 2, _woundDamage > PENETRATION_THRESHOLD, _bleeding toFixed 3, _pain toFixed 3];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (_bodyPartNToAdd == 0 && {_woundDamage > LETHAL_HEAD_DAMAGE_THRESHOLD}) then {
|
// Emulate damage to vital organs
|
||||||
TRACE_2("FatalInjury",_unit,_woundDamage);
|
switch (true) do {
|
||||||
[QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent;
|
// Fatal damage to the head is guaranteed death
|
||||||
|
case (_bodyPartNToAdd == 0 && {_woundDamage >= HEAD_DAMAGE_THRESHOLD}): {
|
||||||
|
TRACE_1("lethal headshot",_woundDamage toFixed 2);
|
||||||
|
[QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent;
|
||||||
|
};
|
||||||
|
// Fatal damage to torso has various results based on organ hit
|
||||||
|
case (_bodyPartNToAdd == 1 && {_woundDamage >= ORGAN_DAMAGE_THRESHOLD}): {
|
||||||
|
// Heart shot is lethal
|
||||||
|
if (random 1 < HEART_HIT_CHANCE) then {
|
||||||
|
TRACE_1("lethal heartshot",_woundDamage toFixed 2);
|
||||||
|
[QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// todo `forceWalk` based on leg damage
|
// todo `forceWalk` based on leg damage
|
||||||
|
@ -32,7 +32,7 @@ private _damageTypeInfo = [GVAR(allDamageTypesData) getVariable _typeOfDamage] p
|
|||||||
_damageTypeInfo params ["_thresholds", "_isSelectionSpecific", "_woundTypes"];
|
_damageTypeInfo params ["_thresholds", "_isSelectionSpecific", "_woundTypes"];
|
||||||
|
|
||||||
// It appears we are dealing with an unknown type of damage.
|
// It appears we are dealing with an unknown type of damage.
|
||||||
if (count _woundTypes == 0) then {
|
if (_woundTypes isEqualTo []) then {
|
||||||
// grabbing the configuration for unknown damage type
|
// grabbing the configuration for unknown damage type
|
||||||
_damageTypeInfo = [GVAR(allDamageTypesData) getVariable "unknown"] param [0, [[], false, []]];
|
_damageTypeInfo = [GVAR(allDamageTypesData) getVariable "unknown"] param [0, [[], false, []]];
|
||||||
_woundTypes = _damageTypeInfo select 2;
|
_woundTypes = _damageTypeInfo select 2;
|
||||||
@ -121,12 +121,24 @@ private _woundsCreated = [];
|
|||||||
_critialDamage = true;
|
_critialDamage = true;
|
||||||
};
|
};
|
||||||
#ifdef DEBUG_MODE_FULL
|
#ifdef DEBUG_MODE_FULL
|
||||||
systemChat format["%1, damage: %2, peneration: %3, bleeding: %4, pain: %5", _bodyPart, round(_woundDamage * 100) / 100, _woundDamage > PENETRATION_THRESHOLD, round(_bleeding * 1000) / 1000, round(_pain * 1000) / 1000];
|
systemChat format["%1, damage: %2, peneration: %3, bleeding: %4, pain: %5", _bodyPart, _woundDamage toFixed 2, _woundDamage > PENETRATION_THRESHOLD, _bleeding toFixed 3, _pain toFixed 3];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (_bodyPartNToAdd == 0 && {_woundDamage > LETHAL_HEAD_DAMAGE_THRESHOLD}) then {
|
// Emulate damage to vital organs
|
||||||
TRACE_2("FatalInjury",_unit,_woundDamage);
|
switch (true) do {
|
||||||
[QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent;
|
// Fatal damage to the head is guaranteed death
|
||||||
|
case (_bodyPartNToAdd == 0 && {_woundDamage >= HEAD_DAMAGE_THRESHOLD}): {
|
||||||
|
TRACE_1("lethal headshot",_woundDamage toFixed 2);
|
||||||
|
[QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent;
|
||||||
|
};
|
||||||
|
// Fatal damage to torso has various results based on organ hit
|
||||||
|
case (_bodyPartNToAdd == 1 && {_woundDamage >= ORGAN_DAMAGE_THRESHOLD}): {
|
||||||
|
// Heart shot is lethal
|
||||||
|
if (random 1 < HEART_HIT_CHANCE) then {
|
||||||
|
TRACE_1("lethal heartshot",_woundDamage toFixed 2);
|
||||||
|
[QEGVAR(medical,FatalInjury), _unit] call CBA_fnc_localEvent;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// todo `forceWalk` based on leg damage
|
// todo `forceWalk` based on leg damage
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
#define ALL_SELECTIONS ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]
|
#define ALL_SELECTIONS ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]
|
||||||
#define ALL_HITPOINTS ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]
|
#define ALL_HITPOINTS ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]
|
||||||
|
|
||||||
|
// Damage threshold above which fatal organ damage can occur
|
||||||
|
#define HEAD_DAMAGE_THRESHOLD 1
|
||||||
|
#define ORGAN_DAMAGE_THRESHOLD 0.6
|
||||||
|
|
||||||
|
// Chance to hit heart based on ratio of 70kg (approx. 70L) body to 70mL stroke volume of heart
|
||||||
|
// Assuming torso is 50% of the body volume (35L)
|
||||||
|
#define HEART_HIT_CHANCE 0.05
|
||||||
|
|
||||||
#define MEDICAL_ACTION_DISTANCE 1.75
|
#define MEDICAL_ACTION_DISTANCE 1.75
|
||||||
|
|
||||||
// scale received pain to 0-2 level to select type of scream
|
// scale received pain to 0-2 level to select type of scream
|
||||||
@ -53,8 +61,6 @@
|
|||||||
// Chance to wake up when vitals are stable (checked once every SPONTANEOUS_WAKE_UP_INTERVAL seconds)
|
// Chance to wake up when vitals are stable (checked once every SPONTANEOUS_WAKE_UP_INTERVAL seconds)
|
||||||
#define SPONTANEOUS_WAKE_UP_INTERVAL 15
|
#define SPONTANEOUS_WAKE_UP_INTERVAL 15
|
||||||
|
|
||||||
#define LETHAL_HEAD_DAMAGE_THRESHOLD 1.0
|
|
||||||
|
|
||||||
// Minimum leg damage required for limping
|
// Minimum leg damage required for limping
|
||||||
#define LIMPING_DAMAGE_THRESHOLD 0.30
|
#define LIMPING_DAMAGE_THRESHOLD 0.30
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user