Skip to content

Medical

ACE Medical overhauls the medical system with the aim to make it more engaging for medics. It is highly configurable, allowing communities to tailor the experience from casual to realistic. ACE Medical is split into multiple mods for increased modularity:

ACE Medical Core provides the backbone for all medical mods and comes with the following features:

  • Second Chance: Increases survivability by ensuring that players fall unconscious instead of getting killed outright.
  • Pain: Injuries cause pain screen effects and can be treated with morphine
  • Medication:
    • Changed: Morphine can only be used for treating pain and has no longer healing effects
    • Added: Epinephrine for speeding up wake-up of unconscious patients
  • Repositioning: Allows putting patients on their back or in recovery position
  • Medical radial menu for putting medical items to hand
  • Additional settings for configuring medical kits, bleedings, etc.

Resilience is a health pool from vanilla with 100 HP that is closely linked to consciousness. It takes indirectly damage passed from body parts and armor. A player falls unconscious when HP < 33 and wakes up when HP > 75. HP is either recovered through passive regeneration or with epinephrine. The passive recovery rate is +5 HP/s and can be scaled with m_fDefaultResilienceRegenScale respective m_fSecondChanceResilienceRegenScale (see Settings). Note that passive recovery only starts when no damage was taken for 10 seconds.

Second chance gets evaluated when a player would have been killed in vanilla without falling unconscious first. If granted, the player will survive, but falls unconscious with a distinct recovery rate (see m_fSecondChanceResilienceRegenScale in Settings). Depending on the settings, epinephrine is mandatory to wake up patients that got second chance granted. The evaluation of second chance is probabilistic and can be configured per body part.

While a vanilla feature, newcomers might not be aware that it can be put in hand for healing body parts of patients. Depending on the settings, healing requires supplies and full healing can only be done near ambulances and medical facilities. Unlike vanilla, it is the only way to actively heal body parts. It is therefore crucial for treating arm and leg injuries, which can make aiming and walking difficult otherwise. Depending on the settings, it may also be required to heal up players before being able to apply epinephrine.

Below is a proposed activity diagram for treating patients:

core-treatment-1.puml core-treatment-1.puml core-treatment-2.puml core-treatment-2.puml
  • Unconscious patients have a user interaction on their abdomen for changing to back or recovery position.
  • Open medical radial menu with Ctrl+H (ACE default)

Summary of settings that can be modified in the server config:

FieldValueDescription
m_fDefaultResilienceRegenScaleType: float**
Range: 0 to ∞
Default: 0.3
Default resilience regeneration scale. The default regeneration rate (5 HP/s) will be multiplied by this factor.
m_fMinHealthScaledForEpinephrineType: float**
Range: 0 to 1
Default: 0.33
Can only apply epinephrine when patient has at least this health (ignored in advanced medication).
m_bBleedOutForPlayersEnabledType: bool*
Default: true
Whether players can bleed out
m_fBleedingRateScaleType: float**
Default: 1.0
Character bleeding rate multiplier
m_fMaxTotalBleedingRateType: float**
Default: -1.0
Maximum possibe bleeding rate in ml/s (Negative value means unlimited)
m_fBloodRegenScaleType: float**
Default: 1.0
Character blood regeneration rate multiplier
m_bHealSupplyUsageEnabledType: bool*
Default: true
Healing consumes supplies when enabled. Ignored when global supply usage is disabled.
m_fMedicalKitMaxHealScaledType: float**
Range: 0 to 1
Default: 0.5
Maximum scaled health (from 0 to 1) that a medical kit can heal to outside of medical facilities
m_ePainScreenEffectTypeType: int***
Default: WHITE_FLASH
Options:
0 (NONE)
1 (WHITE_FLASH)
2 (GREY_FLASH)
3 (CHROMATIC_ABERRATION)
4 (RADIAL_BLUR)
What kind of pain screen effect is used
m_fSecondChanceResilienceRegenScaleType: float**
Range: 0 to ∞
Default: 0.0
Resilience regeneration scale when second chance was triggered. The default regeneration rate will be multiplied by this factor.
m_fDefaultSecondChanceType: float**
Range: 0 to 1
Default: 1.0
Default probability for second chance for killing blows
m_fSecondChanceOnHeadType: float**
Range: 0 to 1
Default: 0.0
Probability for second chance for killing blows to the head
m_fSecondChanceOnChestType: float**
Range: 0 to 1
Default: 1.0
Probability for second chance for killing blows to the chest
m_fSecondChanceOnAbdomenType: float**
Range: 0 to 1
Default: 1.0
Probability for second chance for killing blows to the abdomen
m_bSecondChanceForFallDamageEnabledType: bool*
Default: false
Whether second chance can be triggered when falling from great heights
m_bSecondChanceForAIEnabledType: bool*
Default: false
Whether AI can have second chance

