diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm index 8fa80ebf625..936ed486665 100644 --- a/code/WorkInProgress/Chemistry-Reagents.dm +++ b/code/WorkInProgress/Chemistry-Reagents.dm @@ -627,6 +627,27 @@ datum ..() return + sterilizine + name = "Sterilizine" + id = "sterilizine" + description = "Sterilizes wounds in preparation for surgery." + reagent_state = LIQUID + /* reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + src = null + if (method==TOUCH) + if(istype(M, /mob/living/carbon/human)) + if(M.health >= -100 && M.health <= 0) + M.crit_op_stage = 0.0 + if (method==INGEST) + usr << "Well, that was stupid." + M:toxloss += 3 + return + on_mob_life(var/mob/M) + if(!M) M = holder.my_atom + M.radiation += 3 + ..() + return + */ iron name = "Iron" id = "iron" @@ -925,7 +946,7 @@ datum M:eye_blurry = max(M:eye_blurry-5 , 0) M:eye_blind = max(M:eye_blind-5 , 0) M:disabilities &= ~1 - M:sdisabilities &= ~1 +// M:sdisabilities &= ~1 Replaced by eye surgery ..() return diff --git a/code/WorkInProgress/Chemistry-Recipes.dm b/code/WorkInProgress/Chemistry-Recipes.dm index ae733edff3b..d4320077258 100644 --- a/code/WorkInProgress/Chemistry-Recipes.dm +++ b/code/WorkInProgress/Chemistry-Recipes.dm @@ -42,6 +42,13 @@ datum required_reagents = list("aluminium" = 1, "silicon" = 1, "oxygen" = 1) result_amount = 3 + sterilizine + name = "Sterilizine" + id = "sterilizine" + result = "sterilizine" + required_reagents = list("ethanol" = 1, "anti-toxin" = 1, "chlorine" = 1) + result_amount = 3 + mutagen name = "Unstable mutagen" id = "mutagen" diff --git a/code/defines/mob/living/carbon/carbon.dm b/code/defines/mob/living/carbon/carbon.dm index f5132fa5e2d..51e5867312b 100644 --- a/code/defines/mob/living/carbon/carbon.dm +++ b/code/defines/mob/living/carbon/carbon.dm @@ -3,3 +3,4 @@ var/list/stomach_contents = list() var/brain_op_stage = 0.0 + var/eye_op_stage = 0.0 \ No newline at end of file diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 28941c9ad76..f22ae9c712b 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -1359,21 +1359,21 @@ Total SMES charging rate should not exceed total power generation rate, or an ov w_class = 1.0 /obj/item/weapon/hemostat - name = "retractor" + name = "hemostat" icon = 'surgery.dmi' icon_state = "hemostat" flags = FPRINT | TABLEPASS | CONDUCT w_class = 1.0 /obj/item/weapon/cautery - name = "retractor" + name = "cautery" icon = 'surgery.dmi' icon_state = "cautery" flags = FPRINT | TABLEPASS | CONDUCT w_class = 1.0 /obj/item/weapon/surgicaldrill - name = "retractor" + name = "surgical drill" icon = 'surgery.dmi' icon_state = "drill" flags = FPRINT | TABLEPASS | CONDUCT diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 62019b1e199..2d859233c39 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -1,10 +1,160 @@ /* CONTAINS: +RETRACTOR +HEMOSTAT +CAUTERY +SURGICAL DRILL SCALPEL CIRCULAR SAW */ +///////////// +//RETRACTOR// +///////////// +/obj/item/weapon/retractor/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M, /mob)) + return + + if(!(locate(/obj/machinery/optable, M.loc) && M.resting)) + return ..() + + if (user.zone_sel.selecting == "eyes") + + var/mob/living/carbon/human/H = M + if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES))) + // Eye surgery cannot be performed unless the head is clear + user << "\blue You're going to need to remove that mask/helmet/glasses first." + return + + switch(M.eye_op_stage) + if(1.0) + for(var/mob/O in viewers(M, null)) + if(O == (user || M)) + continue + if(M == user) + O.show_message(text("\red [user] begins to have his eyes retracted."), 1) + else + O.show_message(text("\red [M] is having his eyes retracted by [user]."), 1) + + if(M != user) + M << "\red [user] begins to seperate your eyes with [src]!" + user << "\red You seperate [M]'s eyes with [src]!" + else + user << "\red You begin to pry open your eyes with [src]!" + if(prob(25)) + user << "\red You mess up!" + M.bruteloss += 15 + + M.updatehealth() + M:eye_op_stage = 2.0 + + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) + return ..() + + return + +//////////// +//Hemostat// +//////////// + +/obj/item/weapon/hemostat/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M, /mob)) + return + + if(!(locate(/obj/machinery/optable, M.loc) && M.resting)) + return ..() + + if (user.zone_sel.selecting == "eyes") + + var/mob/living/carbon/human/H = M + if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES))) + // Eye surgery cannot be performed unless the head is clear + user << "\blue You're going to need to remove that mask/helmet/glasses first." + return + + switch(M.eye_op_stage) + if(2.0) + for(var/mob/O in viewers(M, null)) + if(O == (user || M)) + continue + if(M == user) + O.show_message(text("\red [user] begins to have his eyes mended."), 1) + else + O.show_message(text("\red [M] is having his eyes mended by [user]."), 1) + + if(M != user) + M << "\red [user] begins to mend your eyes with [src]!" + user << "\red You mend [M]'s eyes with [src]!" + else + user << "\red You begin to mend your eyes with [src]!" + if(prob(25)) + user << "\red You mess up!" + M.bruteloss += 15 + + M.updatehealth() + M:eye_op_stage = 3.0 + + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) + return ..() + + return + +/////////// +//Cautery// +/////////// + +/obj/item/weapon/cautery/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M, /mob)) + return + + if(!(locate(/obj/machinery/optable, M.loc) && M.resting)) + return ..() + + if (user.zone_sel.selecting == "eyes") + + var/mob/living/carbon/human/H = M + if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES))) + // Eye surgery cannot be performed unless the head is clear + user << "\blue You're going to need to remove that mask/helmet/glasses first." + return + + switch(M.eye_op_stage) + if(3.0) + for(var/mob/O in viewers(M, null)) + if(O == (user || M)) + continue + if(M == user) + O.show_message(text("\red [user] begins to have his eyes cauterized."), 1) + else + O.show_message(text("\red [M] is having his eyes cauterized by [user]."), 1) + + if(M != user) + M << "\red [user] begins to cauterize your eyes!" + user << "\red You cauterize [M]'s eyes with [src]!" + else + user << "\red You begin to cauterize your eyes!" + if(prob(25)) + user << "\red You mess up!" + M.bruteloss += 15 + + + M.updatehealth() + M.sdisabilities &= ~1 + M:eye_op_stage = 0.0 + + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) + return ..() + + return + + +//obj/item/weapon/surgicaldrill + + +/////////// +//SCALPEL// +/////////// /obj/item/weapon/scalpel/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!istype(M, /mob)) return @@ -85,18 +235,48 @@ CIRCULAR SAW ..() return + else if(user.zone_sel.selecting == "eyes") + user << "\blue So far so good." + + var/mob/living/carbon/human/H = M + if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES))) + // Eye surgery cannot be performed unless the head is clear + user << "\blue You're going to need to remove that mask/helmet/glasses first." + return + + switch(M:eye_op_stage) + if(0.0) + for(var/mob/O in viewers(M, null)) + if(O == (user || M)) + continue + if(M == user) + O.show_message(text("\red [user] begins to cut around his eyes with [src]!"), 1) + else + O.show_message(text("\red [M] is beginning to have his eyes incised with [src] by [user]."), 1) + + if(M != user) + M << "\red [user] begins to cut open your eyes with [src]!" + user << "\red You make an incision around [M]'s eyes with [src]!" + else + user << "\red You begin to cut open your eyes with [src]!" + if(prob(25)) + user << "\red You mess up!" + M.bruteloss += 15 + + user << "\blue So far so good before." + M.updatehealth() + M:eye_op_stage = 1.0 + user << "\blue So far so good after." + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) return ..() return - - - - -// CIRCULAR SAW - +//////////////// +//CIRCULAR SAW// +//////////////// /obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!istype(M, /mob)) return diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 80dba086f85..20cfa608463 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