diff --git a/code/ZAS/Plasma.dm b/code/ZAS/Plasma.dm index 9f0e95f661..716ea21640 100644 --- a/code/ZAS/Plasma.dm +++ b/code/ZAS/Plasma.dm @@ -118,12 +118,12 @@ obj/var/contaminated = 0 /mob/living/carbon/human/proc/burn_eyes() //The proc that handles eye burning. if(prob(20)) src << "\red Your eyes burn!" - eye_stat += 2.5 + var/datum/organ/internal/eyes/E = internal_organs["eyes"] + E.damage += 2.5 eye_blurry = min(eye_blurry+1.5,50) - if (prob(max(0,eye_stat - 20) + 1) &&!eye_blind) + if (prob(max(0,E.damage - 15) + 1) &&!eye_blind) src << "\red You are blinded!" eye_blind += 20 - eye_stat = 0 /mob/living/carbon/human/proc/pl_head_protected() //Checks if the head is adequately sealed. diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index fc7202bd17..c71dd409c1 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -11,6 +11,13 @@ density = 1 var/orient = "LEFT" // "RIGHT" changes the dir suffix to "-r" + +/obj/machinery/sleep_console/process() + if(stat & (NOPOWER|BROKEN)) + return + src.updateUsrDialog() + return + /obj/machinery/sleep_console/ex_act(severity) switch(severity) if(1.0) @@ -71,10 +78,11 @@ if(occupant.reagents) for(var/chemical in connected.available_chemicals) dat += "[connected.available_chemicals[chemical]]: [occupant.reagents.get_reagent_amount(chemical)] units
" - dat += "
Refresh meter readings each second
" + dat += "Refresh Meter Readings
" if(src.connected.beaker) + dat += "
Remove Beaker
" if(src.connected.filtering) - dat += "
Stop Dialysis
" + dat += "Stop Dialysis
" dat += text("Output Beaker has [] units of free space remaining

", src.connected.beaker.reagents.maximum_volume - src.connected.beaker.reagents.total_volume) else dat += "
Start Dialysis
" @@ -85,8 +93,10 @@ for(var/chemical in connected.available_chemicals) dat += "Inject [connected.available_chemicals[chemical]]: " for(var/amount in connected.amounts) - dat += "[amount] units " - dat += "
" + dat += "[amount] units
" + + + dat += "
Eject Patient" else dat += "The sleeper is empty." dat += text("

