diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index ca2f6e1cb6..af11be2e5b 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -1,74 +1,72 @@
-/obj/machinery/computer/operating
- name = "operating computer"
- desc = "Used to monitor the vitals of a patient during surgery."
- icon_screen = "crew"
- icon_keyboard = "med_key"
- circuit = /obj/item/circuitboard/computer/operating
- var/mob/living/carbon/human/patient
- var/obj/structure/table/optable/table
-
- light_color = LIGHT_COLOR_BLUE
-
-/obj/machinery/computer/operating/Initialize()
- . = ..()
- find_table()
-
-/obj/machinery/computer/operating/proc/find_table()
- for(var/dir in GLOB.cardinals)
- table = locate(/obj/structure/table/optable, get_step(src, dir))
- if(table)
- table.computer = src
- break
-
-
-/obj/machinery/computer/operating/attack_hand(mob/user)
- if(..())
- return
- interact(user)
-
-/obj/machinery/computer/operating/interact(mob/user)
- var/dat = ""
- if(table)
- dat += "Patient information:
"
- if(table.check_patient())
- patient = table.patient
- dat += get_patient_info()
- else
- patient = null
- dat += "No patient detected"
- else
- dat += "Operating table not found."
-
- var/datum/browser/popup = new(user, "op", "Operating Computer", 400, 500)
- popup.set_content(dat)
- popup.open()
-
-/obj/machinery/computer/operating/proc/get_patient_info()
- var/dat = {"
-
Patient:
[patient.stat ? "Non-Responsive" : "Stable"]
- Blood Type:
[patient.dna.blood_type]
-
-
-
- \> Brute Damage:
[patient.getBruteLoss()]%
- \> Resp. Damage:
[patient.getOxyLoss()]%
- \> Toxin Content:
[patient.getToxLoss()]%
- \> Burn Severity:
[patient.getFireLoss()]%
-
- "}
- if(patient.surgeries.len)
- dat += "
Initiated Procedures"
- for(var/datum/surgery/procedure in patient.surgeries)
- dat += "[capitalize(procedure.name)]
"
- var/datum/surgery_step/surgery_step = procedure.get_surgery_step()
- dat += "Next step: [capitalize(surgery_step.name)]"
- if(surgery_step.repeatable)
- dat += " or "
- var/datum/surgery_step/next_step = procedure.get_surgery_next_step()
- if(next_step)
- dat += "[capitalize(next_step.name)]"
- else
- dat += "finish operation"
- dat += "
"
- dat += "
"
- return dat
+/obj/machinery/computer/operating
+ name = "operating computer"
+ desc = "Used to monitor the vitals of a patient during surgery."
+ icon_screen = "crew"
+ icon_keyboard = "med_key"
+ circuit = /obj/item/circuitboard/computer/operating
+ var/mob/living/carbon/human/patient
+ var/obj/structure/table/optable/table
+ light_color = LIGHT_COLOR_BLUE
+
+/obj/machinery/computer/operating/Initialize()
+ . = ..()
+ find_table()
+
+/obj/machinery/computer/operating/proc/find_table()
+ for(var/dir in GLOB.cardinals)
+ table = locate(/obj/structure/table/optable, get_step(src, dir))
+ if(table)
+ table.computer = src
+ break
+
+/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "operating_computer", name, 350, 470, master_ui, state)
+ ui.open()
+
+/obj/machinery/computer/operating/ui_data(mob/user)
+ var/list/data = list()
+ data["table"] = table
+ if(table)
+ data["patient"] = list()
+ if(table.check_patient())
+ patient = table.patient
+ switch(patient.stat)
+ if(CONSCIOUS)
+ data["patient"]["stat"] = "Conscious"
+ data["patient"]["statstate"] = "good"
+ if(SOFT_CRIT)
+ data["patient"]["stat"] = "Conscious"
+ data["patient"]["statstate"] = "average"
+ if(UNCONSCIOUS)
+ data["patient"]["stat"] = "Unconscious"
+ data["patient"]["statstate"] = "average"
+ if(DEAD)
+ data["patient"]["stat"] = "Dead"
+ data["patient"]["statstate"] = "bad"
+ data["patient"]["health"] = patient.health
+ data["patient"]["blood_type"] = patient.dna.blood_type
+ data["patient"]["maxHealth"] = patient.maxHealth
+ data["patient"]["minHealth"] = HEALTH_THRESHOLD_DEAD
+ data["patient"]["bruteLoss"] = patient.getBruteLoss()
+ data["patient"]["fireLoss"] = patient.getFireLoss()
+ data["patient"]["toxLoss"] = patient.getToxLoss()
+ data["patient"]["oxyLoss"] = patient.getOxyLoss()
+ if(patient.surgeries.len)
+ data["procedures"] = list()
+ for(var/datum/surgery/procedure in patient.surgeries)
+ var/datum/surgery_step/surgery_step = procedure.get_surgery_step()
+ var/alternative_step
+ if(surgery_step.repeatable)
+ var/datum/surgery_step/next_step = procedure.get_surgery_next_step()
+ if(next_step)
+ alternative_step = capitalize(next_step.name)
+ else
+ alternative_step = "Finish operation"
+ data["procedures"] += list(list(
+ "name" = capitalize(procedure.name),
+ "next_step" = capitalize(surgery_step.name),
+ "alternative_step" = alternative_step
+ ))
+ return data
diff --git a/tgui/src/interfaces/operating_computer.ract b/tgui/src/interfaces/operating_computer.ract
new file mode 100644
index 0000000000..f445427ba8
--- /dev/null
+++ b/tgui/src/interfaces/operating_computer.ract
@@ -0,0 +1,46 @@
+{{#unless data.table}}
+
+ No table detected!
+
+{{/unless}}
+
+
+ {{#if data.patient}}
+
+ {{data.patient.stat}}
+
+
+ {{data.patient.blood_type}}
+
+
+ {{Math.round(adata.patient.health)}}
+
+ {{#each [{label: "Brute", type: "bruteLoss"}, {label: "Burn", type: "fireLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Respiratory", type: "oxyLoss"}]}}
+
+ {{Math.round(adata.patient[type])}}
+
+ {{/each}}
+ {{else}}
+ No patient detected.
+ {{/if}}
+
+
+ {{#if data.procedures}}
+ {{#each data.procedures}}
+
+
+ {{next_step}}
+
+ {{#if alternative_step}}
+
+ {{alternative_step}}
+
+ {{/if}}
+
+ {{/each}}
+ {{else}}
+ No active procedures.
+ {{/if}}
+
+