# 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