mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Separates the sharp flag into edge and sharp
Now weapons can properly cause cuts without necessarily having a greater chance to remove limbs. Also separates is_sharp, has_edge, and can_puncture.
This commit is contained in:
@@ -306,7 +306,7 @@
|
||||
switch(trap_type)
|
||||
if("sawburst")
|
||||
M << "\red <b>A sawblade shoots out of the ground and strikes you!</b>"
|
||||
M.apply_damage(rand(5,10), BRUTE)
|
||||
M.apply_damage(rand(5,10), BRUTE, sharp=1, edge=1)
|
||||
|
||||
var/atom/myloc = src.loc
|
||||
var/image/flicker = image('code/WorkInProgress/Cael_Aislinn/Jungle/jungle.dmi',"sawblade")
|
||||
|
||||
@@ -143,25 +143,25 @@
|
||||
var/turf/T = get_turf(M)
|
||||
if(istype(T, /turf/unsimulated/jungle/water))
|
||||
M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
|
||||
M.apply_damage(rand(0,1), BRUTE)
|
||||
M.apply_damage(rand(0,1), BRUTE, sharp=1)
|
||||
if(prob(50))
|
||||
spawn(rand(25,50))
|
||||
var/turf/T = get_turf(M)
|
||||
if(istype(T, /turf/unsimulated/jungle/water))
|
||||
M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
|
||||
M.apply_damage(rand(0,1), BRUTE)
|
||||
M.apply_damage(rand(0,1), BRUTE, sharp=1)
|
||||
if(prob(50))
|
||||
spawn(rand(25,50))
|
||||
var/turf/T = get_turf(M)
|
||||
if(istype(T, /turf/unsimulated/jungle/water))
|
||||
M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
|
||||
M.apply_damage(rand(0,1), BRUTE)
|
||||
M.apply_damage(rand(0,1), BRUTE, sharp=1)
|
||||
if(prob(50))
|
||||
spawn(rand(25,50))
|
||||
var/turf/T = get_turf(M)
|
||||
if(istype(T, /turf/unsimulated/jungle/water))
|
||||
M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
|
||||
M.apply_damage(rand(0,1), BRUTE)
|
||||
M.apply_damage(rand(0,1), BRUTE, sharp=1)
|
||||
|
||||
/turf/unsimulated/jungle/water/deep
|
||||
plants_spawn = 0
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
breaktape(/obj/item/weapon/wirecutters,user)
|
||||
|
||||
/obj/item/tape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(user.a_intent == "help" && ((!is_sharp(W) && src.allowed(user))))
|
||||
if(user.a_intent == "help" && ((!can_puncture(W) && src.allowed(user))))
|
||||
user << "You can't break the [src] with that!"
|
||||
return
|
||||
user.show_viewers("\blue [user] breaks the [src]!")
|
||||
|
||||
@@ -1273,8 +1273,21 @@ proc/is_hot(obj/item/W as obj)
|
||||
|
||||
return 0
|
||||
|
||||
//Is this even used for anything besides balloons? Yes I took out the W:lit stuff because : really shouldnt be used.
|
||||
/proc/is_sharp(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT?
|
||||
//Whether or not the given item counts as sharp in terms of dealing damage
|
||||
/proc/is_sharp(obj/item/W as obj)
|
||||
if (!W) return 0
|
||||
if (W.sharp) return 1
|
||||
if (W.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/item/W as obj)
|
||||
if (!W) return 0
|
||||
if (W.edge) return 1
|
||||
return 0
|
||||
|
||||
//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
|
||||
return ( \
|
||||
@@ -1285,20 +1298,7 @@ proc/is_hot(obj/item/W as obj)
|
||||
istype(W, /obj/item/weapon/lighter/zippo) || \
|
||||
istype(W, /obj/item/weapon/match) || \
|
||||
istype(W, /obj/item/clothing/mask/cigarette) || \
|
||||
istype(W, /obj/item/weapon/wirecutters) || \
|
||||
istype(W, /obj/item/weapon/circular_saw) || \
|
||||
istype(W, /obj/item/weapon/melee/energy/sword) || \
|
||||
istype(W, /obj/item/weapon/melee/energy/blade) || \
|
||||
istype(W, /obj/item/weapon/shovel) || \
|
||||
istype(W, /obj/item/weapon/kitchenknife) || \
|
||||
istype(W, /obj/item/weapon/butch) || \
|
||||
istype(W, /obj/item/weapon/scalpel) || \
|
||||
istype(W, /obj/item/weapon/kitchen/utensil/knife) || \
|
||||
istype(W, /obj/item/weapon/shard) || \
|
||||
istype(W, /obj/item/weapon/broken_bottle) || \
|
||||
istype(W, /obj/item/weapon/reagent_containers/syringe) || \
|
||||
istype(W, /obj/item/weapon/kitchen/utensil/fork) && W.icon_state != "forkloaded" || \
|
||||
istype(W, /obj/item/weapon/twohanded/fireaxe) \
|
||||
istype(W, /obj/item/weapon/shovel) \
|
||||
)
|
||||
|
||||
/proc/is_surgery_tool(obj/item/W as obj)
|
||||
|
||||
@@ -228,6 +228,7 @@
|
||||
icon = 'icons/obj/shards.dmi'
|
||||
icon_state = "large"
|
||||
sharp = 1
|
||||
edge = 1
|
||||
desc = "Could probably be used as ... a throwing weapon?"
|
||||
w_class = 2.0
|
||||
force = 5.0
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
src.visible_message("<span class='danger'>[src] stabs [T] with the proboscis!</span>")
|
||||
T << "<span class='danger'>You feel a sharp stabbing pain!</span>"
|
||||
var/datum/organ/external/affecting = T.get_organ(src.zone_sel.selecting)
|
||||
if(affecting.take_damage(39,0,1,"large organic needle"))
|
||||
if(affecting.take_damage(39,0,1,0,"large organic needle"))
|
||||
T:UpdateDamageIcon()
|
||||
continue
|
||||
|
||||
|
||||
@@ -441,7 +441,7 @@
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
var/datum/organ/external/affecting = human.get_organ(ran_zone(dam_zone))
|
||||
var/armor = human.run_armor_check(affecting, "melee")
|
||||
human.apply_damage(damage,BRUTE,affecting,armor)
|
||||
human.apply_damage(damage,BRUTE,affecting,armor,sharp=1,edge=1)
|
||||
|
||||
else // warning, plants infested with weeds!
|
||||
mode = FARMBOT_MODE_WAITING
|
||||
|
||||
@@ -44,5 +44,5 @@
|
||||
return
|
||||
|
||||
/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (is_sharp(W))
|
||||
if (can_puncture(W))
|
||||
burst()
|
||||
@@ -112,7 +112,7 @@ var/last_chew = 0
|
||||
H.attack_log += text("\[[time_stamp()]\] <font color='red'>[s] ([H.ckey])</font>")
|
||||
log_attack("[s] ([H.ckey])")
|
||||
|
||||
if(O.take_damage(3,0,1,"teeth marks"))
|
||||
if(O.take_damage(3,0,1,1,"teeth marks"))
|
||||
H:UpdateDamageIcon()
|
||||
|
||||
last_chew = world.time
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
name = "fork"
|
||||
desc = "Pointy."
|
||||
icon_state = "fork"
|
||||
sharp = 1
|
||||
|
||||
/obj/item/weapon/kitchen/utensil/fork/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
@@ -114,6 +115,8 @@
|
||||
icon_state = "knife"
|
||||
force = 10.0
|
||||
throwforce = 10.0
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << pick("\red <b>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
@@ -154,6 +157,7 @@
|
||||
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
sharp = 1
|
||||
edge = 1
|
||||
force = 10.0
|
||||
w_class = 3.0
|
||||
throwforce = 6.0
|
||||
@@ -192,6 +196,8 @@
|
||||
m_amt = 12000
|
||||
origin_tech = "materials=1"
|
||||
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
/obj/item/weapon/butch/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS | NOBLOODY
|
||||
origin_tech = "combat=3"
|
||||
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "\red <b>[user] swings the [src.name] towards /his head! It looks like \he's trying to commit suicide.</b>"
|
||||
@@ -37,6 +39,8 @@
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
|
||||
origin_tech = "magnets=3;syndicate=4"
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/pirate
|
||||
name = "energy cutlass"
|
||||
@@ -48,6 +52,8 @@
|
||||
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
|
||||
icon_state = "blade"
|
||||
force = 70.0//Normal attacks deal very high damage.
|
||||
sharp = 1
|
||||
edge = 1
|
||||
throwforce = 1//Throwing or dropping the item deletes it.
|
||||
throw_speed = 1
|
||||
throw_range = 1
|
||||
|
||||
@@ -379,6 +379,8 @@ LOOK FOR SURGERY.DM*/
|
||||
icon_state = "scalpel"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
force = 10.0
|
||||
sharp = 1
|
||||
edge = 1
|
||||
w_class = 2.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 3
|
||||
@@ -668,6 +670,8 @@ LOOK FOR SURGERY.DM*/
|
||||
g_amt = 10000
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
attack_verb = list("attacked", "slashed", "sawed", "cut")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
/*
|
||||
/obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
|
||||
@@ -106,6 +106,8 @@
|
||||
m_amt = 80
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("pinched", "nipped")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
/obj/item/weapon/wirecutters/New()
|
||||
if(prob(50))
|
||||
|
||||
@@ -109,6 +109,8 @@
|
||||
name = "fire axe"
|
||||
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
|
||||
force = 5
|
||||
sharp = 1
|
||||
edge = 1
|
||||
w_class = 4.0
|
||||
slot_flags = SLOT_BACK
|
||||
force_unwielded = 10
|
||||
@@ -154,6 +156,8 @@
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
origin_tech = "magnets=3;syndicate=4"
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/update_icon()
|
||||
icon_state = "dualsaber[wielded]"
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
/obj/item/weapon/harpoon
|
||||
name = "harpoon"
|
||||
sharp = 1
|
||||
edge = 0
|
||||
desc = "Tharr she blows!"
|
||||
icon_state = "harpoon"
|
||||
item_state = "harpoon"
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
var/throwforce = 1
|
||||
var/list/attack_verb = list() //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]"
|
||||
var/sharp = 0 // whether this object cuts
|
||||
var/edge = 0 // whether this object is more likely to dismember
|
||||
var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
|
||||
|
||||
var/damtype = "brute"
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(!istype(W)) return
|
||||
|
||||
if (is_sharp(W))
|
||||
if (can_puncture(W))
|
||||
visible_message("\red <b>[user] pierces [src] with [W]!</b>")
|
||||
deflate(1)
|
||||
if(W.damtype == BRUTE || W.damtype == BURN)
|
||||
|
||||
@@ -138,11 +138,11 @@
|
||||
//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)
|
||||
/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0)
|
||||
var/list/datum/organ/external/parts = get_damageable_organs()
|
||||
if(!parts.len) return
|
||||
var/datum/organ/external/picked = pick(parts)
|
||||
if(picked.take_damage(brute,burn,sharp))
|
||||
if(picked.take_damage(brute,burn,sharp,edge))
|
||||
UpdateDamageIcon()
|
||||
hud_updateflag |= 1 << HEALTH_HUD
|
||||
updatehealth()
|
||||
@@ -172,7 +172,7 @@
|
||||
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/used_weapon = null)
|
||||
/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
|
||||
var/list/datum/organ/external/parts = get_damageable_organs()
|
||||
var/update = 0
|
||||
@@ -182,7 +182,7 @@
|
||||
var/brute_was = picked.brute_dam
|
||||
var/burn_was = picked.burn_dam
|
||||
|
||||
update |= picked.take_damage(brute,burn,sharp,used_weapon)
|
||||
update |= picked.take_damage(brute,burn,sharp,edge,used_weapon)
|
||||
brute -= (picked.brute_dam - brute_was)
|
||||
burn -= (picked.burn_dam - burn_was)
|
||||
|
||||
@@ -227,7 +227,7 @@ This function restores all organs.
|
||||
zone = "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/obj/used_weapon = null)
|
||||
/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)
|
||||
|
||||
//visible_message("Hit debug. [damage] | [damagetype] | [def_zone] | [blocked] | [sharp] | [used_weapon]")
|
||||
if((damagetype != BRUTE) && (damagetype != BURN))
|
||||
@@ -250,11 +250,11 @@ This function restores all organs.
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
damageoverlaytemp = 20
|
||||
if(organ.take_damage(damage, 0, sharp, used_weapon))
|
||||
if(organ.take_damage(damage, 0, sharp, edge, used_weapon))
|
||||
UpdateDamageIcon()
|
||||
if(BURN)
|
||||
damageoverlaytemp = 20
|
||||
if(organ.take_damage(0, damage, sharp, used_weapon))
|
||||
if(organ.take_damage(0, damage, sharp, edge, 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().
|
||||
|
||||
@@ -232,7 +232,7 @@ emp_act
|
||||
if(armor >= 2) return 0
|
||||
if(!I.force) return 0
|
||||
|
||||
apply_damage(I.force, I.damtype, affecting, armor , is_sharp(I), I)
|
||||
apply_damage(I.force, I.damtype, affecting, armor , is_sharp(I), has_edge(I), I)
|
||||
|
||||
var/bloody = 0
|
||||
if(((I.damtype == BRUTE) || (I.damtype == HALLOSS)) && prob(25 + (I.force * 2)))
|
||||
|
||||
@@ -87,13 +87,3 @@ mob/living/carbon/monkey/react_to_attack(mob/M)
|
||||
|
||||
npc_fleeing = M
|
||||
fleeing_duration = 30
|
||||
|
||||
|
||||
/*/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/slash = 0, var/used_weapon = null)
|
||||
if(!client && !stat)
|
||||
if(damage > 10)
|
||||
if(prob(40) || health == 100)
|
||||
emote("me", 2, pick("screams loudly!", "whimpers in pain!"))
|
||||
else if(health == 100 || (damage > 0 && prob(10)))
|
||||
emote("me", 1, pick("flails about wildly!", "cringes visibly!", "chimpers nervously."))
|
||||
return ..()*/
|
||||
@@ -72,7 +72,7 @@
|
||||
src.visible_message("\red [src] has been hit by [O].")
|
||||
var/armor = run_armor_check(zone, "melee", "Your armor has protected your [zone].", "Your armor has softened hit to your [zone].")
|
||||
if(armor < 2)
|
||||
apply_damage(O.throwforce*(speed/5), dtype, zone, armor, O.sharp, O)
|
||||
apply_damage(O.throwforce*(speed/5), dtype, zone, armor, O)
|
||||
|
||||
if(!O.fingerprintslast)
|
||||
return
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
installed = -1
|
||||
uninstall()
|
||||
|
||||
/datum/robot_component/proc/take_damage(brute, electronics, sharp)
|
||||
/datum/robot_component/proc/take_damage(brute, electronics, sharp, edge)
|
||||
if(installed != 1) return
|
||||
|
||||
brute_damage += brute
|
||||
|
||||
@@ -62,7 +62,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)
|
||||
/mob/living/silicon/robot/take_organ_damage(var/brute = 0, var/burn = 0, var/sharp = 0, var/edge = 0)
|
||||
var/list/components = get_damageable_components()
|
||||
if(!components.len)
|
||||
return
|
||||
@@ -86,11 +86,11 @@
|
||||
|
||||
var/datum/robot_component/armour/A = get_armour()
|
||||
if(A)
|
||||
A.take_damage(brute,burn,sharp)
|
||||
A.take_damage(brute,burn,sharp,edge)
|
||||
return
|
||||
|
||||
var/datum/robot_component/C = pick(components)
|
||||
C.take_damage(brute,burn,sharp)
|
||||
C.take_damage(brute,burn,sharp,edge)
|
||||
|
||||
/mob/living/silicon/robot/heal_overall_damage(var/brute, var/burn)
|
||||
var/list/datum/robot_component/parts = get_damaged_components(brute,burn)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
if(worn_helmet)
|
||||
sting_prob -= min(worn_helmet.armor["bio"],30) // Is your helmet sealed? I can't get to 30% of your body.
|
||||
if( prob(sting_prob) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25))) ) // Try to sting! If you're not moving, think about stinging.
|
||||
M.apply_damage(min(strength,2)+mut, BRUTE) // Stinging. The more mutated I am, the harder I sting.
|
||||
M.apply_damage(min(strength,2)+mut, BRUTE, sharp=1) // Stinging. The more mutated I am, the harder I sting.
|
||||
M.apply_damage((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!
|
||||
M << "\red You have been stung!"
|
||||
M.flash_pain()
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
var/mob/living/carbon/human/H = target_mob
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
var/datum/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
|
||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
|
||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1, edge=1)
|
||||
return H
|
||||
else if(isliving(target_mob))
|
||||
var/mob/living/L = target_mob
|
||||
|
||||
@@ -496,7 +496,7 @@
|
||||
var/mob/living/carbon/human/H = parrot_interest
|
||||
var/datum/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
|
||||
|
||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
|
||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1)
|
||||
emote(pick("pecks [H]'s [affecting]", "cuts [H]'s [affecting] with its talons"))
|
||||
|
||||
else
|
||||
|
||||
@@ -70,9 +70,9 @@
|
||||
if(prob(probability))
|
||||
droplimb(1)
|
||||
else
|
||||
take_damage(damage, 0, 1, used_weapon = "EMP")
|
||||
take_damage(damage, 0, 1, 1, used_weapon = "EMP")
|
||||
|
||||
/datum/organ/external/proc/take_damage(brute, burn, sharp, used_weapon = null, list/forbidden_limbs = list())
|
||||
/datum/organ/external/proc/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
|
||||
if((brute <= 0) && (burn <= 0))
|
||||
return 0
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
//If limb took enough damage, try to cut or tear it off
|
||||
if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) //as hilarious as it is, getting hit on the chest too much shouldn't effectively gib you.
|
||||
if(config.limbs_can_break && brute_dam >= max_damage * config.organ_health_multiplier)
|
||||
if( (sharp && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) )
|
||||
if( (edge && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) )
|
||||
droplimb(1)
|
||||
return
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
if(possible_points.len)
|
||||
//And pass the pain around
|
||||
var/datum/organ/external/target = pick(possible_points)
|
||||
target.take_damage(brute, burn, sharp, used_weapon, forbidden_limbs + src)
|
||||
target.take_damage(brute, burn, sharp, edge, used_weapon, forbidden_limbs + src)
|
||||
|
||||
// sync the organ's damage with its wounds
|
||||
src.update_damages()
|
||||
@@ -803,8 +803,8 @@ This function completely restores a damaged organ to perfect condition.
|
||||
else
|
||||
. = new /icon(owner.race_icon, "[icon_name]_[g]")
|
||||
|
||||
/datum/organ/external/head/take_damage(brute, burn, sharp, used_weapon = null, list/forbidden_limbs = list())
|
||||
..(brute, burn, sharp, used_weapon, forbidden_limbs)
|
||||
/datum/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
|
||||
..(brute, burn, sharp, edge, used_weapon, forbidden_limbs)
|
||||
if (!disfigured)
|
||||
if (brute_dam > 40)
|
||||
if (prob(50))
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
|
||||
in_chamber.on_hit(M)
|
||||
if (in_chamber.damage_type != HALLOSS)
|
||||
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]")
|
||||
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp=1)
|
||||
user.death()
|
||||
else
|
||||
user << "<span class = 'notice'>Ow...</span>"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
name = "alloy spike"
|
||||
desc = "It's about a foot of weird silver metal with a wicked point."
|
||||
sharp = 1
|
||||
edge = 0
|
||||
throwforce = 5
|
||||
w_class = 2
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
throwforce = 8
|
||||
w_class = 3.0
|
||||
sharp = 1
|
||||
edge = 0
|
||||
|
||||
/obj/item/weapon/arrow/proc/removed() //Helper for metal rods falling apart.
|
||||
return
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user.visible_message("<span class='danger'>[user.name] fires [src] at \his head!</span>", "<span class='danger'>You fire [src] at your head!</span>", "You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
|
||||
if(!P.nodamage)
|
||||
user.apply_damage(300, BRUTE, affecting) // You are dead, dead, dead.
|
||||
user.apply_damage(300, BRUTE, affecting, sharp=1) // You are dead, dead, dead.
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
armor_duration /= 10
|
||||
|
||||
//Apply the damage!
|
||||
target.apply_damage(force, BRUTE, affecting, armor_block)
|
||||
target.apply_damage(force, BRUTE, affecting, armor_block, sharp=0)
|
||||
|
||||
// You are going to knock someone out for longer if they are not wearing a helmet.
|
||||
if(affecting == "head" && istype(target, /mob/living/carbon/))
|
||||
@@ -125,6 +125,8 @@
|
||||
throw_range = 5
|
||||
item_state = "beer"
|
||||
attack_verb = list("stabbed", "slashed", "attacked")
|
||||
sharp = 1
|
||||
edge = 0
|
||||
var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
|
||||
|
||||
/obj/item/weapon/broken_bottle/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
possible_transfer_amounts = null //list(5,10,15)
|
||||
volume = 15
|
||||
w_class = 1
|
||||
sharp = 1
|
||||
var/mode = SYRINGE_DRAW
|
||||
|
||||
on_reagent_change()
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user]'s hand slips, cutting a vein in [target]'s brain with \the [tool]!", \
|
||||
"\red Your hand slips, cutting a vein in [target]'s brain with \the [tool]!")
|
||||
target.apply_damage(50, BRUTE, "head", 1)
|
||||
target.apply_damage(50, BRUTE, "head", 1, sharp=1)
|
||||
|
||||
/datum/surgery_step/brain/saw_spine
|
||||
allowed_tools = list(
|
||||
@@ -114,7 +114,7 @@
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user]'s hand slips, cutting a vein in [target]'s brain with \the [tool]!", \
|
||||
"\red Your hand slips, cutting a vein in [target]'s brain with \the [tool]!")
|
||||
target.apply_damage(30, BRUTE, "head", 1)
|
||||
target.apply_damage(30, BRUTE, "head", 1, sharp=1)
|
||||
if (ishuman(user))
|
||||
user:bloody_body(target)
|
||||
user:bloody_hands(target, 0)
|
||||
@@ -151,7 +151,7 @@
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user]'s hand slips, jabbing \the [tool] in [target]'s brain!", \
|
||||
"\red Your hand slips, jabbing \the [tool] in [target]'s brain!")
|
||||
target.apply_damage(30, BRUTE, "head", 1)
|
||||
target.apply_damage(30, BRUTE, "head", 1, sharp=1)
|
||||
|
||||
/datum/surgery_step/brain/hematoma
|
||||
allowed_tools = list(
|
||||
@@ -181,7 +181,7 @@
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user]'s hand slips, bruising [target]'s brain with \the [tool]!", \
|
||||
"\red Your hand slips, bruising [target]'s brain with \the [tool]!")
|
||||
target.apply_damage(20, BRUTE, "head", 1)
|
||||
target.apply_damage(20, BRUTE, "head", 1, sharp=1)
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// SLIME CORE EXTRACTION //
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, stabbing \the [tool] into [target]'s eye!", \
|
||||
"\red Your hand slips, stabbing \the [tool] into [target]'s eye!")
|
||||
target.apply_damage(10, BRUTE, affected)
|
||||
target.apply_damage(10, BRUTE, affected, sharp=1)
|
||||
eyes.take_damage(5, 0)
|
||||
|
||||
/datum/surgery_step/eye/cauterize
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \
|
||||
"\red Your hand slips, tearing skin on [target]'s face with \the [tool]!")
|
||||
target.apply_damage(10, BRUTE, affected)
|
||||
target.apply_damage(10, BRUTE, affected, sharp=1, sharp=1)
|
||||
|
||||
/datum/surgery_step/face/cauterize
|
||||
allowed_tools = list(
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
msg = "\red [user]'s hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]"
|
||||
self_msg = "\red 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, affected)
|
||||
target.apply_damage(12, BRUTE, affected, sharp=1)
|
||||
|
||||
/datum/surgery_step/generic/cauterize
|
||||
allowed_tools = list(
|
||||
|
||||
@@ -189,4 +189,4 @@
|
||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, damaging connectors on [target]'s neck!", \
|
||||
"\red Your hand slips, damaging connectors on [target]'s neck!")
|
||||
target.apply_damage(10, BRUTE, affected)
|
||||
target.apply_damage(10, BRUTE, affected, sharp=1)
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
affected = affected.parent
|
||||
user.visible_message("\red [user]'s hand slips, tearing flesh on [target]'s [affected.display_name]!", \
|
||||
"\red Your hand slips, tearing flesh on [target]'s [affected.display_name]!")
|
||||
target.apply_damage(10, BRUTE, affected)
|
||||
target.apply_damage(10, BRUTE, affected, sharp=1)
|
||||
|
||||
|
||||
/datum/surgery_step/limb/prepare
|
||||
@@ -166,4 +166,4 @@
|
||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, damaging connectors on [target]'s [affected.display_name]!", \
|
||||
"\red Your hand slips, damaging connectors on [target]'s [affected.display_name]!")
|
||||
target.apply_damage(10, BRUTE, affected)
|
||||
target.apply_damage(10, BRUTE, affected, sharp=1)
|
||||
|
||||
Reference in New Issue
Block a user