diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp
index 614cd3e0e06..744d7a13b13 100644
--- a/addons/interaction/CfgVehicles.hpp
+++ b/addons/interaction/CfgVehicles.hpp
@@ -172,8 +172,16 @@ class CfgVehicles {
class ACE_Torso {
displayName = CSTRING(Torso);
+ selection = "spine1";
+ distance = 1.5;
+ condition = "";
+ statement = "";
+ exceptions[] = {"isNotSwimming"};
+ };
+ class ACE_Chest {
+ displayName = CSTRING(Chest);
selection = "spine3";
- distance = 1.50;
+ distance = 1.5;
condition = "";
statement = "";
exceptions[] = {"isNotSwimming"};
@@ -181,39 +189,71 @@ class CfgVehicles {
class ACE_Head {
displayName = CSTRING(Head);
selection = "pilot";
- distance = 1.50;
+ distance = 1.5;
condition = "";
statement = "";
exceptions[] = {"isNotSwimming"};
};
class ACE_ArmLeft {
displayName = CSTRING(ArmLeft);
+ selection = "LWrist";
+ distance = 1.5;
+ condition = "";
+ statement = "";
+ exceptions[] = {"isNotSwimming"};
+ };
+ class ACE_ArmUpperLeft {
+ displayName = CSTRING(ArmUpperLeft);
selection = "LeftForeArm";
- distance = 1.50;
+ distance = 1.5;
condition = "";
statement = "";
exceptions[] = {"isNotSwimming"};
};
class ACE_ArmRight {
displayName = CSTRING(ArmRight);
+ selection = "RWrist";
+ distance = 1.5;
+ condition = "";
+ statement = "";
+ exceptions[] = {"isNotSwimming"};
+ };
+ class ACE_ArmUpperRight {
+ displayName = CSTRING(ArmUpperRight);
selection = "RightForeArm";
- distance = 1.50;
+ distance = 1.5;
condition = "";
statement = "";
exceptions[] = {"isNotSwimming"};
};
class ACE_LegLeft {
displayName = CSTRING(LegLeft);
+ selection = "LeftFoot";
+ distance = 1.5;
+ condition = "";
+ statement = "";
+ exceptions[] = {"isNotSwimming"};
+ };
+ class ACE_LegUpperLeft {
+ displayName = CSTRING(LegUpperLeft);
selection = "LKnee";
- distance = 1.50;
+ distance = 1.5;
condition = "";
statement = "";
exceptions[] = {"isNotSwimming"};
};
class ACE_LegRight {
displayName = CSTRING(LegRight);
+ selection = "RightFoot";
+ distance = 1.5;
+ condition = "";
+ statement = "";
+ exceptions[] = {"isNotSwimming"};
+ };
+ class ACE_LegUpperRight {
+ displayName = CSTRING(LegUpperRight);
selection = "RKnee";
- distance = 1.50;
+ distance = 1.5;
condition = "";
statement = "";
exceptions[] = {"isNotSwimming"};
@@ -221,7 +261,7 @@ class CfgVehicles {
class ACE_Weapon {
displayName = CSTRING(Weapon);
position = QUOTE(call DFUNC(getWeaponPos));
- distance = 1.50;
+ distance = 1.5;
condition = "";
statement = "";
exceptions[] = {"isNotSwimming"};
diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml
index 35633463593..50dda2b058b 100644
--- a/addons/interaction/stringtable.xml
+++ b/addons/interaction/stringtable.xml
@@ -51,6 +51,9 @@
身體
Gövde
+
+ Chest
+
Head
Tête
@@ -85,6 +88,9 @@
左手
Sol Kol
+
+ Upper Left Arm
+
Right Arm
Rechter Arm
@@ -102,6 +108,9 @@
右手
Sağ Kol
+
+ Upper Right Arm
+
Left Leg
Linkes Bein
@@ -119,6 +128,9 @@
左腳
Sol Bacak
+
+ Upper Left Leg
+
Right Leg
Rechtes Bein
@@ -136,6 +148,9 @@
右腳
Sağ Bacak
+
+ Upper Right Leg
+
Weapon
Arme
diff --git a/addons/medical/dev/test_hitpointConfigs.sqf b/addons/medical/dev/test_hitpointConfigs.sqf
index ff1c3a95b7d..9b61549c963 100644
--- a/addons/medical/dev/test_hitpointConfigs.sqf
+++ b/addons/medical/dev/test_hitpointConfigs.sqf
@@ -27,7 +27,7 @@ private _testPass = true;
private _typeOf = configName _x;
if (_typeOf == "") then { continue };
private _hitpoints = (configProperties [_x >> "HitPoints", "isClass _x", true]) apply {toLowerANSI configName _x};
- private _expectedHitPoints = ["hitleftarm","hitrightarm","hitleftleg","hitrightleg","hithead","hitbody"];
+ private _expectedHitPoints = ["hitleftarm","hitrightarm","hitleftleg","hitrightleg","hitbody","hithead","hitneck","hitabdomen"];
private _missingHitPoints = _expectedHitPoints select {!(_x in _hitpoints)};
if (_missingHitPoints isNotEqualTo []) then {
WARNING_3("%1 missing ace hitpoints: %2 - class hitpoints: %3",_typeOf,_missingHitPoints,_hitpoints);
diff --git a/addons/medical/dev/watchVariable.sqf b/addons/medical/dev/watchVariable.sqf
index a0e064595ab..cbc62b20d42 100644
--- a/addons/medical/dev/watchVariable.sqf
+++ b/addons/medical/dev/watchVariable.sqf
@@ -59,7 +59,7 @@ GVAR(dev_watchVariableRunning) = true;
_return pushBack format [" - [Pain: %1] [Suppress: %2]", _pain toFixed 3, _painSuppress toFixed 3];
// Damage:
- private _damage = _unit getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+ private _damage = GET_BODYPART_DAMAGE(unit);
private _limping = ["", "[ Limping ]"] select (_unit getVariable [QEGVAR(medical,isLimping), false]);
_return pushBack format ["BodyPartDamage: [H: %1] [B: %2]", (_damage select 0) toFixed 2, (_damage select 1) toFixed 2];
_return pushBack format ["[LA:%1] [RA: %2] [LL:%3] [RL: %4]", (_damage select 2) toFixed 2, (_damage select 3) toFixed 2, (_damage select 4) toFixed 2, (_damage select 5) toFixed 2];
diff --git a/addons/medical/functions/fnc_addDamageToUnit.sqf b/addons/medical/functions/fnc_addDamageToUnit.sqf
index 2ffe8d77322..6518e9bb6f2 100644
--- a/addons/medical/functions/fnc_addDamageToUnit.sqf
+++ b/addons/medical/functions/fnc_addDamageToUnit.sqf
@@ -46,7 +46,7 @@ if (!_overrideInvuln && {!((isDamageAllowed _unit) && {_unit getVariable [QEGVAR
};
// Extension is case sensitive and expects this format (different from ALL_BODY_PARTS)
-_bodyPart = ["Head", "Body", "LeftArm", "RightArm", "LeftLeg", "RightLeg"] select _bodyPartIndex;
+_bodyPart = ["_Head", "_Neck", "_Chest", "_Body", "_LeftArm", "_LeftUpperArm", "_RightArm", "_RightUpperArm", "_LeftLeg", "_LeftUpperLeg", "_RightLeg", "_RightUpperLeg"] select _bodyPartIndex;
if (!isNull _instigator) then {
_unit setVariable [QEGVAR(medical,lastDamageSource), _instigator];
@@ -54,14 +54,14 @@ if (!isNull _instigator) then {
};
#ifdef DEBUG_TESTRESULTS
-private _startDmg = +(_unit getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]]);
+private _startDmg = +(GET_BODYPART_DAMAGE(unit) ;);
private _startPain = GET_PAIN(_unit);
#endif
[QEGVAR(medical,woundReceived), [_unit, [[_damageToAdd, _bodyPart, _damageToAdd]], _instigator, _typeOfDamage]] call CBA_fnc_localEvent;
#ifdef DEBUG_TESTRESULTS
-private _endDmg = _unit getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+private _endDmg = GET_BODYPART_DAMAGE(unit);
private _endPain = GET_PAIN(_unit);
private _typeOfDamageAdj = _typeOfDamage call EFUNC(medical_damage,getTypeOfDamage);
private _config = configFile >> "ACE_Medical_Injuries" >> "damageTypes" >> _typeOfDamageAdj;
diff --git a/addons/medical/functions/fnc_deserializeState.sqf b/addons/medical/functions/fnc_deserializeState.sqf
index 6fbb00985db..763329e6fb4 100644
--- a/addons/medical/functions/fnc_deserializeState.sqf
+++ b/addons/medical/functions/fnc_deserializeState.sqf
@@ -97,7 +97,7 @@ private _state = [_json] call CBA_fnc_parseJSON;
[QEGVAR(medical,ivBags), nil],
[QEGVAR(medical,triageLevel), 0],
[QEGVAR(medical,triageCard), []],
- [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]]
+ [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0,0,0,0,0,0,0]]
// Offset needs to be converted
// [VAR_MEDICATIONS, []]
];
diff --git a/addons/medical/functions/fnc_serializeState.sqf b/addons/medical/functions/fnc_serializeState.sqf
index 67783e85d94..2d6616c439b 100644
--- a/addons/medical/functions/fnc_serializeState.sqf
+++ b/addons/medical/functions/fnc_serializeState.sqf
@@ -44,7 +44,7 @@ private _state = [] call CBA_fnc_createNamespace;
[QEGVAR(medical,ivBags), nil],
[QEGVAR(medical,triageLevel), 0],
[QEGVAR(medical,triageCard), []],
- [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]]
+ [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0,0,0,0,0,0,0]]
// Time needs to be converted
// [VAR_MEDICATIONS, []]
];
diff --git a/addons/medical_damage/ACE_Medical_Injuries.hpp b/addons/medical_damage/ACE_Medical_Injuries.hpp
index e3ffb7bfdec..a2f432885fb 100644
--- a/addons/medical_damage/ACE_Medical_Injuries.hpp
+++ b/addons/medical_damage/ACE_Medical_Injuries.hpp
@@ -12,7 +12,7 @@ class ACE_Medical_Injuries {
};
// Occur when an entire structure or part of it is forcibly pulled away, such as the loss of a permanent tooth or an ear lobe. Explosions, gunshots, and animal bites may cause avulsions.
class Avulsion {
- bleeding = 0.1;
+ bleeding = 0.07;
pain = 1.0;
causeLimping = 1;
};
@@ -23,7 +23,7 @@ class ACE_Medical_Injuries {
};
// Occur when a heavy object falls onto a person, splitting the skin and shattering or tearing underlying structures.
class Crush {
- bleeding = 0.05;
+ bleeding = 0.04;
pain = 0.8;
causeLimping = 1;
causeFracture = 1;
@@ -40,7 +40,7 @@ class ACE_Medical_Injuries {
};
// Also called velocity wounds, they are caused by an object entering the body at a high speed, typically a bullet or small peices of shrapnel.
class VelocityWound {
- bleeding = 0.2;
+ bleeding = 0.15;
pain = 0.9;
causeLimping = 1;
causeFracture = 1;
@@ -133,9 +133,18 @@ class ACE_Medical_Injuries {
// explosives create more and smaller wounds than grenades
thresholds[] = {{20, 15}, {8, 7}, {2, 3}, {1.2, 2}, {0.4, 1}, {0,0}};
selectionSpecific = 0;
+ class woundHandlers: woundHandlers {
+ GVAR(woundsHandlerExplosion) = QFUNC(woundsHandlerExplosion);
+ };
class Avulsion {
weighting[] = {{1, 1}, {0.8, 0}};
};
+ class VelocityWound {
+ weighting[] = {{1, 1}, {0.8, 0}};
+ };
+ class PunctureWound {
+ weighting[] = {{1, 1}, {0.8, 0}};
+ };
class Cut {
weighting[] = {{1.5, 0}, {0.35, 1}, {0, 0}};
};
diff --git a/addons/medical_damage/XEH_PREP.hpp b/addons/medical_damage/XEH_PREP.hpp
index a17e7d739c5..5f250e6fca7 100644
--- a/addons/medical_damage/XEH_PREP.hpp
+++ b/addons/medical_damage/XEH_PREP.hpp
@@ -8,5 +8,6 @@ PREP(parseWoundHandlersCfg);
PREP(woundReceived);
PREP(woundsHandlerBase);
PREP(woundsHandlerBurning);
+PREP(woundsHandlerExplosion);
PREP(woundsHandlerVehiclecrash);
PREP(woundsHandlerVehiclehit);
diff --git a/addons/medical_damage/functions/fnc_handleIncapacitation.sqf b/addons/medical_damage/functions/fnc_handleIncapacitation.sqf
index 391d69c08bf..f986f815075 100644
--- a/addons/medical_damage/functions/fnc_handleIncapacitation.sqf
+++ b/addons/medical_damage/functions/fnc_handleIncapacitation.sqf
@@ -18,9 +18,9 @@
params ["_unit"];
private _painLevel = GET_PAIN_PERCEIVED(_unit);
-private _bodyPartDamage = _unit getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+private _bodyPartDamage = GET_BODYPART_DAMAGE(unit);
-_bodyPartDamage params ["_headDamage", "_bodyDamage"];
+_bodyPartDamage params ["_headDamage", "_neckDamage", "_chestDamage","_bodyDamage"];
// Exclude non penetrating body damage
{
diff --git a/addons/medical_damage/functions/fnc_woundsHandlerBase.sqf b/addons/medical_damage/functions/fnc_woundsHandlerBase.sqf
index 92effda9bd5..4922181eaa9 100644
--- a/addons/medical_damage/functions/fnc_woundsHandlerBase.sqf
+++ b/addons/medical_damage/functions/fnc_woundsHandlerBase.sqf
@@ -35,14 +35,28 @@ private _createdWounds = false;
private _updateDamageEffects = false;
private _painLevel = 0;
private _criticalDamage = false;
-private _bodyPartDamage = _unit getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+private _bodyPartDamage = GET_BODYPART_DAMAGE(unit);
private _bodyPartVisParams = [_unit, false, false, false, false]; // params array for EFUNC(medical_engine,updateBodyPartVisuals);
// process wounds separately for each body part hit
{ // forEach _allDamages
_x params ["_damage", "_bodyPart"];
_bodyPart = toLowerANSI _bodyPart;
-
+ if (_typeOfDamage != "explosive") then {
+ if (_bodyPart == "head") then {
+ private _isNeck = (random 1) < 0.1; // 10% chance for neck damage
+ _bodyPart = ["head", "neck"] select (_isNeck);
+ };
+ if (_bodyPart in ["leftarm", "rightarm", "leftleg", "rightleg"]) then {
+ private _isUpper = (random 1) < 0.5;
+ switch (_bodyPart) do {
+ case "leftarm": { _bodyPart = ["leftarm", "upperleftarm"] select (_isUpper); };
+ case "rightarm": { _bodyPart = ["rightarm", "upperrightarm"] select (_isUpper); };
+ case "leftleg": { _bodyPart = ["leftleg", "upperleftleg"] select (_isUpper); };
+ case "rightleg": { _bodyPart = ["rightleg", "upperrightleg"] select (_isUpper); };
+ };
+ };
+ };
// silently ignore structural damage
if (_bodyPart == "#structural") then {continue};
@@ -87,10 +101,10 @@ private _bodyPartVisParams = [_unit, false, false, false, false]; // params arra
private _woundClassIDToAdd = GVAR(woundClassNames) find _woundTypeToAdd;
// Add a bit of random variance to wounds
- private _woundDamage = _dmgPerWound * _dmgMultiplier * random [0.9, 1, 1.1];
+ private _woundDamage = _dmgPerWound * _dmgMultiplier * random [0.7, 1, 1.5];
_bodyPartDamage set [_bodyPartNToAdd, (_bodyPartDamage select _bodyPartNToAdd) + _woundDamage];
- _bodyPartVisParams set [[1,2,3,3,4,4] select _bodyPartNToAdd, true]; // Mark the body part index needs updating
+ _bodyPartVisParams set [[1,1,1,2,2,2,3,3,3,4,4,4] select _bodyPartNToAdd, true]; // Mark the body part index needs updating
// Anything above this value is guaranteed worst wound possible
private _worstDamage = 2;
@@ -116,7 +130,7 @@ private _bodyPartVisParams = [_unit, false, false, false, false]; // params arra
// Create a new injury. Format [0:classComplex, 1:amountOf, 2:bleedingRate, 3:woundDamage]
private _injury = [_classComplex, 1, _bleeding, _woundDamage];
- if (_bodyPart isEqualTo "head" || {_bodyPart isEqualTo "body" && {_woundDamage > PENETRATION_THRESHOLD}}) then {
+ if (_bodyPart in ["head", "body", "neck", "chest"] && {_woundDamage > PENETRATION_THRESHOLD}) then {
_criticalDamage = true;
};
if ([_unit, _bodyPartNToAdd, _bodyPartDamage, _woundDamage] call FUNC(determineIfFatal)) then {
@@ -134,7 +148,7 @@ private _bodyPartVisParams = [_unit, false, false, false, false]; // params arra
case (
_causeFracture
&& {EGVAR(medical,fractures) > 0}
- && {_bodyPartNToAdd > 1}
+ && {_bodyPartNToAdd > 3}
&& {_woundDamage > FRACTURE_DAMAGE_THRESHOLD}
&& {random 1 < (_fractureMultiplier * EGVAR(medical,fractureChance))}
): {
diff --git a/addons/medical_damage/functions/fnc_woundsHandlerExplosion.sqf b/addons/medical_damage/functions/fnc_woundsHandlerExplosion.sqf
new file mode 100644
index 00000000000..0d792619574
--- /dev/null
+++ b/addons/medical_damage/functions/fnc_woundsHandlerExplosion.sqf
@@ -0,0 +1,63 @@
+#include "..\script_component.hpp"
+/*
+ * Author: Cplhardcore
+ * Custom wound handler for explosions
+ *
+ * Arguments:
+ * 0: Unit That Was Hit
+
+ Neck
+
+
+ Chest
+
Torso
Torso
@@ -622,68 +628,28 @@
Gövde
- Left Arm
- Linker Arm
- Левая рука
- Brazo Izquierdo
- Bras gauche
- Lewa ręka
- Braço Esquerdo
- Levá Ruka
- Braccio Sinistro
- 左腕
- 왼팔
- 左臂
- 左手
- Sol Kol
+ Lower Left Arm
+
+
+ Upper Left Arm
- Right Arm
- Rechter Arm
- Правая рука
- Brazo Derecho
- Bras droit
- Prawa ręka
- Braço Direito
- Pravá Ruka
- Braccio Destro
- 右腕
- 오른팔
- 右臂
- 右手
- Sağ Kol
+ Lower Right Arm
+
+
+ Upper Right Arm
- Left Leg
- Linkes Bein
- Левая нога
- Pierna Izquierda
- Jambe gauche
- Lewa noga
- Perna Esquerda
- Levá Noha
- Gamba Sinistra
- 左足
- 왼다리
- 左腿
- 左腳
- Sol Bacak
+ Lower Left Leg
+
+
+ Upper Left Leg
- Right Leg
- Rechtes Bein
- Правая нога
- Pierna Derecha
- Jambe droite
- Prawa noga
- Perna Direita
- Pravá Noha
- Gamba Destra
- 右足
- 오른다리
- 右腿
- 右腳
- Sağ Bacak
+ Lower Right Leg
+
+
+ Upper Right Leg
Select Head
@@ -701,6 +667,9 @@
選擇頭部
Kafayı Seç
+
+ Select Neck
+
Select Torso
Wähle Torso
@@ -717,69 +686,32 @@
選擇身體
Gövdeyi Seç
+
+ Select Chest
+
- Select Left Arm
- Wähle linken Arm
- Выбрать левую руку
- Seleccionar Brazo Izquierdo
- Sélectionner le bras gauche
- Wybierz lewą rękę
- Selecionar Braço Esquerdo
- Vybrat Levou ruku
- Seleziona Braccio Sinistro
- 左腕を選択
- 왼팔 선택
- 选择左臂
- 選擇左手
- Sol Kolu Seç
+ Select Lower Left Arm
+
+
+ Select Upper Left Arm
- Select Right Arm
- Wähle rechten Arm
- Выбрать правую руку
- Seleccionar Brazo Derecho
- Sélectionner le bras droit
- Wybierz prawą rękę
- Selecionar Braço Direito
- Vybrat Pravou ruku
- Seleziona Braccio Destro
- 右腕を選択
- 오른팔 선택
- 选择右臂
- 選擇右手
- Sağ Kolu Seç
+ Select Lower Right Arm
+
+
+ Select Upper Right Arm
- Select Left Leg
- Wähle linkes Bein
- Выбрать левую ногу
- Seleccionar Pierna Izquierda
- Sélectionner la jambe gauche
- Wybierz lewą nogę
- Selecionar Perna Esquerda
- Vybrat Levou nohu
- Seleziona Gamba Sinistra
- 左足を選択
- 왼다리 선택
- 选择左腿
- 選擇左腳
- Sol Bacağı Seç
+ Select Lower Left Leg
+
+
+ Select Upper Left Leg
- Select Right Leg
- Wähle rechtes Bein
- Выбрать правую ногу
- Seleccionar Pierna Derecha
- Sélectionner la jambe droite
- Wybierz prawą nogę
- Selecionar Perna Direita
- Vybrat Pravou nohu
- Seleziona Gamba Destra
- 右足を選択
- 오른다리 선택
- 选择右腿
- 選擇右腳
- Sağ Bacağı Seç
+ Select Lower Right Leg
+
+
+ Select Upper Right Leg
Small
diff --git a/addons/medical_status/functions/fnc_initUnit.sqf b/addons/medical_status/functions/fnc_initUnit.sqf
index 278163d90b9..76dad9de4c3 100644
--- a/addons/medical_status/functions/fnc_initUnit.sqf
+++ b/addons/medical_status/functions/fnc_initUnit.sqf
@@ -70,7 +70,7 @@ if (_isRespawn) then {
_unit setVariable [QEGVAR(medical,triageCard), [], true];
// Damage storage
- _unit setVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0], true];
+ _unit setVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0,0,0,0,0,0,0], true];
// Medication
_unit setVariable [VAR_MEDICATIONS, [], true];
diff --git a/addons/medical_status/functions/fnc_updateWoundBloodLoss.sqf b/addons/medical_status/functions/fnc_updateWoundBloodLoss.sqf
index 86963496422..f0d5c4f7bc2 100644
--- a/addons/medical_status/functions/fnc_updateWoundBloodLoss.sqf
+++ b/addons/medical_status/functions/fnc_updateWoundBloodLoss.sqf
@@ -19,7 +19,7 @@
params ["_unit"];
private _tourniquets = GET_TOURNIQUETS(_unit);
-private _bodyPartBleeding = [0,0,0,0,0,0];
+private _bodyPartBleeding = [0,0,0,0,0,0,0,0,0,0,0,0];
{
private _partIndex = ALL_BODY_PARTS find _x;
if (_tourniquets select _partIndex == 0) then {
@@ -30,13 +30,13 @@ private _bodyPartBleeding = [0,0,0,0,0,0];
};
} forEach GET_OPEN_WOUNDS(_unit);
-if (_bodyPartBleeding isEqualTo [0,0,0,0,0,0]) then {
+if (_bodyPartBleeding isEqualTo [0,0,0,0,0,0,0,0,0,0,0,0]) then {
TRACE_1("updateWoundBloodLoss-none",_unit);
_unit setVariable [VAR_WOUND_BLEEDING, 0, true];
} else {
- _bodyPartBleeding params ["_headBleeding", "_bodyBleeding", "_leftArmBleeding", "_rightArmBleeding", "_leftLegBleeding", "_rightLegBleeding"];
- private _bodyBleedingRate = ((_headBleeding min 0.9) + (_bodyBleeding min 1.0)) min 1.0;
- private _limbBleedingRate = ((_leftArmBleeding min 0.3) + (_rightArmBleeding min 0.3) + (_leftLegBleeding min 0.5) + (_rightLegBleeding min 0.5)) min 1.0;
+ _bodyPartBleeding params ["_headBleeding","_neckBleeding", "_chestBleeding", "_bodyBleeding", "_leftArmBleeding","_leftUpperArmBleeding", "_rightArmBleeding","_rightUpperArmBleeding", "_leftLegBleeding","_leftUpperLegBleeding", "_rightLegBleeding", "_rightUpperLegBleeding"];
+ private _bodyBleedingRate = ((_headBleeding min 0.9) + (_neckBleeding min 0.9) + (_chestBleeding min 1.0) + (_bodyBleeding min 1.0)) min 1.0;
+ private _limbBleedingRate = ((_leftArmBleeding min 0.3) + (_leftUpperArmBleeding min 0.3) + (_rightArmBleeding min 0.3) + (_rightUpperArmBleeding min 0.3) + (_leftLegBleeding min 0.5) + (_leftUpperLegBleeding min 0.5) + (_rightLegBleeding min 0.5) + (_rightUpperLegBleeding min 0.5)) min 1.0;
// limb bleeding is scaled down based on the amount of body bleeding
_limbBleedingRate = _limbBleedingRate * (1 - _bodyBleedingRate);
diff --git a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp
index 582e3b6db53..d7e7e69e638 100644
--- a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp
+++ b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp
@@ -77,7 +77,7 @@ class GVAR(actions) {
displayName = CSTRING(Apply_Tourniquet);
displayNameProgress = CSTRING(Applying_Tourniquet);
icon = QPATHTOEF(medical_gui,ui\tourniquet.paa);
- allowedSelections[] = {"LeftArm", "RightArm", "LeftLeg", "RightLeg"};
+ allowedSelections[] = {"LeftArm", "UpperLeftArm", "RightArm", "UpperRightArm", "LeftLeg", "UpperLeftLeg", "RightLeg", "UpperRightLeg"};
items[] = {"ACE_tourniquet"};
treatmentTime = QGVAR(treatmentTimeTourniquet);
condition = QUOTE(!([ARR_2(_patient,_bodyPart)] call FUNC(hasTourniquetAppliedTo)));
@@ -101,7 +101,7 @@ class GVAR(actions) {
category = "bandage";
icon = QPATHTOEF(medical_gui,ui\splint.paa);
medicRequired = QGVAR(medicSplint);
- allowedSelections[] = {"LeftArm", "RightArm", "LeftLeg", "RightLeg"};
+ allowedSelections[] = {"LeftArm", "UpperLeftArm", "RightArm", "UpperRightArm", "LeftLeg", "UpperLeftLeg", "RightLeg", "UpperRightLeg"};
items[] = {"ACE_splint"};
treatmentLocations = QGVAR(locationSplint);
treatmentTime = QGVAR(treatmentTimeSplint);
@@ -118,7 +118,7 @@ class GVAR(actions) {
displayNameProgress = CSTRING(Injecting_Morphine);
icon = QPATHTOEF(medical_gui,ui\auto_injector.paa);
medicRequired = QGVAR(medicMorphine);
- allowedSelections[] = {"LeftArm", "RightArm", "LeftLeg", "RightLeg"};
+ allowedSelections[] = {"LeftArm", "UpperLeftArm", "RightArm", "UpperRightArm", "LeftLeg", "UpperLeftLeg", "RightLeg", "UpperRightLeg"};
category = "medication";
items[] = {"ACE_morphine"};
treatmentLocations = QGVAR(locationMorphine);
@@ -165,7 +165,7 @@ class GVAR(actions) {
displayName = CSTRING(Actions_Blood4_1000);
displayNameProgress = CSTRING(Transfusing_Blood);
icon = QPATHTOEF(medical_gui,ui\iv.paa);
- allowedSelections[] = {"LeftArm", "RightArm", "LeftLeg", "RightLeg"};
+ allowedSelections[] = {"LeftArm", "UpperLeftArm", "RightArm", "UpperRightArm", "LeftLeg", "UpperLeftLeg", "RightLeg", "UpperRightLeg"};
allowSelfTreatment = QGVAR(allowSelfIV);
category = "advanced";
medicRequired = QGVAR(medicIV);
@@ -221,7 +221,7 @@ class GVAR(actions) {
icon = "";
category = "examine";
treatmentLocations = TREATMENT_LOCATIONS_ALL;
- allowedSelections[] = {"Head", "Body"};
+ allowedSelections[] = {"Head", "Neck", "Chest", "Body"};
medicRequired = 0;
treatmentTime = 2.5;
items[] = {};
@@ -245,7 +245,7 @@ class GVAR(actions) {
class CheckBloodPressure: CheckPulse {
displayName = CSTRING(Actions_CheckBloodPressure);
displayNameProgress = CSTRING(Check_Bloodpressure_Content);
- allowedSelections[] = {"LeftArm", "RightArm", "LeftLeg", "RightLeg"};
+ allowedSelections[] = {"LeftUpperArm", "RightUpperArm", "LeftUpperLeg", "RightUpperLeg"};
callbackSuccess = QFUNC(checkBloodPressure);
};
class CheckResponse: CheckPulse {
@@ -296,7 +296,7 @@ class GVAR(actions) {
icon = "";
category = "advanced";
treatmentLocations = TREATMENT_LOCATIONS_ALL;
- allowedSelections[] = {"Body"};
+ allowedSelections[] = {"Chest"};
allowSelfTreatment = 0;
medicRequired = 0;
treatmentTime = QGVAR(treatmentTimeCPR);
diff --git a/addons/medical_treatment/functions/fnc_bandageLocal.sqf b/addons/medical_treatment/functions/fnc_bandageLocal.sqf
index 2c59540fd12..ab0d4354260 100644
--- a/addons/medical_treatment/functions/fnc_bandageLocal.sqf
+++ b/addons/medical_treatment/functions/fnc_bandageLocal.sqf
@@ -74,7 +74,7 @@ if (
if (GVAR(clearTrauma) == 2) then {
TRACE_2("clearTrauma - clearing trauma after bandage",_bodyPart,_openWounds);
private _partIndex = ALL_BODY_PARTS find _bodyPart;
- private _bodyPartDamage = _patient getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+ private _bodyPartDamage = _patient getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0,0,0,0,0,0,0]];
private _newDam = (_bodyPartDamage select _partIndex) - _treatedDamage;
// Prevent obscenely small damage from lack of floating precision
diff --git a/addons/medical_treatment/functions/fnc_fullHealLocal.sqf b/addons/medical_treatment/functions/fnc_fullHealLocal.sqf
index 42c5866a9af..436e1a9fd01 100644
--- a/addons/medical_treatment/functions/fnc_fullHealLocal.sqf
+++ b/addons/medical_treatment/functions/fnc_fullHealLocal.sqf
@@ -73,7 +73,7 @@ _patient setVariable [VAR_OXYGEN_DEMAND, 0, true];
_patient setVariable [QEGVAR(medical,ivBags), nil, true];
// Damage storage
-_patient setVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0], true];
+_patient setVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0,0,0,0,0,0,0], true];
// wakeup needs to be done after achieving stable vitals, but before manually reseting unconc var
if IS_UNCONSCIOUS(_patient) then {
diff --git a/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf b/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf
index b90198f0eb6..cda30af5137 100644
--- a/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf
+++ b/addons/medical_treatment/functions/fnc_handleBandageOpening.sqf
@@ -124,7 +124,7 @@ if (random 1 <= _reopeningChance * GVAR(woundReopenChance)) then {
// Re-add trauma and damage visuals
if (GVAR(clearTrauma) == 2) then {
private _injuryDamage = (_selectedInjury select 4) * _impact;
- private _bodyPartDamage = _target getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
+ private _bodyPartDamage = _target getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0,0,0,0,0,0,0]];
private _newDam = (_bodyPartDamage select _partIndex) + _injuryDamage;
_bodyPartDamage set [_partIndex, _newDam];