diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 3a3c2292807..04f398c519a 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -82,7 +82,7 @@ SPAN_DANGER("You chew on your [O.name]!") ) admin_attacker_log(src, "chewed on their [O.name]!") - O.take_external_damage(3,0, DAM_SHARP|DAM_EDGE ,"teeth marks") + O.take_damage(3, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = "teeth marks") next_restraint_chew = world.time + (2.5 SECONDS) return TRUE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index a9fc6994d81..bac188e9ee3 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -790,7 +790,7 @@ M.take_damage(damage) else to_chat(M, SPAN_DANGER("You land heavily on your [affecting.name]!")) - affecting.take_external_damage(damage, 0) + affecting.take_damage(damage) if(affecting.parent) affecting.parent.add_autopsy_data("Misadventure", damage) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 918c145cce6..73011d93026 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -543,7 +543,7 @@ var/burn_damage = rand(my_size, round(my_size * 1.5)) var/obj/item/organ/external/organ = check_organ && holder.get_organ(check_organ) if(istype(organ)) - organ.take_external_damage(0, burn_damage) + organ.take_damage(burn_damage, BURN) else holder.take_damage(burn_damage, BURN) if(held_slot in holder.get_held_item_slots()) diff --git a/code/game/objects/items/_item_damage.dm b/code/game/objects/items/_item_damage.dm index c9103026205..fcec66d0742 100644 --- a/code/game/objects/items/_item_damage.dm +++ b/code/game/objects/items/_item_damage.dm @@ -133,7 +133,7 @@ to_chat(M, SPAN_WARNING("You go blind!")) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, eyes.parent_organ) - affecting.take_external_damage(7) + affecting.take_damage(7) else M.take_organ_damage(7) SET_STATUS_MAX(M, STAT_BLURRY, rand(3,4)) diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 4150bd92532..52eb1d47f88 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -28,7 +28,7 @@ var/obj/item/organ/external/hand = GET_EXTERNAL_ORGAN(H, H.get_active_held_item_slot()) if(istype(hand) && !BP_IS_PROSTHETIC(hand)) to_chat(H, SPAN_DANGER("You slice your hand on \the [src]!")) - hand.take_external_damage(rand(5,10), used_weapon = src) + hand.take_damage(rand(5,10), inflicter = src) /obj/item/shard/set_material(var/new_material) ..(new_material) @@ -111,7 +111,7 @@ if(!affecting || BP_IS_PROSTHETIC(affecting)) continue to_chat(victim, SPAN_DANGER("You step on \the [src]!")) - affecting.take_external_damage(5, 0) + affecting.take_damage(5) if(affecting.can_feel_pain()) SET_STATUS_MAX(victim, STAT_WEAK, 3) return diff --git a/code/game/objects/structures/ironing_board.dm b/code/game/objects/structures/ironing_board.dm index 77bcb0ec064..dbbc798426a 100644 --- a/code/game/objects/structures/ironing_board.dm +++ b/code/game/objects/structures/ironing_board.dm @@ -94,7 +94,7 @@ visible_message("[user] irons [src.buckled_mob]'s [parsed]!", "You iron [buckled_mob]'s [parsed]!") var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, zone) - affecting.take_external_damage(0, 15, used_weapon = "Hot metal") + affecting.take_damage(15, BURN, inflicter = "Hot metal") return TRUE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index f759887ff62..f062f3b01c2 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -41,7 +41,7 @@ affecting = GET_EXTERNAL_ORGAN(H, type) SET_STATUS_MAX(H, STAT_STUN, 3) if(affecting) - affecting.take_external_damage(1, 0) + affecting.take_damage(1) else if(ismouse(target)) var/mob/living/simple_animal/passive/mouse/M = target diff --git a/code/modules/implants/implant.dm b/code/modules/implants/implant.dm index 1654b567aa2..2572ce81055 100644 --- a/code/modules/implants/implant.dm +++ b/code/modules/implants/implant.dm @@ -100,7 +100,7 @@ if(malfunction == MALFUNCTION_PERMANENT) return to_chat(imp_in, SPAN_DANGER("You feel something melting inside [part ? "your [part.name]" : "you"]!")) if (part) - part.take_external_damage(burn = 15, used_weapon = "Electronics meltdown") + part.take_damage(15, BURN, inflicter = "Electronics meltdown") else var/mob/living/M = imp_in M.apply_damage(15,BURN) diff --git a/code/modules/implants/implant_types/explosive.dm b/code/modules/implants/implant_types/explosive.dm index 44bd35c5236..e588e56009a 100644 --- a/code/modules/implants/implant_types/explosive.dm +++ b/code/modules/implants/implant_types/explosive.dm @@ -132,7 +132,7 @@ if (part) if (istype(part,/obj/item/organ/external/chest) || \ istype(part,/obj/item/organ/external/groin)) - part.take_external_damage(60, used_weapon = "Explosion") + part.take_damage(60, inflicter = "Explosion") else part.dismember(0,DISMEMBER_METHOD_BLUNT) explosion(T, -1, -1, 2, 3) diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm index d5965e1caa1..49d2673f2e3 100644 --- a/code/modules/materials/_materials.dm +++ b/code/modules/materials/_materials.dm @@ -877,10 +877,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/can_damage = I.max_damage - I.damage if(can_damage > 0) if(organ_damage > can_damage) - I.take_internal_damage(can_damage, silent=TRUE) + I.take_damage(can_damage, silent=TRUE) dam -= can_damage else - I.take_internal_damage(organ_damage, silent=TRUE) + I.take_damage(organ_damage, silent=TRUE) dam = 0 if(dam > 0) M.take_damage(toxicity_targets_organ ? (dam * 0.75) : dam, TOX) diff --git a/code/modules/mob/living/human/human.dm b/code/modules/mob/living/human/human.dm index 0ce40030e6c..34c51ac26b8 100644 --- a/code/modules/mob/living/human/human.dm +++ b/code/modules/mob/living/human/human.dm @@ -453,7 +453,7 @@ SPAN_DANGER("Your movement jostles [O] in your [organ.name] painfully."), \ SPAN_DANGER("Your movement jostles [O] in your [organ.name] painfully.")) custom_pain(msg,40,affecting = organ) - organ.take_external_damage(rand(1,3) + O.w_class, DAM_EDGE, 0) + organ.take_damage(rand(1,3) + O.w_class, damage_flags = DAM_EDGE) /mob/proc/set_bodytype(var/decl/bodytype/new_bodytype) return diff --git a/code/modules/mob/living/human/human_damage.dm b/code/modules/mob/living/human/human_damage.dm index 4bdd283926e..8ea8d6738e6 100644 --- a/code/modules/mob/living/human/human_damage.dm +++ b/code/modules/mob/living/human/human_damage.dm @@ -15,7 +15,7 @@ if(!(status_flags & GODMODE) && should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN) if(sponge) - sponge.take_internal_damage(amount) + sponge.take_damage(amount) ..() /mob/living/human/setBrainLoss(var/amount) @@ -213,10 +213,10 @@ else var/cap_dam = I.max_damage - I.damage if(amount >= cap_dam) - I.take_internal_damage(cap_dam, silent=TRUE) + I.take_damage(cap_dam, silent=TRUE) amount -= cap_dam else - I.take_internal_damage(amount, silent=TRUE) + I.take_damage(amount, silent=TRUE) amount = 0 if(do_update_health) @@ -272,9 +272,14 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t if(!length(parts)) return var/obj/item/organ/external/picked = pick(parts) - if(picked.take_external_damage(brute, burn, override_droplimb = override_droplimb)) + . = FALSE + if(brute && picked.take_damage(brute, override_droplimb = override_droplimb, do_update_health = FALSE)) + . = TRUE + if(burn && picked.take_damage(burn, BURN, override_droplimb = override_droplimb, do_update_health = FALSE)) + . = TRUE + if(.) + update_health() BITSET(hud_updateflag, HEALTH_HUD) - update_health() //Heal MANY external organs, in random order /mob/living/human/heal_overall_damage(var/brute, var/burn) @@ -381,15 +386,12 @@ This function restores all organs. var/datum/wound/created_wound damageoverlaytemp = 20 switch(damagetype) - if(BRUTE) - created_wound = organ.take_external_damage(damage, 0, damage_flags, used_weapon) - if(BURN) - created_wound = organ.take_external_damage(0, damage, damage_flags, used_weapon) + if(BRUTE, BURN) + created_wound = organ.take_damage(damage, damagetype, damage_flags = damage_flags, inflicter = used_weapon, do_update_health = FALSE) if(PAIN) organ.add_pain(damage) if(CLONE) organ.add_genetic_damage(damage) - // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). update_health() BITSET(hud_updateflag, HEALTH_HUD) diff --git a/code/modules/mob/living/human/human_verbs.dm b/code/modules/mob/living/human/human_verbs.dm index 6eb93377612..28664c4d232 100644 --- a/code/modules/mob/living/human/human_verbs.dm +++ b/code/modules/mob/living/human/human_verbs.dm @@ -311,7 +311,7 @@ "[self ? "You pop" : "[U] pops"] your [current_limb.joint] in the WRONG place!" \ ) current_limb.add_pain(30) - current_limb.take_external_damage(5) + current_limb.take_damage(5) shock_stage += 20 else visible_message( \ diff --git a/code/modules/mob/living/human/life.dm b/code/modules/mob/living/human/life.dm index b8de66f6575..769bc01d786 100644 --- a/code/modules/mob/living/human/life.dm +++ b/code/modules/mob/living/human/life.dm @@ -250,7 +250,7 @@ if(QDELETED(O) || !(O.owner == src)) continue if(O.damage + (LOW_PRESSURE_DAMAGE) < O.min_broken_damage) //vacuum does not break bones - O.take_external_damage(brute = LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") + O.take_damage(LOW_PRESSURE_DAMAGE, inflicter = "Low Pressure") if(getOxyLossPercent() < 55) // 11 OxyLoss per 4 ticks when wearing internals; unconsciousness in 16 ticks, roughly half a minute take_damage(4) // 16 OxyLoss per 4 ticks when no internals present; unconsciousness in 13 ticks, OXY, roughly twenty seconds SET_HUD_ALERT(src, HUD_PRESSURE, -2) diff --git a/code/modules/mob/living/human/unarmed_attack.dm b/code/modules/mob/living/human/unarmed_attack.dm index 3ae4dece2a1..41a7fc31155 100644 --- a/code/modules/mob/living/human/unarmed_attack.dm +++ b/code/modules/mob/living/human/unarmed_attack.dm @@ -148,7 +148,7 @@ var/obj/item/organ/internal/eyes = GET_INTERNAL_ORGAN(target, BP_EYES) var/decl/pronouns/pronouns = user.get_pronouns() if(eyes) - eyes.take_internal_damage(rand(3,4), 1) + eyes.take_damage(rand(3,4), 1) user.visible_message(SPAN_DANGER("\The [user] jams [pronouns.his] [eye_attack_text] into \the [target]'s [eyes.name]!")) if(eyes.can_feel_pain()) to_chat(target, SPAN_DANGER("You experience immense pain as [eye_attack_text_victim] are jammed into your [eyes.name]!")) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 44e8324fcc0..b8a045e4275 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1665,7 +1665,7 @@ default behaviour is: for(var/datum/wound/wound in affected.wounds) LAZYREMOVE(wound.embedded_objects, implant) if(!surgical_removal) - affected.take_external_damage((implant.w_class * 3), 0, DAM_EDGE, "Embedded object extraction") + affected.take_damage((implant.w_class * 3), damage_flags = DAM_EDGE, inflicter = "Embedded object extraction") if(!BP_IS_PROSTHETIC(affected) && prob(implant.w_class * 5) && affected.sever_artery()) //I'M SO ANEMIC I COULD JUST -DIE-. custom_pain("Something tears wetly in your [affected.name] as [implant] is pulled free!", 50, affecting = affected) @@ -1762,7 +1762,7 @@ default behaviour is: playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1) var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(src, BP_CHEST) if(istype(organ)) - organ.take_external_damage(d, 0) + organ.take_damage(d) else take_organ_damage(d) if(prob(get_damage(BRUTE) - 50)) diff --git a/code/modules/mob/living/living_fires.dm b/code/modules/mob/living/living_fires.dm index 5711910fe86..c66beaedc8a 100644 --- a/code/modules/mob/living/living_fires.dm +++ b/code/modules/mob/living/living_fires.dm @@ -80,7 +80,7 @@ if(has_external_organs()) for(var/obj/item/organ/external/E in get_external_organs()) if(!(E.body_part & protected_limbs) && prob(20)) - E.take_external_damage(burn = round(species_heat_mod * log(10, (burn_temperature + 10)), 0.1), used_weapon = "fire") + E.take_damage(round(species_heat_mod * log(10, (burn_temperature + 10)), 0.1), BURN, inflicter = "fire") else // fallback for simplemobs take_damage(round(species_heat_mod * log(10, (burn_temperature + 10))), 0.1, BURN, DAM_DISPERSED) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index b7e695a72cb..49224c032f5 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -190,7 +190,7 @@ var/global/list/possible_say_verbs = list( var/mob/living/human/H = holder for(var/obj/item/organ/external/affecting in H.get_external_organs()) if(card in affecting.implants) - affecting.take_external_damage(rand(30,50)) + affecting.take_damage(rand(30,50)) LAZYREMOVE(affecting.implants, card) H.visible_message("\The [src] explodes out of \the [H]'s [affecting.name] in a shower of gore!") break diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index 150216e903a..bdc699433ef 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -202,7 +202,7 @@ if(owner && burn_damage) owner.custom_pain("Something inside your [src] burns a [severity < 2 ? "bit" : "lot"]!", power * 15) //robotic organs won't feel it anyway - take_external_damage(0, burn_damage, 0, used_weapon = "Hot metal") + take_damage(burn_damage, BURN, inflicter = "Hot metal") check_pain_disarm() if(owner && (limb_flags & ORGAN_FLAG_CAN_STAND)) @@ -1506,7 +1506,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(LAZYLEN(internal_organs) && prob(brute_dam + force)) owner.custom_pain("A piece of bone in your [encased ? encased : name] moves painfully!", 50, affecting = src) var/obj/item/organ/internal/internal_organ = pick(internal_organs) - internal_organ.take_internal_damage(rand(3,5)) + internal_organ.take_damage(rand(3,5)) /obj/item/organ/external/proc/jointlock(mob/attacker) if(!can_feel_pain()) diff --git a/code/modules/organs/external/_external_damage.dm b/code/modules/organs/external/_external_damage.dm index 0d185bbe9ae..3f58b3ba0b4 100644 --- a/code/modules/organs/external/_external_damage.dm +++ b/code/modules/organs/external/_external_damage.dm @@ -6,16 +6,13 @@ //Continued damage to vital organs can kill you, and robot organs don't count towards total damage so no need to cap them. return (BP_IS_PROSTHETIC(src) || brute_dam + burn_dam + additional_damage < max_damage * 4) -/obj/item/organ/external/take_general_damage(var/amount, var/silent = FALSE) - take_external_damage(amount) - -/obj/item/organ/external/proc/take_external_damage(brute, burn, damage_flags, used_weapon, override_droplimb) +/obj/item/organ/external/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health, override_droplimb) if(!owner) return - brute = round(brute * get_brute_mod(damage_flags), 0.1) - burn = round(burn * get_burn_mod(damage_flags), 0.1) + var/brute = damage_type == BRUTE ? round(damage * get_brute_mod(damage_flags), 0.1) : 0 + var/burn = damage_type == BURN ? round(damage * get_burn_mod(damage_flags), 0.1) : 0 if((brute <= 0) && (burn <= 0)) return 0 @@ -33,8 +30,8 @@ if(prob(25)) owner.visible_message(SPAN_WARNING("\The [owner]'s crystalline [name] shines with absorbed energy!")) - if(used_weapon) - add_autopsy_data(used_weapon, brute + burn) + if(inflicter) + add_autopsy_data(inflicter, brute + burn) var/spillover = 0 var/pure_brute = brute @@ -54,7 +51,7 @@ var/total_damage = brute_dam + burn_dam + brute + burn + spillover var/threshold = max_damage * get_config_value(/decl/config/num/health_organ_health_multiplier) if(total_damage > threshold) - if(attempt_dismemberment(pure_brute, burn, sharp, edge, used_weapon, spillover, total_damage > threshold*6, override_droplimb = override_droplimb)) + if(attempt_dismemberment(pure_brute, burn, sharp, edge, inflicter, spillover, total_damage > threshold*6, override_droplimb = override_droplimb)) return //blunt damage is gud at fracturing @@ -114,15 +111,16 @@ // sync the organ's damage with its wounds update_damages() - owner.update_health() + if(do_update_health) + owner.update_health() if(status & ORGAN_BLEEDING) owner.update_bandages() if(owner && update_damstate()) owner.update_damage_overlays() - if(created_wound && isobj(used_weapon)) - var/obj/O = used_weapon + if(created_wound && isobj(inflicter)) + var/obj/O = inflicter O.after_wounding(src, created_wound) return created_wound @@ -171,7 +169,7 @@ if(prob(organ_hit_chance)) var/obj/item/organ/internal/victim = pickweight(victims) damage_amt -= max(damage_amt*victim.damage_reduction, 0) - victim.take_internal_damage(damage_amt) + victim.take_damage(damage_amt) return TRUE /obj/item/organ/external/heal_damage(brute, burn, internal = 0, robo_repair = 0) diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm index b16d8919e29..3fdae586b02 100644 --- a/code/modules/organs/external/head.dm +++ b/code/modules/organs/external/head.dm @@ -99,7 +99,7 @@ . = ..() can_intake_reagents = !(bodytype.body_flags & BODY_FLAG_NO_EAT) -/obj/item/organ/external/head/take_external_damage(brute, burn, damage_flags, used_weapon, override_droplimb) +/obj/item/organ/external/head/take_damage(damage, damage_type, damage_flags, inflicter, armor_pen, silent, do_update_health, override_droplimb) . = ..() if (!(status & ORGAN_DISFIGURED)) if (brute_dam > 40) diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm index a3ac98d48e2..c3a30ab965c 100644 --- a/code/modules/organs/internal/_internal.dm +++ b/code/modules/organs/internal/_internal.dm @@ -117,17 +117,14 @@ if(damage_threshold_count > 0) damage_threshold_value = round(max_damage / damage_threshold_count) -/obj/item/organ/internal/take_general_damage(var/amount, var/silent = FALSE) - take_internal_damage(amount, silent) - -/obj/item/organ/internal/proc/take_internal_damage(amount, var/silent=0) +/obj/item/organ/internal/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health) if(BP_IS_PROSTHETIC(src)) - damage = clamp(src.damage + (amount * 0.8), 0, max_damage) + damage = clamp(src.damage + (damage * 0.8), 0, max_damage) else - damage = clamp(src.damage + amount, 0, max_damage) + damage = clamp(src.damage + damage, 0, max_damage) //only show this if the organ is not robotic - if(owner && can_feel_pain() && parent_organ && (amount > 5 || prob(10))) + if(owner && can_feel_pain() && parent_organ && (damage > 5 || prob(10))) var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(owner, parent_organ) if(parent && !silent) var/degree = "" @@ -135,7 +132,7 @@ degree = " a lot" if(damage < 5) degree = " a bit" - owner.custom_pain("Something inside your [parent.name] hurts[degree].", amount, affecting = parent) + owner.custom_pain("Something inside your [parent.name] hurts[degree].", damage, affecting = parent) /obj/item/organ/internal/proc/get_visible_state() if(damage > max_damage) @@ -234,11 +231,11 @@ return switch (severity) if (1) - take_internal_damage(16) + take_damage(16) if (2) - take_internal_damage(9) + take_damage(9) if (3) - take_internal_damage(6.5) + take_damage(6.5) /obj/item/organ/internal/on_update_icon() . = ..() diff --git a/code/modules/organs/internal/appendix.dm b/code/modules/organs/internal/appendix.dm index f0d1c8f6af6..8f4c372ea7c 100644 --- a/code/modules/organs/internal/appendix.dm +++ b/code/modules/organs/internal/appendix.dm @@ -22,7 +22,7 @@ owner.visible_message("\The [owner] winces slightly.") if(inflamed > 200) if(prob(3)) - take_internal_damage(0.1) + take_damage(0.1) if(owner.can_feel_pain()) owner.visible_message("\The [owner] winces painfully.") owner.take_damage(1, TOX) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index c4980c3a303..39e3d07a259 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -140,12 +140,12 @@ to_chat(owner, "You feel [pick("dizzy","woozy","faint")]...") damprob = stability_effect ? 30 : 60 if(!past_damage_threshold(2) && prob(damprob)) - take_internal_damage(1) + take_damage(1) if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) SET_STATUS_MAX(owner, STAT_BLURRY, 6) damprob = stability_effect ? 40 : 80 if(!past_damage_threshold(4) && prob(damprob)) - take_internal_damage(1) + take_damage(1) if(!HAS_STATUS(owner, STAT_PARA) && prob(10)) SET_STATUS_MAX(owner, STAT_PARA, rand(1,3)) to_chat(owner, "You feel extremely [pick("dizzy","woozy","faint")]...") @@ -153,7 +153,7 @@ SET_STATUS_MAX(owner, STAT_BLURRY, 6) damprob = stability_effect ? 60 : 100 if(!past_damage_threshold(6) && prob(damprob)) - take_internal_damage(1) + take_damage(1) if(!HAS_STATUS(owner, STAT_PARA) && prob(15)) SET_STATUS_MAX(owner, STAT_PARA, rand(3,5)) to_chat(owner, "You feel extremely [pick("dizzy","woozy","faint")]...") @@ -161,12 +161,12 @@ SET_STATUS_MAX(owner, STAT_BLURRY, 6) damprob = stability_effect ? 80 : 100 if(prob(damprob)) - take_internal_damage(1) + take_damage(1) if(prob(damprob)) - take_internal_damage(1) + take_damage(1) ..() -/obj/item/organ/internal/brain/take_internal_damage(var/damage, var/silent) +/obj/item/organ/internal/brain/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health) ..() if(damage >= 10) //This probably won't be triggered by oxyloss or mercury. Probably. var/damage_secondary = damage * 0.20 diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm index 7dbc75053e6..94e7e27418e 100644 --- a/code/modules/organs/internal/eyes.dm +++ b/code/modules/organs/internal/eyes.dm @@ -75,7 +75,7 @@ if(istype(head)) head._icon_cache_key = null -/obj/item/organ/internal/eyes/take_internal_damage(amount, var/silent=0) +/obj/item/organ/internal/eyes/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health) var/oldbroken = is_broken() . = ..() if(is_broken() && !oldbroken && owner && !owner.stat) diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm index 2cc637a076c..8930a70e6b9 100644 --- a/code/modules/organs/internal/heart.dm +++ b/code/modules/organs/internal/heart.dm @@ -28,9 +28,9 @@ if(pulse) handle_heartbeat() if(pulse == PULSE_2FAST && prob(1)) - take_internal_damage(0.5) + take_damage(0.5) if(pulse == PULSE_THREADY && prob(5)) - take_internal_damage(0.5) + take_damage(0.5) handle_blood() ..() @@ -47,7 +47,7 @@ if(pulse_mod > 2 && !is_stable) var/damage_chance = (pulse_mod - 2) ** 2 if(prob(damage_chance)) - take_internal_damage(0.5) + take_damage(0.5) // Now pulse mod is impacted by shock stage and other things too if(owner.shock_stage > 30) diff --git a/code/modules/organs/internal/liver.dm b/code/modules/organs/internal/liver.dm index bc782095676..64d68166d69 100644 --- a/code/modules/organs/internal/liver.dm +++ b/code/modules/organs/internal/liver.dm @@ -51,7 +51,7 @@ owner.take_damage(0.5 * max(2 - filter_effect, TOX, 0) * (alcotox + 0.5 * alco)) if(alcotox) - take_internal_damage(alcotox, prob(90)) // Chance to warn them + take_damage(alcotox, prob(90)) // Chance to warn them //Blood regeneration if there is some space owner.regenerate_blood(0.1 + GET_CHEMICAL_EFFECT(owner, CE_BLOODRESTORE)) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 15cdb2e31b9..9ff4068188a 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -227,7 +227,7 @@ blood_splatter(get_turf(src), src, 1) remove_any_reagents(0.1) if(get_config_value(/decl/config/toggle/health_organs_decay)) - take_general_damage(rand(1,3)) + take_damage(rand(1,3)) germ_level += rand(2,6) if(germ_level >= INFECTION_LEVEL_TWO) germ_level += rand(2,6) @@ -309,7 +309,7 @@ parent.germ_level++ if (prob(3)) //about once every 30 seconds - take_general_damage(1,silent=prob(30)) + take_damage(1, silent =prob(30)) /obj/item/organ/proc/handle_rejection() // Process unsuitable transplants. TODO: consider some kind of @@ -381,8 +381,9 @@ germ_level -= round(2 * antibiotics) germ_level = max(0, germ_level) -/obj/item/organ/proc/take_general_damage(var/amount, var/silent = FALSE) - CRASH("Not Implemented") +// Bypass the atom damage system as organs implement their own health handling etc. +/obj/item/organ/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health) + return /obj/item/organ/proc/heal_damage(amount) if(can_recover()) diff --git a/code/modules/reagents/chems/chems_alcohol.dm b/code/modules/reagents/chems/chems_alcohol.dm index 505354b4d30..b218183a818 100644 --- a/code/modules/reagents/chems/chems_alcohol.dm +++ b/code/modules/reagents/chems/chems_alcohol.dm @@ -479,9 +479,9 @@ var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(H, BP_HEART) if(heart) if(dose < 120) - heart.take_internal_damage(10 * removed, 0) + heart.take_damage(10 * removed, 0) else - heart.take_internal_damage(100, 0) + heart.take_damage(100, 0) /decl/material/liquid/alcohol/aged_whiskey // I have no idea what this is and where it comes from. //It comes from Dinnlan now name = "aged whiskey" diff --git a/code/modules/reagents/chems/chems_compounds.dm b/code/modules/reagents/chems/chems_compounds.dm index 45a828e3a60..c4a17bceb13 100644 --- a/code/modules/reagents/chems/chems_compounds.dm +++ b/code/modules/reagents/chems/chems_compounds.dm @@ -455,7 +455,7 @@ new /obj/item/shard(get_turf(E), result_mat) E.dismember(0, DISMEMBER_METHOD_BLUNT) else - E.take_external_damage(rand(20,30), 0) + E.take_damage(rand(20,30)) BP_SET_CRYSTAL(E) E.status |= ORGAN_BRITTLE break diff --git a/code/modules/reagents/chems/chems_medicines.dm b/code/modules/reagents/chems/chems_medicines.dm index 7b8357a1767..12436c5896f 100644 --- a/code/modules/reagents/chems/chems_medicines.dm +++ b/code/modules/reagents/chems/chems_medicines.dm @@ -298,7 +298,7 @@ var/mob/living/human/H = M if(H.resuscitate()) var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(H, BP_HEART) - heart.take_internal_damage(heart.max_damage * 0.15) + heart.take_damage(heart.max_damage * 0.15) /decl/material/liquid/stabilizer name = "stabilizer" @@ -401,7 +401,7 @@ /decl/material/liquid/clotting_agent/affect_overdose(mob/living/victim, total_dose) var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(victim, BP_HEART) if(heart && prob(25)) - heart.take_general_damage(rand(1,3)) + heart.take_damage(rand(1,3)) return ..() #define DETOXIFIER_EFFECTIVENESS 6 // 6u of opiates removed per 1u of detoxifier; 5u is enough to remove 30u, i.e. an overdose diff --git a/code/modules/reagents/reagent_containers/food/meat/cubes.dm b/code/modules/reagents/reagent_containers/food/meat/cubes.dm index ccad0f20322..13f68070877 100644 --- a/code/modules/reagents/reagent_containers/food/meat/cubes.dm +++ b/code/modules/reagents/reagent_containers/food/meat/cubes.dm @@ -75,7 +75,7 @@ target.visible_message(SPAN_DANGER("A screeching creature bursts out of \the [target]!")) var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(target, BP_CHEST) if(organ) - organ.take_external_damage(50, 0, 0, "Animal escaping the ribcage") + organ.take_damage(50, inflicter = "Animal escaping the ribcage") spawn_creature(get_turf(target)) /obj/item/food/animal_cube/on_reagent_change() diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 274c5aec259..afae8f24b69 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -65,7 +65,7 @@ var/obj/item/organ/external/E = pick(crush) - E.take_external_damage(45, used_weapon = "Blunt Trauma") + E.take_damage(45, inflicter = "Blunt Trauma") to_chat(L, "\The [src]'s mechanisms crush your [E.name]!") H.init(src) // copy the contents of disposer to holder diff --git a/code/modules/status_conditions/status_jittery.dm b/code/modules/status_conditions/status_jittery.dm index f196c38b430..04d8bb8946e 100644 --- a/code/modules/status_conditions/status_jittery.dm +++ b/code/modules/status_conditions/status_jittery.dm @@ -29,10 +29,10 @@ return if(prob(5)) if(prob(1)) - heart.take_internal_damage(heart.max_damage / 2, 0) + heart.take_damage(heart.max_damage / 2, 0) to_chat(victim, SPAN_DANGER("Something bursts in your heart.")) admin_victim_log(victim, "has taken lethal heart damage at jitteriness level [jitteriness].") else - heart.take_internal_damage(heart, 0) + heart.take_damage(heart, 0) to_chat(victim, SPAN_DANGER("The jitters are killing you! You feel your heart beating out of your chest.")) admin_victim_log(victim, "has taken minor heart damage at jitteriness level [jitteriness].") diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 82f52e1d33d..cc0a53a8147 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -107,7 +107,7 @@ user.visible_message("\The [user]'s hand slips, damaging the [affected.encased ? affected.encased : "bones"] in \the [target]'s [affected.name] with \the [tool]!" , \ "Your hand slips, damaging the [affected.encased ? affected.encased : "bones"] in \the [target]'s [affected.name] with \the [tool]!") affected.fracture() - affected.take_external_damage(5, used_weapon = tool) + affected.take_damage(5, inflicter = tool) ..() ////////////////////////////////////////////////////////////////// diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 36a969d13fd..57a17c7d785 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -45,6 +45,6 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ "Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) - affected.take_external_damage(15, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(15, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) affected.fracture() ..() diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index a2baf2e1200..7b8ca9c6687 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -36,5 +36,5 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \ "Your hand slips, tearing skin on [target]'s face with \the [tool]!") - affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(10, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index f9d54f3b125..5b5843eb77a 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -61,7 +61,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, [fail_string] \the [target]'s [affected.name] in the wrong place with \the [tool]!", \ "Your hand slips, [fail_string] \the [target]'s [affected.name] in the wrong place with \the [tool]!") - affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(10, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() /decl/surgery_step/generic/cut_open/success_chance(mob/living/user, mob/living/target, obj/item/tool) @@ -111,7 +111,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) - affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(10, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -157,7 +157,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(12, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(12, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -213,7 +213,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(0, 3, used_weapon = tool) + affected.take_damage(3, BURN, inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -285,11 +285,11 @@ user.visible_message( SPAN_DANGER("\The [user] manages to get \the [tool] stuck in \the [target]'s [affected.name]!"), \ SPAN_DANGER("You manage to get \the [tool] stuck in \the [target]'s [affected.name]!")) - affected.embed_in_organ(tool, affected.take_external_damage(30, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)) + affected.embed_in_organ(tool, affected.take_damage(30, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool)) else user.visible_message( SPAN_WARNING("\The [user] slips, mangling \the [target]'s [affected.name] with \the [tool]."), \ SPAN_WARNING("You slip, mangling \the [target]'s [affected.name] with \the [tool].")) - affected.take_external_damage(30, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(30, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) affected.fracture() ..() diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index be2f0f6b69d..a453faec003 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -18,7 +18,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(20, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() /decl/surgery_step/cavity/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool, target_zone) diff --git a/code/modules/surgery/necrotic.dm b/code/modules/surgery/necrotic.dm index 6f41080ae0d..32b74e3f508 100644 --- a/code/modules/surgery/necrotic.dm +++ b/code/modules/surgery/necrotic.dm @@ -86,7 +86,7 @@ user.visible_message( SPAN_DANGER("\The [user]'s hand slips, slicing into a healthy portion of \the [target]'s [affected.name] with \the [tool]!"), SPAN_DANGER("Your hand slips, slicing into a healthy portion of [target]'s [affected.name] with \the [tool]!")) - affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(10, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() ////////////////////////////////////////////////////////////////// diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 76b37e9eb8d..7f6e5083459 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -82,10 +82,10 @@ else dam_amt = 5 target.take_damage(10, TOX) - affected.take_external_damage(dam_amt, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(dam_amt, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0 && !BP_IS_PROSTHETIC(I) && (I.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) - I.take_internal_damage(dam_amt) + I.take_damage(dam_amt) ..() ////////////////////////////////////////////////////////////////// @@ -135,7 +135,7 @@ if(affected) user.visible_message("[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(rand(30,50), 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(rand(30,50), damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -202,7 +202,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, used_weapon = tool) + affected.take_damage(20, inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -299,7 +299,7 @@ "Your hand slips, damaging \the [tool]!") var/obj/item/organ/internal/I = tool if(istype(I)) - I.take_internal_damage(rand(3,5)) + I.take_damage(rand(3,5)) ..() ////////////////////////////////////////////////////////////////// @@ -391,5 +391,5 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, used_weapon = tool) + affected.take_damage(20, inflicter = tool) ..() diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index ca8806692a1..5b9c16d99cf 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -45,7 +45,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - affected.take_external_damage(5, used_weapon = tool) + affected.take_damage(5, inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -91,7 +91,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - affected.take_external_damage(5, used_weapon = tool) + affected.take_damage(5, inflicter = tool) ..() diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 8695ab98499..6e64ffcb1f9 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -395,7 +395,7 @@ for(var/internal in affected.internal_organs) var/obj/item/organ/internal/I = internal if(I) - I.take_internal_damage(rand(3,5)) + I.take_damage(rand(3,5)) ..() ////////////////////////////////////////////////////////////////// diff --git a/mods/species/serpentid/mobs/bodyparts_serpentid.dm b/mods/species/serpentid/mobs/bodyparts_serpentid.dm index 55aa7fd4eff..1eff7af0581 100644 --- a/mods/species/serpentid/mobs/bodyparts_serpentid.dm +++ b/mods/species/serpentid/mobs/bodyparts_serpentid.dm @@ -13,7 +13,7 @@ /obj/item/organ/internal/eyes/insectoid/serpentid/additional_flash_effects(var/intensity) if(!eyes_shielded) - take_internal_damage(max(0, 4 * (intensity))) + take_damage(max(0, 4 * (intensity))) return 1 else return -1 @@ -118,7 +118,7 @@ to_chat(owner, "Your body is barely functioning and is starting to shut down.") SET_STATUS_MAX(owner, STAT_PARA, 2) var/obj/item/organ/internal/I = pick(owner.internal_organs) - I.take_internal_damage(5) + I.take_damage(5) ..() /obj/item/organ/external/chest/insectoid/serpentid diff --git a/mods/species/vox/organs_vox.dm b/mods/species/vox/organs_vox.dm index 7933c8f41a4..202e2b3931d 100644 --- a/mods/species/vox/organs_vox.dm +++ b/mods/species/vox/organs_vox.dm @@ -236,9 +236,9 @@ /obj/item/organ/internal/voxstack/on_remove_effects(mob/living/last_owner) var/obj/item/organ/external/head = GET_EXTERNAL_ORGAN(last_owner, parent_organ) last_owner.visible_message(SPAN_DANGER("\The [src] rips gaping holes in \the [last_owner]'s [head.name] as it is torn loose!")) - head.take_external_damage(rand(15,20)) + head.take_damage(rand(15,20)) for(var/obj/item/organ/internal/O in head.contents) - O.take_internal_damage(rand(30,70)) + O.take_damage(rand(30,70)) do_backup() ..()