* bool has to be provided as integer in the config: 1 (true) or 0 (false).
** float need a decimal point to get properly read.
*** Note that enums have to be provided as integers.


Template for the missionHeader in a server config:

"missionHeader": {
"m_ACE_Settings": {
"m_ACE_Medical_Core": {
"m_fDefaultResilienceRegenScale": 0.3,
"m_fMinHealthScaledForEpinephrine": 0.33,
"m_bBleedOutForPlayersEnabled": 1,
"m_fBleedingRateScale": 1.0,
"m_fMaxTotalBleedingRate": -1.0,
"m_fBloodRegenScale": 1.0,
"m_bHealSupplyUsageEnabled": 1,
"m_fMedicalKitMaxHealScaled": 0.5,
"m_ePainScreenEffectType": 1,
"m_fSecondChanceResilienceRegenScale": 0.0,
"m_fDefaultSecondChance": 1.0,
"m_fSecondChanceOnHead": 0.0,
"m_fSecondChanceOnChest": 1.0,
"m_fSecondChanceOnAbdomen": 1.0,
"m_bSecondChanceForFallDamageEnabled": 0,
"m_bSecondChanceForAIEnabled": 0
}
}
}
organic-hit-zones.png

ACE Medical Hitzones overhauls hit zones and has the following features:

  • Organ Hit Zones: New hit zones that can only be hit with melee and projectiles:
    • Heart: Evaluated for second chance
    • Femoral arteries: Cause massive bleedings
  • Removes global health in favor of evaluating second chance on destruction of vital body parts (head and torso)
  • Improves bleeding effect of massive bleedings

In vanilla, there is a global health pool that takes damage passed from body parts. If HP of this health pool drops to 0, second chance gets evaluated. ACE Medical Hitzones gets completely rid of this health pool and evaluates second chance instead when HP of a vital body part drops to 0.

Summary of settings that can be modified in the server config:

FieldValueDescription
m_bOrganHitZonesEnabledType: bool*
Default: true
Whether organ hit zones should be enabled
m_fSecondChanceOnHeartType: float**
Range: 0 to 1
Default: 0.0
Probability for second chance for killing blows to the heart

Template for the missionHeader in a server config:

"missionHeader": {
"m_ACE_Settings": {
"m_ACE_Medical_Hitzones": {
"m_bOrganHitZonesEnabled": 1,
"m_fSecondChanceOnHeart": 0.0
}
}
}

ACE Medical Circulation adds the following features:

  • Vitals:
    • Simulation of heart rate and blood pressure
    • Cardiac arrest state and CPR for revival
  • Medication:
    • Removes all “training wheels”, i.e. drugs can always be administered and overdosed
    • Exchanges epinephrine with ammonium carbonate. Epinephrine has now a different role.
    • New types of drugs
    • Advanced simulation of drug effects and their evolution over time
  • Second chance:
    • When second chance is granted, the patient goes into cardiac arrest
  • Hit Zones:
    • New brain hit zone that takes continuously damage while in cardiac arrest and no CPR is performed. Runs out of health in approximately 5 minutes.

The changes are also applied to AI, but they will directly die when they enter cardiac arrest (see m_bCardiacArrestForAIEnabled in Settings).

  • BP: Blood pressure
  • HR: Heart rate
  • OD: Overdose
  • tmax: Time until maximum effect
  • t½: Time until effect diminishes to 50% of maximum effect (relative to administration time, not tmax)
  • TD50: Number of doses at which 50% of patients fall unconscious
  • LD50: Number of doses at which 50% of patients experience cardiac arrest

All currently available forms of medications are summarized in the table below:

NameEffectstmaxt½TD50LD50
Ammonium carbonate package
  • Wakes up stable unconscious patients
2-3 s3-4 s------
Epinephrine injector
  • Increases revive chance
  • Increases HR
  • Increases BP
23 s1 min 3 s---4.4
Metoprolol injector
  • Decreases HR
  • Decreases BP
25 s1 min 9 s2.8> 3
Morphine injector
  • Suppresses pain
  • Decreases HR
  • Decreases BP
1 min 57 s15 min 20 s3.13.8
Naloxone injector
  • Treats morphine OD
1 min 35 s7 min 26 s------
Phenylephrine injector
  • Slows down bleeding and transfusion
  • Increases BP
29 s1 min 18 s---2.9

Blood volumes are categorized into six classes:

  • Normal
  • Class I hemorrhage (lost < 30%)
  • Class II hemorrhage (lost 30%)
  • Class III hemorrhage (lost 60%)
  • Class IV hemorrhage (lost 80%)
  • Fatal (lost 100%)

