# 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