diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 9924d4708ad..b7cedf65c09 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -4948,7 +4948,7 @@
"bRi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
"bRj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
"bRk" = (/obj/structure/table,/obj/item/FixOVein,/obj/item/surgicaldrill,/obj/item/bonegel,/obj/item/bonesetter,/obj/item/retractor,/obj/item/hemostat,/obj/item/cautery,/obj/item/stack/medical/bruise_pack/advanced{pixel_x = -4; pixel_y = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics)
-"bRl" = (/obj/effect/decal/warning_stripes/east,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/table,/obj/item/mmi,/obj/item/mmi,/obj/item/mmi,/obj/item/mmi/posibrain,/obj/item/robotanalyzer,/turf/simulated/floor/plasteel,/area/assembly/robotics)
+"bRl" = (/obj/effect/decal/warning_stripes/east,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/table,/obj/item/mmi,/obj/item/mmi,/obj/item/mmi,/obj/item/mmi/robotic_brain,/obj/item/robotanalyzer,/turf/simulated/floor/plasteel,/area/assembly/robotics)
"bRm" = (/obj/structure/table,/obj/item/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/healthanalyzer,/obj/item/healthanalyzer,/obj/item/healthanalyzer,/obj/machinery/newscaster{pixel_x = 26; pixel_y = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
"bRn" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"})
"bRo" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id_tag = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Research Hallway Entrance"; dir = 2; network = list("Research","SS13")},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"})
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 2b3c338fa3d..67f1dba85f0 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -117,7 +117,7 @@
return
laws = M.laws
- if(istype(P, /obj/item/mmi) || istype(P, /obj/item/mmi/posibrain))
+ if(istype(P, /obj/item/mmi))
if(!P:brainmob)
to_chat(user, "Sticking an empty [P] into the frame would sort of defeat the purpose.")
return
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 0f09d337897..332dc2854e1 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -239,7 +239,7 @@
)
// These items will NOT be preserved
var/list/do_not_preserve_items = list (
- /obj/item/mmi/posibrain
+ /obj/item/mmi/robotic_brain
)
/obj/machinery/cryopod/right
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index d054c163732..a2fa4220c3c 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -1206,10 +1206,10 @@
occupant = brainmob
brainmob.forceMove(src) //should allow relaymove
brainmob.canmove = 1
- if(istype(mmi_as_oc, /obj/item/mmi/posibrain))
- var/obj/item/mmi/posibrain/P = mmi_as_oc
- if(P.imprinted_master)
- to_chat(brainmob, "Your imprint to [P.imprinted_master] has been temporarily disabled. You should help the crew and not commit harm.")
+ if(istype(mmi_as_oc, /obj/item/mmi/robotic_brain))
+ var/obj/item/mmi/robotic_brain/R = mmi_as_oc
+ if(R.imprinted_master)
+ to_chat(brainmob, "Your imprint to [R.imprinted_master] has been temporarily disabled. You should help the crew and not commit harm.")
mmi_as_oc.loc = src
mmi_as_oc.mecha = src
verbs -= /obj/mecha/verb/eject
@@ -1309,10 +1309,10 @@
mmi.mecha = null
mmi.update_icon()
L.canmove = 0
- if(istype(mmi, /obj/item/mmi/posibrain))
- var/obj/item/mmi/posibrain/P = mmi
- if(P.imprinted_master)
- to_chat(L, "Imprint re-enabled, you are once again bound to [P.imprinted_master]'s commands.")
+ if(istype(mmi, /obj/item/mmi/robotic_brain))
+ var/obj/item/mmi/robotic_brain/R = mmi
+ if(R.imprinted_master)
+ to_chat(L, "Imprint re-enabled, you are once again bound to [R.imprinted_master]'s commands.")
icon_state = initial(icon_state)+"-open"
dir = dir_in
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 91c237a0328..72334496ea5 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -826,10 +826,10 @@ var/list/admin_verbs_ticket = list(
if(!istype(H))
if(istype(H, /mob/living/carbon/brain))
var/mob/living/carbon/brain/B = H
- if(istype(B.container, /obj/item/mmi/posibrain/ipc))
- var/obj/item/mmi/posibrain/ipc/C = B.container
+ if(istype(B.container, /obj/item/mmi/robotic_brain/positronic))
+ var/obj/item/mmi/robotic_brain/positronic/C = B.container
var/obj/item/organ/internal/brain/mmi_holder/posibrain/P = C.loc
- if(istype(P.owner, /mob/living/carbon/human))
+ if(ishuman(P.owner))
H = P.owner
else
return
@@ -852,10 +852,10 @@ var/list/admin_verbs_ticket = list(
if(!istype(H))
if(istype(H, /mob/living/carbon/brain))
var/mob/living/carbon/brain/B = H
- if(istype(B.container, /obj/item/mmi/posibrain/ipc))
- var/obj/item/mmi/posibrain/ipc/C = B.container
+ if(istype(B.container, /obj/item/mmi/robotic_brain/positronic))
+ var/obj/item/mmi/robotic_brain/positronic/C = B.container
var/obj/item/organ/internal/brain/mmi_holder/posibrain/P = C.loc
- if(istype(P.owner, /mob/living/carbon/human))
+ if(ishuman(P.owner))
H = P.owner
else
return
diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm
index 49991df72d7..74af696e76e 100644
--- a/code/modules/clothing/spacesuits/rig/modules/computer.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm
@@ -116,7 +116,7 @@
return 1
// Okay, it wasn't a terminal being touched, check for all the simple insertions.
- if(input_device.type in list(/obj/item/paicard, /obj/item/mmi, /obj/item/mmi/posibrain))
+ if(input_device.type in list(/obj/item/paicard, /obj/item/mmi, /obj/item/mmi/robotic_brain))
if(integrated_ai)
integrated_ai.attackby(input_device,user)
// If the transfer was successful, we can clear out our vars.
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 7b0e58ba5eb..e3069f4d5d3 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -265,8 +265,6 @@
forceMove(holder)
holder.stored_mmi = src
holder.update_from_mmi()
- if(istype(src, /obj/item/mmi/posibrain))
- holder.robotize()
if(brainmob && brainmob.mind)
brainmob.mind.transfer_to(H)
holder.insert(H)
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/robotic_brain.dm
similarity index 61%
rename from code/modules/mob/living/carbon/brain/posibrain.dm
rename to code/modules/mob/living/carbon/brain/robotic_brain.dm
index 9ab4a153f4d..ea83ab90206 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/robotic_brain.dm
@@ -1,37 +1,41 @@
-/obj/item/mmi/posibrain
+/obj/item/mmi/robotic_brain
name = "robotic brain"
- desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
- icon = 'icons/obj/assemblies.dmi'
- icon_state = "posibrain"
+ desc = "An advanced circuit, capable of housing a non-sentient synthetic intelligence."
+ icon = 'icons/obj/module.dmi'
+ icon_state = "boris_blank"
+ var/blank_icon = "boris_blank"
+ var/searching_icon = "boris_recharging"
+ var/occupied_icon = "boris"
w_class = WEIGHT_CLASS_NORMAL
origin_tech = "biotech=3;programming=3;plasmatech=2"
- var/searching = 0
+ var/searching = FALSE
var/askDelay = 10 * 60 * 1
//var/mob/living/carbon/brain/brainmob = null
var/list/ghost_volunteers[0]
req_access = list(access_robotics)
mecha = null//This does not appear to be used outside of reference in mecha.dm.
- var/silenced = 0 //if set to 1, they can't talk.
+ var/silenced = FALSE //if TRUE, they can't talk.
var/next_ping_at = 0
var/requires_master = TRUE
var/mob/living/carbon/human/imprinted_master = null
+ var/ejected_flavor_text = "circuit"
-/obj/item/mmi/posibrain/Destroy()
+/obj/item/mmi/robotic_brain/Destroy()
imprinted_master = null
return ..()
-/obj/item/mmi/posibrain/attack_self(mob/user)
+/obj/item/mmi/robotic_brain/attack_self(mob/user)
if(requires_master && !imprinted_master)
to_chat(user, "You press your thumb on [src] and imprint your user information.")
imprinted_master = user
return
- if(brainmob && !brainmob.key && searching == 0)
+ if(brainmob && !brainmob.key && !searching)
//Start the process of searching for a new user.
to_chat(user, "You carefully locate the manual activation switch and start [src]'s boot process.")
- icon_state = "posibrain-searching"
+ icon_state = searching_icon
ghost_volunteers.Cut()
- searching = 1
+ searching = TRUE
request_player()
spawn(600)
if(ghost_volunteers.len)
@@ -47,38 +51,39 @@
if(brainmob && brainmob.key)
to_chat(brainmob, "Your internal speaker has been toggled [silenced ? "off" : "on"].")
-/obj/item/mmi/posibrain/proc/request_player()
+/obj/item/mmi/robotic_brain/proc/request_player()
for(var/mob/dead/observer/O in player_list)
if(check_observer(O))
to_chat(O, "\A [src] has been activated. (Teleport | Sign Up)")
-/obj/item/mmi/posibrain/proc/check_observer(var/mob/dead/observer/O)
+/obj/item/mmi/robotic_brain/proc/check_observer(mob/dead/observer/O)
if(cannotPossess(O))
- return 0
+ return FALSE
if(jobban_isbanned(O, "Cyborg") || jobban_isbanned(O,"nonhumandept"))
- return 0
+ return FALSE
if(!O.can_reenter_corpse)
- return 0
+ return FALSE
if(O.client)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/obj/item/mmi/posibrain/proc/question(var/client/C)
+/obj/item/mmi/robotic_brain/proc/question(client/C)
spawn(0)
- if(!C) return
+ if(!C)
+ return
var/response = alert(C, "Someone is requesting a personality for a [src]. Would you like to play as one?", "[src] request", "Yes", "No", "Never for this round")
- if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
+ if(!C || brainmob.key || !searching)
+ return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
if(response == "Yes")
transfer_personality(C.mob)
else if(response == "Never for this round")
C.prefs.be_special -= ROLE_POSIBRAIN
// This should not ever happen, but let's be safe
-/obj/item/mmi/posibrain/dropbrain(var/turf/dropspot)
+/obj/item/mmi/robotic_brain/dropbrain(turf/dropspot)
log_runtime(EXCEPTION("[src] at [loc] attempted to drop brain without a contained brain."), src)
- return
-/obj/item/mmi/posibrain/transfer_identity(var/mob/living/carbon/H)
+/obj/item/mmi/robotic_brain/transfer_identity(mob/living/carbon/H)
name = "[src] ([H])"
if(isnull(brainmob.dna))
brainmob.dna = H.dna.Clone()
@@ -90,51 +95,48 @@
brainmob.mind.assigned_role = "Positronic Brain"
if(H.mind)
H.mind.transfer_to(brainmob)
- to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a metal cube.")
- become_occupied("posibrain-occupied")
+ to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a [ejected_flavor_text].")
+ become_occupied(occupied_icon)
if(radio)
radio_action.ApplyIcon()
- return
-/obj/item/mmi/posibrain/attempt_become_organ(obj/item/organ/external/parent, mob/living/carbon/human/H)
+/obj/item/mmi/robotic_brain/attempt_become_organ(obj/item/organ/external/parent, mob/living/carbon/human/H)
if(..())
if(imprinted_master)
to_chat(H, "You are permanently imprinted to [imprinted_master], obey [imprinted_master]'s every order and assist [imprinted_master.p_them()] in completing [imprinted_master.p_their()] goals at any cost.")
-/obj/item/mmi/posibrain/proc/transfer_personality(mob/candidate)
- searching = 0
+/obj/item/mmi/robotic_brain/proc/transfer_personality(mob/candidate)
+ searching = FALSE
brainmob.key = candidate.key
name = "[src] ([brainmob.name])"
to_chat(brainmob, "You are a [src], brought into existence on [station_name()].")
- to_chat(brainmob, "As a synthetic intelligence, you answer to [imprinted_master], unless otherwise placed inside of a lawed synthetic structure or mech.")
+ to_chat(brainmob, "As a non-sentient synthetic intelligence, you answer to [imprinted_master], unless otherwise placed inside of a lawed synthetic structure or mech.")
to_chat(brainmob, "Remember, the purpose of your existence is to serve [imprinted_master]'s every word, unless lawed or placed into a mech in the future.")
brainmob.mind.assigned_role = "Positronic Brain"
- var/turf/T = get_turf_or_move(loc)
- for(var/mob/M in viewers(T))
- M.show_message("[src] chimes quietly.")
- become_occupied("posibrain-occupied")
+ visible_message("[src] chimes quietly.")
+ become_occupied(occupied_icon)
-/obj/item/mmi/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
- if(src.brainmob && src.brainmob.key) return
+/obj/item/mmi/robotic_brain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
+ if(brainmob && brainmob.key)
+ return
- src.searching = 0
- icon_state = "posibrain"
+ searching = FALSE
+ icon_state = blank_icon
- var/turf/T = get_turf_or_move(src.loc)
- for(var/mob/M in viewers(T))
- M.show_message("The [src] buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
+ visible_message("[src] buzzes quietly as the light fades out. Perhaps you could try again?")
-/obj/item/mmi/posibrain/Topic(href,href_list)
+/obj/item/mmi/robotic_brain/Topic(href, href_list)
if("signup" in href_list)
var/mob/dead/observer/O = locate(href_list["signup"])
- if(!O) return
+ if(!O)
+ return
volunteer(O)
-/obj/item/mmi/posibrain/proc/volunteer(var/mob/dead/observer/O)
+/obj/item/mmi/robotic_brain/proc/volunteer(mob/dead/observer/O)
if(!searching)
to_chat(O, "Not looking for a ghost, yet.")
return
@@ -158,7 +160,7 @@
ghost_volunteers.Add(O)
-/obj/item/mmi/posibrain/examine(mob/user)
+/obj/item/mmi/robotic_brain/examine(mob/user)
to_chat(user, "Its speaker is turned [silenced ? "off" : "on"].")
to_chat(user, "*---------*")
. = ..()
@@ -171,40 +173,41 @@
if(brainmob && brainmob.key)
switch(brainmob.stat)
if(CONSCIOUS)
- if(!brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk
- if(UNCONSCIOUS) msg += "It doesn't seem to be responsive.\n"
- if(DEAD) msg += "It appears to be completely inactive.\n"
+ if(!brainmob.client)
+ msg += "It appears to be in stand-by mode.\n" //afk
+ if(UNCONSCIOUS)
+ msg += "It doesn't seem to be responsive.\n"
+ if(DEAD)
+ msg += "It appears to be completely inactive.\n"
else
msg += "It appears to be completely inactive.\n"
msg += "*---------*"
to_chat(user, msg.Join(""))
-/obj/item/mmi/posibrain/emp_act(severity)
- if(!src.brainmob)
+/obj/item/mmi/robotic_brain/emp_act(severity)
+ if(!brainmob)
return
- else
- switch(severity)
- if(1)
- src.brainmob.emp_damage += rand(20,30)
- if(2)
- src.brainmob.emp_damage += rand(10,20)
- if(3)
- src.brainmob.emp_damage += rand(0,10)
+ switch(severity)
+ if(1)
+ brainmob.emp_damage += rand(20, 30)
+ if(2)
+ brainmob.emp_damage += rand(10, 20)
+ if(3)
+ brainmob.emp_damage += rand(0, 10)
..()
-/obj/item/mmi/posibrain/New()
- src.brainmob = new(src)
- src.brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
- src.brainmob.real_name = src.brainmob.name
- src.brainmob.loc = src
- src.brainmob.container = src
- src.brainmob.stat = 0
- src.brainmob.SetSilence(0)
- dead_mob_list -= src.brainmob
-
+/obj/item/mmi/robotic_brain/New()
+ brainmob = new(src)
+ brainmob.name = "[pick(list("PBU", "HIU", "SINA", "ARMA", "OSI"))]-[rand(100, 999)]"
+ brainmob.real_name = brainmob.name
+ brainmob.forceMove(src)
+ brainmob.container = src
+ brainmob.stat = CONSCIOUS
+ brainmob.SetSilence(0)
+ dead_mob_list -= brainmob
..()
-/obj/item/mmi/posibrain/attack_ghost(var/mob/dead/observer/O)
+/obj/item/mmi/robotic_brain/attack_ghost(mob/dead/observer/O)
if(searching)
volunteer(O)
return
@@ -213,12 +216,16 @@
if(check_observer(O) && (world.time >= next_ping_at))
next_ping_at = world.time + (20 SECONDS)
playsound(get_turf(src), 'sound/items/posiping.ogg', 80, 0)
- var/turf/T = get_turf_or_move(src.loc)
- for(var/mob/M in viewers(T))
- M.show_message("[src] pings softly.")
+ visible_message("[src] pings softly.")
-/obj/item/mmi/posibrain/ipc
+/obj/item/mmi/robotic_brain/positronic
name = "positronic brain"
+ icon = 'icons/obj/assemblies.dmi'
+ icon_state = "posibrain"
+ blank_icon = "posibrain"
+ searching_icon = "posibrain-searching"
+ occupied_icon = "posibrain-occupied"
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
- silenced = 1
+ silenced = TRUE
requires_master = FALSE
+ ejected_flavor_text = "metal cube"
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm
index 4a34d2d1b05..907a2e4862d 100644
--- a/code/modules/mob/living/carbon/brain/say.dm
+++ b/code/modules/mob/living/carbon/brain/say.dm
@@ -22,9 +22,9 @@
if(!istype(container, /obj/item/mmi))
. = FALSE
- else if(istype(container, /obj/item/mmi/posibrain))
- var/obj/item/mmi/posibrain/P = container
- if(P && P.silenced)
+ else if(istype(container, /obj/item/mmi/robotic_brain))
+ var/obj/item/mmi/robotic_brain/R = container
+ if(R && R.silenced)
if(warning)
to_chat(usr, "You cannot speak, as your internal speaker is turned off.")
. = FALSE
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 06a287e1645..dbc788cd0bb 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -123,7 +123,8 @@
/mob/living/carbon/human/machine/created/Initialize(mapload)
..()
- real_name = "Integrated Robotic Chassis ([rand(1, 9999)])"
+ rename_character(null, "Integrated Robotic Chassis ([rand(1, 9999)])")
+ update_dna()
for(var/obj/item/organ/external/E in bodyparts)
if(istype(E, /obj/item/organ/external/chest) || istype(E, /obj/item/organ/external/groin))
continue
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 4f6707e93f0..755b874667a 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -131,8 +131,8 @@ var/list/robot_verbs_default = list(
camera.status = 0
if(mmi == null)
- mmi = new /obj/item/mmi/posibrain(src) //Give the borg an MMI if he spawns without for some reason. (probably not the correct way to spawn a posibrain, but it works)
- mmi.icon_state="posibrain-occupied"
+ mmi = new /obj/item/mmi/robotic_brain(src) //Give the borg an MMI if he spawns without for some reason. (probably not the correct way to spawn a robotic brain, but it works)
+ mmi.icon_state = "boris"
initialize_components()
//if(!unfinished)
@@ -210,7 +210,7 @@ var/list/robot_verbs_default = list(
if(prefix)
modtype = prefix
if(mmi)
- if(istype(mmi, /obj/item/mmi/posibrain))
+ if(istype(mmi, /obj/item/mmi/robotic_brain))
braintype = "Android"
else
braintype = "Cyborg"
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index b98d4181475..37ed25f15e8 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -157,7 +157,7 @@
if(istype(mmi, /obj/item/mmi))
icon_state = "spiderbot-chassis-mmi"
icon_living = "spiderbot-chassis-mmi"
- if(istype(mmi, /obj/item/mmi/posibrain))
+ if(istype(mmi, /obj/item/mmi/robotic_brain))
icon_state = "spiderbot-chassis-posi"
icon_living = "spiderbot-chassis-posi"
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 82aebda3a42..a1ed4f0bde9 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -86,7 +86,7 @@
if(O.mind && O.mind.assigned_role == "Cyborg")
if(O.mind.role_alt_title == "Android")
- O.mmi = new /obj/item/mmi/posibrain(O)
+ O.mmi = new /obj/item/mmi/robotic_brain(O)
else if(O.mind.role_alt_title == "Robot")
O.mmi = null //Robots do not have removable brains.
else
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 5782d9f19c8..638a614fc85 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -103,15 +103,15 @@
build_path = /obj/item/mass_spectrometer
category = list("Medical")
-/datum/design/posibrain
+/datum/design/robotic_brain
name = "Robotic Brain"
- desc = "The latest in Artificial Intelligences."
- id = "mmi_posi"
+ desc = "The latest in non-sentient Artificial Intelligences."
+ id = "mmi_robotic"
req_tech = list("programming" = 5, "biotech" = 4, "plasmatech" = 3)
build_type = PROTOLATHE | MECHFAB
materials = list(MAT_METAL = 1700, MAT_GLASS = 1350, MAT_GOLD = 500) //Gold, because SWAG.
construction_time = 75
- build_path = /obj/item/mmi/posibrain
+ build_path = /obj/item/mmi/robotic_brain
category = list("Misc","Medical")
/datum/design/mmi_radio_upgrade
diff --git a/code/modules/surgery/organs/mmi_holder.dm b/code/modules/surgery/organs/mmi_holder.dm
new file mode 100644
index 00000000000..8b5834bd8fc
--- /dev/null
+++ b/code/modules/surgery/organs/mmi_holder.dm
@@ -0,0 +1,36 @@
+// Used for an MMI or robotic brain being installed into a human.
+/obj/item/organ/internal/brain/mmi_holder
+ name = "Man-Machine Interface"
+ parent_organ = "chest"
+ status = ORGAN_ROBOT
+ var/obj/item/mmi/stored_mmi
+
+/obj/item/organ/internal/brain/mmi_holder/Destroy()
+ QDEL_NULL(stored_mmi)
+ return ..()
+
+/obj/item/organ/internal/brain/mmi_holder/insert(mob/living/target, special = 0)
+ ..()
+ // To supersede the over-writing of the MMI's name from `insert`
+ update_from_mmi()
+
+/obj/item/organ/internal/brain/mmi_holder/remove(mob/living/user, special = 0)
+ if(!special)
+ if(stored_mmi)
+ . = stored_mmi
+ if(owner.mind)
+ owner.mind.transfer_to(stored_mmi.brainmob)
+ stored_mmi.forceMove(get_turf(owner))
+ stored_mmi = null
+ ..()
+ if(!QDELETED(src))
+ qdel(src)
+
+/obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi()
+ if(!stored_mmi)
+ return
+ name = stored_mmi.name
+ desc = stored_mmi.desc
+ icon = stored_mmi.icon
+ icon_state = stored_mmi.icon_state
+ set_dna(stored_mmi.brainmob.dna)
\ No newline at end of file
diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm
index 6cca1117b28..c2487503bfa 100644
--- a/code/modules/surgery/organs/organ.dm
+++ b/code/modules/surgery/organs/organ.dm
@@ -30,6 +30,7 @@
var/tough = FALSE //can organ be easily damaged?
var/emp_proof = FALSE //is the organ immune to EMPs?
var/hidden_pain = FALSE //will it skip pain messages?
+ var/requires_robotic_bodypart = FALSE
/obj/item/organ/Destroy()
diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm
index 15f0bc5c118..589ade0e7de 100644
--- a/code/modules/surgery/organs/subtypes/machine.dm
+++ b/code/modules/surgery/organs/subtypes/machine.dm
@@ -136,51 +136,8 @@
. = ..()
-// Used for an MMI or posibrain being installed into a human.
-/obj/item/organ/internal/brain/mmi_holder
- name = "brain"
- organ_tag = "brain"
- parent_organ = "chest"
- vital = TRUE
- max_damage = 200
- slot = "brain"
- status = ORGAN_ROBOT
- species = "Machine"
- var/obj/item/mmi/stored_mmi
-
-/obj/item/organ/internal/brain/mmi_holder/Destroy()
- QDEL_NULL(stored_mmi)
- return ..()
-
-/obj/item/organ/internal/brain/mmi_holder/insert(var/mob/living/target,special = 0)
- ..()
- // To supersede the over-writing of the MMI's name from `insert`
- update_from_mmi()
-
-/obj/item/organ/internal/brain/mmi_holder/remove(var/mob/living/user,special = 0)
- if(!special)
- if(stored_mmi)
- . = stored_mmi
- if(owner.mind)
- owner.mind.transfer_to(stored_mmi.brainmob)
- stored_mmi.forceMove(get_turf(owner))
- stored_mmi = null
- ..()
- if(!QDELETED(src))
- qdel(src)
-
-/obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi()
- if(!stored_mmi)
- return
- name = stored_mmi.name
- desc = stored_mmi.desc
- icon = stored_mmi.icon
- icon_state = stored_mmi.icon_state
- set_dna(stored_mmi.brainmob.dna)
-
/obj/item/organ/internal/brain/mmi_holder/posibrain/New()
- robotize()
- stored_mmi = new /obj/item/mmi/posibrain/ipc(src)
+ stored_mmi = new /obj/item/mmi/robotic_brain/positronic(src)
..()
spawn(1)
if(!QDELETED(src))
@@ -192,4 +149,4 @@
update_from_mmi()
else
stored_mmi.loc = get_turf(src)
- qdel(src)
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 11e16d10b1a..32270c329c2 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -101,6 +101,9 @@
if(is_int_organ(tool))
current_type = "insert"
I = tool
+ if(I.requires_robotic_bodypart)
+ to_chat(user, "[I] is an organ that requires a robotic interface[target].")
+ return -1
if(target_zone != I.parent_organ || target.get_organ_slot(I.slot))
to_chat(user, "There is no room for [I] in [target]'s [parse_zone(target_zone)]!")
return -1
@@ -257,12 +260,14 @@
else if(current_type == "insert")
I = tool
- user.drop_item()
- I.insert(target)
- spread_germs_to_organ(I, user, tool)
- if(!user.canUnEquip(I, 0))
+ if(I.requires_robotic_bodypart)
+ to_chat(user, "[I] is an organ that requires a robotic interface[target].")
+ return FALSE
+ if(!user.drop_item())
to_chat(user, "[I] is stuck to your hand, you can't put it in [target]!")
return 0
+ I.insert(target)
+ spread_germs_to_organ(I, user, tool)
if(affected)
user.visible_message(" [user] has transplanted [tool] into [target]'s [affected.name].",
diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi
index 0a269e0d8b7..ab76789a0f0 100644
Binary files a/icons/obj/module.dmi and b/icons/obj/module.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 85bf34aeeac..27b83d130fb 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1621,7 +1621,7 @@
#include "code\modules\mob\living\carbon\brain\login.dm"
#include "code\modules\mob\living\carbon\brain\MMI.dm"
#include "code\modules\mob\living\carbon\brain\MMI_radio.dm"
-#include "code\modules\mob\living\carbon\brain\posibrain.dm"
+#include "code\modules\mob\living\carbon\brain\robotic_brain.dm"
#include "code\modules\mob\living\carbon\brain\say.dm"
#include "code\modules\mob\living\carbon\brain\update_status.dm"
#include "code\modules\mob\living\carbon\human\appearance.dm"
@@ -2191,6 +2191,7 @@
#include "code\modules\surgery\organs\kidneys.dm"
#include "code\modules\surgery\organs\liver.dm"
#include "code\modules\surgery\organs\lungs.dm"
+#include "code\modules\surgery\organs\mmi_holder.dm"
#include "code\modules\surgery\organs\organ.dm"
#include "code\modules\surgery\organs\organ_external.dm"
#include "code\modules\surgery\organs\organ_icon.dm"