Close", user) @@ -108,19 +118,21 @@ src.connected.inject_chemical(usr,href_list["chemical"],text2num(href_list["amount"])) else usr << "\red \b This person is not in good enough condition for sleepers to be effective! Use another means of treatment, such as cryogenics!" + src.updateUsrDialog() if (href_list["refresh"]) src.updateUsrDialog() + if (href_list["removebeaker"]) + src.connected.remove_beaker() + src.updateUsrDialog() if (href_list["togglefilter"]) src.connected.toggle_filter() src.updateUsrDialog() + if (href_list["ejectify"]) + src.connected.eject() + src.updateUsrDialog() src.add_fingerprint(usr) return -/obj/machinery/sleep_console/process() - if(stat & (NOPOWER|BROKEN)) - return - src.updateUsrDialog() - return /obj/machinery/sleep_console/power_change() return @@ -144,7 +156,7 @@ anchored = 1 var/orient = "LEFT" // "RIGHT" changes the dir suffix to "-r" var/mob/living/carbon/human/occupant = null - var/available_chemicals = list("inaprovaline" = "Inaprovaline", "stoxin" = "Soporific", "dermaline" = "Dermaline", "bicaridine" = "Bicaridine", "dexalin" = "Dexalin") + var/available_chemicals = list("inaprovaline" = "Inaprovaline", "stoxin" = "Soporific", "anti_toxin" = "Dylovene", "dexalin" = "Dexalin") var/amounts = list(5, 10) var/obj/item/weapon/reagent_containers/glass/beaker = null var/filtering = 0 @@ -169,10 +181,10 @@ if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) src.occupant.vessel.trans_to(beaker, 1) for(var/datum/reagent/x in src.occupant.reagents.reagent_list) - if(x.volume > 20) - src.occupant.reagents.trans_id_to(beaker, x.id, 2) - src.occupant.vessel.trans_to(beaker, 1) - src.updateDialog() +// world << "FILTERING CHEMS" + src.occupant.reagents.trans_to(beaker, 3) + src.occupant.vessel.trans_to(beaker, 1) + src.updateUsrDialog() return @@ -191,6 +203,7 @@ user.drop_item() G.loc = src user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") + src.updateUsrDialog() return else user << "\red The sleeper has a beaker already." diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 3f17fe7299..4b2fb50c54 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -281,6 +281,7 @@ var/infected = "" var/imp = "" var/bled = "" + var/robot = "" var/splint = "" var/internal_bleeding = "" var/lung_ruptured = "" @@ -295,6 +296,8 @@ bled = "Bleeding:" if(e.status & ORGAN_BROKEN) AN = "[e.broken_description]:" + if(e.status & ORGAN_ROBOT) + robot = "Prosthetic:" if(e.open) open = "Open:" var/unknown_body = 0 @@ -308,16 +311,25 @@ if(!AN && !open && !infected & !imp) AN = "None:" if(!(e.status & ORGAN_DESTROYED)) - dat += "[e.display_name][e.burn_dam][e.brute_dam][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured]" + dat += "[e.display_name][e.burn_dam][e.brute_dam][robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured]" else dat += "[e.display_name]--Not Found" dat += "" for(var/organ_name in occupant.internal_organs) var/datum/organ/internal/i = occupant.internal_organs[organ_name] + var/mech = "" + if(i.robotic == 1) + mech = "Assisted:" + if(i.robotic == 2) + mech = "Mechanical:" dat += "" - dat += "[i.name]N/A[i.damage]None:" + dat += "[i.name]N/A[i.damage]None:[mech]" dat += "" dat += "" + if(occupant.sdisabilities & BLIND) + dat += text("Cataracts detected.
") + if(occupant.sdisabilities & NEARSIGHTED) + dat += text("Retinal misalignment detected.
") else dat += "\The [src] is empty." else diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 9de6b2c6aa..303e814ef1 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -79,13 +79,15 @@ continue O.Weaken(strength) - if ((O.eye_stat > 15 && prob(O.eye_stat + 50))) - flick("e_flash", O:flash) - O.eye_stat += rand(1, 2) + if (istype(O, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = O + var/datum/organ/internal/eyes/E = H.internal_organs["eyes"] + if ((E.damage > E.min_bruised_damage && prob(E.damage + 50))) + flick("e_flash", O:flash) + E.damage += rand(1, 5) else if(!O.blinded) flick("flash", O:flash) - O.eye_stat += rand(0, 2) /obj/machinery/flasher/emp_act(severity) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index dd445337b7..6c38442fec 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -522,29 +522,28 @@ "\red You stab yourself in the eyes with [src]!" \ ) if(istype(M, /mob/living/carbon/human)) + var/datum/organ/internal/eyes/eyes = H.internal_organs["eyes"] + eyes.damage += rand(3,4) + if(eyes.damage >= eyes.min_bruised_damage) + if(M.stat != 2) + if(eyes.robotic <= 1) //robot eyes bleeding might be a bit silly + M << "\red Your eyes start to bleed profusely!" + if(prob(50)) + if(M.stat != 2) + M << "\red You drop what you're holding and clutch at your eyes!" + M.drop_item() + M.eye_blurry += 10 + M.Paralyse(1) + M.Weaken(4) + if (eyes.damage >= eyes.min_broken_damage) + if(M.stat != 2) + M << "\red You go blind!" var/datum/organ/external/affecting = M:get_organ("head") if(affecting.take_damage(7)) M:UpdateDamageIcon() else M.take_organ_damage(7) M.eye_blurry += rand(3,4) - M.eye_stat += rand(2,4) - if (M.eye_stat >= 10) - M.eye_blurry += 15+(0.1*M.eye_blurry) - M.disabilities |= NEARSIGHTED - if(M.stat != 2) - M << "\red Your eyes start to bleed profusely!" - if(prob(50)) - if(M.stat != 2) - M << "\red You drop what you're holding and clutch at your eyes!" - M.drop_item() - M.eye_blurry += 10 - M.Paralyse(1) - M.Weaken(4) - if (prob(M.eye_stat - 10 + 1)) - if(M.stat != 2) - M << "\red You go blind!" - M.sdisabilities |= BLIND return /obj/item/clean_blood() diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index c1ccb4aa6c..a89a4573ea 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -78,6 +78,7 @@ if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind user << "[M] pupils does not react to the light!" else if(XRAY in M.mutations) //mob has X-RAY vision + flick("flash", M.flash) //Yes, you can still get flashed wit X-Ray. user << "[M] pupils give an eerie glow!" else //they're okay! if(!M.blinded) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 1a50e9ad05..4024e5275e 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -48,7 +48,6 @@ //Flashing everyone if(eye_safety < 1) flick("e_flash", M.flash) - M.eye_stat += rand(1, 3) M.Stun(2) M.Weaken(10) @@ -80,13 +79,14 @@ M.ear_deaf = max(M.ear_deaf,5) //This really should be in mob not every check - if (M.eye_stat >= 20) - M << "\red Your eyes start to burn badly!" - M.disabilities |= NEARSIGHTED - if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) - if (prob(M.eye_stat - 20 + 1)) - M << "\red You can't see anything!" - M.sdisabilities |= BLIND + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/datum/organ/internal/eyes/E = H.internal_organs["eyes"] + if (E.damage >= E.min_bruised_damage) + M << "\red Your eyes start to burn badly!" + if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) + if (E.damage >= E.min_broken_damage) + M << "\red You can't see anything!" if (M.ear_damage >= 15) M << "\red Your ears start to ring badly!" if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 25f86aed47..6a1767bd0a 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -354,27 +354,29 @@ /obj/item/weapon/weldingtool/proc/eyecheck(mob/user as mob) if(!iscarbon(user)) return 1 var/safety = user:eyecheck() + var/mob/living/carbon/human/H = user + var/datum/organ/internal/eyes/E = H.internal_organs["eyes"] switch(safety) if(1) usr << "\red Your eyes sting a little." - user.eye_stat += rand(1, 2) - if(user.eye_stat > 12) + E.damage += rand(1, 2) + if(E.damage > 12) user.eye_blurry += rand(3,6) if(0) usr << "\red Your eyes burn." - user.eye_stat += rand(2, 4) - if(user.eye_stat > 10) - user.eye_blurry += rand(4,10) + E.damage += rand(2, 4) + if(E.damage > 10) + E.damage += rand(4,10) if(-1) usr << "\red Your thermals intensify the welder's glow. Your eyes itch and burn severely." user.eye_blurry += rand(12,20) - user.eye_stat += rand(12, 16) - if(user.eye_stat > 10 && safety < 2) + E.damage += rand(12, 16) + if(E.damage > 10 && safety < 2) user << "\red Your eyes are really starting to hurt. This can't be good for you!" - if (prob(user.eye_stat - 25 + 1)) + if (E.damage >= E.min_broken_damage) user << "\red You go blind!" user.sdisabilities |= BLIND - else if (prob(user.eye_stat - 15 + 1)) + else if (E.damage >= E.min_bruised_damage) user << "\red You go blind!" user.eye_blind = 5 user.eye_blurry = 5 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 4044c0aae1..82ccf01492 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -159,6 +159,9 @@ emp_act for(var/datum/organ/external/O in organs) if(O.status & ORGAN_DESTROYED) continue O.emp_act(severity) + for(var/datum/organ/internal/O in internal_organs) + if(O.robotic == 0) continue + O.emp_act(severity) ..() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 315b3f4091..104e60fff8 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -21,7 +21,7 @@ var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup var/age = 30 //Player's age (pure fluff) - var/b_type = "A+" //Player's bloodtype (Not currently used, just character fluff) + var/b_type = "A+" //Player's bloodtype var/underwear = 1 //Which underwear the player wants var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 0c822a4fa3..4510d0c1a6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1335,10 +1335,6 @@ if(!O.up && tinted_weldhelh) client.screen += global_hud.darkMask - if(eye_stat > 20) - if(eye_stat > 30) client.screen += global_hud.darkMask - else client.screen += global_hud.vimpaired - if(machine) if(!machine.check_eye(src)) reset_view(null) else diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ddfd7d1606..baceaa2073 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -280,7 +280,6 @@ blinded = 0 eye_blind = 0 eye_blurry = 0 - eye_stat = 0 ear_deaf = 0 ear_damage = 0 heal_overall_damage(getBruteLoss(), getFireLoss()) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 5f7c707635..dc984663dd 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -81,7 +81,6 @@ var/lying = 0 var/lying_prev = 0 var/canmove = 1 - var/eye_stat = null//Living, potentially Carbon var/lastpuke = 0 var/unacidable = 0 var/small = 0 diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index dd31d28ac7..6be181da08 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -55,12 +55,12 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 // being pumped properly anymore. var/datum/organ/internal/heart/heart = internal_organs["heart"] switch(heart.damage) - if(5 to 10) + if(1 to heart.min_bruised_damage) blood_volume *= 0.8 - if(11 to 20) - blood_volume *= 0.5 - if(21 to INFINITY) - blood_volume *= 0.3 + if(heart.min_bruised_damage to heart.min_broken_damage) + blood_volume *= 0.6 + if(heart.min_broken_damage to INFINITY) + blood_volume *= 0.4 //Effects of bloodloss switch(blood_volume) @@ -93,7 +93,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 src << "\red You feel extremely [word]" if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) oxyloss += 5 - toxloss += 5 + toxloss += 1 if(prob(15)) var/word = pick("dizzy","woosey","faint") src << "\red You feel extremely [word]" diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 33ce1131c5..15ca30f2ce 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -56,6 +56,7 @@ new/datum/organ/internal/liver(src) new/datum/organ/internal/kidney(src) new/datum/organ/internal/brain(src) + new/datum/organ/internal/eyes(src) for(var/name in organs_by_name) organs += organs_by_name[name] diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 43d0a180d8..03a4f96da4 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -5,15 +5,15 @@ /mob/living/carbon/human/var/list/internal_organs = list() /datum/organ/internal - // amount of damage to the organ - var/damage = 0 + var/damage = 0 // amount of damage to the organ var/min_bruised_damage = 10 var/min_broken_damage = 30 var/parent_organ = "chest" + var/robotic = 0 //For being a robot /datum/organ/internal/proc/rejuvenate() damage=0 - + /datum/organ/internal/proc/is_bruised() return damage >= min_bruised_damage @@ -31,12 +31,33 @@ src.owner = H /datum/organ/internal/proc/take_damage(amount, var/silent=0) + if(src.robotic == 2) + src.damage += amount * 0.8 src.damage += amount var/datum/organ/external/parent = owner.get_organ(parent_organ) if (!silent) owner.custom_pain("Something inside your [parent.display_name] hurts a lot.", 1) + +/datum/organ/internal/proc/emp_act(severity) + if(src.robotic == 1) + take_damage(15, 0) + if(severity == 2) + take_damage(5, 0) + if(src.robotic == 2) + take_damage(30, 0) + if(severity == 2) + take_damage(15, 0) + +/datum/organ/internal/proc/mechanize() //Being used to make robutt hearts, etc + robotic = 2 + +/datum/organ/internal/proc/mechassist() //Used to add things like pacemakers, etc + robotic = 1 + min_bruised_damage = 15 + min_broken_damage = 35 + /**************************************************** INTERNAL ORGANS DEFINES ****************************************************/ @@ -102,4 +123,16 @@ /datum/organ/internal/brain name = "brain" - parent_organ = "head" \ No newline at end of file + parent_organ = "head" + +/datum/organ/internal/eyes + name = "eyes" + parent_organ = "head" + + process() //Eye damage replaces the old eye_stat var. + if(damage > min_bruised_damage) + if(damage > min_broken_damage) + owner.client.screen += global_hud.darkMask + owner.eye_blind = 20 + else + owner.client.screen += global_hud.vimpaired diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 363908c548..314a820aa6 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1069,7 +1069,6 @@ datum M.sdisabilities = 0 M.eye_blurry = 0 M.eye_blind = 0 - M.eye_stat = 0 M.SetWeakened(0) M.SetStunned(0) M.SetParalysis(0) @@ -1189,12 +1188,33 @@ datum if(!M) M = holder.my_atom M.eye_blurry = max(M.eye_blurry-5 , 0) M.eye_blind = max(M.eye_blind-5 , 0) - M.disabilities &= ~NEARSIGHTED - M.eye_stat = max(M.eye_stat-5, 0) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/datum/organ/internal/eyes/E = H.internal_organs["eyes"] + if(istype(E)) + E.damage = max(E.damage-5 , 0) // M.sdisabilities &= ~1 Replaced by eye surgery ..() return + peridaxon + name = "Peridaxon" + id = "peridaxon" + description = "Used to encourage recovery of internal organs and nervous systems. Medicate cautiously." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + overdose = 10 + + on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/datum/organ/internal/I = H.internal_organs + if(I.parent_organ == "chest") + I.damage = max(I.damage -1 , 0) + ..() + return + bicaridine name = "Bicaridine" id = "bicaridine" @@ -1661,7 +1681,7 @@ datum if(15 to 25) M.drowsyness = max(M.drowsyness, 20) if(25 to INFINITY) - M.Paralyse(20) + M.Weaken(20) M.drowsyness = max(M.drowsyness, 30) data++ ..() @@ -2347,7 +2367,7 @@ datum id = "grapejuice" description = "It's grrrrrape!" color = "#863333" // rgb: 134, 51, 51 - + drink/grapesoda name = "Grape Soda" id = "grapesoda" @@ -3054,29 +3074,29 @@ datum switch(data) if(1 to 25) if (!M.stuttering) M.stuttering = 1 - M.make_dizzy(10) + M.make_dizzy(1) M.hallucination = max(M.hallucination, 3) if(prob(1)) M.emote(pick("twitch","giggle")) if(25 to 75) if (!M.stuttering) M.stuttering = 1 M.hallucination = max(M.hallucination, 10) - M.make_jittery(20) - M.make_dizzy(20) + M.make_jittery(2) + M.make_dizzy(2) M.druggy = max(M.druggy, 45) if(prob(5)) M.emote(pick("twitch","giggle")) if (75 to 150) if (!M.stuttering) M.stuttering = 1 M.hallucination = max(M.hallucination, 60) - M.make_jittery(40) - M.make_dizzy(40) + M.make_jittery(4) + M.make_dizzy(4) M.druggy = max(M.druggy, 60) if(prob(10)) M.emote(pick("twitch","giggle")) if(prob(30)) M.adjustToxLoss(2) if (150 to 300) if (!M.stuttering) M.stuttering = 1 M.hallucination = max(M.hallucination, 60) - M.make_jittery(40) - M.make_dizzy(40) + M.make_jittery(4) + M.make_dizzy(4) M.druggy = max(M.druggy, 60) if(prob(10)) M.emote(pick("twitch","giggle")) if(prob(30)) M.adjustToxLoss(2) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 3d97068901..c2673b9b45 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -189,6 +189,14 @@ datum required_reagents = list("silicon" = 1, "carbon" = 1) result_amount = 2 + peridaxon + name = "Peridaxon" + id = "peridaxon" + result = "peridaxon" + required_reagents = list("bicaridine" = 2, "clonexadone" = 2) + required_catalysts = list("plasma" = 5) + result_amount = 2 + virus_food name = "Virus Food" id = "virusfood" @@ -1790,7 +1798,7 @@ datum result = "barefoot" required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1) result_amount = 3 - + grapesoda //Allows Grape Soda to be made name = "Grape Soda" id = "grapesoda" diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm index 9f11b48c78..ebaf436a5c 100644 --- a/code/modules/surgery/eye.dm +++ b/code/modules/surgery/eye.dm @@ -36,12 +36,15 @@ user.visible_message("\blue [user] has separated the corneas on [target]'s eyes with \the [tool]." , \ "\blue You have separated the corneas on [target]'s eyes with \the [tool].",) target.op_stage.eyes = 1 + target.blinded += 1.5 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \ "\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" ) affected.createwound(CUT, 10) + eyes.take_damage(5, 1) /datum/surgery_step/eye/lift_eyes allowed_tools = list( @@ -66,10 +69,12 @@ target.op_stage.eyes = 2 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, damaging [target]'s eyes with \the [tool]!", \ "\red Your hand slips, damaging [target]'s eyes with \the [tool]!") target.apply_damage(10, BRUTE, affected) + eyes.take_damage(5, 1) /datum/surgery_step/eye/mend_eyes allowed_tools = list( @@ -95,10 +100,12 @@ target.op_stage.eyes = 3 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] 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) + eyes.take_damage(5, 1) /datum/surgery_step/eye/cauterize allowed_tools = list( @@ -119,16 +126,19 @@ "You are beginning to cauterize the incision around [target]'s eyes with \the [tool].") end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] user.visible_message("\blue [user] cauterizes the incision around [target]'s eyes with \the [tool].", \ "\blue You cauterize the incision around [target]'s eyes with \the [tool].") if (target.op_stage.eyes == 3) + target.disabilities &= ~NEARSIGHTED target.sdisabilities &= ~BLIND - target.eye_stat = 0 + eyes.damage -= 15 target.op_stage.eyes = 0 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, searing [target]'s eyes with \the [tool]!", \ "\red Your hand slips, searing [target]'s eyes with \the [tool]!") target.apply_damage(5, BURN, affected) - target.eye_stat += 5 \ No newline at end of file + eyes.take_damage(5, 1) \ No newline at end of file diff --git a/code/modules/surgery/ribcage.dm b/code/modules/surgery/ribcage.dm index 747d8a4363..b4f6762a3d 100644 --- a/code/modules/surgery/ribcage.dm +++ b/code/modules/surgery/ribcage.dm @@ -214,8 +214,12 @@ 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]." ) if(heart.damage > 0) - user.visible_message("[user] starts mending the bruises on [target]'s heart with \the [tool].", \ - "You start mending the bruises on [target]'s heart with \the [tool]." ) + if(heart.robotic < 2) + user.visible_message("[user] starts mending the bruises on [target]'s heart with \the [tool].", \ + "You start mending the bruises on [target]'s heart with \the [tool]." ) + if(heart.robotic == 2) + user.visible_message("\blue [user] attempts to repair [target]'s mechanical heart with \the [tool]...", \ + "\blue You attempt to repair [target]'s heart with \the [tool]...") if(liver.damage > 0) user.visible_message("[user] starts mending the bruises on [target]'s liver with \the [tool].", \ "You start mending the bruises on [target]'s liver with \the [tool]." ) @@ -237,9 +241,13 @@ lungs.damage = 0 if(heart.damage > 0) - user.visible_message("\blue [user] treats the bruises on [target]'s heart with \the [tool].", \ - "\blue You treat the bruises on [target]'s heart with \the [tool]." ) - heart.damage = 0 + if(heart.robotic == 2) + user.visible_message("\blue [user] pokes [target]'s mechanical heart with \the [tool].", \ + "\red [target]'s heart is not organic, you cannot operate on it with \the [tool]!") + else + user.visible_message("\blue [user] treats the bruises on [target]'s heart with \the [tool].", \ + "\blue You treat the bruises on [target]'s heart with \the [tool]." ) + heart.damage = 0 if(liver.damage > 0) user.visible_message("\blue [user] treats the bruises on [target]'s liver with \the [tool].", \ @@ -256,3 +264,50 @@ 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/ribcage/fix_chest_internal_robot //For artificial organs + allowed_tools = list( + /obj/item/stack/nanopaste = 100, \ + /obj/item/weapon/bonegel = 60, \ + /obj/item/weapon/screwdriver = 30, \ + ) + + min_duration = 70 + max_duration = 90 + + can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/is_chest_organ_damaged = 0 + var/datum/organ/external/chest/chest = target.get_organ("chest") + for(var/datum/organ/internal/I in chest.internal_organs) if(I.damage > 0) + is_chest_organ_damaged = 1 + break + return ..() && is_chest_organ_damaged && target.op_stage.ribcage == 2 + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/internal/heart/heart = target.internal_organs["heart"] + + if(heart.damage > 0) + if(heart.robotic == 2) + user.visible_message("[user] starts mending the mechanisms on [target]'s heart with \the [tool].", \ + "You start mending the mechanisms on [target]'s heart with \the [tool]." ) + target.custom_pain("The pain in your chest is living hell!",1) + ..() + + end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/internal/heart/heart = target.internal_organs["heart"] + if(heart.damage > 0) + user.visible_message("\blue [user] repairs [target]'s heart with \the [tool].", \ + "\blue You repair [target]'s heart with \the [tool]." ) + heart.damage = 0 + + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/internal/heart/heart = target.internal_organs["heart"] + user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s heart, gumming it up!!" , \ + "\red Your hand slips, smearing [tool] in the incision in [target]'s heart, gumming it up!") + heart.take_damage(5, 0) + target.adjustToxLoss(5) + +////////////////////////////////////////////////////////////////// +// HEART SURGERY // +////////////////////////////////////////////////////////////////// +