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."