Back up to date.

This commit is contained in:
KasparoVy
2016-07-15 13:00:35 -04:00
1328 changed files with 35982 additions and 17206 deletions
+2 -2
View File
@@ -47,7 +47,7 @@
/datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected.stage == 0)
if(affected.stage == 0)
user.visible_message("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool]." , \
"You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].")
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1)
@@ -90,7 +90,7 @@
/datum/surgery_step/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected.status & ORGAN_BROKEN)
if(affected.status & ORGAN_BROKEN)
user.visible_message("<span class='notice'> [user] sets the bone in [target]'s [affected.name] in place with \the [tool].</span>", \
"<span class='notice'> You set the bone in [target]'s [affected.name] in place with \the [tool].</span>")
affected.stage = 2
+16 -16
View File
@@ -9,7 +9,7 @@
/datum/surgery_step/open_encased/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -27,14 +27,14 @@
time = 54
/datum/surgery_step/open_encased/saw/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return ..() && affected && affected.open == 2
/datum/surgery_step/open_encased/saw/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -45,7 +45,7 @@
/datum/surgery_step/open_encased/saw/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -56,7 +56,7 @@
/datum/surgery_step/open_encased/saw/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -80,14 +80,14 @@
time = 24
/datum/surgery_step/open_encased/retract/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return ..() && affected && affected.open == 2.5
/datum/surgery_step/open_encased/retract/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -99,7 +99,7 @@
/datum/surgery_step/open_encased/retract/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -113,7 +113,7 @@
/datum/surgery_step/open_encased/retract/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -138,14 +138,14 @@
/datum/surgery_step/open_encased/close/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return ..() && affected && affected.open == 3
/datum/surgery_step/open_encased/close/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -157,7 +157,7 @@
/datum/surgery_step/open_encased/close/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -171,7 +171,7 @@
/datum/surgery_step/open_encased/close/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -195,14 +195,14 @@
/datum/surgery_step/open_encased/mend/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return ..() && affected && affected.open == 2.5
/datum/surgery_step/open_encased/mend/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -214,7 +214,7 @@
/datum/surgery_step/open_encased/mend/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
+3 -3
View File
@@ -24,10 +24,10 @@
can_infect = 0
/datum/surgery_step/face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (!affected || (affected.status & ORGAN_ROBOT))
if(!affected || (affected.status & ORGAN_ROBOT))
return 0
return target_zone == "mouth"
@@ -159,7 +159,7 @@
"<span class='notice'> You cauterize the incision on [target]'s face and neck with \the [tool].</span>")
affected.open = 0
affected.status &= ~ORGAN_BLEEDING
//if (target.op_stage.face == 3)//I NEED TO REPLACE THE OPSTAGE SHIT!
//if(target.op_stage.face == 3)//I NEED TO REPLACE THE OPSTAGE SHIT!
var/obj/item/organ/external/head/h = affected
h.disfigured = 0
h.update_icon()
+15 -15
View File
@@ -7,16 +7,16 @@
can_infect = 1
/datum/surgery_step/generic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (target_zone == "eyes") //there are specific steps for eye surgery
if(target_zone == "eyes") //there are specific steps for eye surgery
return 0
if (!hasorgans(target))
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected == null)
if(affected == null)
return 0
if (affected.status & ORGAN_DESTROYED)
if(affected.status & ORGAN_DESTROYED)
return 0
if (affected.status & ORGAN_ROBOT)
if(affected.status & ORGAN_ROBOT)
return 0
return 1
@@ -130,10 +130,10 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
var/msg = "[user] starts to pry open the incision on [target]'s [affected.name] with \the [tool]."
var/self_msg = "You start to pry open the incision on [target]'s [affected.name] with \the [tool]."
if (target_zone == "chest")
if(target_zone == "chest")
msg = "[user] starts to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]."
self_msg = "You start to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]."
if (target_zone == "groin")
if(target_zone == "groin")
msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
user.visible_message(msg, self_msg)
@@ -144,10 +144,10 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
var/msg = "<span class='notice'> [user] keeps the incision open on [target]'s [affected.name] with \the [tool].</span>"
var/self_msg = "<span class='notice'> You keep the incision open on [target]'s [affected.name] with \the [tool].</span>"
if (target_zone == "chest")
if(target_zone == "chest")
msg = "<span class='notice'> [user] keeps the ribcage open on [target]'s torso with \the [tool].</span>"
self_msg = "<span class='notice'> You keep the ribcage open on [target]'s torso with \the [tool]."
if (target_zone == "groin")
if(target_zone == "groin")
msg = "<span class='notice'> [user] keeps the incision open on [target]'s lower abdomen with \the [tool].</span>"
self_msg = "<span class='notice'> You keep the incision open on [target]'s lower abdomen with \the [tool].</span>"
user.visible_message(msg, self_msg)
@@ -158,10 +158,10 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
var/msg = "<span class='warning'> [user]'s hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!</span>"
var/self_msg = "<span class='warning'> Your hand slips, tearing the edges of incision on [target]'s [affected.name] with \the [tool]!</span>"
if (target_zone == "chest")
if(target_zone == "chest")
msg = "<span class='warning'> [user]'s hand slips, damaging several organs [target]'s torso with \the [tool]!</span>"
self_msg = "<span class='warning'> Your hand slips, damaging several organs [target]'s torso with \the [tool]!</span>"
if (target_zone == "groin")
if(target_zone == "groin")
msg = "<span class='warning'> [user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]</span>"
self_msg = "<span class='warning'> Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!</span>"
user.visible_message(msg, self_msg)
@@ -239,14 +239,14 @@
time = 100
/datum/surgery_step/generic/amputate/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (target_zone == "eyes") //there are specific steps for eye surgery
if(target_zone == "eyes") //there are specific steps for eye surgery
return 0
if (!hasorgans(target))
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected == null)
if(affected == null)
return 0
if (affected.status & ORGAN_DESTROYED)
if(affected.status & ORGAN_DESTROYED)
return 0
return !affected.cannot_amputate
+11 -11
View File
@@ -42,22 +42,22 @@
return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING)
/datum/surgery_step/cavity/proc/get_max_wclass(obj/item/organ/external/affected)
switch (affected.limb_name)
if ("head")
switch(affected.limb_name)
if("head")
return 1
if ("chest")
if("chest")
return 3
if ("groin")
if("groin")
return 2
return 0
/datum/surgery_step/cavity/proc/get_cavity(obj/item/organ/external/affected)
switch (affected.limb_name)
if ("head")
switch(affected.limb_name)
if("head")
return "cranial"
if ("chest")
if("chest")
return "thoracic"
if ("groin")
if("groin")
return "abdominal"
return ""
@@ -142,7 +142,7 @@
/datum/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!ishuman(target))
if(!ishuman(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
var/can_fit = affected && !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected)
@@ -292,10 +292,10 @@
/datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
..()
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
if (affected.implants.len)
if(affected.implants.len)
var/fail_prob = 10
fail_prob += 100 - tool_quality(tool)
if (prob(fail_prob))
if(prob(fail_prob))
var/obj/item/weapon/implant/imp = affected.implants[1]
user.visible_message("<span class='warning'> Something beeps inside [target]'s [affected.name]!</span>")
playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3)
+9 -4
View File
@@ -68,10 +68,10 @@
/datum/surgery_step/limb/
can_infect = 0
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (!hasorgans(target))
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected)
if(affected)
return 0
var/list/organ_data = target.species.has_limbs["[target_zone]"]
return !isnull(organ_data)
@@ -95,6 +95,11 @@
E.replaced(target)
E.forceMove(target)
if(target.get_species() == "Machine")//as this is the only step needed for ipc put togethers
if(!(E.dna) && E.robotic == 2 && target.dna)
E.dna = target.dna.Clone()
if(!E.blood_DNA)
E.blood_DNA = list()
E.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type
if(target_zone == "head")
var/obj/item/organ/external/head/H = target.get_organ("head")
var/datum/robolimb/robohead = all_robolimbs[H.model]
@@ -172,8 +177,8 @@
/datum/surgery_step/limb/mechanize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(..())
var/obj/item/robot_parts/p = tool
if (p.part)
if (!(target_zone in p.part))
if(p.part)
if(!(target_zone in p.part))
return 0
return isnull(target.get_organ(target_zone))
+36 -84
View File
@@ -1,14 +1,8 @@
/****************************************************
BLOOD SYSTEM
****************************************************/
//Blood levels
var/const/BLOOD_VOLUME_SAFE = 501
var/const/BLOOD_VOLUME_OKAY = 336
var/const/BLOOD_VOLUME_BAD = 224
var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here.
/mob/living/carbon/human/var/var/pale = 0 //Should affect how mob sprite is drawn, but currently doesn't.
//Initializes blood vessels
/mob/living/carbon/human/proc/make_blood()
@@ -60,12 +54,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
blood_volume = round(vessel.get_reagent_amount(blood_reagent))
if(blood_volume < max_blood && blood_volume)
vessel.add_reagent(blood_reagent, 0.1) // regenerate blood VERY slowly
if (reagents.has_reagent("nutriment")) //Getting food speeds it up
if(reagents.has_reagent(blood_reagent))
vessel.add_reagent(blood_reagent, 0.4)
reagents.remove_reagent("nutriment", 0.1)
else if (reagents.has_reagent(blood_reagent))
vessel.add_reagent(blood_reagent, 0.4)
reagents.remove_reagent(blood_reagent, 0.4)
else
blood_volume = round(vessel.get_reagent_amount("blood"))
@@ -73,14 +63,13 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
if(blood_volume < max_blood && blood_volume)
var/datum/reagent/blood/B = locate() in vessel.reagent_list //Grab some blood
if(B) // Make sure there's some blood at all
if(src.mind) //Handles vampires "eating" blood that isn't their own.
if(src.mind in ticker.mode.vampires)
if(mind) //Handles vampires "eating" blood that isn't their own.
if(mind in ticker.mode.vampires)
for(var/datum/reagent/blood/BL in vessel.reagent_list)
if(src.nutrition >= 450)
if(nutrition >= 450)
break //We don't want blood tranfusions making vampires fat.
if(BL.data["donor"] != src)
src.nutrition += (15 * REAGENTS_METABOLISM)
nutrition += (15 * REAGENTS_METABOLISM)
BL.volume -= REAGENTS_METABOLISM
if(BL.volume <= 0)
qdel(BL)
@@ -93,86 +82,49 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
break
vessel.add_reagent("blood", 0.1) // regenerate blood VERY slowly
if (reagents.has_reagent("nutriment")) //Getting food speeds it up
vessel.add_reagent("blood", 0.4)
reagents.remove_reagent("nutriment", 0.1)
if (reagents.has_reagent("iron")) //Hematogen candy anyone?
vessel.add_reagent("blood", 0.8)
reagents.remove_reagent("iron", 0.1)
if (reagents.has_reagent("salglu_solution")) //saline is good for blood regeneration
if(prob(33))
vessel.add_reagent("blood", 1.0)
// Damaged heart virtually reduces the blood volume, as the blood isn't
// being pumped properly anymore.
var/obj/item/organ/internal/heart/heart = get_int_organ(/obj/item/organ/internal/heart)
if(heart)
if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
blood_volume *= 0.8
else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage)
blood_volume *= 0.6
else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY)
blood_volume *= 0.3
//Effects of bloodloss
var/oxy_immune = species.flags & NO_BREATHE //Some species have blood, but don't breathe; they should still suffer the effects of bloodloss.
switch(blood_volume)
if(BLOOD_VOLUME_SAFE to 10000)
if(pale)
pale = 0
update_body()
if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
if(!pale)
pale = 1
update_body()
var/word = pick("dizzy","woosey","faint")
to_chat(src, "\red You feel [word]")
if(prob(1))
var/word = pick("dizzy","woosey","faint")
to_chat(src, "\red You feel [word]")
if(oxyloss < 20)
oxyloss += 3
if(prob(5))
to_chat(src, "<span class='warning'>You feel [pick("dizzy","woozy","faint")].</span>")
if(oxy_immune)
adjustToxLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1))
else
adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1))
if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
if(!pale)
pale = 1
update_body()
eye_blurry += 6
if(oxyloss < 50)
oxyloss += 10
oxyloss += 1
if(prob(15))
Paralyse(rand(1,3))
var/word = pick("dizzy","woosey","faint")
to_chat(src, "\red You feel very [word]")
if(oxy_immune)
adjustToxLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1))
else
adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1))
if(prob(5))
eye_blurry = max(eye_blurry, 6)
var/word = pick("dizzy","woozy","faint")
to_chat(src, "<span class='warning'>You feel very [word].</span>")
if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
if(!pale)
pale = 1
update_body()
if(oxyloss > 20)
eye_blurry += 6
oxyloss += 12
if(oxy_immune)
adjustToxLoss(5)
else
adjustOxyLoss(5)
if(prob(15))
Paralyse(rand(1,3))
var/word = pick("dizzy","woosey","faint")
to_chat(src, "\red You feel extremely [word]")
var/word = pick("dizzy","woozy","faint")
to_chat(src, "<span class='warning'>You feel extremely [word].</span>")
if(0 to BLOOD_VOLUME_SURVIVE)
death()
// Without enough blood you slowly go hungry.
if(blood_volume < BLOOD_VOLUME_SAFE)
if(nutrition >= 300)
nutrition -= 10
else if(nutrition >= 200)
nutrition -= 3
//Bleeding out
var/blood_max = 0
for(var/obj/item/organ/external/temp in organs)
if(!(temp.status & ORGAN_BLEEDING) || temp.status & ORGAN_ROBOT)
continue
for(var/datum/wound/W in temp.wounds) if(W.bleeding())
blood_max += W.damage / 4
if (temp.open)
for(var/datum/wound/W in temp.wounds)
if(W.bleeding())
blood_max += W.damage / 4
if(temp.open)
blood_max += 2 //Yer stomach is cut open
drip(blood_max)
@@ -188,7 +140,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
var/amm = 0.1 * amt
var/turf/T = get_turf(src)
if(src.species.exotic_blood)
if(species.exotic_blood)
vessel.remove_reagent(species.exotic_blood,amm)
if(vessel.total_volume)
var/fraction = amm / vessel.total_volume
@@ -197,7 +149,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
else
vessel.remove_reagent("blood",amm)
blood_splatter(src,src)
blood_splatter(src, src)
/****************************************************
@@ -263,13 +215,13 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
var/datum/reagent/blood/injected = get_blood(container.reagents)
if (!istype(injected))
if(!istype(injected))
return
var/list/chems = list()
chems = params2list(injected.data["trace_chem"])
for(var/C in chems)
src.reagents.add_reagent(C, (text2num(chems[C]) / 560) * amount)//adds trace chemicals to owner's blood
src.reagents.add_reagent(C, (text2num(chems[C]) / BLOOD_VOLUME_NORMAL) * amount)//adds trace chemicals to owner's blood
reagents.update_total()
container.reagents.remove_reagent("blood", amount)
@@ -286,7 +238,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
var/datum/reagent/blood/our = get_blood(vessel)
if (!istype(injected) || !istype(our))
if(!istype(injected) || !istype(our))
return
if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"]) )
reagents.add_reagent("toxin",amount * 0.5)
+23 -20
View File
@@ -22,7 +22,7 @@ var/list/organ_cache = list()
// links chemical IDs to number of ticks for which they'll stay in the blood
germ_level = 0
var/datum/dna/dna
var/datum/species/species
var/datum/species/species = "Human"
// Stuff for tracking if this is on a tile with an open freezer or not
var/last_freezer_update_time = 0
@@ -53,6 +53,9 @@ var/list/organ_cache = list()
if(!blood_DNA)
blood_DNA = list()
blood_DNA[dna.unique_enzymes] = dna.b_type
else
if(istext(species))
species = all_species[species]
/obj/item/organ/proc/set_dna(var/datum/dna/new_dna)
if(new_dna)
@@ -84,7 +87,7 @@ var/list/organ_cache = list()
return
//Process infections
if ((status & ORGAN_ROBOT) || sterile ||(owner && owner.species && (owner.species.flags & IS_PLANT)))
if((status & ORGAN_ROBOT) || sterile ||(owner && owner.species && (owner.species.flags & IS_PLANT)))
germ_level = 0
return
@@ -149,10 +152,10 @@ var/list/organ_cache = list()
//** Handle the effects of infections
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(30))
if(germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(30))
germ_level--
if (germ_level >= INFECTION_LEVEL_ONE/2)
if(germ_level >= INFECTION_LEVEL_ONE/2)
//aiming for germ level to go from ambient to INFECTION_LEVEL_TWO in an average of 15 minutes
if(antibiotics < 5 && prob(round(germ_level/6)))
germ_level++
@@ -161,13 +164,13 @@ var/list/organ_cache = list()
var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature
owner.bodytemperature += between(0, (fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, fever_temperature - owner.bodytemperature)
if (germ_level >= INFECTION_LEVEL_TWO)
if(germ_level >= INFECTION_LEVEL_TWO)
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
//spread germs
if (antibiotics < 5 && parent.germ_level < germ_level && ( parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30) ))
if(antibiotics < 5 && parent.germ_level < germ_level && ( parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30) ))
parent.germ_level++
if (prob(3)) //about once every 30 seconds
if(prob(3)) //about once every 30 seconds
take_damage(1,silent=prob(30))
/obj/item/organ/proc/receive_chem(chemical as obj)
@@ -178,7 +181,7 @@ var/list/organ_cache = list()
germ_level = 0
if(status & ORGAN_ROBOT) //Robotic organs stay robotic.
status = ORGAN_ROBOT
else if (status & ORGAN_ASSISTED) //Assisted organs stay assisted.
else if(status & ORGAN_ASSISTED) //Assisted organs stay assisted.
status = ORGAN_ASSISTED
else
status = 0
@@ -198,12 +201,12 @@ var/list/organ_cache = list()
/obj/item/organ/proc/handle_antibiotics()
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
if (!germ_level || antibiotics <= 0.4)
if(!germ_level || antibiotics <= 0.4)
return
if (germ_level < INFECTION_LEVEL_ONE)
if(germ_level < INFECTION_LEVEL_ONE)
germ_level = 0 //cure instantly
else if (germ_level < INFECTION_LEVEL_TWO)
else if(germ_level < INFECTION_LEVEL_TWO)
germ_level -= 24 //at germ_level == 500, this should cure the infection in 15 seconds
else
germ_level -= 8 // at germ_level == 1000, this will cure the infection in 1 minute, 15 seconds
@@ -257,11 +260,11 @@ var/list/organ_cache = list()
/obj/item/organ/emp_act(severity)
if(!(status & ORGAN_ROBOT))
return
switch (severity)
if (1.0)
switch(severity)
if(1.0)
take_damage(0,20)
return
if (2.0)
if(2.0)
take_damage(0,7)
return
if(3.0)
@@ -271,10 +274,10 @@ var/list/organ_cache = list()
if(!robotic)
return
if(robotic == 2)
switch (severity)
if (1.0)
switch(severity)
if(1.0)
take_damage(20,1)
if (2.0)
if(2.0)
take_damage(7,1)
if(3.0)
take_damage(3,1)
@@ -319,7 +322,7 @@ var/list/organ_cache = list()
owner = target
processing_objects -= src
affected.internal_organs |= src
if (!target.get_int_organ(src))
if(!target.get_int_organ(src))
target.internal_organs += src
src.loc = target
if(robotic)
@@ -335,8 +338,8 @@ Returns 0 if it isn't
I use this so that this can be made better once the organ overhaul rolls out -- Crazylemon
*/
/obj/item/organ/proc/is_primary_organ(var/mob/living/carbon/human/O = null)
if (isnull(O))
if(isnull(O))
O = owner
if (!istype(owner)) // You're not the primary organ of ANYTHING, bucko
if(!istype(owner)) // You're not the primary organ of ANYTHING, bucko
return 0
return src == O.get_int_organ(organ_tag)
+42 -42
View File
@@ -210,7 +210,7 @@
//How much damage can we actually cause?
var/can_inflict = max_damage * config.organ_health_multiplier - (brute_dam + burn_dam)
if(can_inflict)
if (brute > 0)
if(brute > 0)
//Inflict all burte damage we can
if(can_cut)
createwound( CUT, min(brute,can_inflict) )
@@ -222,14 +222,14 @@
//How much brute damage is left to inflict
brute = max(0, brute - temp)
if (burn > 0 && can_inflict)
if(burn > 0 && can_inflict)
//Inflict all burn damage we can
createwound(BURN, min(burn,can_inflict))
//How much burn damage is left to inflict
burn = max(0, burn - can_inflict)
//If there are still hurties to dispense
if (burn || brute)
if (fail_at_full_damage == 1 && body_part != UPPER_TORSO && body_part != LOWER_TORSO)
if(burn || brute)
if(fail_at_full_damage == 1 && body_part != UPPER_TORSO && body_part != LOWER_TORSO)
droplimb(1) //Clean loss, just drop the limb and be done
else
//List organs we can pass it to
@@ -310,7 +310,7 @@ This function completely restores a damaged organ to perfect condition.
damage_state = "00"
if(status & ORGAN_ROBOT) //Robotic organs stay robotic.
status = ORGAN_ROBOT
else if (status & ORGAN_ASSISTED) //Assisted organs stay assisted.
else if(status & ORGAN_ASSISTED) //Assisted organs stay assisted.
status = ORGAN_ASSISTED
else
status = 0
@@ -358,8 +358,8 @@ This function completely restores a damaged organ to perfect condition.
if((type == CUT || type == BRUISE) && damage >= 5)
//we need to make sure that the wound we are going to worsen is compatible with the type of damage...
var/list/compatible_wounds = list()
for (var/datum/wound/W in wounds)
if (W.can_worsen(type, damage))
for(var/datum/wound/W in wounds)
if(W.can_worsen(type, damage))
compatible_wounds += W
if(compatible_wounds.len)
@@ -412,7 +412,7 @@ This function completely restores a damaged organ to perfect condition.
if(!wound_cleanup_timer)
wound_cleanup_timer = addtimer(src, "cleanup_wounds", SecondsToTicks(600), 1, wounds)
if (update_icon())
if(update_icon())
owner.UpdateDamageIcon(1)
return 0
@@ -482,13 +482,13 @@ Note that amputating the affected organ does in fact remove the infection from t
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
for(var/datum/wound/W in wounds)
//Open wounds can become infected
if (owner.germ_level > W.germ_level && W.infection_check())
if(owner.germ_level > W.germ_level && W.infection_check())
W.germ_level++
if (antibiotics < 5)
if(antibiotics < 5)
for(var/datum/wound/W in wounds)
//Infected wounds raise the organ's germ level
if (W.germ_level > germ_level)
if(W.germ_level > germ_level)
germ_level++
break //limit increase to a maximum of one per second
@@ -502,37 +502,37 @@ Note that amputating the affected organ does in fact remove the infection from t
if(germ_level >= INFECTION_LEVEL_TWO)
//spread the infection to internal organs
var/obj/item/organ/internal/target_organ = null //make internal organs become infected one at a time instead of all at once
for (var/obj/item/organ/internal/I in internal_organs)
if (I.germ_level > 0 && I.germ_level < min(germ_level, INFECTION_LEVEL_TWO)) //once the organ reaches whatever we can give it, or level two, switch to a different one
if (!target_organ || I.germ_level > target_organ.germ_level) //choose the organ with the highest germ_level
for(var/obj/item/organ/internal/I in internal_organs)
if(I.germ_level > 0 && I.germ_level < min(germ_level, INFECTION_LEVEL_TWO)) //once the organ reaches whatever we can give it, or level two, switch to a different one
if(!target_organ || I.germ_level > target_organ.germ_level) //choose the organ with the highest germ_level
target_organ = I
if (!target_organ)
if(!target_organ)
//figure out which organs we can spread germs to and pick one at random
var/list/candidate_organs = list()
for (var/obj/item/organ/internal/I in internal_organs)
if (I.germ_level < germ_level)
for(var/obj/item/organ/internal/I in internal_organs)
if(I.germ_level < germ_level)
candidate_organs |= I
if (candidate_organs.len)
if(candidate_organs.len)
target_organ = pick(candidate_organs)
if (target_organ)
if(target_organ)
target_organ.germ_level++
//spread the infection to child and parent organs
if (children)
for (var/obj/item/organ/external/child in children)
if (child.germ_level < germ_level && !(child.status & ORGAN_ROBOT))
if (child.germ_level < INFECTION_LEVEL_ONE*2 || prob(30))
if(children)
for(var/obj/item/organ/external/child in children)
if(child.germ_level < germ_level && !(child.status & ORGAN_ROBOT))
if(child.germ_level < INFECTION_LEVEL_ONE*2 || prob(30))
child.germ_level++
if (parent)
if (parent.germ_level < germ_level && !(parent.status & ORGAN_ROBOT))
if (parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30))
if(parent)
if(parent.germ_level < germ_level && !(parent.status & ORGAN_ROBOT))
if(parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30))
parent.germ_level++
if(germ_level >= INFECTION_LEVEL_THREE && antibiotics < 30) //overdosing is necessary to stop severe infections
if (!(status & ORGAN_DEAD))
if(!(status & ORGAN_DEAD))
status |= ORGAN_DEAD
to_chat(owner, "<span class='notice'>You can't feel your [name] anymore...</span>")
owner.update_body(1)
@@ -567,7 +567,7 @@ Note that amputating the affected organ does in fact remove the infection from t
var/heal_amt = 0
// if damage >= 50 AFTER treatment then it's probably too severe to heal within the timeframe of a round.
if (W.can_autoheal() && W.wound_damage() < 50)
if(W.can_autoheal() && W.wound_damage() < 50)
heal_amt += 0.5
//we only update wounds once in [wound_update_accuracy] ticks so have to emulate realtime
@@ -587,7 +587,7 @@ Note that amputating the affected organ does in fact remove the infection from t
// sync the organ's damage with its wounds
src.update_damages()
if (update_icon())
if(update_icon())
owner.UpdateDamageIcon(1)
//Updates brute_damn and burn_damn from wound damages. Updates BLEEDING status.
@@ -620,7 +620,7 @@ Note that amputating the affected organ does in fact remove the infection from t
number_wounds += W.amount
if (open && !clamped && (H && !(H.species.flags & NO_BLOOD)))
if(open && !clamped && (H && !(H.species.flags & NO_BLOOD)))
status |= ORGAN_BLEEDING
//Bone fractures
@@ -638,18 +638,18 @@ Note that amputating the affected organ does in fact remove the infection from t
if(burn_dam ==0)
tburn =0
else if (burn_dam < (max_damage * 0.25 / 2))
else if(burn_dam < (max_damage * 0.25 / 2))
tburn = 1
else if (burn_dam < (max_damage * 0.75 / 2))
else if(burn_dam < (max_damage * 0.75 / 2))
tburn = 2
else
tburn = 3
if (brute_dam == 0)
if(brute_dam == 0)
tbrute = 0
else if (brute_dam < (max_damage * 0.25 / 2))
else if(brute_dam < (max_damage * 0.25 / 2))
tbrute = 1
else if (brute_dam < (max_damage * 0.75 / 2))
else if(brute_dam < (max_damage * 0.75 / 2))
tbrute = 2
else
tbrute = 3
@@ -744,12 +744,12 @@ Note that amputating the affected organ does in fact remove the infection from t
holder = owner
if(!holder)
return
if (holder.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT))
if(holder.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT))
holder.visible_message(\
"\The [holder.handcuffed.name] falls off of [holder.name].",\
"\The [holder.handcuffed.name] falls off you.")
holder.unEquip(holder.handcuffed)
if (holder.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT))
if(holder.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT))
holder.visible_message(\
"\The [holder.legcuffed.name] falls off of [holder.name].",\
"\The [holder.legcuffed.name] falls off you.")
@@ -809,7 +809,7 @@ Note that amputating the affected organ does in fact remove the infection from t
perma_injury = brute_dam
// Fractures have a chance of getting you out of restraints
if (prob(25))
if(prob(25))
release_restraints()
/obj/item/organ/external/proc/mend_fracture()
@@ -845,7 +845,7 @@ Note that amputating the affected organ does in fact remove the infection from t
cannot_break = 1
get_icon()
for (var/obj/item/organ/external/T in children)
for(var/obj/item/organ/external/T in children)
if(T)
T.robotize()
@@ -939,7 +939,7 @@ Note that amputating the affected organ does in fact remove the infection from t
qdel(src)
/obj/item/organ/external/proc/disfigure(var/type = "brute")
if (disfigured)
if(disfigured)
return
if(owner)
if(type == "brute")
@@ -953,9 +953,9 @@ Note that amputating the affected organ does in fact remove the infection from t
disfigured = 1
/obj/item/organ/external/is_primary_organ(var/mob/living/carbon/human/O = null)
if (isnull(O))
if(isnull(O))
O = owner
if (!istype(O)) // You're not the primary organ of ANYTHING, bucko
if(!istype(O)) // You're not the primary organ of ANYTHING, bucko
return 0
return src == O.organs_by_name[limb_name]
+5 -5
View File
@@ -116,18 +116,18 @@ var/global/list/limb_icon_cache = list()
return mob_icon
/obj/item/organ/external/proc/get_icon(var/skeletal)
var/gender
if(istext(species))
species = all_species[species]
if(force_icon)
mob_icon = new /icon(force_icon, "[icon_name]")
if(species && species.name == "Machine") //snowflake for IPC's, sorry.
if(species && species.name == "Machine") //snowflake for IPC's, sorry.
if(s_col && s_col.len >= 3)
mob_icon.Blend(rgb(s_col[1], s_col[2], s_col[3]), ICON_ADD)
else
if(!dna)
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_f" : ""]")
else
if(gendered_icon)
if(dna.GetUIState(DNA_UI_GENDER))
gender = "f"
@@ -139,7 +139,7 @@ var/global/list/limb_icon_cache = list()
else if(status & ORGAN_ROBOT)
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
else
if (status & ORGAN_MUTATED)
if(status & ORGAN_MUTATED)
mob_icon = new /icon(species.deform, "[icon_name][gender ? "_[gender]" : ""]")
else
mob_icon = new /icon(species.icobase, "[icon_name][gender ? "_[gender]" : ""]")
@@ -165,7 +165,7 @@ var/global/list/limb_icon_cache = list()
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
/obj/item/organ/external/update_icon()
var/n_is = damage_state_text()
if (n_is != damage_state)
if(n_is != damage_state)
damage_state = n_is
return 1
return 0
+84 -12
View File
@@ -191,6 +191,70 @@
S.icon_state = "heart-off"
return S
/obj/item/organ/internal/heart/cursed
name = "cursed heart"
desc = "it needs to be pumped..."
icon_state = "cursedheart-off"
icon_base = "cursedheart"
origin_tech = "biotech=5"
organ_action_name = "pump your blood"
var/last_pump = 0
var/pump_delay = 30 //you can pump 1 second early, for lag, but no more (otherwise you could spam heal)
var/blood_loss = 100 //600 blood is human default, so 5 failures (below 122 blood is where humans die because reasons?)
//How much to heal per pump, negative numbers would HURT the player
var/heal_brute = 0
var/heal_burn = 0
var/heal_oxy = 0
/obj/item/organ/internal/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target)
if(H == user && istype(H))
if(H.species.flags & NO_BLOOD || H.species.exotic_blood)
to_chat(H, "<span class = 'userdanger'>\The [src] is not compatible with your form!</span>")
return
playsound(user,'sound/effects/singlebeat.ogg', 40, 1)
user.drop_item()
insert(user)
else
return ..()
/obj/item/organ/internal/heart/cursed/on_life()
if(world.time > (last_pump + pump_delay))
if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects.
var/mob/living/carbon/human/H = owner
H.vessel.remove_reagent("blood", blood_loss)
to_chat(H, "<span class='userdanger'>You have to keep pumping your blood!</span>")
if(H.client)
H.client.color = "red" //bloody screen so real
else
last_pump = world.time //lets be extra fair *sigh*
/obj/item/organ/internal/heart/cursed/insert(mob/living/carbon/M, special = 0)
..()
if(owner)
to_chat(owner, "<span class='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
//You are now brea- pumping blood manually
/obj/item/organ/internal/heart/cursed/ui_action_click()
if(world.time < (last_pump + (pump_delay-10))) //no spam
to_chat(owner, "<span class='userdanger'>Too soon!</span>")
return
last_pump = world.time
playsound(owner, 'sound/effects/singlebeat.ogg', 40, 1)
to_chat(owner, "<span class='notice'>Your heart beats.</span>")
var/mob/living/carbon/human/H = owner
if(istype(H))
H.vessel.add_reagent("blood", (blood_loss*0.5))//gain half the blood back from a failure
if(owner.client)
owner.client.color = ""
H.adjustBruteLoss(-heal_brute)
H.adjustFireLoss(-heal_burn)
H.adjustOxyLoss(-heal_oxy)
/obj/item/organ/internal/lungs
name = "lungs"
icon_state = "lungs"
@@ -212,7 +276,7 @@
if(!owner)
return
if (germ_level > INFECTION_LEVEL_ONE)
if(germ_level > INFECTION_LEVEL_ONE)
if(prob(5))
owner.emote("cough") //respitory tract infection
@@ -302,10 +366,10 @@
if(!owner)
return
if (germ_level > INFECTION_LEVEL_ONE)
if(germ_level > INFECTION_LEVEL_ONE)
if(prob(1))
to_chat(owner, "<span class='warning'> Your skin itches.</span>")
if (germ_level > INFECTION_LEVEL_TWO)
if(germ_level > INFECTION_LEVEL_TWO)
if(prob(1))
spawn owner.vomit()
@@ -314,7 +378,7 @@
//High toxins levels are dangerous
if(owner.getToxLoss() >= 60 && !owner.reagents.has_reagent("charcoal"))
//Healthy liver suffers on its own
if (src.damage < min_broken_damage)
if(src.damage < min_broken_damage)
src.damage += 0.2 * PROCESS_ACCURACY
//Damaged one shares the fun
else
@@ -323,7 +387,7 @@
O.damage += 0.2 * PROCESS_ACCURACY
//Detox can heal small amounts of damage
if (src.damage && src.damage < src.min_bruised_damage && owner.reagents.has_reagent("charcoal"))
if(src.damage && src.damage < src.min_bruised_damage && owner.reagents.has_reagent("charcoal"))
src.damage -= 0.2 * PROCESS_ACCURACY
if(src.damage < 0)
@@ -476,13 +540,22 @@
var/mob/living/carbon/human/H = owner
if(isobj(H.shoes))
var/thingy = H.shoes
H.unEquip(H.shoes)
walk_away(thingy,H,15,2)
spawn(20)
if(thingy)
walk(thingy,0)
if(H.unEquip(H.shoes))
walk_away(thingy,H,15,2)
spawn(20)
if(thingy)
walk(thingy,0)
..()
/obj/item/organ/internal/honktumor/cursed
/obj/item/organ/internal/honktumor/cursed/remove(mob/living/carbon/M, special = 0, clean_remove = 0)
..()
if(!clean_remove)
visible_message("<span class='warning'>[src] vanishes into dust, and a [M] emits a loud honk!</span>", "<span class='notice'>You hear a loud honk.</span>")
insert(M) //You're not getting away that easily!
else
qdel(src)
/obj/item/organ/internal/beard
name = "beard organ"
@@ -493,7 +566,6 @@
parent_organ = "head"
slot = "hair_organ"
/obj/item/organ/internal/beard/on_life()
if(!owner)
@@ -516,4 +588,4 @@
head_organ.r_facial = 216
head_organ.g_facial = 192
head_organ.b_facial = 120
H.update_fhair()
H.update_fhair()
+17 -1
View File
@@ -25,6 +25,7 @@
amputation_point = "trunk"
encased = null
gendered_icon = 0
species = "Diona"
/obj/item/organ/external/groin/diona
name = "fork"
@@ -32,6 +33,7 @@
cannot_break = 1
amputation_point = "lower trunk"
gendered_icon = 0
species = "Diona"
/obj/item/organ/external/arm/diona
name = "left upper tendril"
@@ -39,6 +41,7 @@
min_broken_damage = 20
cannot_break = 1
amputation_point = "upper left trunk"
species = "Diona"
/obj/item/organ/external/arm/right/diona
name = "right upper tendril"
@@ -46,6 +49,7 @@
min_broken_damage = 20
cannot_break = 1
amputation_point = "upper right trunk"
species = "Diona"
/obj/item/organ/external/leg/diona
name = "left lower tendril"
@@ -53,6 +57,7 @@
min_broken_damage = 20
cannot_break = 1
amputation_point = "lower left fork"
species = "Diona"
/obj/item/organ/external/leg/right/diona
name = "right lower tendril"
@@ -60,6 +65,7 @@
min_broken_damage = 20
cannot_break = 1
amputation_point = "lower right fork"
species = "Diona"
/obj/item/organ/external/foot/diona
name = "left foot"
@@ -67,6 +73,7 @@
min_broken_damage = 10
cannot_break = 1
amputation_point = "branch"
species = "Diona"
/obj/item/organ/external/foot/right/diona
name = "right foot"
@@ -74,16 +81,19 @@
min_broken_damage = 10
cannot_break = 1
amputation_point = "branch"
species = "Diona"
/obj/item/organ/external/hand/diona
name = "left grasper"
cannot_break = 1
amputation_point = "branch"
species = "Diona"
/obj/item/organ/external/hand/right/diona
name = "right grasper"
cannot_break = 1
amputation_point = "branch"
species = "Diona"
/obj/item/organ/external/head/diona
max_damage = 50
@@ -92,6 +102,7 @@
encased = null
amputation_point = "upper trunk"
gendered_icon = 0
species = "Diona"
//DIONA ORGANS.
/* /obj/item/organ/external/diona/removed()
@@ -113,6 +124,7 @@
origin_tech = "biotech=3"
parent_organ = "chest"
slot = "heart"
species = "Diona"
/obj/item/organ/internal/brain/diona
name = "gas bladder"
@@ -122,6 +134,7 @@
organ_tag = "brain" // Turns into a nymph instantly, no transplanting possible.
origin_tech = "biotech=3"
slot = "brain"
species = "Diona"
/obj/item/organ/internal/kidneys/diona
name = "polyp segment"
@@ -131,6 +144,7 @@
origin_tech = "biotech=3"
parent_organ = "groin"
slot = "kidneys"
species = "Diona"
/obj/item/organ/internal/appendix/diona
name = "anchoring ligament"
@@ -140,6 +154,7 @@
origin_tech = "biotech=3"
parent_organ = "groin"
slot = "appendix"
species = "Diona"
/obj/item/organ/internal/diona_receptor
name = "receptor node"
@@ -149,7 +164,7 @@
origin_tech = "biotech=3"
parent_organ = "head"
slot = "eyes"
species = "Diona"
/obj/item/organ/internal/diona_receptor/surgeryize()
if(!owner)
@@ -170,6 +185,7 @@
icon_state = "claw"
slot = "liver"
alcohol_intensity = 0.5
species = "Diona"
//TODO:Make absorb light on insert.
@@ -4,6 +4,7 @@
icon = 'icons/obj/surgery_drask.dmi'
icon_state = "innards"
desc = "A greenish, slightly translucent organ. It is extremely cold."
species = "Drask"
/obj/item/organ/internal/heart/drask
name = "drask heart"
@@ -13,6 +14,7 @@
organ_tag = "heart"
parent_organ = "head"
slot = "heart"
species = "Drask"
/obj/item/organ/internal/lungs/drask
name = "lungs"
@@ -22,6 +24,7 @@
organ_tag = "lungs"
parent_organ = "chest"
slot = "lungs"
species = "Drask"
/obj/item/organ/internal/liver/drask
name = "metabolic strainer"
@@ -32,6 +35,7 @@
parent_organ = "groin"
slot = "kidneys"
alcohol_intensity = 0.8
species = "Drask"
/obj/item/organ/internal/brain/drask
name = "brain"
@@ -41,6 +45,7 @@
slot = "brain"
mmi_icon = 'icons/obj/surgery_drask.dmi'
mmi_icon_state = "mmi_full"
species = "Drask"
/obj/item/organ/internal/eyes/drask
name = "eyes"
@@ -51,3 +56,4 @@
parent_organ = "head"
slot = "eyes"
desc = "Drask eyes. They look even stranger disembodied"
species = "Drask"
@@ -1,2 +1,16 @@
/obj/item/organ/internal/liver/grey
alcohol_intensity = 1.6
species = "Grey"
/obj/item/organ/internal/brain/grey
icon_state = "brain-x"
mmi_icon_state = "mmi_alien"
species = "Grey"
/obj/item/organ/internal/brain/grey/insert(var/mob/living/carbon/M, var/special = 0)
..()
M.add_language("Psionic Communication")
/obj/item/organ/internal/brain/grey/remove(var/mob/living/carbon/M, var/special = 0)
..()
M.remove_language("Psionic Communication")
@@ -1,2 +1,3 @@
/obj/item/organ/internal/liver/kidan
alcohol_intensity = 0.5
species = "Kidan"
@@ -6,6 +6,7 @@
min_broken_damage = 30
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/head/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -14,6 +15,7 @@
/obj/item/organ/external/chest/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/chest/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -22,6 +24,7 @@
/obj/item/organ/external/groin/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/groin/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -30,6 +33,7 @@
/obj/item/organ/external/arm/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/arm/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -38,6 +42,7 @@
/obj/item/organ/external/arm/right/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/arm/right/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -45,6 +50,7 @@
/obj/item/organ/external/leg/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/leg/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -53,7 +59,7 @@
/obj/item/organ/external/leg/right/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/leg/right/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -62,7 +68,7 @@
/obj/item/organ/external/foot/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/foot/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -71,7 +77,7 @@
/obj/item/organ/external/foot/right/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/foot/right/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -80,6 +86,7 @@
/obj/item/organ/external/hand/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/hand/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -88,6 +95,7 @@
/obj/item/organ/external/hand/right/ipc
encased = null
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/external/hand/right/ipc/New()
robotize("Morpheus Cyberkinetics")
@@ -103,6 +111,7 @@
slot = "heart"
vital = 1
status = ORGAN_ROBOT
species = "Machine"
/obj/item/organ/internal/cell/New()
robotize()
@@ -123,6 +132,7 @@
icon_state = "camera"
slot = "eyes"
status = ORGAN_ROBOT
species = "Machine"
// dead_icon = "camera_broken"
/obj/item/organ/internal/optical_sensor/New()
@@ -154,6 +164,7 @@
max_damage = 200
slot = "brain"
status = ORGAN_ROBOT
species = "Machine"
var/obj/item/device/mmi/stored_mmi
/obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi()
@@ -3,6 +3,7 @@
name = "nucleation organ"
icon = 'icons/obj/surgery.dmi'
desc = "A crystalized human organ. /red It has a strangely iridescent glow."
species = "Nucleation"
/obj/item/organ/internal/nucleation/resonant_crystal
name = "resonant crystal"
@@ -10,6 +11,7 @@
organ_tag = "resonant crystal"
parent_organ = "head"
slot = "res_crystal"
species = "Nucleation"
/obj/item/organ/internal/nucleation/strange_crystal
name = "strange crystal"
@@ -17,7 +19,7 @@
organ_tag = "strange crystal"
parent_organ = "chest"
slot = "heart"
species = "Nucleation"
/obj/item/organ/internal/eyes/luminescent_crystal
name = "luminescent eyes"
@@ -26,6 +28,7 @@
light_color = "#1C1C00"
parent_organ = "head"
slot = "eyes"
species = "Nucleation"
/obj/item/organ/internal/eyes/luminescent_crystal/New()
set_light(2)
@@ -35,3 +38,4 @@
icon_state = "crystal-brain"
organ_tag = "crystalized brain"
slot = "brain"
species = "Nucleation"
@@ -1,2 +1,3 @@
/obj/item/organ/internal/liver/skrell
alcohol_intensity = 4
species = "Skrell"
@@ -187,9 +187,9 @@
/obj/item/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))
if(!disfigured)
if(brute_dam > 40)
if(prob(50))
disfigure("brute")
if (burn_dam > 40)
if(burn_dam > 40)
disfigure("burn")
@@ -1,2 +1,3 @@
/obj/item/organ/internal/liver/tajaran
alcohol_intensity = 1.4
species = "Tajaran"
@@ -1,2 +1,3 @@
/obj/item/organ/internal/liver/unathi
alcohol_intensity = 0.8
species = "Unathi"
@@ -1,2 +1,3 @@
/obj/item/organ/internal/liver/vox
alcohol_intensity = 1.6
species = "Vox"
@@ -1,2 +1,3 @@
/obj/item/organ/internal/liver/vulpkanin
alcohol_intensity = 1.4
species = "Vulpkanin"
+2 -1
View File
@@ -5,4 +5,5 @@
icon = 'icons/mob/human_races/r_wryn.dmi'
icon_state = "antennae"
parent_organ = "head"
slot = "hivenode"
slot = "hivenode"
species = "Wryn"
+24 -24
View File
@@ -97,15 +97,15 @@
// Checks whether other other can be merged into src.
proc/can_merge(var/datum/wound/other)
if (other.type != src.type) return 0
if (other.current_stage != src.current_stage) return 0
if (other.damage_type != src.damage_type) return 0
if (!(other.can_autoheal()) != !(src.can_autoheal())) return 0
if (!(other.bandaged) != !(src.bandaged)) return 0
if (!(other.clamped) != !(src.clamped)) return 0
if (!(other.salved) != !(src.salved)) return 0
if (!(other.disinfected) != !(src.disinfected)) return 0
//if (other.germ_level != src.germ_level) return 0
if(other.type != src.type) return 0
if(other.current_stage != src.current_stage) return 0
if(other.damage_type != src.damage_type) return 0
if(!(other.can_autoheal()) != !(src.can_autoheal())) return 0
if(!(other.bandaged) != !(src.bandaged)) return 0
if(!(other.clamped) != !(src.clamped)) return 0
if(!(other.salved) != !(src.salved)) return 0
if(!(other.disinfected) != !(src.disinfected)) return 0
//if(other.germ_level != src.germ_level) return 0
return 1
proc/merge_wound(var/datum/wound/other)
@@ -118,24 +118,24 @@
// checks if wound is considered open for external infections
// untreated cuts (and bleeding bruises) and burns are possibly infectable, chance higher if wound is bigger
proc/infection_check()
if (damage < 10) //small cuts, tiny bruises, and moderate burns shouldn't be infectable.
if(damage < 10) //small cuts, tiny bruises, and moderate burns shouldn't be infectable.
return 0
if (is_treated() && damage < 25) //anything less than a flesh wound (or equivalent) isn't infectable if treated properly
if(is_treated() && damage < 25) //anything less than a flesh wound (or equivalent) isn't infectable if treated properly
return 0
if (disinfected)
if(disinfected)
germ_level = 0 //reset this, just in case
return 0
if (damage_type == BRUISE && !bleeding()) //bruises only infectable if bleeding
if(damage_type == BRUISE && !bleeding()) //bruises only infectable if bleeding
return 0
var/dam_coef = round(damage/10)
switch (damage_type)
if (BRUISE)
switch(damage_type)
if(BRUISE)
return prob(dam_coef*5)
if (BURN)
if(BURN)
return prob(dam_coef*10)
if (CUT)
if(CUT)
return prob(dam_coef*20)
return 0
@@ -174,32 +174,32 @@
// returns whether this wound can absorb the given amount of damage.
// this will prevent large amounts of damage being trapped in less severe wound types
proc/can_worsen(damage_type, damage)
if (src.damage_type != damage_type)
if(src.damage_type != damage_type)
return 0 //incompatible damage types
if (src.amount > 1)
if(src.amount > 1)
return 0
//with 1.5*, a shallow cut will be able to carry at most 30 damage,
//37.5 for a deep cut
//52.5 for a flesh wound, etc.
var/max_wound_damage = 1.5*src.damage_list[1]
if (src.damage + damage > max_wound_damage)
if(src.damage + damage > max_wound_damage)
return 0
return 1
proc/bleeding()
if (src.internal)
if(src.internal)
return 0 // internal wounds don't bleed in the sense of this function
if (current_stage > max_bleeding_stage)
if(current_stage > max_bleeding_stage)
return 0
if (bandaged||clamped)
if(bandaged||clamped)
return 0
if (wound_damage() <= 30 && bleed_timer <= 0)
if(wound_damage() <= 30 && bleed_timer <= 0)
return 0 //Bleed timer has run out. Wounds with more than 30 damage don't stop bleeding on their own.
return (damage_type == BRUISE && wound_damage() >= 20 || damage_type == CUT && wound_damage() >= 5)
+17 -17
View File
@@ -60,7 +60,7 @@
/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -156,11 +156,11 @@
else if(implement_type in implements_mend)
current_type = "mend"
var/tool_name = "\the [tool]"
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
if(istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
tool_name = "regenerative membrane"
else if (istype(tool, /obj/item/stack/medical/bruise_pack))
else if(istype(tool, /obj/item/stack/medical/bruise_pack))
tool_name = "the bandaid"
else if (istype(tool, /obj/item/stack/nanopaste))
else if(istype(tool, /obj/item/stack/nanopaste))
tool_name = "\the [tool]" //what else do you call nanopaste medically?
if(!hasorgans(target))
@@ -188,14 +188,14 @@
/datum/surgery_step/internal/manipulate_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if(current_type == "mend")
var/tool_name = "\the [tool]"
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
if(istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
tool_name = "regenerative membrane"
if (istype(tool, /obj/item/stack/medical/bruise_pack))
if(istype(tool, /obj/item/stack/medical/bruise_pack))
tool_name = "the bandaid"
if (istype(tool, /obj/item/stack/nanopaste))
if(istype(tool, /obj/item/stack/nanopaste))
tool_name = "\the [tool]" //what else do you call nanopaste medically?
if (!hasorgans(target))
if(!hasorgans(target))
return
for(var/obj/item/organ/internal/I in affected.internal_organs)
if(I)
@@ -259,17 +259,17 @@
/datum/surgery_step/internal/manipulate_organs/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if(current_type == "mend")
if (!hasorgans(target))
if(!hasorgans(target))
return
user.visible_message("<span class='warning'> [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!</span>", \
"<span class='warning'> Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!</span>")
var/dam_amt = 2
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
if(istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
target.adjustToxLoss(5)
else if (istype(tool, /obj/item/stack/medical/bruise_pack) || istype(tool, /obj/item/stack/nanopaste))
else if(istype(tool, /obj/item/stack/medical/bruise_pack) || istype(tool, /obj/item/stack/nanopaste))
dam_amt = 5
target.adjustToxLoss(10)
affected.createwound(CUT, 5)
@@ -400,10 +400,10 @@
/datum/surgery_step/retract_carapace/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/msg = "[user] starts to pry open the incision on [target]'s [target_zone] with \the [tool]."
var/self_msg = "You start to pry open the incision on [target]'s [target_zone] with \the [tool]."
if (target_zone == "chest")
if(target_zone == "chest")
msg = "[user] starts to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]."
self_msg = "You start to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]."
if (target_zone == "groin")
if(target_zone == "groin")
msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
user.visible_message(msg, self_msg)
@@ -412,10 +412,10 @@
/datum/surgery_step/retract_carapace/end_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/msg = "<span class='notice'> [user] keeps the incision open on [target]'s [target_zone] with \the [tool]</span>."
var/self_msg = "<span class='notice'> You keep the incision open on [target]'s [target_zone] with \the [tool].</span>"
if (target_zone == "chest")
if(target_zone == "chest")
msg = "<span class='notice'> [user] keeps the ribcage open on [target]'s torso with \the [tool].</span>"
self_msg = "<span class='notice'> You keep the ribcage open on [target]'s torso with \the [tool].</span>"
if (target_zone == "groin")
if(target_zone == "groin")
msg = "<span class='notice'> [user] keeps the incision open on [target]'s lower abdomen with \the [tool].</span>"
self_msg = "<span class='notice'> You keep the incision open on [target]'s lower abdomen with \the [tool].</span>"
user.visible_message(msg, self_msg)
@@ -424,10 +424,10 @@
/datum/surgery_step/generic/retract_carapace/fail_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/msg = "<span class='warning'> [user]'s hand slips, tearing the edges of incision on [target]'s [target_zone] with \the [tool]!</span>"
var/self_msg = "<span class='warning'> Your hand slips, tearing the edges of incision on [target]'s [target_zone] with \the [tool]!</span>"
if (target_zone == "chest")
if(target_zone == "chest")
msg = "<span class='warning'> [user]'s hand slips, damaging several organs [target]'s torso with \the [tool]!</span>"
self_msg = "<span class='warning'> Your hand slips, damaging several organs [target]'s torso with \the [tool]!</span>"
if (target_zone == "groin")
if(target_zone == "groin")
msg = "<span class='warning'> [user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]</span>"
self_msg = "<span class='warning'> Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!</span>"
user.visible_message(msg, self_msg)
+8 -8
View File
@@ -66,7 +66,7 @@
for(var/datum/wound/W in affected.wounds) if(W.internal)
affected.wounds -= W
affected.update_damages()
if (ishuman(user) && prob(40))
if(ishuman(user) && prob(40))
var/mob/living/carbon/human/U = user
U.bloody_hands(target, 0)
@@ -97,7 +97,7 @@
if(!hasorgans(target))
return 0
if (target_zone == "mouth" || target_zone == "eyes")
if(target_zone == "mouth" || target_zone == "eyes")
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -143,7 +143,7 @@
time = 24
/datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!istype(tool, /obj/item/weapon/reagent_containers))
if(!istype(tool, /obj/item/weapon/reagent_containers))
return 0
var/obj/item/weapon/reagent_containers/container = tool
@@ -153,7 +153,7 @@
if(!hasorgans(target))
return 0
if (target_zone == "mouth" || target_zone == "eyes")
if(target_zone == "mouth" || target_zone == "eyes")
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -169,13 +169,13 @@
/datum/surgery_step/fix_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (!istype(tool, /obj/item/weapon/reagent_containers))
if(!istype(tool, /obj/item/weapon/reagent_containers))
return
var/obj/item/weapon/reagent_containers/container = tool
var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this)
if (trans > 0)
if(trans > 0)
container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue
if(container.reagents.has_reagent("mitocholide"))
@@ -189,7 +189,7 @@
/datum/surgery_step/fix_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (!istype(tool, /obj/item/weapon/reagent_containers))
if(!istype(tool, /obj/item/weapon/reagent_containers))
return
var/obj/item/weapon/reagent_containers/container = tool
@@ -232,7 +232,7 @@
time = 30
/datum/surgery_step/internal/dethrall/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain")
+14 -14
View File
@@ -48,26 +48,26 @@
can_infect = 0
/datum/surgery_step/robotics/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (isslime(target))
if(isslime(target))
return 0
if (target_zone == "eyes") //there are specific steps for eye surgery
if(target_zone == "eyes") //there are specific steps for eye surgery
return 0
if (!hasorgans(target))
if(!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected == null)
if(affected == null)
return 0
if (affected.status & ORGAN_DESTROYED)
if(affected.status & ORGAN_DESTROYED)
return 0
return 1
/datum/surgery_step/robotics/external
/datum/surgery_step/robotics/external/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if (!..())
if(!..())
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (!(affected.status & ORGAN_ROBOT))
if(!(affected.status & ORGAN_ROBOT))
return 0
return 1
@@ -373,7 +373,7 @@
else if(implement_type in implements_mend)
current_type = "mend"
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -396,7 +396,7 @@
/datum/surgery_step/robotics/manipulate_robotic_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if(current_type == "mend")
if (!hasorgans(target))
if(!hasorgans(target))
return
for(var/obj/item/organ/internal/I in affected.internal_organs)
if(I && I.damage > 0)
@@ -418,13 +418,13 @@
if(I && istype(I))
I.status &= ~ORGAN_CUT_AWAY
else if (current_type == "install")
else if(current_type == "install")
user.visible_message("<span class='notice'> [user] has installed \the [tool] into [target]'s [affected.name].</span>", \
"<span class='notice'> You have installed \the [tool] into [target]'s [affected.name].</span>")
var/obj/item/device/mmi/M = tool
var/obj/item/organ/internal/brain/mmi_holder/holder = new()
if (istype(M, /obj/item/device/mmi/posibrain))
if(istype(M, /obj/item/device/mmi/posibrain))
holder.robotize()
holder.insert(target)
@@ -461,7 +461,7 @@
/datum/surgery_step/robotics/manipulate_robotic_organs/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if(current_type == "mend")
if (!hasorgans(target))
if(!hasorgans(target))
return
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -483,7 +483,7 @@
user.visible_message("<span class='warning'> [user]'s hand slips, disconnecting \the [tool].</span>", \
"<span class='warning'> Your hand slips, disconnecting \the [tool].</span>")
else if (current_type == "install")
else if(current_type == "install")
user.visible_message("<span class='warning'> [user]'s hand slips!</span>.", \
"<span class='warning'> Your hand slips!</span>")
else if(current_type == "finish")
@@ -549,7 +549,7 @@
var/obj/item/device/mmi/M = tool
var/obj/item/organ/internal/brain/mmi_holder/holder = new()
if (istype(M, /obj/item/device/mmi/posibrain))
if(istype(M, /obj/item/device/mmi/posibrain))
holder.robotize()
holder.insert(target)
+7 -7
View File
@@ -130,8 +130,8 @@
//returns how well tool is suited for this step
/datum/surgery_step/proc/tool_quality(obj/item/tool)
for (var/T in allowed_tools)
if (istype(tool,T))
for(var/T in allowed_tools)
if(istype(tool,T))
return allowed_tools[T]
return 0
@@ -160,13 +160,13 @@
/datum/surgery_step/proc/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
if(ishuman(target))
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (can_infect && affected)
if(can_infect && affected)
spread_germs_to_organ(affected, user)
if (ishuman(user) && !(istype(target,/mob/living/carbon/alien)) && prob(60))
if(ishuman(user) && !(istype(target,/mob/living/carbon/alien)) && prob(60))
var/mob/living/carbon/human/H = user
if (blood_level)
if(blood_level)
H.bloody_hands(target,0)
if (blood_level > 1)
if(blood_level > 1)
H.bloody_body(target,0)
return
@@ -192,7 +192,7 @@
/proc/sort_surgeries()
var/gap = surgery_steps.len
var/swapped = 1
while (gap > 1 || swapped)
while(gap > 1 || swapped)
swapped = 0
if(gap > 1)
gap = round(gap / 1.247330950103979)
+10 -10
View File
@@ -5,7 +5,7 @@
icon_state = "retractor"
materials = list(MAT_METAL=6000, MAT_GLASS=3000)
flags = CONDUCT
w_class = 2.0
w_class = 2
origin_tech = "materials=1;biotech=1"
@@ -16,7 +16,7 @@
icon_state = "hemostat"
materials = list(MAT_METAL=5000, MAT_GLASS=2500)
flags = CONDUCT
w_class = 1.0
w_class = 1
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "pinched")
@@ -28,7 +28,7 @@
icon_state = "cautery"
materials = list(MAT_METAL=2500, MAT_GLASS=750)
flags = CONDUCT
w_class = 1.0
w_class = 1
origin_tech = "materials=1;biotech=1"
attack_verb = list("burnt")
@@ -44,7 +44,7 @@
force = 15.0
sharp = 1
edge = 1
w_class = 3.0
w_class = 3
origin_tech = "materials=1;biotech=1"
attack_verb = list("drilled")
@@ -63,7 +63,7 @@
force = 10.0
sharp = 1
edge = 1
w_class = 1.0
w_class = 1
throwforce = 5.0
throw_speed = 3
throw_range = 5
@@ -124,7 +124,7 @@
force = 15.0
sharp = 1
edge = 1
w_class = 3.0
w_class = 3
throwforce = 9.0
throw_speed = 3
throw_range = 5
@@ -138,7 +138,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "bone-gel"
force = 0
w_class = 2.0
w_class = 2
throwforce = 1.0
origin_tech = "materials=1;biotech=1"
@@ -149,7 +149,7 @@
force = 0
throwforce = 1.0
origin_tech = "materials=1;biotech=1"
w_class = 2.0
w_class = 2
/obj/item/weapon/bonesetter
name = "bone setter"
@@ -159,7 +159,7 @@
throwforce = 9.0
throw_speed = 3
throw_range = 5
w_class = 2.0
w_class = 2
attack_verb = list("attacked", "hit", "bludgeoned")
origin_tech = "materials=1;biotech=1"
@@ -168,6 +168,6 @@
desc = "Nanotrasen brand surgical drapes provide optimal safety and infection control."
icon = 'icons/obj/surgery.dmi'
icon_state = "surgical_drapes"
w_class = 1.0
w_class = 1
origin_tech = "biotech=1"
attack_verb = list("slapped")