diff --git a/baystation12.dme b/baystation12.dme
index 012e9819e10..5ac21d3e793 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -140,7 +140,6 @@
#include "code\datums\diseases\advance\symptoms\sneeze.dm"
#include "code\datums\diseases\advance\symptoms\stimulant.dm"
#include "code\datums\diseases\advance\symptoms\symptoms.dm"
-#include "code\datums\diseases\advance\symptoms\visionloss.dm"
#include "code\datums\diseases\advance\symptoms\vitiligo.dm"
#include "code\datums\diseases\advance\symptoms\voice_change.dm"
#include "code\datums\diseases\advance\symptoms\vomit.dm"
diff --git a/code/ZAS/Plasma.dm b/code/ZAS/Plasma.dm
index 9f0e95f6617..716ea216403 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 81a4338e733..154bbd047d7 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -11,6 +11,11 @@
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)
@@ -72,10 +77,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 +91,8 @@
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 +114,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 +152,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(10, 20)
var/obj/item/weapon/reagent_containers/glass/beaker = null
var/filtering = 0
@@ -192,6 +200,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 dface77429e..31640d7cf1d 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -281,6 +281,7 @@
var/AN = ""
var/open = ""
var/infected = ""
+ var/robot = ""
var/imp = ""
var/bled = ""
var/splint = ""
@@ -297,6 +298,8 @@
bled = "Bleeding:"
if(e.status & ORGAN_BROKEN)
AN = "[e.broken_description]:"
+ if(e.status & ORGAN_ROBOT)
+ robot = "Prosthetic:"
if(e.open)
open = "Open:"
if(e.implants.len)
@@ -304,16 +307,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 9de6b2c6aa8..303e814ef11 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 379604026ad..54fa3a8baaf 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -542,29 +542,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 5762cfd9367..cc651af199d 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/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 3e368bf4198..d9e9e12892e 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -80,6 +80,8 @@
else if(prob(50))
severity -= 1
severity = min(max(severity, 0), 4)
+ var/mob/living/carbon/human/H = C
+ var/datum/organ/internal/eyes/E = H.internal_organs["eyes"]
switch(severity)
if(0)
@@ -87,26 +89,26 @@
C << "A small, bright dot appears in your vision."
if(1)
//industrial grade eye protection
- C.eye_stat += rand(0, 2)
+ E.damage += rand(0, 2)
C << "Something bright flashes in the corner of your vision!"
if(2)
//basic eye protection (sunglasses)
flick("flash", C.flash)
- C.eye_stat += rand(1, 6)
+ E.damage += rand(1, 6)
C << "Your eyes were blinded!"
if(3)
//no eye protection
if(prob(2))
C.Weaken(1)
flick("e_flash", C.flash)
- C.eye_stat += rand(3, 7)
+ E.damage += rand(3, 7)
C << "Your eyes were blinded!"
if(4)
//the effect has been worsened by something
if(prob(5))
C.Weaken(1)
flick("e_flash", C.flash)
- C.eye_stat += rand(5, 10)
+ E.damage += rand(5, 10)
C << "Your eyes were blinded!"
else
outmsg = "You fail to blind [C] by shining [src] at their eyes."
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 1a50e9ad05c..4024e5275e9 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 a15f9febf1c..071bdbea9af 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -359,27 +359,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 8d1f37c50d1..351318adc4a 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -173,6 +173,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 65aa5adbf9f..12d6d0c57da 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 2fbe738ac60..05fff665a2a 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1401,10 +1401,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/mob_defines.dm b/code/modules/mob/mob_defines.dm
index fca0f6abe67..14a7ac1f68f 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 9e6bc67eef1..9dd65e507e5 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -68,13 +68,12 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
var/datum/organ/internal/heart/heart = internal_organs["heart"]
if(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)
if(BLOOD_VOLUME_SAFE to 10000)
@@ -106,7 +105,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 862fe670eb2..816c4d76890 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -58,7 +58,7 @@
internal_organs_by_name["liver"] = new/datum/organ/internal/liver(src)
internal_organs_by_name["kidney"] = new/datum/organ/internal/kidney(src)
internal_organs_by_name["brain"] = new/datum/organ/internal/brain(src)
-// internal_organs_by_name["eyes"] = new/datum/organ/internal/eyes(src)
+ internal_organs_by_name["eyes"] = 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 cb5148f105c..cbf1a935de2 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -10,6 +10,7 @@
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
@@ -31,12 +32,33 @@
src.owner = H
/datum/organ/internal/proc/take_damage(amount, var/silent=0)
- src.damage += amount
+ if(src.robotic == 2)
+ src.damage += amount * 0.8
+ else
+ 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 +124,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
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index d71c5931beb..e8f23848585 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -516,7 +516,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++
..()
@@ -1596,6 +1596,11 @@ datum
M.eye_blind = 0
// M.disabilities &= ~NEARSIGHTED //doesn't even do anythig cos of the disabilities = 0 bit
// M.sdisabilities &= ~BLIND //doesn't even do anythig cos of the sdisabilities = 0 bit
+ 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.SetWeakened(0)
M.SetStunned(0)
M.SetParalysis(0)
@@ -1614,6 +1619,25 @@ datum
..()
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
+
+
synaptizine
name = "Synaptizine"
id = "synaptizine"
@@ -1710,8 +1734,11 @@ 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
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index bbc8a665380..1e2c1a47496 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"
diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm
index 9f11b48c78f..ebaf436a5ce 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 34b420454d7..4c841de491f 100644
--- a/code/modules/surgery/ribcage.dm
+++ b/code/modules/surgery/ribcage.dm
@@ -216,8 +216,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]." )
@@ -239,9 +243,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 treats 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].", \
@@ -258,3 +266,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 //
+//////////////////////////////////////////////////////////////////