The values of the vitals (e.g. HR and BP) are essential for getting a patient back up. While in cardiac arrest, only CPR may get the patient back up, but the success chance can be increased with epinephrine. A patient falls unconscious if either their resilience falls below 34/100 or their vital state is at least critical. Resilience will automatically recover if the vitals are stable, but can be speeded up with ammonium carbonate (i.e. like epinephrine in ACE Medical). Ammonium carbonate has no effect as long as the vitals aren’t stable.

StateHR [BPM]BP [mmHg]Hemorrhage class
Cardiac arrest> 220> 284/189---
Stable40 - 22069/46 - 284/189< II
Unstable< 40< 69/46II
Critical< 30< 51/34III
Cardiac arrest< 20< 51/34*IV

* BP below 51/34 mmHg only leads to cardiac arrest if the heart rate is at least critical (i.e. < 30 BPM).

Below is a proposed activity diagram for treating patients, which supersedes the one from ACE Medical Core:

circulation-treatment-1.puml circulation-treatment-1.puml

Summary of settings that can be modified in the server config:

FieldValueDescription
m_fDefaultHeartRateBPMType: float**
Range: 0 to ∞
Default: 80.0
Default heart rate [bpm]
m_fDefaultStrokeVolumeMLType: float**
Range: 0 to ∞
Default: 95.0
Default stroke volume [ml]
m_fDefaultMeanArterialPressureKPAType: float**
Range: 0 to ∞
Default: 12.443
Default mean arterial pressure [kPa]
m_fDefaultPulsePressureKPAType: float**
Range: 0 to ∞
Default: 5.3329
Default pulse pressure [kPa]
m_UnstableThresholdsType: objectThresholds that lead to unstable vital state
m_CriticalThresholdsType: objectThresholds that lead to critical vital state
m_CardiacArrestThresholdsType: objectThresholds that lead to cardiac arrest state
m_CardiacArrestDamageEffectType: objectDamage effects caused by cardiac arrest
m_bCardiacArrestForAIEnabledType: bool*
Default: false
AI will die instead of entering cardiac arrest if false
m_fCPRSuccessCheckTimeoutSType: float**
Range: 0 to ∞
Default: 22.0
Default delay between check for successful CPR [s]
m_fCPRSuccessChanceMinType: float**
Range: 0 to 1
Default: 0.0
Chance for exiting cardiac arrest while performing CPR at class IV hemorrhage
m_fCPRSuccessChanceMaxType: float**
Range: 0 to 1
Default: 0.4
Chance for exiting cardiac arrest while performing CPR at above class II hemorrhage
m_fAmmoniumCarbonateSuccessChanceMinType: float**
Range: 0 to 1
Default: 0.2
Chance for waking up from ammonium carbonate when resilience recovery scale is close to 0
m_fAmmoniumCarbonateSuccessChanceMaxType: float**
Range: 0 to 1
Default: 1.0
Chance for waking up from ammonium carbonate when resilience recovery scale is at m_fMaxRevivalResilienceRecoveryScale or above
m_fMaxRevivalResilienceRecoveryScaleType: float**
Range: 0 to ∞
Default: 0.2
Maximum resilience recovery scale applied after getting revived. This scale gets multiplied by the scaled health of the brain and will be removed once the patient becomes conscious
m_fCardiacArrestMaxTotalBleedingRateType: float**
Range: 0 to ∞
Default: 20.0
Maximum total bleeding rate at cardiac arrest due to gravity [ml/s]

FieldValueDescription
m_fHeartRateLowBPMType: float**
Range: 0 to ∞
Default: 40.0
A heart rate below this will trigger a transition to this state [BPM]
m_fHeartRateHighBPMType: float**
Range: 0 to ∞
Default: 220.0
A heart rate above this will trigger a transition to this state [BPM]
m_fMeanArterialPressureLowKPAType: float**
Range: 0 to ∞
Default: 7.11
A mean arterial pressure below this will trigger a transition to this state [kPa]
m_fMeanArterialPressureHighKPAType: float**
Range: 0 to ∞
Default: 29.5
A mean arterial pressure above this will trigger a transition to this state [kPa]
m_fMaxHeartForMeanArterialPressureLowBPMType: float**
Range: 0 to ∞
Default: 80.0
Maximum heart rate for trigger due to low mean arterial pressure [bpm]
m_eBloodStateType: int****
Range: 0 to ∞
Default: CLASS_2_HEMORRHAGE
Blood volume at this level will trigger a transition to this state

**** Note that blood states have to be provided as integers in the config: 0 (NORMAL), 1 (CLASS_1_HEMORRHAGE), 2 (FATAL), 3 (CLASS_2_HEMORRHAGE), 4 (CLASS_3_HEMORRHAGE) or 5 (CLASS_4_HEMORRHAGE).

