Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Medical - Add medication dosage support & improve overdose #10393

Open
wants to merge 58 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 55 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
28a1aa4
Initial Commit
Cplhardcore Oct 11, 2024
e8551a1
Small fix to get all medications
Cplhardcore Oct 11, 2024
d8f0781
Update launch.toml
Cplhardcore Oct 11, 2024
c3af223
Small fix and removal of medication dose variables
Cplhardcore Oct 11, 2024
d6de590
Deleted old entries from stringtable
Cplhardcore Oct 11, 2024
42e2097
Update addons/medical_treatment/script_component.hpp
Cplhardcore Oct 11, 2024
e22e06b
Fixed newline
Cplhardcore Oct 11, 2024
eaf2e3f
Merge branch 'Overdose-Rework' of https://github.com/Cplhardcore/ACE3…
Cplhardcore Oct 11, 2024
fff711a
Changes for backwards compatibility
Cplhardcore Oct 11, 2024
70f8f0d
Update addons/medical_status/functions/fnc_addMedicationAdjustment.sqf
Cplhardcore Oct 12, 2024
8c5716b
Update addons/medical_status/functions/fnc_getAllMedicationCount.sqf
Cplhardcore Oct 12, 2024
684d8ec
Update addons/medical_status/functions/fnc_getAllMedicationCount.sqf
Cplhardcore Oct 12, 2024
2e22795
Fixes, maybe?
Cplhardcore Oct 12, 2024
40abd2a
Overdose fixes
Cplhardcore Oct 12, 2024
7c895ba
trailling comma
LinkIsGrim Oct 12, 2024
768f9ab
Update addons/medical_vitals/functions/fnc_handleUnitVitals.sqf
LinkIsGrim Oct 12, 2024
8216db1
aa
Cplhardcore Oct 13, 2024
b5c3c5d
there we go
Cplhardcore Oct 13, 2024
8443181
Update addons/medical_treatment/functions/fnc_onMedicationUsage.sqf
Cplhardcore Oct 13, 2024
9abb145
Update addons/medical_treatment/functions/fnc_onMedicationUsage.sqf
Cplhardcore Oct 13, 2024
01504ea
Update XEH_PREP.hpp
Cplhardcore Oct 13, 2024
eaa8702
Merge branch 'Overdose-Rework' of https://github.com/Cplhardcore/ACE3…
Cplhardcore Oct 13, 2024
2ab49a4
Update addons/medical_status/functions/fnc_getAllMedicationCount.sqf
Cplhardcore Oct 13, 2024
594d02b
Grim Misc Fixes
Cplhardcore Oct 13, 2024
194bf50
Merge branch 'Overdose-Rework' of https://github.com/Cplhardcore/ACE3…
Cplhardcore Oct 13, 2024
8e916cd
Remove debug
Cplhardcore Oct 13, 2024
d0a14d8
Small fixes
Cplhardcore Oct 13, 2024
5283456
newline
LinkIsGrim Oct 19, 2024
383a87b
headers
LinkIsGrim Oct 19, 2024
90dbb85
code cleanup
LinkIsGrim Oct 19, 2024
522a496
more headers
LinkIsGrim Oct 19, 2024
a5b6522
drop unneeded _dose
LinkIsGrim Oct 19, 2024
7703596
last header
LinkIsGrim Oct 19, 2024
7e1e45f
fix getting overdose func/code
LinkIsGrim Oct 19, 2024
85a5105
whitespace
LinkIsGrim Oct 19, 2024
31afab7
now the last header
LinkIsGrim Oct 19, 2024
b6d1635
Update addons/medical_treatment/functions/fnc_overDose.sqf
Cplhardcore Oct 19, 2024
cc0f116
fix compiling nil
LinkIsGrim Oct 20, 2024
0898ae9
Update addons/medical_status/functions/fnc_addMedicationAdjustment.sqf
Cplhardcore Oct 23, 2024
8453797
Fixes
Cplhardcore Oct 23, 2024
47c155f
Update addons/medical_treatment/functions/fnc_overDose.sqf
Cplhardcore Oct 23, 2024
b653251
Update fnc_overDose.sqf
Cplhardcore Oct 23, 2024
d0e5ab4
Update addons/medical_status/functions/fnc_addMedicationAdjustment.sqf
Cplhardcore Oct 24, 2024
6f1a5d9
Update addons/medical_treatment/functions/fnc_overDose.sqf
Cplhardcore Oct 24, 2024
e21c4b9
Update addons/medical_treatment/functions/fnc_onMedicationUsage.sqf
Cplhardcore Oct 24, 2024
abe46c4
Update addons/medical_status/functions/fnc_addMedicationAdjustment.sqf
Cplhardcore Oct 24, 2024
fd78fd7
Update addons/medical_status/functions/fnc_getMedicationCount.sqf
Cplhardcore Oct 24, 2024
d951f22
Fixes
Cplhardcore Oct 24, 2024
91a36ae
Moving med settings to different PR
Cplhardcore Oct 24, 2024
5ff69a7
oopps
Cplhardcore Oct 24, 2024
f692271
Stringtable
Cplhardcore Oct 24, 2024
876485d
Misc fixes & cleanup
johnb432 Oct 24, 2024
bb3da04
Update fnc_onMedicationUsage.sqf
johnb432 Oct 24, 2024
4cfbc8a
Fix nonsensical code
johnb432 Oct 24, 2024
7f2fa8a
add API event and doc
LinkIsGrim Oct 25, 2024
ec44aab
Misc fixes
Cplhardcore Oct 26, 2024
de9ac5d
Update ACE_Medical_Treatment.hpp
johnb432 Oct 26, 2024
dd81004
Update watchVariable.sqf
johnb432 Oct 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Cplhardcore marked this conversation as resolved.
Show resolved Hide resolved
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
4 changes: 4 additions & 0 deletions addons/medical_treatment/ACE_Medical_Treatment.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,7 @@ class ADDON {
timeInSystem = 1800;
timeTillMaxEffect = 30;
maxDose = 4;
dose = 1;
incompatibleMedication[] = {};
viscosityChange = -10;
};
Expand All @@ -595,6 +596,7 @@ class ADDON {
timeInSystem = 120;
timeTillMaxEffect = 10;
maxDose = 9;
dose = 1;
incompatibleMedication[] = {};
};
class Adenosine {
Expand All @@ -605,6 +607,7 @@ class ADDON {
timeInSystem = 120;
timeTillMaxEffect = 15;
maxDose = 5;
dose = 1;
incompatibleMedication[] = {};
};
class PainKillers {
Expand All @@ -615,6 +618,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);
52 changes: 17 additions & 35 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"];
johnb432 marked this conversation as resolved.
Show resolved Hide resolved
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 1;
// 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);
johnb432 marked this conversation as resolved.
Show resolved Hide resolved
if (_inSystem> _xLimit) then {
_overdosedMedications pushBackUnique _xMed;
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");
Cplhardcore marked this conversation as resolved.
Show resolved Hide resolved
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
Cplhardcore marked this conversation as resolved.
Show resolved Hide resolved
*/

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);
LinkIsGrim marked this conversation as resolved.
Show resolved Hide resolved

[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;
};
LinkIsGrim marked this conversation as resolved.
Show resolved Hide resolved

_onOverDose = if (missionNamespace isNil _onOverDose) then {
johnb432 marked this conversation as resolved.
Show resolved Hide resolved
compile _onOverDose
} else {
missionNamespace getVariable _onOverDose
};
LinkIsGrim marked this conversation as resolved.
Show resolved Hide resolved

[_unit, _classname, _dose, _limit, _incompatibleMed] call _onOverDose
johnb432 marked this conversation as resolved.
Show resolved Hide resolved
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