From cba1a9585db841cbf89506e0b87da08ed293dcc4 Mon Sep 17 00:00:00 2001 From: Nanai Date: Fri, 8 Nov 2013 10:23:59 -0500 Subject: [PATCH] Medical Hoopery Added eyes as an internal organ, removed the eye-stat var on mobs and changed it to properly direct it to eye damage. Altered all reference. Updated the sleeper to allow for ejection of the beakers and occupants in panel. Updated the body scanner to check for prosthetics/mechanized organs, and inform the individual of the blind disability. Laid the groundwork for mechanical and assisted internal organs. Groundwork for chemical: Peridaxon, a chemical that allows for the slow regeneration from organ damage. --- code/ZAS/Plasma.dm | 6 +- code/game/machinery/Sleeper.dm | 41 ++++++++---- code/game/machinery/adv_med.dm | 16 ++++- code/game/machinery/flasher.dm | 10 +-- code/game/objects/items.dm | 33 +++++----- code/game/objects/items/devices/flashlight.dm | 1 + .../items/weapons/grenades/flashbang.dm | 16 ++--- code/game/objects/items/weapons/tools.dm | 20 +++--- .../mob/living/carbon/human/human_defense.dm | 3 + .../mob/living/carbon/human/human_defines.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 4 -- code/modules/mob/living/living.dm | 1 - code/modules/mob/mob_defines.dm | 1 - code/modules/organs/blood.dm | 12 ++-- code/modules/organs/organ.dm | 1 + code/modules/organs/organ_internal.dm | 41 ++++++++++-- code/modules/reagents/Chemistry-Reagents.dm | 44 +++++++++---- code/modules/reagents/Chemistry-Recipes.dm | 10 ++- code/modules/surgery/eye.dm | 14 +++- code/modules/surgery/ribcage.dm | 65 +++++++++++++++++-- 20 files changed, 247 insertions(+), 94 deletions(-) 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 // +////////////////////////////////////////////////////////////////// +