diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm
index cf36046dec1..5d773037370 100644
--- a/code/WorkInProgress/surgery.dm
+++ b/code/WorkInProgress/surgery.dm
@@ -1007,19 +1007,14 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
//////////////////////////////////////////////////////////////////
-// ALIEN SURGERY //
+// RIBCAGE SURGERY(LUNGS AND ALIENS) //
//////////////////////////////////////////////////////////////////
-/datum/surgery_step/alien
+/datum/surgery_step/ribcage
can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/embryo = 0
- for(var/datum/disease/alien_embryo/A in target.viruses)
- embryo = 1
- break
+ return target_zone == "chest"
- return embryo && target_zone == "chest"
-
-/datum/surgery_step/alien/saw_ribcage
+/datum/surgery_step/ribcage/saw_ribcage
required_tool = /obj/item/weapon/circular_saw
min_duration = 50
@@ -1027,7 +1022,7 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && target.embryo_op_stage == 0 && affected.open >= 2
+ return ..() && target.ribcage_op_stage == 0 && affected.open >= 2
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] begins to cut through [target]'s ribcage with \the [tool].", \
@@ -1037,21 +1032,21 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\blue [user] has cut through [target]'s ribcage open with \the [tool].", \
"\blue You have cut through [target]'s ribcage open with \the [tool].")
- target.embryo_op_stage = 1
+ target.ribcage_op_stage = 1
fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, cracking [target]'s ribcage with \the [tool]!" , \
"\red Your hand slips, cracking [target]'s ribcage with \the [tool]!" )
-/datum/surgery_step/alien/retract_ribcage
+/datum/surgery_step/ribcage/retract_ribcage
required_tool = /obj/item/weapon/retractor
min_duration = 30
max_duration = 40
can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- return ..() && target.embryo_op_stage == 1
+ return ..() && target.ribcage_op_stage == 1
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/msg = "[user] starts to force open the ribcage in [target]'s torso with \the [tool]."
@@ -1063,7 +1058,7 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
var/msg = "\blue [user] forces open [target]'s ribcage with \the [tool]."
var/self_msg = "\blue You force open [target]'s ribcage with \the [tool]."
user.visible_message(msg, self_msg)
- target.embryo_op_stage = 2
+ target.ribcage_op_stage = 2
// Whoops!
if(prob(10))
@@ -1077,14 +1072,64 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
var/datum/organ/external/affected = target.get_organ(target_zone)
affected.fracture()
-/datum/surgery_step/alien/remove_embryo
+/datum/surgery_step/ribcage/close_ribcage
+ required_tool = /obj/item/weapon/retractor
+
+ min_duration = 20
+ max_duration = 40
+
+ can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ return ..() && target.ribcage_op_stage == 2
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/msg = "[user] starts bending [target]'s ribcage back into place with \the [tool]."
+ var/self_msg = "You start bending [target]'s ribcage back into place with \the [tool]."
+ user.visible_message(msg, self_msg)
+ target.custom_pain("Something hurts horribly in your chest!",1)
+
+ end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/msg = "[user] bends [target]'s ribcage back into place with \the [tool]."
+ var/self_msg = "You bends [target]'s ribcage back into place with \the [tool]."
+ user.visible_message(msg, self_msg)
+
+ target.ribcage_op_stage = 1
+
+/datum/surgery_step/ribcage/mend_ribcage
+ required_tool = /obj/item/weapon/bonegel
+
+ min_duration = 20
+ max_duration = 40
+
+ can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ return ..() && target.ribcage_op_stage == 1
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/msg = "[user] starts applying \the [tool] to [target]'s ribcage."
+ var/self_msg = "You start applying \the [tool] to [target]'s ribcage."
+ user.visible_message(msg, self_msg)
+ target.custom_pain("Something hurts horribly in your chest!",1)
+
+
+ end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/msg = "[user] applied \the [tool] to [target]'s ribcage."
+ var/self_msg = "You applied \the [tool] to [target]'s ribcage."
+ user.visible_message(msg, self_msg)
+
+ target.ribcage_op_stage = 0
+
+
+/datum/surgery_step/ribcage/remove_embryo
required_tool = /obj/item/weapon/hemostat
min_duration = 80
max_duration = 100
can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- return ..() && target.embryo_op_stage == 2
+ var/embryo = 0
+ for(var/datum/disease/alien_embryo/A in target.viruses)
+ embryo = 1
+ break
+ return ..() && embryo && target.ribcage_op_stage == 2
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]."
@@ -1099,52 +1144,32 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
var/mob/living/carbon/alien/larva/stupid = new(target.loc)
stupid.death(0)
- target.embryo_op_stage = 3
-
for(var/datum/disease/alien_embryo in target.viruses)
alien_embryo.cure()
-/datum/surgery_step/alien/close_ribcage
- required_tool = /obj/item/weapon/retractor
+/datum/surgery_step/ribcage/fix_lungs
+ required_tool = /obj/item/weapon/scalpel
- min_duration = 20
- max_duration = 40
+ min_duration = 70
+ max_duration = 90
can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- return target.embryo_op_stage >= 2
+ return ..() && target.is_lung_ruptured()
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/msg = "[user] starts bending [target]'s ribcage back into place with \the [tool]."
- var/self_msg = "You start bending [target]'s ribcage back into place with \the [tool]."
- user.visible_message(msg, self_msg)
- target.custom_pain("Something hurts horribly in your chest!",1)
+ user.visible_message("[user] starts mending the rupture in [target]'s lungs with \the [tool].", \
+ "You start mending the rupture in [target]'s lungs with \the [tool]." )
+ target.custom_pain("The pain in your chest is living hell!",1)
end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/msg = "[user] bends [target]'s ribcage back into place with \the [tool]."
- var/self_msg = "You bends [target]'s ribcage back into place with \the [tool]."
- user.visible_message(msg, self_msg)
+ var/datum/organ/external/chest/affected = target.get_organ("chest")
+ user.visible_message("[user] mends the rupture in [target]'s lungs with \the [tool].", \
+ "You mend the rupture in [target]'s lungs with \the [tool]." )
+ affected.ruptured_lungs = 0
- target.embryo_op_stage = 1
+ fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/datum/organ/external/chest/affected = target.get_organ("chest")
+ user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s chest with \the [tool]!", \
+ "\red Your hand slips, slicing an artery inside [target]'s chest with \the [tool]!")
+ affected.createwound(CUT, 20)
-/datum/surgery_step/alien/mend_ribcage
- required_tool = /obj/item/weapon/bonegel
-
- min_duration = 20
- max_duration = 40
-
- can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- return target.embryo_op_stage == 1
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/msg = "[user] starts applying \the [tool] to [target]'s ribcage."
- var/self_msg = "You start applying \the [tool] to [target]'s ribcage."
- user.visible_message(msg, self_msg)
- target.custom_pain("Something hurts horribly in your chest!",1)
-
-
- end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/msg = "[user] applied \the [tool] to [target]'s ribcage."
- var/self_msg = "You applied \the [tool] to [target]'s ribcage."
- user.visible_message(msg, self_msg)
-
- target.embryo_op_stage = 0
diff --git a/code/datums/organs/organ_external.dm b/code/datums/organs/organ_external.dm
index 0a6d312bd9b..8e31e6db0f2 100644
--- a/code/datums/organs/organ_external.dm
+++ b/code/datums/organs/organ_external.dm
@@ -189,12 +189,11 @@
W.open_wound(0.1 * wound_update_accuracy)
owner.vessel.remove_reagent("blood",0.2 * W.damage * wound_update_accuracy)
- if(W.is_treated())
+ if(W.bandaged || W.salved)
// slow healing
var/amount = 0.2
- if(W.bandaged) amount++
- if(W.salved) amount++
- if(W.disinfected) amount++
+ if(W.is_treated())
+ amount += 10
// amount of healing is spread over all the wounds
W.heal_damage((wound_update_accuracy * amount * W.amount * config.organ_regeneration_multiplier) / (20*owner.number_wounds+1))
@@ -527,6 +526,7 @@
max_damage = 150
min_broken_damage = 75
body_part = UPPER_TORSO
+ var/ruptured_lungs = 0
/datum/organ/external/groin
name = "groin"
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 90c5524f92f..37f1a721aae 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -186,7 +186,7 @@
if("Detective")
return list(access_security, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
if("Medical Doctor")
- return list(access_medical, access_morgue, access_surgery)
+ return list(access_medical, access_morgue, access_surgery, access_virology)
if("Botanist") // -- TLE
return list(access_hydroponics, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
if("Librarian") // -- TLE
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index fd5ac0f0034..9e5abe580cb 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -40,7 +40,7 @@
spawn_positions = 3
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- alt_titles = list("Surgeon", "Emergency Physician")
+ alt_titles = list("Surgeon", "Emergency Physician", "Virologist")
equip(var/mob/living/carbon/human/H)
@@ -50,12 +50,18 @@
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(H.mind.role_alt_title && H.mind.role_alt_title == "Emergency Physician")
- H.equip_if_possible(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_if_possible(new /obj/item/clothing/suit/fr_jacket(H), slot_wear_suit)
- else if(H.mind.role_alt_title && H.mind.role_alt_title == "Surgeon")
- H.equip_if_possible(new /obj/item/clothing/under/rank/medical/blue(H), slot_w_uniform)
- H.equip_if_possible(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
+ if (H.mind.role_alt_title)
+ switch(H.mind.role_alt_title)
+ if("Emergency Physician")
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/fr_jacket(H), slot_wear_suit)
+ if("Surgeon")
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
+ if("Virologist")
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat/virologist(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
else
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
@@ -115,7 +121,7 @@
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
return 1
-
+/*
/datum/job/virologist
title = "Virologist"
@@ -146,5 +152,5 @@
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
-
+*/
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 83bf8f90259..f1a202f1341 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -31,6 +31,7 @@
spawn_positions = 3
supervisors = "the research director"
selection_color = "#ffeeff"
+ alt_titles = list("Xenoarcheologist", "Anomalist", "Plasma Researcher", "Xenobiologist")
equip(var/mob/living/carbon/human/H)
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 15dbadb0061..5e6f6e9d1fc 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -279,9 +279,12 @@
var/bled = ""
var/splint = ""
var/internal_bleeding = ""
+ var/lung_ruptured = ""
for(var/datum/wound/W in e.wounds) if(W.internal)
internal_bleeding = "
Internal Bleeding"
break
+ if(istype(e, /datum/organ/external/chest) && e:ruptured_lungs)
+ lung_ruptured = "Lung Ruptured:"
if(e.status & ORGAN_SPLINTED)
splint = "Splinted:"
if(e.status & ORGAN_BLEEDING)
@@ -295,7 +298,7 @@
if(!AN && !open && !infected & !imp)
AN = "None:"
if(!(e.status & ORGAN_DESTROYED))
- dat += "