Skip to content

Commit

Permalink
Medical - Add medication dosage support & improve overdose (#10393)
Browse files Browse the repository at this point in the history
* Initial Commit

* Small fix to get all medications

* Update launch.toml

* Small fix and removal of medication dose variables

* Deleted old entries from stringtable

* Update addons/medical_treatment/script_component.hpp

Co-authored-by: Grim <[email protected]>

* Fixed newline

* Changes for backwards compatibility

* Update addons/medical_status/functions/fnc_addMedicationAdjustment.sqf

Co-authored-by: Grim <[email protected]>

* Update addons/medical_status/functions/fnc_getAllMedicationCount.sqf

Co-authored-by: Grim <[email protected]>

* Update addons/medical_status/functions/fnc_getAllMedicationCount.sqf

Co-authored-by: Grim <[email protected]>

* Fixes, maybe?

* Overdose fixes

* trailling comma

* Update addons/medical_vitals/functions/fnc_handleUnitVitals.sqf

* aa

* there we go

* Update addons/medical_treatment/functions/fnc_onMedicationUsage.sqf

Co-authored-by: Jouni Järvinen <[email protected]>

* Update addons/medical_treatment/functions/fnc_onMedicationUsage.sqf

Co-authored-by: Jouni Järvinen <[email protected]>

* Update XEH_PREP.hpp

* Update addons/medical_status/functions/fnc_getAllMedicationCount.sqf

Co-authored-by: Grim <[email protected]>

* Grim Misc Fixes

* Remove debug

* Small fixes

* newline

* headers

* code cleanup

* more headers

* drop unneeded _dose

* last header

* fix getting overdose func/code

* whitespace

* now the last header

* Update addons/medical_treatment/functions/fnc_overDose.sqf

Co-authored-by: Grim <[email protected]>

* fix compiling nil

* Update addons/medical_status/functions/fnc_addMedicationAdjustment.sqf

Co-authored-by: johnb432 <[email protected]>

* Fixes

* Update addons/medical_treatment/functions/fnc_overDose.sqf

Co-authored-by: johnb432 <[email protected]>

* Update fnc_overDose.sqf

* Update addons/medical_status/functions/fnc_addMedicationAdjustment.sqf

Co-authored-by: johnb432 <[email protected]>

* Update addons/medical_treatment/functions/fnc_overDose.sqf

Co-authored-by: johnb432 <[email protected]>

* Update addons/medical_treatment/functions/fnc_onMedicationUsage.sqf

Co-authored-by: johnb432 <[email protected]>

* Update addons/medical_status/functions/fnc_addMedicationAdjustment.sqf

Co-authored-by: johnb432 <[email protected]>

* Update addons/medical_status/functions/fnc_getMedicationCount.sqf

Co-authored-by: johnb432 <[email protected]>

* Fixes

* Moving med settings to different PR

* oopps

* Stringtable

* Misc fixes & cleanup

* Update fnc_onMedicationUsage.sqf

* Fix nonsensical code

* add API event and doc

* Misc fixes

* Update ACE_Medical_Treatment.hpp

* Update watchVariable.sqf

* Update addons/medical_treatment/ACE_Medical_Treatment.hpp

Co-authored-by: johnb432 <[email protected]>

* Update ACE_Medical_Treatment.hpp

---------

Co-authored-by: Grim <[email protected]>
Co-authored-by: Jouni Järvinen <[email protected]>
Co-authored-by: johnb432 <[email protected]>
  • Loading branch information
4 people authored Nov 15, 2024
1 parent d8b3cda commit e31aba5
Show file tree
Hide file tree
Showing 12 changed files with 134 additions and 65 deletions.
5 changes: 2 additions & 3 deletions addons/medical/dev/watchVariable.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,8 @@ GVAR(dev_watchVariableRunning) = true;
};
_return pushBack format ["Adjusts: [HR %1][PS %2][PR %3]", _hrTargetAdjustment toFixed 2, _painSupressAdjustment toFixed 2, _peripheralResistanceAdjustment toFixed 2];
{
private _medicationCount = [_unit, _x, true] call EFUNC(medical_status,getMedicationCount);
private _medicationEffectiveness = [_unit, _x, false] call EFUNC(medical_status,getMedicationCount);
_return pushBack format ["-%1: C: %2 - E: %3", _x, _medicationCount toFixed 2, _medicationEffectiveness toFixed 2];
([_unit, _x, false] call EFUNC(medical_status,getMedicationCount)) params ["_medicationDose", "_medicationEffectiveness"];
_return pushBack format ["-%1: D: %2 - E: %3", _x, _medicationDose toFixed 2, _medicationEffectiveness toFixed 2];
} forEach _uniqueMedications;
_return pushBack "------- Medications Raw: -------";
_return append _rawMedications;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ if (EGVAR(medical,spontaneousWakeUpChance) > 0) then {

private _wakeUpCheckInterval = SPONTANEOUS_WAKE_UP_INTERVAL;
if (EGVAR(medical,spontaneousWakeUpEpinephrineBoost) > 1) then {
private _epiEffectiveness = [_unit, "Epinephrine", false] call EFUNC(medical_status,getMedicationCount);
private _epiEffectiveness = ([_unit, "Epinephrine", false] call EFUNC(medical_status,getMedicationCount)) select 1;
_wakeUpCheckInterval = _wakeUpCheckInterval * linearConversion [0, 1, _epiEffectiveness, 1, 1 / EGVAR(medical,spontaneousWakeUpEpinephrineBoost), true];
TRACE_2("epiBoost",_epiEffectiveness,_wakeUpCheckInterval);
};
Expand Down
1 change: 1 addition & 0 deletions addons/medical_status/XEH_PREP.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
PREP(addInventoryActions);
PREP(addMedicationAdjustment);
PREP(adjustPainLevel);
PREP(getAllMedicationCount);
PREP(getBloodLoss);
PREP(getBloodPressure);
PREP(getBloodVolumeChange);
Expand Down
12 changes: 6 additions & 6 deletions addons/medical_status/functions/fnc_addMedicationAdjustment.sqf
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include "..\script_component.hpp"
/*
* Author: BaerMitUmlaut, PabstMirror
* Author: BaerMitUmlaut, PabstMirror, Cplhardcore
* Adds a medication and it's effects
*
* Arguments:
Expand All @@ -11,24 +11,24 @@
* 4: Heart Rate Adjust <NUMBER>
* 5: Pain Suppress Adjust <NUMBER>
* 6: Flow Adjust <NUMBER>
* 7: Dose of medication <NUMBER>
*
* Return Value:
* None
*
* Example:
* [player, "Morphine", 120, 60, -10, 0.8, -10] call ace_medical_status_fnc_addMedicationAdjustment
* [player, "Morphine", 120, 60, -10, 0.8, -10, 1] call ace_medical_status_fnc_addMedicationAdjustment
*
* Public: No
*/
params ["_unit", "_medication", "_timeToMaxEffect", "_maxTimeInSystem", "_hrAdjust", "_painAdjust", "_flowAdjust"];
TRACE_7("addMedicationAdjustment",_unit,_medication,_timeToMaxEffect,_maxTimeInSystem,_hrAdjust,_painAdjust,_flowAdjust);
params ["_unit", "_medication", "_timeToMaxEffect", "_maxTimeInSystem", "_hrAdjust", "_painAdjust", "_flowAdjust", "_dose"];
TRACE_8("addMedicationAdjustment",_unit,_medication,_timeToMaxEffect,_maxTimeInSystem,_hrAdjust,_painAdjust,_flowAdjust,_dose);

if (_maxTimeInSystem <= 0) exitWith { WARNING_1("bad value for _maxTimeInSystem - %1",_this); };
_timeToMaxEffect = _timeToMaxEffect max 1;


private _adjustments = _unit getVariable [VAR_MEDICATIONS, []];

_adjustments pushBack [_medication, CBA_missionTime, _timeToMaxEffect, _maxTimeInSystem, _hrAdjust, _painAdjust, _flowAdjust];

_adjustments pushBack [_medication, CBA_missionTime, _timeToMaxEffect, _maxTimeInSystem, _hrAdjust, _painAdjust, _flowAdjust, _dose];
_unit setVariable [VAR_MEDICATIONS, _adjustments, true];
27 changes: 27 additions & 0 deletions addons/medical_status/functions/fnc_getAllMedicationCount.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include "..\script_component.hpp"
/*
* Author: PabstMirror, Cplhardcore
* Gets effective count of all medications in a unit's system
* (each medication dose is scaled from 0..1 based on time till max effect and max time in system)
*
* Arguments:
* 0: The patient <OBJECT>
* 1: Get raw count (true) or effect ratio (false) <BOOL> (default: true)
*
* Return Value:
* Array of medication counts <ARRAY of ARRAY>:
* 0: Medication Name <String>
* 1: Dose Count <NUMBER>
* 2: Medication effectiveness (0-1) <NUMBER>
*
* Example:
* [player] call ace_medical_status_fnc_getAllMedicationCount
*
* Public: Yes
*/

params ["_target", ["_getCount", true]];

private _medicationClasses = (_target getVariable [VAR_MEDICATIONS, []]) apply {_x select 0};
_medicationClasses = _medicationClasses arrayIntersect _medicationClasses;
_medicationClasses apply {[_x] + ([_target, _x, _getCount] call FUNC(getMedicationCount))} // return
29 changes: 17 additions & 12 deletions addons/medical_status/functions/fnc_getMedicationCount.sqf
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
#include "..\script_component.hpp"
/*
* Author: PabstMirror
* Author: PabstMirror, Cplhardcore
* Gets effective count of medications in a unit's system
* (each medication dose is scaled from 0..1 based on time till max effect and max time in system)
*
* Arguments:
* 0: The patient <OBJECT>
* 1: Medication (not case sensitive) <STRING>
* 2: Get raw count (true) or effect ratio (false) <BOOL>(default: true)
* 2: Get raw count (true) or effect ratio (false) <BOOL> (default: true)
*
* Returns Value:
* 0: Dose Count <NUMBER>
* 1: Medication effectiveness (0-1) <NUMBER>
*
* Return Value:
* Medication count (float) <NUMBER>
*
* Example:
* [player, "Epinephrine"] call ace_medical_status_fnc_getMedicationCount
Expand All @@ -20,20 +22,23 @@

params ["_target", "_medication", ["_getCount", true]];

private _return = 0;
private _effectiveness = 0;
private _medDose = 0;
{
_x params ["_xMed", "_timeAdded", "_timeTillMaxEffect", "_maxTimeInSystem"];
_x params ["_xMed", "_timeAdded", "_timeTillMaxEffect", "_maxTimeInSystem", "", "", "", "_dose"];
if (_xMed == _medication) then {
private _timeInSystem = CBA_missionTime - _timeAdded;
if (_getCount) then {
// just return effective count, a medication will always start at 1 and only drop after reaching timeTilMaxEffect
_return = _return + linearConversion [_timeTillMaxEffect, _maxTimeInSystem, _timeInSystem, 1, 0, true];
_medDose = _medDose + _dose;
_effectiveness = if (_getCount) then {
// returns effective count, a medication will always start at 1 and only drop after reaching timeTilMaxEffect
_effectiveness + linearConversion [_timeTillMaxEffect, _maxTimeInSystem, _timeInSystem, 1, 0, true]
} else {
// as used in handleUnitVitals, a medication effectiveness will start low, ramp up to timeTillMaxEffect, and then drop off
_return = _return + (((_timeInSystem / _timeTillMaxEffect) ^ 2) min 1) * (_maxTimeInSystem - _timeInSystem) / _maxTimeInSystem;
_effectiveness + (((_timeInSystem / _timeTillMaxEffect) ^ 2) min 1) * (_maxTimeInSystem - _timeInSystem) / _maxTimeInSystem
};
};
} forEach (_target getVariable [VAR_MEDICATIONS, []]);

TRACE_4("getMedicationCount",_target,_medication,_getCount,_return);
_return
TRACE_5("getMedicationCount",_target,_medication,_getCount,_effectiveness,_medDose);

[_medDose, _effectiveness] // return
10 changes: 8 additions & 2 deletions addons/medical_treatment/ACE_Medical_Treatment.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -565,12 +565,14 @@ class ADDON {
timeInSystem = 120;
// How long until the maximum effect is reached
timeTillMaxEffect = 30;
// How many of this type of medication can be in the system before the patient can possibly overdose?
// How many doses of this medication can be in the system before the patient can possibly overdose?
maxDose = 4;
// The number of doses over maxDose where there is a chance to overdose.
// Example with maxDose = 4 and maxDoseDeviation = 2: Dose 4: Safe | Dose 5 and 6: Possible overdose | Dose 7: Guaranteed overdose
maxDoseDeviation = 2;
// Function to execute upon overdose. Arguments passed to call back are 0: unit <OBJECT>, 1: medicationClassName <STRING>
// The dose of the medication, to allow for different dose amounts of the same medication
dose = 1;
// Function to execute upon overdose. Arguments passed to call back are 0: Patient <OBJECT>, 1: Medication classname <STRING>, 2: Medication dosage <NUMBER>, 3: Overdose threshold <NUMBER>, 4: Incompatible medication that caused overdose (can be the medication itself) <STRING> (default: "")
onOverDose = "";
// The viscosity of a fluid is a measure of its resistance to gradual deformation by shear stress or tensile stress. For liquids, it corresponds to the informal concept of "thickness". This value will increase/decrease the viscoty of the blood with the percentage given. Where 100 = max. Using the minus will decrease viscosity
viscosityChange = 0;
Expand All @@ -584,6 +586,7 @@ class ADDON {
timeInSystem = 1800;
timeTillMaxEffect = 30;
maxDose = 4;
dose = 1;
incompatibleMedication[] = {};
viscosityChange = -10;
};
Expand All @@ -595,6 +598,7 @@ class ADDON {
timeInSystem = 120;
timeTillMaxEffect = 10;
maxDose = 9;
dose = 1;
incompatibleMedication[] = {};
};
class Adenosine {
Expand All @@ -605,6 +609,7 @@ class ADDON {
timeInSystem = 120;
timeTillMaxEffect = 15;
maxDose = 5;
dose = 1;
incompatibleMedication[] = {};
};
class PainKillers {
Expand All @@ -615,6 +620,7 @@ class ADDON {
timeInSystem = 420;
timeTillMaxEffect = 60;
maxDose = 5;
dose = 1;
incompatibleMedication[] = {};
viscosityChange = 5;
};
Expand Down
1 change: 1 addition & 0 deletions addons/medical_treatment/XEH_PREP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ PREP(loadUnit);
PREP(medication);
PREP(medicationLocal);
PREP(onMedicationUsage);
PREP(overDose);
PREP(placeBodyBagInGrave);
PREP(placeInBodyBag);
PREP(placeInBodyBagOrGrave);
Expand Down
9 changes: 4 additions & 5 deletions addons/medical_treatment/functions/fnc_medicationLocal.sqf
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include "..\script_component.hpp"
/*
* Author: Glowbal, mharis001
* Author: Glowbal, mharis001, Cplhardcore
* Local callback for administering medication to a patient.
*
* Arguments:
Expand Down Expand Up @@ -65,13 +65,12 @@ private _medicationConfig = _defaultConfig >> _classname;
private _painReduce = GET_NUMBER(_medicationConfig >> "painReduce",getNumber (_defaultConfig >> "painReduce"));
private _timeInSystem = GET_NUMBER(_medicationConfig >> "timeInSystem",getNumber (_defaultConfig >> "timeInSystem"));
private _timeTillMaxEffect = GET_NUMBER(_medicationConfig >> "timeTillMaxEffect",getNumber (_defaultConfig >> "timeTillMaxEffect"));
private _maxDose = GET_NUMBER(_medicationConfig >> "maxDose",getNumber (_defaultConfig >> "maxDose"));
private _maxDoseDeviation = GET_NUMBER(_medicationConfig >> "maxDoseDeviation",getNumber (_defaultConfig >> "maxDoseDeviation"));
private _viscosityChange = GET_NUMBER(_medicationConfig >> "viscosityChange",getNumber (_defaultConfig >> "viscosityChange"));
private _hrIncreaseLow = GET_ARRAY(_medicationConfig >> "hrIncreaseLow",getArray (_defaultConfig >> "hrIncreaseLow"));
private _hrIncreaseNormal = GET_ARRAY(_medicationConfig >> "hrIncreaseNormal",getArray (_defaultConfig >> "hrIncreaseNormal"));
private _hrIncreaseHigh = GET_ARRAY(_medicationConfig >> "hrIncreaseHigh",getArray (_defaultConfig >> "hrIncreaseHigh"));
private _incompatibleMedication = GET_ARRAY(_medicationConfig >> "incompatibleMedication",getArray (_defaultConfig >> "incompatibleMedication"));
private _dose = GET_NUMBER(_medicationConfig >> "dose",getNumber (_defaultConfig >> "dose"));

private _heartRate = GET_HEART_RATE(_patient);
private _hrIncrease = [_hrIncreaseLow, _hrIncreaseNormal, _hrIncreaseHigh] select (floor ((0 max _heartRate min 110) / 55));
Expand All @@ -80,7 +79,7 @@ private _heartRateChange = _minIncrease + random (_maxIncrease - _minIncrease);

// Adjust the medication effects and add the medication to the list
TRACE_3("adjustments",_heartRateChange,_painReduce,_viscosityChange);
[_patient, _className, _timeTillMaxEffect, _timeInSystem, _heartRateChange, _painReduce, _viscosityChange] call EFUNC(medical_status,addMedicationAdjustment);
[_patient, _className, _timeTillMaxEffect, _timeInSystem, _heartRateChange, _painReduce, _viscosityChange, _dose] call EFUNC(medical_status,addMedicationAdjustment);

// Check for medication compatiblity
[_patient, _className, _maxDose, _maxDoseDeviation, _incompatibleMedication] call FUNC(onMedicationUsage);
[_patient, _className, _incompatibleMedication] call FUNC(onMedicationUsage);
54 changes: 18 additions & 36 deletions addons/medical_treatment/functions/fnc_onMedicationUsage.sqf
Original file line number Diff line number Diff line change
@@ -1,68 +1,50 @@
#include "..\script_component.hpp"
/*
* Author: Glowbal
* Author: Glowbal, Cplhardcore
* Handles the medication given to a patient.
*
* Arguments:
* 0: The patient <OBJECT>
* 0: Patient <OBJECT>
* 1: Medication Treatment classname <STRING>
* 2: Max dose (0 to ignore) <NUMBER>
* 3: Max dose deviation <NUMBER>
* 3: Incompatable medication <ARRAY<STRING>>
* 2: Incompatible medication <ARRAY of <STRING, NUMBER>>
*
* Return Value:
* None
*
* Example:
* [player, "morphine", 4, 2, [["x", 1]]] call ace_medical_treatment_fnc_onMedicationUsage
* [player, "morphine", [["x", 1]]] call ace_medical_treatment_fnc_onMedicationUsage
*
* Public: No
*/

params ["_target", "_className", "_maxDose", "_maxDoseDeviation", "_incompatibleMedication"];
TRACE_5("onMedicationUsage",_target,_className,_maxDose,_maxDoseDeviation,_incompatibleMedication);

private _overdosedMedications = [];
params ["_target", "_className", "_incompatibleMedication"];
TRACE_3("onMedicationUsage",_target,_className,_incompatibleMedication);

// Check for overdose from current medication
private _defaultConfig = configFile >> QUOTE(ADDON) >> "Medication";
private _medicationConfig = _defaultConfig >> _classname;
private _maxDose = GET_NUMBER(_medicationConfig >> "maxDose",getNumber (_defaultConfig >> "maxDose"));

if (_maxDose > 0) then {
private _currentDose = [_target, _className] call EFUNC(medical_status,getMedicationCount);
private _maxDoseDeviation = GET_NUMBER(_medicationConfig >> "maxDoseDeviation",getNumber (_defaultConfig >> "maxDoseDeviation"));
private _currentDose = [_target, _className] call EFUNC(medical_status,getMedicationCount) select 0;
// Because both {floor random 0} and {floor random 1} return 0
if (_maxDoseDeviation > 0) then {
_maxDoseDeviation = _maxDoseDeviation + 1;
};

if (_currentDose > _maxDose + (floor random _maxDoseDeviation)) then {
private _limit = _maxDose + (floor random _maxDoseDeviation);
if (_currentDose > _limit) then {
TRACE_1("exceeded max dose",_currentDose);
_overdosedMedications pushBackUnique _className;
[_target, _classname, _currentDose, _limit, _classname] call FUNC(overDose);
};
};

// Check incompatible medication (format [med,limit])
{
_x params ["_xMed", "_xLimit"];
private _inSystem = [_target, _xMed] call EFUNC(medical_status,getMedicationCount);
if (_inSystem> _xLimit) then {
_overdosedMedications pushBackUnique _xMed;
private _inSystem = ([_target, _xMed] call EFUNC(medical_status,getMedicationCount)) select 0;
if (_inSystem > _xLimit) then {
[_target, _classname, _inSystem, _xLimit, _xMed] call FUNC(overDose);
};
} forEach _incompatibleMedication;

if (_overdosedMedications isNotEqualTo []) then {
private _medicationConfig = (configFile >> "ace_medical_treatment" >> "Medication");
private _onOverDose = getText (_medicationConfig >> "onOverDose");
if (isClass (_medicationConfig >> _className)) then {
_medicationConfig = (_medicationConfig >> _className);
if (isText (_medicationConfig >> "onOverDose")) then { _onOverDose = getText (_medicationConfig >> "onOverDose"); };
};
TRACE_2("overdose",_overdosedMedications,_onOverDose);
if (_onOverDose == "") exitWith {
TRACE_1("CriticalVitals Event",_target); // make unconscious
[QEGVAR(medical,CriticalVitals), _target] call CBA_fnc_localEvent;
};
if (isNil _onOverDose) then {
_onOverDose = compile _onOverDose;
} else {
_onOverDose = missionNamespace getVariable _onOverDose;
};
[_target, _className, _overdosedMedications] call _onOverDose;
};
48 changes: 48 additions & 0 deletions addons/medical_treatment/functions/fnc_overDose.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include "..\script_component.hpp"
/*
* Author: Cplhardcore
* Handles the overdose effects of a medication.
*
* Arguments:
* 0: Patient <OBJECT>
* 1: Medication classname <STRING>
* 2: Medication dosage <NUMBER>
* 3: Overdose threshold <NUMBER>
* 4: Incompatible medication that caused overdose (can be the medication itself) <STRING> (default: "")
*
* Return Value:
* None
*
* Example:
* [player, "morphine", 5, 3, "morphine"] call ace_medical_treatment_fnc_overDose
*
* Public: No
*/

params ["_unit", "_classname", "_dose", "_limit", "_incompatibleMed"];

private _medicationConfig = configFile >> QUOTE(ADDON) >> "Medication";
private _onOverDose = getText (_medicationConfig >> "onOverDose");

if (isClass _medicationConfig) then {
_medicationConfig = _medicationConfig >> _classname;
if (isText (_medicationConfig >> "onOverDose")) then {
_onOverDose = getText (_medicationConfig >> "onOverDose");
};
};
TRACE_2("overdose",_classname,_onOverDose);

[QEGVAR(medical,overdose), [_unit, _classname, _dose, _limit, _incompatibleMed]] call CBA_fnc_localEvent;

if (_onOverDose == "") exitWith {
TRACE_1("CriticalVitals Event",_unit);
[QEGVAR(medical,CriticalVitals), _unit] call CBA_fnc_localEvent;
};

_onOverDose = if (missionNamespace isNil _onOverDose) then {
compile _onOverDose
} else {
missionNamespace getVariable _onOverDose
};

[_unit, _classname, _dose, _limit, _incompatibleMed] call _onOverDose
1 change: 1 addition & 0 deletions docs/wiki/framework/events-framework.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ The vehicle events will also have the following local variables available `_gunn
|`ace_treatmentFailed` | [_caller, _target, _selectionName, _className, _itemUser, _usedItem, _createLitter] | Local | Listen | Treatment action has been interrupted (local on the _caller) |
|`ace_medical_handleUnitVitals` | [_unit, _deltaT] | Local | Listen | Vitals update ran for unit, _deltaT is the time elapsed since the previous vitals update (local to _unit) |
|`ace_medical_treatment_bandaged` | [_medic, _patient, _bodyPart, _className, _itemUser, _usedItem, _createLitter, _bandageEffectiveness] | Local | Listen | _medic has bandaged _patient, the array can be modified to change treatment parameters (local to _medic) |
|`ace_medical_overdose` | [_unit, _medication, _medicationDose, _overdoseThreshold, _incompatibleMed] | Local | Listen | _unit has overdosed on _medication by _overdoseThreshold - _medicationDose, overdoseThreshold was determined by _incompatibleMed (can be _medication itself or mixed incompatible medication) |

### 2.3 Interaction Menu (`ace_interact_menu`)
MenuType: 0 = Interaction, 1 = Self Interaction
Expand Down

0 comments on commit e31aba5

Please sign in to comment.