diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm
index d69a535cf50..937c7d9634f 100644
--- a/code/__defines/damage_organs.dm
+++ b/code/__defines/damage_organs.dm
@@ -12,8 +12,10 @@
#define PIERCE "pierce"
#define LASER "laser"
-#define DAM_LASER 1
-#define DAM_BULLET 2
+#define DAM_EDGE 1
+#define DAM_SHARP 2
+#define DAM_LASER 4
+#define DAM_BULLET 8
#define STUN "stun"
#define WEAKEN "weaken"
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 716dbf878de..13cc266b926 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -857,22 +857,38 @@ proc/is_hot(obj/item/W as obj)
return 0
//Whether or not the given item counts as sharp in terms of dealing damage
-/proc/is_sharp(obj/O as obj)
- if (!O) return 0
- if (O.sharp) return 1
- if (O.edge) return 1
+/proc/is_sharp(obj/O)
+ if (!O)
+ return 0
+ if (O.sharp)
+ return 1
+ if (O.edge)
+ return 1
return 0
//Whether or not the given item counts as cutting with an edge in terms of removing limbs
-/proc/has_edge(obj/O as obj)
- if (!O) return 0
- if (O.edge) return 1
+/proc/has_edge(obj/O)
+ if (!O)
+ return 0
+ if (O.edge)
+ return 1
return 0
+/obj/proc/damage_flags()
+ . = 0
+ if(has_edge(src))
+ . |= DAM_EDGE
+ if(is_sharp(src))
+ . |= DAM_SHARP
+ if(damtype == BURN)
+ . |= DAM_LASER
+
//Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape.
/proc/can_puncture(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT?
- if(!W) return 0
- if(W.sharp) return 1
+ if(!W)
+ return 0
+ if(W.sharp)
+ return 1
return ( \
W.sharp || \
W.isscrewdriver() || \
@@ -884,17 +900,10 @@ proc/is_hot(obj/item/W as obj)
istype(W, /obj/item/shovel) \
)
-/proc/is_surgery_tool(obj/item/W as obj)
- return ( \
- istype(W, /obj/item/surgery/scalpel) || \
- istype(W, /obj/item/surgery/hemostat) || \
- istype(W, /obj/item/surgery/retractor) || \
- istype(W, /obj/item/surgery/cautery) || \
- istype(W, /obj/item/surgery/bonegel) || \
- istype(W, /obj/item/surgery/bonesetter)
- )
+/proc/is_surgery_tool(obj/item/W)
+ return istype(W, /obj/item/surgery)
-/proc/is_borg_item(obj/item/W as obj)
+/proc/is_borg_item(obj/item/W)
return W && W.loc && isrobot(W.loc)
//check if mob is lying down on something we can operate him on.
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index ec1b9f04e0a..90415738e2b 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -208,7 +208,7 @@
if(organs_to_gib.len)
var/obj/item/organ/external/E = pick(organs_to_gib)
to_chat(H, "You partially phase into \the [impediment], causing your [E.name] to violently dematerialize!")
- H.apply_damage(35, BRUTE, E, 0, sharp=0, edge=0)
+ H.apply_damage(35, BRUTE, E, 0)
else
if(newdest)
diff --git a/code/game/gamemodes/cult/items/sword.dm b/code/game/gamemodes/cult/items/sword.dm
index a1a2caa7893..f13492c5637 100644
--- a/code/game/gamemodes/cult/items/sword.dm
+++ b/code/game/gamemodes/cult/items/sword.dm
@@ -33,7 +33,7 @@
to_chat(user, span("cult", "An unexplicable force rips through you, tearing the sword from your grasp!"))
//random amount of damage between half of the blade's force and the full force of the blade.
- user.apply_damage(rand(force/2, force), BRUTE, zone, 0, sharp=1, edge=1)
+ user.apply_damage(rand(force/2, force), BRUTE, zone, 0, damage_flags = DAM_SHARP|DAM_EDGE)
user.Weaken(5)
user.drop_from_inventory(src)
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index ca32b686693..a81757d6c7c 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -79,7 +79,7 @@
if(!(get_dist(src, src.attached) <= 1 && isturf(src.attached.loc)))
var/obj/item/organ/external/affecting = src.attached.get_organ(pick(BP_R_ARM, BP_L_ARM))
src.attached.visible_message("The needle is ripped out of [src.attached]'s [affecting.limb_name == BP_R_ARM ? "right arm" : "left arm"].", "The needle painfully rips out of your [affecting.limb_name == BP_R_ARM ? "right arm" : "left arm"].")
- affecting.take_damage(brute = 5, sharp = 1)
+ affecting.take_damage(brute = 5, damage_flags = DAM_SHARP)
src.attached = null
src.update_icon()
return
diff --git a/code/modules/heavy_vehicle/mech_damage.dm b/code/modules/heavy_vehicle/mech_damage.dm
index b9e38225cf2..db76766cdfe 100644
--- a/code/modules/heavy_vehicle/mech_damage.dm
+++ b/code/modules/heavy_vehicle/mech_damage.dm
@@ -60,7 +60,7 @@
else
return body
-/mob/living/heavy_vehicle/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/used_weapon = null, var/sharp = 0, var/edge = 0, var/damage_flags)
+/mob/living/heavy_vehicle/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/used_weapon = null, var/damage_flags)
if(!damage)
return 0
diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm
index cc94e14e8e9..9b4addc7720 100644
--- a/code/modules/martial_arts/martial.dm
+++ b/code/modules/martial_arts/martial.dm
@@ -34,7 +34,7 @@
streak = copytext(streak,2)
return
-/datum/martial_art/proc/basic_hit(var/mob/living/carbon/human/A,var/mob/living/carbon/human/D) //copy pasta of the regular unarmed attack, but can be replaced by something else
+/datum/martial_art/proc/basic_hit(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) //copy pasta of the regular unarmed attack, but can be replaced by something else
var/rand_damage = rand(1, 5)
var/block = 0
var/accurate = 0
@@ -98,8 +98,7 @@
var/real_damage = rand_damage
var/hit_dam_type = attack.damage_type
- var/is_sharp = 0
- var/is_edge = 0
+ var/damage_flags = attack.damage_flags()
real_damage += attack.get_unarmed_damage(A)
real_damage *= D.damage_multiplier
@@ -120,26 +119,20 @@
hit_dam_type = PAIN
if(G.sharp)
- is_sharp = 1
+ damage_flags |= DAM_SHARP
if(G.edge)
- is_edge = 1
+ damage_flags |= DAM_EDGE
if(istype(A.gloves,/obj/item/clothing/gloves/force))
var/obj/item/clothing/gloves/force/X = A.gloves
real_damage *= X.amplification
- if(attack.sharp)
- is_sharp = 1
-
- if(attack.edge)
- is_edge = 1
-
var/armour = D.run_armor_check(hit_zone, "melee")
attack.apply_effects(A, D, armour, rand_damage, hit_zone)
- D.apply_damage(real_damage, hit_dam_type, hit_zone, armour, sharp=is_sharp, edge=is_edge)
+ D.apply_damage(real_damage, hit_dam_type, hit_zone, armour, damage_flags = damage_flags)
return 1
diff --git a/code/modules/martial_arts/tajara.dm b/code/modules/martial_arts/tajara.dm
index 3497ccf6c78..a235ed8e0ce 100644
--- a/code/modules/martial_arts/tajara.dm
+++ b/code/modules/martial_arts/tajara.dm
@@ -49,7 +49,7 @@
var/obj/item/organ/internal/eyes/eyes = D.get_eyes()
eyes.take_damage(rand(3,4), 1)
var/armor = D.getarmor_organ(affecting,"melee")
- D.apply_damage(10,BRUTE, BP_HEAD, armor, sharp=1, edge=1)
+ D.apply_damage(10,BRUTE, BP_HEAD, armor, damage_flags = DAM_SHARP|DAM_EDGE)
return 1
@@ -59,7 +59,7 @@
playsound(get_turf(A), 'sound/weapons/slice.ogg', 50, 1, -1)
var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting))
var/armor_block = D.run_armor_check(affecting, "melee")
- D.apply_damage(20, BRUTE, affecting, armor_block, sharp = TRUE, edge = TRUE)
+ D.apply_damage(20, BRUTE, affecting, armor_block, damage_flags = DAM_SHARP|DAM_EDGE)
if(prob(20))
D.apply_effect(4, WEAKEN)
return 1
@@ -71,7 +71,7 @@
var/obj/item/organ/external/organ = D.get_organ(A.zone_sel.selecting)
var/armor = D.getarmor_organ(organ,"melee")
A.visible_message("[A] stabs [D]'s [organ.name] with their claws!")
- D.apply_damage(organ.brute_dam, BRUTE, organ, armor, sharp= TRUE, edge= TRUE)
+ D.apply_damage(organ.brute_dam, BRUTE, organ, armor, damage_flags = DAM_SHARP|DAM_EDGE)
return 1
/datum/martial_art/baghrar/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
diff --git a/code/modules/martial_arts/vaurca.dm b/code/modules/martial_arts/vaurca.dm
index df614f92ff0..2cf2c204d85 100644
--- a/code/modules/martial_arts/vaurca.dm
+++ b/code/modules/martial_arts/vaurca.dm
@@ -49,7 +49,7 @@
var/atk_verb = pick("slices", "pinches", "chops", "bites", "claws")
D.visible_message("[A] [atk_verb] [D]!", \
"[A] [atk_verb] you!")
- D.apply_damage(rand(5,15), BRUTE, sharp = TRUE)
+ D.apply_damage(rand(5,15), BRUTE, damage_flags = DAM_SHARP)
playsound(get_turf(D), 'sound/weapons/slash.ogg', 25, 1, -1)
return 1
diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm
index 9e9e8139429..b0f23965bdc 100644
--- a/code/modules/mining/drilling/drill.dm
+++ b/code/modules/mining/drilling/drill.dm
@@ -443,12 +443,12 @@
connected.system_error("Unexpected user interface error.")
return
else
- H.apply_damage(25, BRUTE, sharp = TRUE, edge = TRUE)
+ H.apply_damage(25, BRUTE, damage_flags = DAM_SHARP|DAM_EDGE)
connected.system_error("Unexpected user interface error.")
return
else
var/mob/living/M = user
- M.apply_damage(25, BRUTE, sharp = TRUE, edge = TRUE)
+ M.apply_damage(25, BRUTE, damage_flags = DAM_SHARP|DAM_EDGE)
if(default_deconstruction_screwdriver(user, W))
return
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index c73f7204c54..9233c6526b3 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -98,13 +98,12 @@
effective_force *= 2
//Apply weapon damage
- var/weapon_sharp = is_sharp(I)
- var/weapon_edge = has_edge(I)
+ var/damage_flags = I.damage_flags()
if(prob(blocked)) //armour provides a chance to turn sharp/edge weapon attacks into blunt ones
- weapon_sharp = 0
- weapon_edge = 0
+ damage_flags &= ~DAM_SHARP
+ damage_flags &= ~DAM_EDGE
- apply_damage(effective_force, I.damtype, hit_zone, blocked, sharp=weapon_sharp, edge=weapon_edge, used_weapon=I)
+ apply_damage(effective_force, I.damtype, hit_zone, blocked, used_weapon=I, damage_flags = damage_flags)
//Melee weapon embedded object code.
if (I && I.damtype == BRUTE && !I.anchored && !is_robot_module(I))
@@ -114,11 +113,13 @@
if (I.can_embed)//If this weapon is allowed to embed in people
//blunt objects should really not be embedding in things unless a huge amount of force is involved
- var/embed_chance = weapon_sharp? damage/I.w_class : damage/(I.w_class*3)
- var/embed_threshold = weapon_sharp? 5*I.w_class : 15*I.w_class
+ var/sharp = damage_flags & DAM_SHARP
+ var/edge = damage_flags & DAM_EDGE
+ var/embed_chance = sharp? damage/I.w_class : damage/(I.w_class*3)
+ var/embed_threshold = edge? 5*I.w_class : 15*I.w_class
//Sharp objects will always embed if they do enough damage.
- if((weapon_sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance)))
+ if((sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance)))
src.embed(I, hit_zone)
return 1
@@ -134,9 +135,9 @@
// Knifing
/mob/living/carbon/proc/attack_throat(obj/item/W, obj/item/grab/G, mob/user)
-
- if(!W.edge || !W.force || W.damtype != BRUTE)
- return 0 //unsuitable weapon
+ var/damage_flags = W.damage_flags()
+ if(!(damage_flags & (DAM_SHARP|DAM_EDGE)) || W.damtype != BRUTE)
+ return FALSE //unsuitable weapon
user.visible_message("\The [user] begins to slit [src]'s throat with \the [W]!")
@@ -156,7 +157,7 @@
var/total_damage = 0
for(var/i in 1 to 3)
var/damage = min(W.force*1.5, 20)*damage_mod
- apply_damage(damage, W.damtype, BP_HEAD, 0, sharp=W.sharp, edge=W.edge)
+ apply_damage(damage, W.damtype, BP_HEAD, 0, used_weapon = W, damage_flags = damage_flags)
total_damage += damage
var/oxyloss = total_damage
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 4d858800ec6..cb531f245e0 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -308,8 +308,7 @@
var/real_damage = rand_damage
var/hit_dam_type = attack.damage_type
- var/is_sharp = 0
- var/is_edge = 0
+ var/damage_flags = attack.damage_flags()
real_damage += attack.get_unarmed_damage(H)
real_damage *= damage_multiplier
@@ -329,28 +328,16 @@
if(H.pulling_punches)
hit_dam_type = PAIN
- if(G.sharp)
- is_sharp = 1
-
- if(G.edge)
- is_edge = 1
-
if(istype(H.gloves,/obj/item/clothing/gloves/force))
var/obj/item/clothing/gloves/force/X = H.gloves
real_damage *= X.amplification
- if(attack.sharp)
- is_sharp = 1
-
- if(attack.edge)
- is_edge = 1
-
var/armour = run_armor_check(hit_zone, "melee")
// Apply additional unarmed effects.
attack.apply_effects(H, src, armour, rand_damage, hit_zone)
// Finally, apply damage to target
- apply_damage(real_damage, hit_dam_type, hit_zone, armour, sharp=is_sharp, edge=is_edge)
+ apply_damage(real_damage, hit_dam_type, hit_zone, armour, damage_flags = damage_flags)
if(M.resting && src.help_up_offer)
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 677bc395665..57a934b94b4 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -75,7 +75,6 @@
amount += O.burn_dam
return amount
-
/mob/living/carbon/human/adjustBruteLoss(var/amount)
if(amount > 0)
take_overall_damage(amount, 0)
@@ -90,32 +89,6 @@
heal_overall_damage(0, -amount)
BITSET(hud_updateflag, HEALTH_HUD)
-/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
- if (organ_name in organs_by_name)
- var/obj/item/organ/external/O = get_organ(organ_name)
-
- if(amount > 0)
- amount *= brute_mod
- O.take_damage(amount, 0, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source)
- else
- //if you don't want to heal robot organs, they you will have to check that yourself before using this proc.
- O.heal_damage(-amount, 0, internal=0, robo_repair=(O.status & ORGAN_ROBOT))
-
- BITSET(hud_updateflag, HEALTH_HUD)
-
-/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
- if (organ_name in organs_by_name)
- var/obj/item/organ/external/O = get_organ(organ_name)
-
- if(amount > 0)
- amount *= burn_mod
- O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source)
- else
- //if you don't want to heal robot organs, they you will have to check that yourself before using this proc.
- O.heal_damage(0, -amount, internal=0, robo_repair=(O.status & ORGAN_ROBOT))
-
- BITSET(hud_updateflag, HEALTH_HUD)
-
/mob/living/carbon/human/Stun(amount)
if(HULK in mutations)
return
@@ -307,15 +280,16 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
//Damages ONE external organ, organ gets randomly selected from damagable ones.
//It automatically updates damage overlays if necesary
//It automatically updates health status
-/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0)
+/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/damage_flags)
var/list/obj/item/organ/external/parts = get_damageable_organs()
- if(!parts.len) return
+ if(!parts.len)
+ return
var/obj/item/organ/external/picked = pick(parts)
- if(picked.take_damage(brute,burn,sharp,edge))
+ if(picked.take_damage(brute, burn, damage_flags))
UpdateDamageIcon()
BITSET(hud_updateflag, HEALTH_HUD)
updatehealth()
- speech_problem_flag = 1
+ speech_problem_flag = TRUE
//Heal MANY external organs, in random order
@@ -341,8 +315,9 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
if(update) UpdateDamageIcon()
// damage MANY external organs, in random order
-/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0, var/used_weapon = null)
- if(status_flags & GODMODE) return //godmode
+/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/damage_flags, var/used_weapon = null)
+ if(status_flags & GODMODE)
+ return //godmode
var/list/obj/item/organ/external/parts = get_damageable_organs()
var/update = 0
while(parts.len && (brute>0 || burn>0) )
@@ -351,14 +326,15 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam
- update |= picked.take_damage(brute,burn,sharp,edge,used_weapon)
+ update |= picked.take_damage(brute, burn, damage_flags, used_weapon)
brute -= (picked.brute_dam - brute_was)
burn -= (picked.burn_dam - burn_was)
parts -= picked
updatehealth()
BITSET(hud_updateflag, HEALTH_HUD)
- if(update) UpdateDamageIcon()
+ if(update)
+ UpdateDamageIcon()
////////////////////////////////////////////
@@ -396,8 +372,7 @@ This function restores all organs.
zone = BP_HEAD
return organs_by_name[zone]
-/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/edge = 0, var/obj/used_weapon = null, var/damage_flags)
-
+/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/obj/used_weapon = null, var/damage_flags)
//visible_message("Hit debug. [damage] | [damagetype] | [def_zone] | [blocked] | [sharp] | [used_weapon]")
if (invisibility == INVISIBILITY_LEVEL_TWO && back && (istype(back, /obj/item/rig)))
if(damage > 0)
@@ -440,14 +415,14 @@ This function restores all organs.
damageoverlaytemp = 20
if(damage > 0)
damage *= species.brute_mod
- if(organ.take_damage(damage, 0, sharp, edge, used_weapon, damage_flags = damage_flags))
+ if(organ.take_damage(damage, 0, damage_flags, used_weapon))
UpdateDamageIcon()
if(BURN)
damageoverlaytemp = 20
if(damage > 0)
damage *= species.burn_mod
- if(organ.take_damage(0, damage, sharp, edge, used_weapon, damage_flags = damage_flags))
+ if(organ.take_damage(0, damage, damage_flags, used_weapon))
UpdateDamageIcon()
// Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life().
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 6f248efbd70..cacdfcded55 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -390,7 +390,8 @@ emp_act
var/armor = run_armor_check(affecting, "melee", O.armor_penetration, "Your armor has protected your [hit_area].", "Your armor has softened the hit to your [hit_area].") //I guess "melee" is the best fit here
if(armor < 100)
- apply_damage(throw_damage, dtype, zone, armor, is_sharp(O), has_edge(O), O)
+ var/damage_flags = O.damage_flags()
+ apply_damage(throw_damage, dtype, zone, armor, O, damage_flags = damage_flags)
if(ismob(O.thrower))
var/mob/M = O.thrower
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 5b9ddd8902b..1392e23a4c0 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -369,14 +369,14 @@ mob/living/carbon/human/proc/change_monitor()
to_chat(H, SPAN_WARNING("They are missing that limb!"))
return
- H.apply_damage(25, BRUTE, hit_zone, sharp = TRUE, edge = TRUE)
+ H.apply_damage(25, BRUTE, hit_zone, damage_flags = DAM_SHARP|DAM_EDGE)
visible_message(SPAN_WARNING("\The [src] rips viciously at \the [G.affecting]'s [affected] with its mandibles!"))
msg_admin_attack("[key_name_admin(src)] mandible'd [key_name_admin(H)] (JMP)",ckey=key_name(src),ckey_target=key_name(H))
else
var/mob/living/M = G.affecting
if(!istype(M))
return
- M.apply_damage(25, BRUTE, sharp = TRUE, edge = TRUE)
+ M.apply_damage(25, BRUTE, damage_flags = DAM_SHARP|DAM_EDGE)
visible_message(SPAN_WARNING("\The [src] rips viciously at \the [G.affecting]'s flesh with its mandibles!"))
msg_admin_attack("[key_name_admin(src)] mandible'd [key_name_admin(M)] (JMP)",ckey=key_name(src),ckey_target=key_name(M))
playsound(get_turf(src), 'sound/weapons/slash.ogg', 50, TRUE)
diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm
index b6f7d9596fd..cce78319429 100644
--- a/code/modules/mob/living/carbon/human/unarmed_attack.dm
+++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm
@@ -115,6 +115,13 @@ var/global/list/sparring_attack_cache = list()
user.visible_message("[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!")
to_chat(target, "You experience[(!target.can_feel_pain())? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(!target.can_feel_pain())? "." : "!"]")
+/datum/unarmed_attack/proc/damage_flags()
+ . = 0
+ if(sharp)
+ . |= DAM_SHARP
+ if(edge)
+ . |= DAM_EDGE
+
/datum/unarmed_attack/bite
attack_verb = list("bit")
attack_sound = 'sound/weapons/bite.ogg'
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 8308e3fdac6..61ced978e3b 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -8,7 +8,7 @@
standard 0 if fail
*/
-/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/used_weapon = null, var/sharp = 0, var/edge = 0, var/damage_flags)
+/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/used_weapon = null, var/damage_flags)
if(!damage || (blocked >= 100))
return 0
switch(damagetype)
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 6c648747abc..dfd1b2566f4 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -89,15 +89,13 @@
//Armor
var/absorb = run_armor_check(def_zone, P.check_armour, P.armor_penetration)
- var/proj_sharp = is_sharp(P)
- var/proj_edge = has_edge(P)
var/damaged
- if ((proj_sharp || proj_edge) && prob(absorb))
- proj_sharp = 0
- proj_edge = 0
+ if ((P.damage_flags & DAM_SHARP || P.damage_flags & DAM_SHARP) && prob(absorb))
+ P.damage_flags &= ~DAM_SHARP
+ P.damage_flags &= ~DAM_EDGE
if(!P.nodamage)
- damaged = apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, sharp=proj_sharp, edge=proj_edge, damage_flags = P.damage_flags, used_weapon = "\a [P.name]")
+ damaged = apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, damage_flags = P.damage_flags, used_weapon = "\a [P.name]")
bullet_impact_visuals(P, def_zone, damaged)
P.on_hit(src, absorb, def_zone)
return absorb
@@ -161,13 +159,12 @@
effective_force *= 2
//Apply weapon damage
- var/weapon_sharp = is_sharp(I)
- var/weapon_edge = has_edge(I)
+ var/damage_flags = I.damage_flags()
if(prob(blocked)) //armour provides a chance to turn sharp/edge weapon attacks into blunt ones
- weapon_sharp = 0
- weapon_edge = 0
+ damage_flags &= ~DAM_SHARP
+ damage_flags &= ~DAM_EDGE
- apply_damage(effective_force, I.damtype, hit_zone, blocked, sharp=weapon_sharp, edge=weapon_edge, used_weapon=I)
+ apply_damage(effective_force, I.damtype, hit_zone, blocked, used_weapon=I, damage_flags = damage_flags)
return 1
@@ -190,7 +187,8 @@
src.visible_message("[src] has been hit by [O].")
var/armor = run_armor_check(null, "melee")
- apply_damage(throw_damage, dtype, null, armor, is_sharp(O), has_edge(O), O)
+ var/damage_flags = O.damage_flags()
+ apply_damage(throw_damage, dtype, null, armor, O, damage_flags = damage_flags)
O.throwing = 0 //it hit, so stop moving
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index b620e1c8747..c9796a597c5 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -44,13 +44,15 @@
/datum/robot_component/proc/get_damage(var/type)
return Clamp(brute_damage + electronics_damage,0,max_damage)
-/datum/robot_component/proc/take_damage(brute, electronics, sharp, edge)
- if(installed != 1) return
+/datum/robot_component/proc/take_damage(brute, electronics, damage_flags)
+ if(installed != 1)
+ return
brute_damage += brute
electronics_damage += electronics
- if(brute_damage + electronics_damage >= max_damage) destroy()
+ if(brute_damage + electronics_damage >= max_damage)
+ destroy()
/datum/robot_component/proc/heal_damage(brute, electronics)
if(installed != 1)
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm
index f2e14f3ce4b..ad7c677f72b 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm
@@ -3,7 +3,7 @@
var/fireloss = 0
var/bruteloss = 0
-/mob/living/silicon/robot/drone/take_overall_damage(var/brute = 0, var/burn = 0, var/sharp = 0, var/used_weapon = null)
+/mob/living/silicon/robot/drone/take_overall_damage(var/brute = 0, var/burn = 0, var/damage_flags, var/used_weapon = null)
bruteloss += brute
fireloss += burn
@@ -16,8 +16,8 @@
if(fireloss < 0)
fireloss = 0
-/mob/living/silicon/robot/drone/take_organ_damage(var/brute = 0, var/burn = 0, var/sharp = 0, var/emp = 0)
- take_overall_damage(brute,burn)
+/mob/living/silicon/robot/drone/take_organ_damage(var/brute = 0, var/burn, var/damage_flags, var/emp = 0)
+ take_overall_damage(brute, burn)
/mob/living/silicon/robot/drone/heal_organ_damage(var/brute, var/burn)
heal_overall_damage(brute,burn)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 29d01b89f1b..39cc9ba8576 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -69,7 +69,7 @@
var/datum/robot_component/picked = pick(parts)
picked.heal_damage(brute, burn)
-/mob/living/silicon/robot/take_organ_damage(var/brute = 0, var/burn = 0, var/sharp = 0, var/edge = 0, var/emp = 0)
+/mob/living/silicon/robot/take_organ_damage(var/brute = 0, var/burn = 0, var/damage_flags, var/emp = 0)
var/list/components = get_damageable_components()
if(!length(components))
return
@@ -94,11 +94,11 @@
if(!emp)
var/datum/robot_component/armor/A = get_armour()
if(A)
- A.take_damage(brute, burn, sharp, edge)
+ A.take_damage(brute, burn, damage_flags)
return
var/datum/robot_component/C = pick(components)
- C.take_damage(brute, burn, sharp, edge)
+ C.take_damage(brute, burn, damage_flags)
/mob/living/silicon/robot/heal_overall_damage(var/brute, var/burn)
var/list/datum/robot_component/parts = get_damaged_components(brute,burn)
@@ -116,7 +116,7 @@
parts -= picked
-/mob/living/silicon/robot/take_overall_damage(var/brute = 0, var/burn = 0, var/sharp = 0, var/used_weapon = null)
+/mob/living/silicon/robot/take_overall_damage(var/brute = 0, var/burn = 0, var/damage_flags, var/used_weapon = null)
if(status_flags & GODMODE)
return
@@ -140,7 +140,7 @@
var/datum/robot_component/armor/A = get_armour()
if(A)
- A.take_damage(brute, burn, sharp)
+ A.take_damage(brute, burn, damage_flags)
return
while(length(parts) && (brute > 0 || burn > 0))
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index 7fe8dcc48b4..f7be7f53517 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -92,7 +92,7 @@
else
prob_mult -= 0.01 *(min(LAZYACCESS(worn_helmet.armor, "bio"), 30))// Is your helmet sealed? I can't get to 30% of your body.
if( prob(sting_prob*prob_mult) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25*prob_mult))) ) // Try to sting! If you're not moving, think about stinging.
- M.apply_damage(min(strength*0.85,2)+mut, BURN, sharp=1) // Stinging. The more mutated I am, the harder I sting.
+ M.apply_damage(min(strength*0.85,2)+mut, BURN, damage_flags = DAM_SHARP) // Stinging. The more mutated I am, the harder I sting.
M.apply_damage(max(strength*0.2,(round(feral/10,1)*(max((round(strength/20,1)),1)))+toxic), TOX) // Bee venom based on how angry I am and how many there are of me!
to_chat(M, "You have been stung!")
M.flash_pain()
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index c6909e0f339..dcf4b71b22c 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -481,7 +481,7 @@
var/mob/living/carbon/human/H = parrot_interest
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
- H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1)
+ H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), damage_flags = DAM_SHARP)
visible_emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
else
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
index bfc0bb59663..00312422664 100644
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ b/code/modules/mob/living/simple_animal/shade.dm
@@ -92,7 +92,7 @@
var/datum/weakref/original_body
var/datum/weakref/possessed_body
-/mob/living/simple_animal/shade/bluespace/apply_damage(var/damage_flags, var/def_zone, var/edge, var/sharp, var/used_weapon)
+/mob/living/simple_animal/shade/bluespace/apply_damage(var/damage_flags, var/def_zone, var/used_weapon)
return 0
/mob/living/simple_animal/shade/bluespace/adjustBruteLoss()
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index 13e59b3b9ae..b1fe4d6fed5 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -293,7 +293,7 @@
W.time_inflicted = world.time
//Note: external organs have their own version of this proc
-/obj/item/organ/proc/take_damage(amount, var/silent=0)
+/obj/item/organ/proc/take_damage(var/amount, var/silent = 0)
if(src.status & ORGAN_ROBOT)
src.damage = between(0, src.damage + (amount * 0.8), max_damage)
else
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 77988d1e06c..455f0e75381 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -245,7 +245,7 @@
//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_ROBOTIC(src) || brute_dam + burn_dam + additional_damage < max_damage * 4)
-/obj/item/organ/external/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list(), damage_flags, var/silent)
+/obj/item/organ/external/take_damage(brute, burn, damage_flags, used_weapon = null, list/forbidden_limbs = list(), var/silent)
if((brute <= 0) && (burn <= 0))
return 0
@@ -253,6 +253,7 @@
burn *= burn_mod
var/laser = (damage_flags & DAM_LASER)
+ var/sharp = (damage_flags & DAM_SHARP)
var/blunt = !!(brute && !sharp && !edge)
if(status & ORGAN_BROKEN && prob(40) && brute)
@@ -300,7 +301,7 @@
// High brute damage or sharp objects may damage internal organs
if(length(internal_organs))
- if(damage_internal_organs(brute, burn, sharp, damage_flags))
+ if(damage_internal_organs(brute, burn, damage_flags))
var/brute_div = 2 //We want melee weapons to not be affected by this.
if(damage_flags & DAM_BULLET)
brute_div = 1.25
@@ -315,13 +316,14 @@
return update_icon()
-/obj/item/organ/external/proc/damage_internal_organs(brute, burn, sharp, damage_flags)
+/obj/item/organ/external/proc/damage_internal_organs(brute, burn, damage_flags)
if(!length(internal_organs))
return FALSE
var/damage_amt = brute
var/cur_damage = brute_dam
var/laser = (damage_flags & DAM_LASER)
+ var/sharp = (damage_flags & DAM_SHARP)
if(laser)
damage_amt += burn
diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm
index e8dc90b0758..42545fd75d3 100644
--- a/code/modules/organs/subtypes/standard.dm
+++ b/code/modules/organs/subtypes/standard.dm
@@ -184,8 +184,8 @@
owner.update_hair()
..()
-/obj/item/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list(), damage_flags, var/silent)
- ..(brute, burn, sharp, edge, used_weapon, forbidden_limbs, damage_flags, silent)
+/obj/item/organ/external/head/take_damage(brute, burn, damage_flags, used_weapon = null, list/forbidden_limbs = list(), var/silent)
+ ..(brute, burn, damage_flags, used_weapon, forbidden_limbs, damage_flags, silent)
if (!disfigured)
if (brute_dam > 40)
if (prob(50))
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index e5a985dd61c..113192974e8 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -523,7 +523,7 @@
user.apply_effect(110,PAIN,0)
else
log_and_message_admins("[key_name(user)] commited suicide using \a [src]")
- user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, BP_HEAD, used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp=1)
+ user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, BP_HEAD, used_weapon = "Point blank shot in the mouth with \a [in_chamber]", damage_flags = DAM_SHARP)
user.death()
qdel(in_chamber)
mouthshoot = FALSE
diff --git a/code/modules/projectiles/guns/energy/magic.dm b/code/modules/projectiles/guns/energy/magic.dm
index eb6a66c9be1..4bcccd6f88e 100644
--- a/code/modules/projectiles/guns/energy/magic.dm
+++ b/code/modules/projectiles/guns/energy/magic.dm
@@ -317,7 +317,7 @@ obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
H.visible_message("\The [src] escapes from [H]'s hand, hitting their face and shattering into pieces!")
- H.apply_damage(35, BRUTE, BP_HEAD, 0, sharp=0, edge=0)
+ H.apply_damage(35, BRUTE, BP_HEAD, 0)
H.adjustBrainLoss(50, 55)
H.sdisabilities += CLUMSY
H.drop_item()
diff --git a/code/modules/spell_system/artifacts/items/poppet.dm b/code/modules/spell_system/artifacts/items/poppet.dm
index d520c853c92..c96ca45fc51 100644
--- a/code/modules/spell_system/artifacts/items/poppet.dm
+++ b/code/modules/spell_system/artifacts/items/poppet.dm
@@ -104,7 +104,7 @@
if(W.edge)
to_chat(H, "You stab \the [src] with \the [W]!")
- H.apply_damage(2, BRUTE, target_zone, edge = TRUE)
+ H.apply_damage(2, BRUTE, target_zone, damage_flags = DAM_EDGE)
playsound(get_turf(H), 'sound/weapons/bladeslice.ogg', 50, 1, -1)
if(H.can_feel_pain())
var/obj/item/organ/external/organ = H.get_organ(target_zone)
diff --git a/code/modules/spell_system/artifacts/items/rune_sword.dm b/code/modules/spell_system/artifacts/items/rune_sword.dm
index 6e664eb9280..4db6000a2a9 100644
--- a/code/modules/spell_system/artifacts/items/rune_sword.dm
+++ b/code/modules/spell_system/artifacts/items/rune_sword.dm
@@ -46,7 +46,7 @@
var/obj/item/organ/external/affecting = H.get_organ(zone)
to_chat(user, "The sword refuses you as its true wielder, slashing your [affecting.name] instead!")
- user.apply_damage(active_force, BRUTE, zone, 0, sharp=1, edge=1)
+ user.apply_damage(active_force, BRUTE, zone, 0, damage_flags = DAM_SHARP|DAM_EDGE)
user.drop_from_inventory(src)
diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm
index a20317a2c4f..e41c53a10b1 100644
--- a/code/modules/surgery/bones.dm
+++ b/code/modules/surgery/bones.dm
@@ -77,7 +77,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \
"Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!")
- target.apply_damage(5, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(5, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/mend_skull
allowed_tools = list(
@@ -110,7 +110,7 @@
user.visible_message("[user]'s hand slips, damaging [target]'s face with \the [tool]!" , \
"Your hand slips, damaging [target]'s face with \the [tool]!")
var/obj/item/organ/external/head/h = affected
- target.apply_damage(10, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(10, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
h.disfigured = 1
/datum/surgery_step/finish_bone
diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm
index 491ebc1961b..452c1ac9e63 100644
--- a/code/modules/surgery/encased.dm
+++ b/code/modules/surgery/encased.dm
@@ -59,7 +59,7 @@
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]!" )
- target.apply_damage(20, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(20, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
affected.fracture()
@@ -110,7 +110,7 @@
var/self_msg = "Your hand slips, cracking [target]'s [affected.encased]!"
user.visible_message(msg, self_msg)
- target.apply_damage(20, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(20, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
affected.fracture()
/datum/surgery_step/open_encased/close
@@ -161,7 +161,7 @@
var/self_msg = "Your hand slips, bending [target]'s [affected.encased] the wrong way!"
user.visible_message(msg, self_msg)
- target.apply_damage(20, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(20, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
affected.fracture()
if(affected.internal_organs && affected.internal_organs.len)
diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm
index 2a680aae3f9..897da5a8523 100644
--- a/code/modules/surgery/face.dm
+++ b/code/modules/surgery/face.dm
@@ -41,7 +41,7 @@
/datum/surgery_step/generic/cut_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \
"Your hand slips, slicing [target]'s throat wth \the [tool]!" )
- target.apply_damage(40, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(40, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
target.apply_damage(20, OXY)
target.losebreath += 10
@@ -79,4 +79,4 @@
/datum/surgery_step/robotics/face/synthskin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \
"Your hand slips, slicing [target]'s throat wth \the [tool]!" )
- target.apply_damage(40, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
\ No newline at end of file
+ target.apply_damage(40, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
\ No newline at end of file
diff --git a/code/modules/surgery/facial_surgery.dm b/code/modules/surgery/facial_surgery.dm
index 03169445686..6a2e7aeb4fc 100644
--- a/code/modules/surgery/facial_surgery.dm
+++ b/code/modules/surgery/facial_surgery.dm
@@ -41,7 +41,7 @@
/datum/surgery_step/generic/prepare_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \
"Your hand slips, slicing [target]'s throat wth \the [tool]!" )
- target.apply_damage(40, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(40, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
target.apply_damage(20, OXY)
target.losebreath += 10
@@ -86,7 +86,7 @@
/datum/surgery_step/generic/alter_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \
"Your hand slips, slicing [target]'s throat wth \the [tool]!" )
- target.apply_damage(40, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(40, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
target.apply_damage(20, OXY)
target.losebreath += 10
@@ -160,7 +160,7 @@
/datum/surgery_step/robotics/face/synthskinopen/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \
"Your hand slips, slicing [target]'s throat wth \the [tool]!" )
- target.apply_damage(40, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(40, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/robotics/face/prepare_face
allowed_tools = list(
@@ -187,7 +187,7 @@
/datum/surgery_step/robotics/face/prepare_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \
"Your hand slips, slicing [target]'s throat wth \the [tool]!" )
- target.apply_damage(40, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(40, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/robotics/face/alter_synthface
allowed_tools = list(
@@ -229,7 +229,7 @@
/datum/surgery_step/robotics/face/alter_synthface/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \
"Your hand slips, slicing [target]'s throat wth \the [tool]!" )
- target.apply_damage(40, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(40, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/robotics/face/seal_face
allowed_tools = list(
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index ca2e209d87c..771e6e761d6 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -62,7 +62,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!", \
"Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!")
- target.apply_damage(7.5, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(7.5, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
target.apply_damage(12.5, BURN, target_zone, 0, tool)
/datum/surgery_step/generic/incision_manager
@@ -102,7 +102,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \
"Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!")
- target.apply_damage(20, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(20, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
target.apply_damage(15, BURN, target_zone, 0, tool)
/datum/surgery_step/generic/cut_open
@@ -147,7 +147,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user]'s hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!", \
"Your hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!")
- target.apply_damage(10, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(10, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/generic/cut_open_vaurca
allowed_tools = list(
@@ -188,7 +188,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user]'s hand slips, cracking [target]'s [affected.name] carapace in the wrong place with \the [tool]!", \
"Your hand slips, cracking [target]'s [affected.name] carapace in the wrong place with \the [tool]!")
- target.apply_damage(15, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(15, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/generic/clamp_bleeders
allowed_tools = list(
@@ -279,7 +279,7 @@
msg = "[user]'s hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]"
self_msg = "Your hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]!"
user.visible_message(msg, self_msg)
- target.apply_damage(12, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(12, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/generic/cauterize
allowed_tools = list(
@@ -384,5 +384,5 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", \
"Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!")
- target.apply_damage(30, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(30, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
affected.fracture()
\ No newline at end of file
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index e85f253f700..67e0a76b771 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -37,7 +37,7 @@
var/obj/item/organ/external/chest/affected = target.get_organ(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]!")
- target.apply_damage(20, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(20, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/cavity/make_space
allowed_tools = list(
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
index 3ddf433703e..0287e9eab27 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -46,7 +46,7 @@
var/obj/item/organ/external/E = tool
user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \
"Your hand slips, damaging [target]'s [E.amputation_point]!")
- target.apply_damage(10, BRUTE, null, sharp=1)
+ target.apply_damage(10, BRUTE, null, damage_flags = DAM_EDGE)
/datum/surgery_step/limb/connect
allowed_tools = list(
@@ -84,7 +84,7 @@
var/obj/item/organ/external/E = tool
user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \
"Your hand slips, damaging [target]'s [E.amputation_point]!")
- target.apply_damage(10, BRUTE, null, sharp=1)
+ target.apply_damage(10, BRUTE, null, damage_flags = DAM_SHARP)
/datum/surgery_step/limb/mechanize
allowed_tools = list(/obj/item/robot_parts = 100)
@@ -131,4 +131,4 @@
/datum/surgery_step/limb/mechanize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips, damaging [target]'s flesh!", \
"Your hand slips, damaging [target]'s flesh!")
- target.apply_damage(10, BRUTE, null, sharp=1)
\ No newline at end of file
+ target.apply_damage(10, BRUTE, null, damage_flags = DAM_SHARP)
\ No newline at end of file
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index f1ae1439712..d9e650687cd 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -162,7 +162,7 @@
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.sever_artery()
- target.apply_damage(rand(30, 50), BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(rand(30, 50), BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/internal/remove_organ
allowed_tools = list(
@@ -222,7 +222,7 @@
var/obj/item/organ/external/affected = target.get_organ(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]!")
- target.apply_damage(20, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(20, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/internal/replace_organ
allowed_tools = list(
@@ -377,7 +377,7 @@
var/obj/item/organ/external/affected = target.get_organ(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]!")
- target.apply_damage(20, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(20, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
/datum/surgery_step/internal/lobotomize
allowed_tools = list(
@@ -421,4 +421,4 @@
var/obj/item/organ/external/affected = target.get_organ(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]!")
- target.apply_damage(20, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(20, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index c91c6d8c87f..f836b030292 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -260,7 +260,7 @@
"Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!")
target.adjustToxLoss(5)
- target.apply_damage(5, BRUTE, target_zone, 0, tool, tool.sharp, tool.edge)
+ target.apply_damage(5, BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
for(var/obj/item/organ/I in affected.internal_organs)
if(I)
diff --git a/html/changelogs/mattatlas-damageflaggening.yml b/html/changelogs/mattatlas-damageflaggening.yml
new file mode 100644
index 00000000000..bb6304dd6f9
--- /dev/null
+++ b/html/changelogs/mattatlas-damageflaggening.yml
@@ -0,0 +1,41 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: MattAtlas
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - tweak: "Changed how weapons apply their sharp and edge properties. Nothing should change on the frontend but there may be a few bugs."