FieldValueDescription
m_fHeartRateLowBPMType: float**
Range: 0 to ∞
Default: 30.0
A heart rate below this will trigger a transition to this state [BPM]
m_fHeartRateHighBPMType: float**
Range: 0 to ∞
Default: 220.0
A heart rate above this will trigger a transition to this state [BPM]
m_fMeanArterialPressureLowKPAType: float**
Range: 0 to ∞
Default: 5.21
A mean arterial pressure below this will trigger a transition to this state [kPa]
m_fMeanArterialPressureHighKPAType: float**
Range: 0 to ∞
Default: 29.5
A mean arterial pressure above this will trigger a transition to this state [kPa]
m_fMaxHeartForMeanArterialPressureLowBPMType: float**
Range: 0 to ∞
Default: 40.0
Maximum heart rate for trigger due to low mean arterial pressure [bpm]
m_eBloodStateType: int****
Range: 0 to ∞
Default: CLASS_3_HEMORRHAGE
Blood volume at this level will trigger a transition to this state
FieldValueDescription
m_fHeartRateLowBPMType: float**
Range: 0 to ∞
Default: 20.0
A heart rate below this will trigger a transition to this state [BPM]
m_fHeartRateHighBPMType: float**
Range: 0 to ∞
Default: 220.0
A heart rate above this will trigger a transition to this state [BPM]
m_fMeanArterialPressureLowKPAType: float**
Range: 0 to ∞
Default: 5.21
A mean arterial pressure below this will trigger a transition to this state [kPa]
m_fMeanArterialPressureHighKPAType: float**
Range: 0 to ∞
Default: 29.5
A mean arterial pressure above this will trigger a transition to this state [kPa]
m_fMaxHeartForMeanArterialPressureLowBPMType: float**
Range: 0 to ∞
Default: 30.0
Maximum heart rate for trigger due to low mean arterial pressure [bpm]
m_eBloodStateType: int****
Range: 0 to ∞
Default: CLASS_4_HEMORRHAGE
Blood volume at this level will trigger a transition to this state
FieldValueDescription
m_fBrainDamageRateType: float**
Range: 0 to ∞
Default: 0.333
Damage the brain takes per second
m_fEffectStartDelaySType: float**
Range: 0 to ∞
Default: 10.0
Delay in seconds before the effect starts [s]

Template for the missionHeader in a server config:

"missionHeader": {
"m_ACE_Settings": {
"m_ACE_Medical_Circulation": {
"m_fDefaultHeartRateBPM": 80.0,
"m_fDefaultStrokeVolumeML": 95.0,
"m_fDefaultMeanArterialPressureKPA": 12.443,
"m_fDefaultPulsePressureKPA": 5.3329,
"m_UnstableThresholds": {
"m_fHeartRateLowBPM": 40.0,
"m_fHeartRateHighBPM": 220.0,
"m_fMeanArterialPressureLowKPA": 7.11,
"m_fMeanArterialPressureHighKPA": 29.5,
"m_fMaxHeartForMeanArterialPressureLowBPM": 80.0,
"m_eBloodState": 3
},
"m_CriticalThresholds": {
"m_fHeartRateLowBPM": 30.0,
"m_fHeartRateHighBPM": 220.0,
"m_fMeanArterialPressureLowKPA": 5.21,
"m_fMeanArterialPressureHighKPA": 29.5,
"m_fMaxHeartForMeanArterialPressureLowBPM": 40.0,
"m_eBloodState": 4
},
"m_CardiacArrestThresholds": {
"m_fHeartRateLowBPM": 20.0,
"m_fHeartRateHighBPM": 220.0,
"m_fMeanArterialPressureLowKPA": 5.21,
"m_fMeanArterialPressureHighKPA": 29.5,
"m_fMaxHeartForMeanArterialPressureLowBPM": 30.0,
"m_eBloodState": 5
},
"m_CardiacArrestDamageEffect": {
"m_fBrainDamageRate": 0.333,
"m_fEffectStartDelayS": 10.0
},
"m_bCardiacArrestForAIEnabled": 0,
"m_fCPRSuccessCheckTimeoutS": 22.0,
"m_fCPRSuccessChanceMin": 0.0,
"m_fCPRSuccessChanceMax": 0.4,
"m_fAmmoniumCarbonateSuccessChanceMin": 0.2,
"m_fAmmoniumCarbonateSuccessChanceMax": 1.0,
"m_fMaxRevivalResilienceRecoveryScale": 0.2,
"m_fCardiacArrestMaxTotalBleedingRate": 20.0
}
}
}

TBD

TBD

TBD

Below is a proposed activity diagram for treating patients, which supersedes the one from ACE Medical Circulation:

breathing-treatment-1.puml breathing-treatment-1.puml