diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 438b14abe0d..e8967791905 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -34,21 +34,24 @@
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(istype(O,/obj/item/organ/brain) && !(istype(O,/obj/item/organ/brain/golem)) && !brainmob) //Time to stick a brain in it --NEO /MMI'ing a scroll of paper makes 0 sense
-
+ if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO
var/obj/item/organ/brain/B = O
if(B.health <= 0)
- user << "\red That brain is well and truly dead."
+ user << "That brain is well and truly dead."
return
+ else if(!B.lobotomized && B.can_lobotomize)
+ user << "The brain won't fit until you perform a lobotomy!"
+ return
+ else if(!B.can_lobotomize)
+ user << "The [B] is incompatible with [src]!"
else if(!B.brainmob)
- user << "\red You aren't sure where this brain came from, but you're pretty sure it's a useless brain."
+ user << "You aren't sure where this brain came from, but you're pretty sure it's a useless brain."
return
- for(var/mob/V in viewers(src, null))
- V.show_message(text("\blue [user] sticks \a [O] into \the [src]."))
+ user.visible_message("[user] sticks \a [B] into \the [src].")
- brainmob = O:brainmob
- O:brainmob = null
+ brainmob = B.brainmob
+ B.brainmob = null
brainmob.loc = src
brainmob.container = src
brainmob.stat = 0
@@ -56,7 +59,7 @@
living_mob_list += brainmob
user.drop_item()
- brainobj = O
+ brainobj = B
brainobj.loc = src
name = "Man-Machine Interface: [brainmob.real_name]"
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index 6cbe65c1805..6bf79bc5734 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -14,6 +14,8 @@
origin_tech = list(TECH_BIO = 3)
attack_verb = list("attacked", "slapped", "whacked")
var/mob/living/carbon/brain/brainmob = null
+ var/lobotomized = 0
+ var/can_lobotomize = 1
/obj/item/organ/pariah_brain
name = "brain remnants"
@@ -90,12 +92,44 @@
target.key = brainmob.key
..()
+/obj/item/organ/brain/proc/lobotomize(mob/user as mob)
+ lobotomized = 1
+
+ if(owner)
+ owner << "As part of your brain is drilled out, you feel your past self, your memories, your very being slip away..."
+ owner << "You have been lobotomized. Your memories and your former life have been surgically removed from your brain, and while you are lobotomized you remember nothing that ever came before this moment."
+
+ else if(brainmob)
+ brainmob << "As part of your brain is drilled out, you feel your past self, your memories, your very being slip away..."
+ brainmob << "You have been lobotomized. Your memories and your former life have been surgically removed from your brain, and while you are lobotomized you remember nothing that ever came before this moment."
+
+ return
+
+/obj/item/organ/brain/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/weapon/surgicaldrill))
+ if(!lobotomized)
+ user.visible_message("[user] drills [src] deftly with [W], severing part of the brain!")
+ lobotomize(user)
+ else
+ user << "The brain has already been operated on!"
+ ..()
+
+/obj/item/organ/brain/process()
+ ..()
+
+ if(!owner)
+ return
+
+ if(lobotomized && (owner.getBrainLoss() < 50)) //lobotomized brains cannot be healed with chemistry. Part of the brain is irrevocably missing. Can be fixed magically with cloning, ofc.
+ owner.setBrainLoss(50)
+
/obj/item/organ/brain/slime
name = "slime core"
desc = "A complex, organic knot of jelly and crystalline particles."
robotic = 2
icon = 'icons/mob/slimes.dmi'
icon_state = "green slime extract"
+ can_lobotomize = 0
/obj/item/organ/brain/golem
name = "chelm"
@@ -103,3 +137,4 @@
robotic = 2
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
+ can_lobotomize = 0
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index c026c5a63f3..ec38053e190 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -163,6 +163,8 @@ var/list/ai_verbs_default = list(
else
if (B.brainmob.mind)
B.brainmob.mind.transfer_to(src)
+ if(B.brainobj)
+ B.brainobj.lobotomized = 1
on_mob_init()
@@ -271,7 +273,7 @@ var/list/ai_verbs_default = list(
aiPDA.ownjob = "AI"
aiPDA.owner = pickedName
aiPDA.name = pickedName + " (" + aiPDA.ownjob + ")"
-
+
setup_icon() //this is because the ai custom name is related to the ai name, so, we just call the setup icon after someone named their ai
/*
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index bb01772a235..aafdaa59a49 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -128,6 +128,8 @@
icontype = "Basic"
updatename(modtype)
updateicon()
+ if(mmi && mmi.brainobj)
+ mmi.brainobj.lobotomized = 1
radio = new /obj/item/device/radio/borg(src)
common_radio = radio
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index ec3c5b8756e..c2cd06e0d70 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -189,9 +189,6 @@
parent_organ = "chest"
dead_icon = "heart-off"
-/obj/item/organ/internal/vaurca/process()
- return
-
/obj/item/organ/vaurca/neuralsocket
name = "neural socket"
organ_tag = "neural socket"
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 121850dac55..70fde119120 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -101,7 +101,7 @@
/datum/surgery_step/internal/detatch_organ
allowed_tools = list(
- /obj/item/weapon/scalpel = 100,
+ /obj/item/weapon/scalpel = 100,
/obj/item/weapon/material/knife = 75,
/obj/item/weapon/material/shard = 50
)
@@ -342,6 +342,49 @@
"Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!")
affected.createwound(BRUISE, 20)
+/datum/surgery_step/internal/lobotomize
+ allowed_tools = list(
+ /obj/item/weapon/scalpel/manager = 95,
+ /obj/item/weapon/surgicaldrill = 75,
+ /obj/item/weapon/pickaxe/ = 5
+ )
+
+ min_duration = 100
+ max_duration = 120
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+
+ if (!..())
+ return 0
+
+ target.op_stage.current_organ = null
+
+ var/obj/item/organ/brain/sponge = target.internal_organs_by_name["brain"]
+ if(sponge && sponge.can_lobotomize && !sponge.lobotomized)
+ target.op_stage.current_organ = sponge
+ return ..()
+ else
+ return 0
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/brain/B = target.op_stage.current_organ
+ user.visible_message("[user] begins lobotomizing [target]'s [B.name] with \the [tool].", \
+ "You start lobotomizing [target]'s [B.name] with \the [tool].")
+ target.custom_pain("Someone's scraping away at your [B.name]!",1)
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/brain/B = target.op_stage.current_organ
+ user.visible_message("[user] has lobotomized [target]'s \the [B.name] with \the [tool]." , \
+ "You have lobotomized [target]'s [B.name] with \the [tool].")
+ B.lobotomize(user)
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \
+ "Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!")
+ affected.createwound(BRUISE, 20)
+
//////////////////////////////////////////////////////////////////
// HEART SURGERY //
//////////////////////////////////////////////////////////////////
diff --git a/html/changelogs/Lordfowl - Lobos.yml b/html/changelogs/Lordfowl - Lobos.yml
new file mode 100644
index 00000000000..33ffdaa2e07
--- /dev/null
+++ b/html/changelogs/Lordfowl - Lobos.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: LordFowl
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Lobotomy is now a surgical operation. Dislocated brains can also be lobotomized. Lobotomy will permanently damage the brain and remove a target's memories."
+ - tweak: "Placing a brain into an MMI will require a lobotomy to be performed on the brain first."
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index 733cf136a21..8aeef12b1cc 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -3989,7 +3989,7 @@
"byK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/chargebay)
"byL" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/assembly/chargebay)
"byM" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled,/area/assembly/chargebay)
-"byN" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/retractor,/obj/effect/floor_decal/corner/white,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"byN" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/retractor,/obj/effect/floor_decal/corner/white,/obj/item/weapon/surgicaldrill,/turf/simulated/floor/tiled,/area/assembly/robotics)
"byO" = (/obj/structure/grille,/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/polarized{dir = 4},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
"byP" = (/obj/structure/table/standard,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/item/device/mmi/digital/posibrain,/obj/item/device/robotanalyzer,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/corner/white{tag = "icon-corner_white (WEST)"; icon_state = "corner_white"; dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics)
"byQ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)