---
# System prepended metadata

title: Medical Injury Log

---

# Medical Injury Log



| Proc | Results |
| -------- | -------- |
| ~~apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE)~~     | 231     |
|apply_damage_type(damage = 0, damagetype = BRUTE) //like apply damage except it always uses the damage procs|12|
|~~get_damage_amount(damagetype = BRUTE)~~|1|
|~~apply_damages(brute = 0, burn = 0, tox = 0, oxy = 0, clone = 0, def_zone = null, blocked = FALSE, stamina = 0, brain = 0)~~|1|
|getBruteLoss|109|
|adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_status)|317|
|getFireLoss()|96|
|adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)|192|
|getCloneLoss()|38|
|adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE)|48|
|setCloneLoss(amount, updating_health = TRUE, forced = FALSE)|12|
|heal_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status)|35|
|take_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status, check_armor = FALSE)|39|
|heal_overall_damage(brute = 0, burn = 0, stamina = 0, required_status, updating_health = TRUE)|32|
|take_overall_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status = null)|35|
|heal_ordered_damage(amount, list/damage_types)|6|

## Concept

All damage should be done through a bodypart wrapper.

## Interface

```csharp=
enum InjurySeverity
{
    INJURY_MINOR = 0,
    INJURY_MAJOR = 1,
    INJURY_CRITICAL = 2
}
```

```csharp=
/**
 * Adds a specified injury to the provided zone with a given amount.
 * This proc will run armour checks.
 */
void AddBodypartInjury(
    //The zone to apply the injury to
    DefZone zone,
    //The type of the injury being applied
    Type injuryType,
    //The amount of damage to give to the injury
    float damageAmount,
    //The severity level of the injry
    InjurySeverity severity,
    //The armour penetration value of the attack
    float armourPenetration,
);

bool HealBodypartInjury(
    //The zone to heal the injury
    DefZone zone,
    //The injury type to heal
    Type injuryType,
    //The amount of damage to heal
    float healAmount,
    //The maximum severity to heal
    InjurySeverity healSeverity,
    //Does this stack to other injuries or only affect a single one.
    bool healMultiple = false,
);

void AddOverallInjury(
    //The type of injury to apply
    Type injuryType,
    //The damage of the injury to apply
    float damageAmount,
    //The severity level of the injury
    InjurySeverity severity,
    //The armour penetration value of the damage
    float armourPenetration,
);

void HealOverallInjury(
    //The type of injury to apply
    Type injuryType,
    //The amount of damage to heal
    float healAmount,
    //The severity level to heal
    InjurySeverity severity,
    //Does this stack to other injuries or only affect a single one.
    bool healMultiple = false,
);
```

```csharp=
interface IInjury
{
    
    //Can the injury stack to other ones?
    bool CanStack { get; }
    
    //The severity of the injury
    InjurySeverity SeverityLevel { get; }
    
    //The actual physical damage applied
    float Damage { get; }
    
    //Amount of 'scar' damage
    //Doesn't actually damage the mob, but can count towards
    //increasing severity level of incoming injuries.
    float ScarAmount { get; }
    
    //Add extra damage to this injury
    void AddDamage(float amount);
    
    //Heals some amount of damage from this injury
    void HealDamage(float amount);
    
}
```


D.add_bodypart_injury(BODY_ZONE_CHEST, I.injury_type, 10, INJURY_SEVERITY_MINOR, 10)

D.add_bodypart_injury(A.zone_selected, A.dna.species.attack_type, 20, INJURY_SEVERITY_MINOR, 20)

D.add_bodypart_injury(A.zone_selected, /datum/injury/brute/blunt, 5, INJURY_SEVERITY_MINOR, 0)

damtype\s*=
/datum/injury/burn
/datum/injury/brute
/datum/injury/brute/blunt
/datum/injury/brute/sharp

TODO:
 - [ ] Refactor the use of ispath with injuries (This is bad OOP design)
 - [ ] Refactor injury type being TOX or STAMINA - mixing types is bad
 - [ ] Add /datum/injury/clone
 - [ ] Add in type getters for injuries
 - [ ] Add in VV support for editting injury damage
 - [ ] Species attack_type
 - [ ] Add in damage stacking
 - [ ] projectile.damage_type
 - [ ] /datum/species/proc/apply_damage
 - [ ] /mob/living/simple_animal.melee_damage_type
 - [ ] Check all cases of affecting and make sure they are zones, not limbs
 - [ ] /mob/living/simple_animal/proc/attack_threshold_check
 - [ ] Check BACONTODOs

Armour refactoring
 - Armour is now between 0 and 200
 - Armour penetration is between 0 and 100
 - Effective armour = armour - armour_penetration

Armour Penetration Guide:
0 - Unarmed damage
1 - 30: Low / non penetrating damage
31 - 50: Good penetrating items
51 - 70: Very good penetrating items
71 - 100: Absurdly good penetration
200: Ignores armour entirely

0 - Punches
10 - Bites
20 - Toolbox / Most blunt things
30 - Slams into objects
40 - Basic knives
50 - Xeno Claws
70 - Captain's saber
85 - Energy sword
90 - Katana

30 - Lasers
40 - Low velocity rounds (Pistols / Shotguns)
60 - Medium velocity rounds (SMGs / Rifles)
80 - High velocity rounds (Sniper Rifles)

0 - Environmental damage (Heat)

## Log

 - Replaced all instances of var/damtype with var/injury type
 - Removed IS_SHARP_ACCURATE

//MASS CONVERTED
