Remove sharp/edge in procs and consolidate them into damage flags. (#8672)

This commit is contained in:
Matt Atlas
2020-04-30 20:29:35 +02:00
committed by GitHub
parent bf4e3d939d
commit 105cb5d64e
41 changed files with 194 additions and 176 deletions
+1 -1
View File
@@ -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
+5 -12
View File
@@ -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
+3 -3
View File
@@ -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("<span class='danger'>[A] stabs [D]'s [organ.name] with their claws!</span>")
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)
+1 -1
View File
@@ -49,7 +49,7 @@
var/atk_verb = pick("slices", "pinches", "chops", "bites", "claws")
D.visible_message("<span class='danger'>[A] [atk_verb] [D]!</span>", \
"<span class='danger'>[A] [atk_verb] you!</span>")
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
+2 -2
View File
@@ -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
@@ -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("<span class='danger'>\The [user] begins to slit [src]'s throat with \the [W]!</span>")
@@ -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
@@ -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)
@@ -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().
@@ -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
@@ -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("<b>\The [src]</b> rips viciously at \the [G.affecting]'s [affected] with its mandibles!"))
msg_admin_attack("[key_name_admin(src)] mandible'd [key_name_admin(H)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)",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("<b>\The [src]</b> rips viciously at \the [G.affecting]'s flesh with its mandibles!"))
msg_admin_attack("[key_name_admin(src)] mandible'd [key_name_admin(M)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)",ckey=key_name(src),ckey_target=key_name(M))
playsound(get_turf(src), 'sound/weapons/slash.ogg', 50, TRUE)
@@ -115,6 +115,13 @@ var/global/list/sparring_attack_cache = list()
user.visible_message("<span class='danger'>[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!</span>")
to_chat(target, "<span class='danger'>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())? "." : "!"]</span>")
/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'
+1 -1
View File
@@ -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)
+10 -12
View File
@@ -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("<span class='warning'>[src] has been hit by [O].</span>")
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
@@ -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)
@@ -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)
@@ -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))
@@ -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, "<span class='warning'>You have been stung!</span>")
M.flash_pain()
@@ -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
@@ -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()
+1 -1
View File
@@ -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
+5 -3
View File
@@ -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
+2 -2
View File
@@ -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))
+1 -1
View File
@@ -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
@@ -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("<span class='danger'>\The [src] escapes from [H]'s hand, hitting their face and shattering into pieces!</span>")
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()
@@ -104,7 +104,7 @@
if(W.edge)
to_chat(H, "<span class='warning'>You stab \the [src] with \the [W]!</span>")
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)
@@ -46,7 +46,7 @@
var/obj/item/organ/external/affecting = H.get_organ(zone)
to_chat(user, "<span class='danger'>The sword refuses you as its true wielder, slashing your [affecting.name] instead!</span>")
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)
+2 -2
View File
@@ -77,7 +77,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("<span class='warning'>[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</span>")
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("<span class='warning'>[user]'s hand slips, damaging [target]'s face with \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, damaging [target]'s face with \the [tool]!</span>")
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
+3 -3
View File
@@ -59,7 +59,7 @@
user.visible_message("<span class='warning'>[user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!</span>" )
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 = "<span class='warning'>Your hand slips, cracking [target]'s [affected.encased]!</span>"
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 = "<span class='warning'>Your hand slips, bending [target]'s [affected.encased] the wrong way!</span>"
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)
+2 -2
View File
@@ -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("<span class='warning'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, slicing [target]'s throat wth \the [tool]!</span>" )
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("<span class='warning'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, slicing [target]'s throat wth \the [tool]!</span>" )
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())
+5 -5
View File
@@ -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("<span class='warning'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, slicing [target]'s throat wth \the [tool]!</span>" )
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("<span class='warning'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, slicing [target]'s throat wth \the [tool]!</span>" )
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("<span class='warning'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, slicing [target]'s throat wth \the [tool]!</span>" )
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("<span class='warning'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, slicing [target]'s throat wth \the [tool]!</span>" )
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("<span class='warning'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</span>" , \
"<span class='warning'>Your hand slips, slicing [target]'s throat wth \the [tool]!</span>" )
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(
+6 -6
View File
@@ -62,7 +62,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("<span class='warning'>[user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'>Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!</span>")
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("<span class='warning'>[user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'>Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!</span>")
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("<span class='warning'>[user]'s hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!</span>", \
"<span class='warning'>Your hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!</span>")
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("<span class='warning'>[user]'s hand slips, cracking [target]'s [affected.name] carapace in the wrong place with \the [tool]!</span>", \
"<span class='warning'>Your hand slips, cracking [target]'s [affected.name] carapace in the wrong place with \the [tool]!</span>")
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 = "<span class='warning'>[user]'s hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]</span>"
self_msg = "<span class='warning'>Your hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]!</span>"
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("<span class='warning'>[user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'>Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!</span>")
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()
+1 -1
View File
@@ -37,7 +37,7 @@
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
user.visible_message("<span class='warning'>[user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'>Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</span>")
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(
+3 -3
View File
@@ -46,7 +46,7 @@
var/obj/item/organ/external/E = tool
user.visible_message("<span class='warning'>[user]'s hand slips, damaging [target]'s [E.amputation_point]!</span>", \
"<span class='warning'>Your hand slips, damaging [target]'s [E.amputation_point]!</span>")
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("<span class='warning'>[user]'s hand slips, damaging [target]'s [E.amputation_point]!</span>", \
"<span class='warning'>Your hand slips, damaging [target]'s [E.amputation_point]!</span>")
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("<span class='warning'>[user]'s hand slips, damaging [target]'s flesh!</span>", \
"<span class='warning'>Your hand slips, damaging [target]'s flesh!</span>")
target.apply_damage(10, BRUTE, null, sharp=1)
target.apply_damage(10, BRUTE, null, damage_flags = DAM_SHARP)
+4 -4
View File
@@ -162,7 +162,7 @@
user.visible_message("<span class='warning'>[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'>Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>")
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("<span class='warning'>[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'>Your hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>")
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("<span class='warning'>[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'>Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>")
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("<span class='warning'>[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'>Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>")
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())
+1 -1
View File
@@ -260,7 +260,7 @@
"<span class='warning'>Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!</span>")
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)